vendor: 4,475 bytes, lines 1-77
1 2/*! 3 * bsCustomFileInput v1.3.4 (https://github.com/Johann-S/bs-custom-file-input) 4 * Copyright 2018 - 2020 Johann-S <[email protected]> 5 * Licensed under MIT (https://github.com/Johann-S/bs-custom-file-input/blob/master/LICENSE) 6 */ 7 8!function (e, t) { 9 "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = e || self).bsCustomFileInput = t() 10}(this, function () { 11 "use strict"; 12 var s = { 13 CUSTOMFILE: '.custom-file input[type="file"]', 14 CUSTOMFILELABEL: ".custom-file-label", 15 FORM: "form", 16 INPUT: "input" 17 }, l = function (e) { 18 if (0 < e.childNodes.length) for (var t = [].slice.call(e.childNodes), n = 0; n < t.length; n++) { 19 var l = t[n]; 20 if (3 !== l.nodeType) return l 21 } 22 return e 23 }, u = function (e) { 24 var t = e.bsCustomFileInput.defaultText, n = e.parentNode.querySelector(s.CUSTOMFILELABEL); 25 n && (l(n).textContent = t) 26 }, n = !!window.File, r = function (e) { 27 if (e.hasAttribute("multiple") && n) return [].slice.call(e.files).map(function (e) { 28 return e.name 29 }).join(", "); 30 if (-1 === e.value.indexOf("fakepath")) return e.value; 31 var t = e.value.split("\\"); 32 return t[t.length - 1] 33 }; 34 35 function d() { 36 var e = this.parentNode.querySelector(s.CUSTOMFILELABEL); 37 if (e) { 38 var t = l(e), n = r(this); 39 n.length ? t.textContent = n : u(this) 40 } 41 } 42 43 function v() { 44 for (var e = [].slice.call(this.querySelectorAll(s.INPUT)).filter(function (e) { 45 return !!e.bsCustomFileInput 46 }), t = 0, n = e.length; t < n; t++) u(e[t]) 47 } 48 49 var p = "bsCustomFileInput", m = "reset", h = "change"; 50 return { 51 init: function (e, t) { 52 void 0 === e && (e = s.CUSTOMFILE), void 0 === t && (t = s.FORM); 53 for (var n, l, r = [].slice.call(document.querySelectorAll(e)), i = [].slice.call(document.querySelectorAll(t)), o = 0, u = r.length; o < u; o++) { 54 var c = r[o]; 55 Object.defineProperty(c, p, { 56 value: {defaultText: (n = void 0, n = "", (l = c.parentNode.querySelector(s.CUSTOMFILELABEL)) && (n = l.textContent), n)}, 57 writable: !0 58 }), d.call(c), c.addEventListener(h, d) 59 } 60 for (var f = 0, a = i.length; f < a; f++) i[f].addEventListener(m, v), Object.defineProperty(i[f], p, { 61 value: !0, 62 writable: !0 63 }) 64 }, destroy: function () { 65 for (var e = [].slice.call(document.querySelectorAll(s.FORM)).filter(function (e) { 66 return !!e.bsCustomFileInput 67 }), t = [].slice.call(document.querySelectorAll(s.INPUT)).filter(function (e) { 68 return !!e.bsCustomFileInput 69 }), n = 0, l = t.length; n < l; n++) { 70 var r = t[n]; 71 u(r), r[p] = void 0, r.removeEventListener(h, d) 72 } 73 for (var i = 0, o = e.length; i < o; i++) e[i].removeEventListener(m, v), e[i][p] = void 0 74 } 75 } 76}); 77var VanillaTilt=function(){"use strict";class t{constructor(e,i={}){if(!(e instanceof Node))throw"Can't initialize VanillaTilt because "+e+" is not a Node.";this.width=null,this.height=null,this.clientWidth=null,this.clientHeight=null,this.left=null,this.top=null,this.gammazero=null,this.betazero=null,this.lastgammazero=null,this.lastbetazero=null,this.transitionTimeout=null,this.updateCall=null,this.event=null,this.updateBind=this.update.bind(this),this.resetBind=this.reset.bind(this),this.element=e,this.settings=this.extendSettings(i),this.reverse=this.settings.reverse?-1:1,this.resetToStart=t.isSettingTrue(this.settings["reset-to-start"]),this.glare=t.isSettingTrue(this.settings.glare),this.glarePrerender=t.isSettingTrue(this.settings["glare-prerender"]),this.fullPageListening=t.isSettingTrue(this.settings["full-page-listening"]),this.gyroscope=t.isSettingTrue(this.settings.gyroscope),this.gyroscopeSamples=this.settings.gyroscopeSamples,this.elementListener=this.getElementListener(),this.glare&&this.prepareGlare(),this.fullPageListening&&this.updateClientSize(),this.addEventListeners(),this.reset(),!1===this.resetToStart&&(this.settings.startX=0,this.settings.startY=0)}static isSettingTrue(t){return""===t||!0===t||1===t}
vendor: 7,376 bytes, line 77
77getElementListener(){if(this.fullPageListening)return window.document;if("string"==typeof this.settings["mouse-event-element"]){const t=document.querySelector(this.settings["mouse-event-element"]);if(t)return t}return this.settings["mouse-event-element"]instanceof Node?this.settings["mouse-event-element"]:this.element}addEventListeners(){this.onMouseEnterBind=this.onMouseEnter.bind(this),this.onMouseMoveBind=this.onMouseMove.bind(this),this.onMouseLeaveBind=this.onMouseLeave.bind(this),this.onWindowResizeBind=this.onWindowResize.bind(this),this.onDeviceOrientationBind=this.onDeviceOrientation.bind(this),this.elementListener.addEventListener("mouseenter",this.onMouseEnterBind),this.elementListener.addEventListener("mouseleave",this.onMouseLeaveBind),this.elementListener.addEventListener("mousemove",this.onMouseMoveBind),(this.glare||this.fullPageListening)&&window.addEventListener("resize",this.onWindowResizeBind),this.gyroscope&&window.addEventListener("deviceorientation",this.onDeviceOrientationBind)}removeEventListeners(){this.elementListener.removeEventListener("mouseenter",this.onMouseEnterBind),this.elementListener.removeEventListener("mouseleave",this.onMouseLeaveBind),this.elementListener.removeEventListener("mousemove",this.onMouseMoveBind),this.gyroscope&&window.removeEventListener("deviceorientation",this.onDeviceOrientationBind),(this.glare||this.fullPageListening)&&window.removeEventListener("resize",this.onWindowResizeBind)}destroy(){clearTimeout(this.transitionTimeout),null!==this.updateCall&&cancelAnimationFrame(this.updateCall),this.reset(),this.removeEventListeners(),this.element.vanillaTilt=null,delete this.element.vanillaTilt,this.element=null}onDeviceOrientation(t){if(null===t.gamma||null===t.beta)return;this.updateElementPosition(),this.gyroscopeSamples>0&&(this.lastgammazero=this.gammazero,this.lastbetazero=this.betazero,null===this.gammazero?(this.gammazero=t.gamma,this.betazero=t.beta):(this.gammazero=(t.gamma+this.lastgammazero)/2,this.betazero=(t.beta+this.lastbetazero)/2),this.gyroscopeSamples-=1);const e=this.settings.gyroscopeMaxAngleX-this.settings.gyroscopeMinAngleX,i=this.settings.gyroscopeMaxAngleY-this.settings.gyroscopeMinAngleY,s=e/this.width,n=i/this.height,l=(t.gamma-(this.settings.gyroscopeMinAngleX+this.gammazero))/s,a=(t.beta-(this.settings.gyroscopeMinAngleY+this.betazero))/n;null!==this.updateCall&&cancelAnimationFrame(this.updateCall),this.event={clientX:l+this.left,clientY:a+this.top},this.updateCall=requestAnimationFrame(this.updateBind)}onMouseEnter(){this.updateElementPosition(),this.element.style.willChange="transform",this.setTransition()}onMouseMove(t){null!==this.updateCall&&cancelAnimationFrame(this.updateCall),this.event=t,this.updateCall=requestAnimationFrame(this.updateBind)}onMouseLeave(){this.setTransition(),this.settings.reset&&requestAnimationFrame(this.resetBind)}reset(){this.onMouseEnter(),this.fullPageListening?this.event={clientX:(this.settings.startX+this.settings.max)/(2*this.settings.max)*this.clientWidth,clientY:(this.settings.startY+this.settings.max)/(2*this.settings.max)*this.clientHeight}:this.event={clientX:this.left+(this.settings.startX+this.settings.max)/(2*this.settings.max)*this.width,clientY:this.top+(this.settings.startY+this.settings.max)/(2*this.settings.max)*this.height};let t=this.settings.scale;this.settings.scale=1,this.update(),this.settings.scale=t,this.resetGlare()}resetGlare(){this.glare&&(this.glareElement.style.transform="rotate(180deg) translate(-50%, -50%)",this.glareElement.style.opacity="0")}getValues(){let t,e;return this.fullPageListening?(t=this.event.clientX/this.clientWidth,e=this.event.clientY/this.clientHeight):(t=(this.event.clientX-this.left)/this.width,e=(this.event.clientY-this.top)/this.height),t=Math.min(Math.max(t,0),1),e=Math.min(Math.max(e,0),1),{tiltX:(this.reverse*(this.settings.max-t*this.settings.max*2)).toFixed(2),tiltY:(this.reverse*(e*this.settings.max*2-this.settings.max)).toFixed(2),percentageX:100*t,percentageY:100*e,angle:Math.atan2(this.event.clientX-(this.left+this.width/2),-(this.event.clientY-(this.top+this.height/2)))*(180/Math.PI)}}updateElementPosition(){let t=this.element.getBoundingClientRect();this.width=this.element.offsetWidth,this.height=this.element.offsetHeight,this.left=t.left,this.top=t.top}update(){let t=this.getValues();this.element.style.transform="perspective("+this.settings.perspective+"px) rotateX("+("x"===this.settings.axis?0:t.tiltY)+"deg) rotateY("+("y"===this.settings.axis?0:t.tiltX)+"deg) scale3d("+this.settings.scale+", "+this.settings.scale+", "+this.settings.scale+")",this.glare&&(this.glareElement.style.transform=`rotate(${t.angle}deg) translate(-50%, -50%)`,this.glareElement.style.opacity=`${t.percentageY*this.settings["max-glare"]/100}`),this.element.dispatchEvent(new CustomEvent("tiltChange",{detail:t})),this.updateCall=null}prepareGlare(){if(!this.glarePrerender){const t=document.createElement("div");t.classList.add("js-tilt-glare");const e=document.createElement("div");e.classList.add("js-tilt-glare-inner"),t.appendChild(e),this.element.appendChild(t)}this.glareElementWrapper=this.element.querySelector(".js-tilt-glare"),this.glareElement=this.element.querySelector(".js-tilt-glare-inner"),this.glarePrerender||(Object.assign(this.glareElementWrapper.style,{position:"absolute",top:"0",left:"0",width:"100%",height:"100%",overflow:"hidden","pointer-events":"none","border-radius":"inherit"}),Object.assign(this.glareElement.style,{position:"absolute",top:"50%",left:"50%","pointer-events":"none","background-image":"linear-gradient(0deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%)",transform:"rotate(180deg) translate(-50%, -50%)","transform-origin":"0% 0%",opacity:"0"}),this.updateGlareSize())}updateGlareSize(){if(this.glare){const t=2*(this.element.offsetWidth>this.element.offsetHeight?this.element.offsetWidth:this.element.offsetHeight);Object.assign(this.glareElement.style,{width:`${t}px`,height:`${t}px`})}}updateClientSize(){this.clientWidth=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,this.clientHeight=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}onWindowResize(){this.updateGlareSize(),this.updateClientSize()}setTransition(){clearTimeout(this.transitionTimeout),this.element.style.transition=this.settings.speed+"ms "+this.settings.easing,this.glare&&(this.glareElement.style.transition=`opacity ${this.settings.speed}ms ${this.settings.easing}`),this.transitionTimeout=setTimeout(()=>{this.element.style.transition="",this.glare&&(this.glareElement.style.transition="")},this.settings.speed)}extendSettings(t){let e={reverse:!1,max:15,startX:0,startY:0,perspective:1e3,easing:"cubic-bezier(.03,.98,.52,.99)",scale:1,speed:300,transition:!0,axis:null,glare:!1,"max-glare":1,"glare-prerender":!1,"full-page-listening":!1,"mouse-event-element":null,reset:!0,"reset-to-start":!0,gyroscope:!0,gyroscopeMinAngleX:-45,gyroscopeMaxAngleX:45,gyroscopeMinAngleY:-45,gyroscopeMaxAngleY:45,gyroscopeSamples:10},i={};for(var s in e)if(s in t)i[s]=t[s];else if(this.element.hasAttribute("data-tilt-"+s)){let t=this.element.getAttribute("data-tilt-"+s);try{i[s]=JSON.parse(t)}catch(e){i[s]=t}}else i[s]=e[s];return i}static init(e,i){e instanceof Node&&(e=[e]),e instanceof NodeList&&(e=[].slice.call(e)),e instanceof Array&&e.forEach(e
77=>{"vanillaTilt"in e||(e.vanillaTilt=new t(e,i))})}}return"undefined"!=typeof document&&(window.VanillaTilt=t,t.init(document.querySelectorAll("[data-tilt]"))),t}(); 78/*! 79* Parsley.js 80* Version 2.3.10 - built Thu, Apr 14th 2016, 6:04 pm 81* http://parsleyjs.org 82* Guillaume Potier - <[email protected]> 83* Marc-Andre Lafortune - <[email protected]> 84* MIT Licensed 85*/ 86function _toConsumableArray(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}var _slice=Array.prototype.slice;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("jquery")):"function"==typeof define&&define.amd?define(["jquery"],t):e.parsley=t(e.jQuery)}(this,function(e){"use strict";function t(e,t){return e.parsleyAdaptedCallback||(e.parsleyAdaptedCallback=function(){var i=Array.prototype.slice.call(arguments,0);i.unshift(this),e.apply(t||R,i)}),e.parsleyAdaptedCallback}function i(e){return 0===e.lastIndexOf(q,0)?e.substr(q.length):e}/** 87 * inputevent - Alleviate browser bugs for input events 88 * https://github.com/marcandre/inputevent 89 * @version v0.0.3 - (built Thu, Apr 14th 2016, 5:58 pm) 90 * @author Marc-Andre Lafortune <[email protected]> 91 * @license MIT 92 */ 93function n(){var t=this,i=window||global;e.extend(this,{isNativeEvent:function(e){return e.originalEvent&&e.originalEvent.isTrusted!==!1},fakeInputEvent:function(i){t.isNativeEvent(i)&&e(i.target).trigger("input")},misbehaves:function(i){t.isNativeEvent(i)&&(t.behavesOk(i),e(document).on("change.inputevent",i.data.selector,t.fakeInputEvent),t.fakeInputEvent(i))},behavesOk:function(i){t.isNativeEvent(i)&&e(document).off("input.inputevent",i.data.selector,t.behavesOk).off("change.inputevent",i.data.selector,t.misbehaves)},install:function(){if(!i.inputEventPatched){i.inputEventPatched="0.0.3";for(var n=["select",'input[type="checkbox"]','input[type="radio"]','input[type="file"]'],r=0;r<n.length;r++){var s=n[r];e(document).on("input.inputevent",s,{selector:s},t.behavesOk).on("change.inputevent",s,{selector:s},t.misbehaves)}}},uninstall:function(){delete i.inputEventPatched,e(document).off(".inputevent")}})}var r=1,s={},a={attr:function(e,t,i){var n,r,s,a=new RegExp("^"+t,"i");if("undefined"==typeof i)i={};else for(n in i)i.hasOwnProperty(n)&&delete i[n];if("undefined"==typeof e||"undefined"==typeof e[0])return i;for(s=e[0].attributes,n=s.length;n--;)r=s[n],r&&r.specified&&a.test(r.name)&&(i[this.camelize(r.name.slice(t.length))]=this.deserializeValue(r.value));return i},checkAttr:function(e,t,i){return e.is("["+t+i+"]")},setAttr:function(e,t,i,n){e[0].setAttribute(this.dasherize(t+i),String(n))},generateID:function(){return""+r++},deserializeValue:function(t){var i;try{return t?"true"==t||("false"==t?!1:"null"==t?null:isNaN(i=Number(t))?/^[\[\{]/.test(t)?e.parseJSON(t):t:i):t}catch(n){return t}},camelize:function(e){return e.replace(/-+(.)?/g,function(e,t){return t?t.toUpperCase():""})},dasherize:function(e){return e.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()},warn:function(){var e;window.console&&"function"==typeof window.console.warn&&(e=window.console).warn.apply(e,arguments)},warnOnce:function(e){s[e]||(s[e]=!0,this.warn.apply(this,arguments))},_resetWarnings:function(){s={}},trimString:function(e){return e.replace(/^\s+|\s+$/g,"")},namespaceEvents:function(t,i){return t=this.trimString(t||"").split(/\s+/),t[0]?e.map(t,function(e){return e+"."+i}).join(" "):""},objectCreate:Object.create||function(){var e=function(){};return function(t){if(arguments.length>1)throw Error("Second argument not supported");if("object"!=typeof t)throw TypeError("Argument must be an object");e.prototype=t;var i=new e;return e.prototype=null,i}}()},o=a,l={namespace:"data-parsley-",inputs:"input, textarea, select",excluded:"input[type=button], input[type=submit], input[type=reset], input[type=hidden]",priorityEnabled:!0,multiple:null,group:null,uiEnabled:!0,validationThreshold:3,focus:"first",trigger:!1,triggerAfterFailure:"input",errorClass:"parsley-error",successClass:"parsley-success",classHandler:function(e){},errorsContainer:function(e){},errorsWrapper:'<ul class="parsley-errors-list"></ul>',errorTemplate:"<li></li>"},u=function(){this.__id__=o.generateID()};u.prototype={asyncSupport:!0,_pipeAccordingToValidationResult:function(){var t=this,i=function(){var i=e.Deferred();return!0!==t.validationResult&&i.reject(),i.resolve().promise()};return[i,i]},actualizeOptions:function(){return o.attr(this.$element,this.options.namespace,this.domOptions),this.parent&&this.parent.actualizeOptions&&this.parent.actualizeOptions(),this},_resetOptions:function(e){this.domOptions=o.objectCreate(this.parent.options),this.options=o.objectCreate(this.domOptions);for(var t in e)e.hasOwnProperty(t)&&(this.options[t]=e[t]);this.actualizeOptions()},_listeners:null,on:function(e,t){this._listeners=this._listeners||{};var i=this._listeners[e]=this._listeners[e]||[];return i.push(t),this},subscribe:function(t,i){e.listenTo(this,t.toLowerCase(),i)},off:function(e,t){var i=this._listeners&&this._listeners[e];if(i)if(t)for(var n=i.length;n--;)i[n]===t&&i.splice(n,1);else delete this._listeners[e];return this},unsubscribe:function(t,i){e.unsubscribeTo(this,t.toLowerCase())},trigger:function(e,t,i){t=t||this;var n,r=this._listeners&&this._listeners[e];if(r)for(var s=r.length;s--;)if(n=r[s].call(t,t,i),n===!1)return n;return this.parent?this.parent.trigger(e,t,i):!0},reset:function(){if("ParsleyForm"!==this.__class__)return this._resetUI(),this._trigger("reset");for(var e=0;e<this.fields.length;e++)this.fields[e].reset();this._trigger("reset")},destroy:function(){if(this._destroyUI(),"ParsleyForm"!==this.__class__)return this.$element.removeData("Parsley"),this.$element.removeData("ParsleyFieldMultiple"),void this._trigger("destroy");for(var e=0;e<this.fields.length;e++)this.fields[e].destroy();this.$element.removeData("Parsley"),this._trigger("destroy")},asyncIsValid:function(e,t){return o.warnOnce("asyncIsValid is deprecated; please use whenValid instead"),this.whenValid({group:e,force:t})},_findRelated:function(){return this.options.multiple?this.parent.$element.find("["+this.options.namespace+'multiple="'+this.options.multiple+'"]'):this.$element}};var d={string:function(e){return e},integer:function(e){if(isNaN(e))throw'Requirement is not an integer: "'+e+'"';return parseInt(e,10)},number:function(e){if(isNaN(e))throw'Requirement is not a number: "'+e+'"';return parseFloat(e)},reference:function(t){var i=e(t);if(0===i.length)throw'No such reference: "'+t+'"';return i},"boolean":function(e){return"false"!==e},object:function(e){return o.deserializeValue(e)},regexp:function(e){var t="";return/^\/.*\/(?:[gimy]*)$/.test(e)?(t=e.replace(/.*\/([gimy]*)$/,"$1"),e=e.replace(new RegExp("^/(.*?)/"+t+"$"),"$1")):e="^"+e+"$",new RegExp(e,t)}},h=function(e,t){var i=e.match(/^\s*\[(.*)\]\s*$/);if(!i)throw'Requirement is not an array: "'+e+'"';var n=i[1].split(",").map(o.trimString);if(n.length!==t)throw"Requirement has "+n.length+" values when "+t+" are needed";return n},p=function(e,t){var i=d[e||"string"];if(!i)throw'Unknown requirement specification: "'+e+'"';return i(t)},c=function(e,t,i){var n=null,r={};for(var s in e)if(s){var a=i(s);"string"==typeof a&&(a=p(e[s],a)),r[s]=a}else n=p(e[s],t);return[n,r]},f=function(t){e.extend(!0,this,t)};f.prototype={validate:function(t,i){if(this.fn)return arguments.length>3&&(i=[].slice.call(arguments,1,-1)),this.fn.call(this,t,i);if(e.isArray(t)){if(!this.validateMultiple)throw"Validator `"+this.name+"` does not handle multiple values";return this.validateMultiple.apply(this,arguments)}if(this.validateNumber)return isNaN(t)?!1:(arguments[0]=parseFloat(arguments[0]),this.validateNumber.apply(this,arguments));if(this.validateString)return this.validateString.apply(this,arguments);throw"Validator `"+this.name+"` only handles multiple values"},parseRequirements:function(t,i){if("string"!=typeof t)return e.isArray(t)?t:[t];var n=this.requirementType;if(e.isArray(n)){for(var r=h(t,n.length),s=0;s<r.length;s++)r[s]=p(n[s],r[s]);return r}return e.isPlainObject(n)?c(n,t,i):[p(n,t)]},requirementType:"string",priority:2};var m=function(e,t){this.__class__="ParsleyValidatorRegistry",this.locale="en",this.init(e||{},t||{})},g={email:/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,number:/^-?(\d*\.)?\d+(e[-+]?\d+)?$/i,integer:/^-?\d+$/,digits:/^\d+$/,alphanum:/^\w+$/i,url:new RegExp("^(?:(?:https?|ftp)://)?(?:\\S+(?::\\S*)?@)?(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:/\\S*)?$","i")};g.range=g.number;var v=function(e){var t=(""+e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0};m.prototype={init:function(t,i){this.catalog=i,this.validators=e.extend({},this.validators);for(var n in t)this.addValidator(n,t[n].fn,t[n].priority);window.Parsley.trigger("parsley:validator:init")},setLocale:function(e){if("undefined"==typeof this.catalog[e])throw new Error(e+" is not available in the catalog");return this.locale=e,this},addCatalog:function(e,t,i){return"object"==typeof t&&(this.catalog[e]=t),!0===i?this.setLocale(e):this},addMessage:function(e,t,i){return"undefined"==typeof this.catalog[e]&&(this.catalog[e]={}),this.catalog[e][t]=i,this},addMessages:function(e,t){for(var i in t)this.addMessage(e,i,t[i]);return this},addValidator:function(e,t,i){if(this.validators[e])o.warn('Validator "'+e+'" is already defined.');else if(l.hasOwnProperty(e))return void o.warn('"'+e+'" is a restricted keyword and is not a valid validator name.');return this._setValidator.apply(this,arguments)}
93,updateValidator:function(e,t,i){return this.validators[e]?this._setValidator.apply(this,arguments):(o.warn('Validator "'+e+'" is not already defined.'),this.addValidator.apply(this,arguments))},removeValidator:function(e){return this.validators[e]||o.warn('Validator "'+e+'" is not defined.'),delete this.validators[e],this},_setValidator:function(e,t,i){"object"!=typeof t&&(t={fn:t,priority:i}),t.validate||(t=new f(t)),this.validators[e]=t;for(var n in t.messages||{})this.addMessage(n,e,t.messages[n]);return this},getErrorMessage:function(e){var t;if("type"===e.name){var i=this.catalog[this.locale][e.name]||{};t=i[e.requirements]}else t=this.formatMessage(this.catalog[this.locale][e.name],e.requirements);return t||this.catalog[this.locale].defaultMessage||this.catalog.en.defaultMessage},formatMessage:function(e,t){if("object"==typeof t){for(var i in t)e=this.formatMessage(e,t[i]);return e}return"string"==typeof e?e.replace(/%s/i,t):""},validators:{notblank:{validateString:function(e){return/\S/.test(e)},priority:2},required:{validateMultiple:function(e){return e.length>0},validateString:function(e){return/\S/.test(e)},priority:512},type:{validateString:function(e,t){var i=arguments.length<=2||void 0===arguments[2]?{}:arguments[2],n=i.step,r=void 0===n?"1":n,s=i.base,a=void 0===s?0:s,o=g[t];if(!o)throw new Error("validator type `"+t+"` is not supported");if(!o.test(e))return!1;if("number"===t&&!/^any$/i.test(r||"")){var l=Number(e),u=Math.max(v(r),v(a));if(v(l)>u)return!1;var d=function(e){return Math.round(e*Math.pow(10,u))};if((d(l)-d(a))%d(r)!=0)return!1}return!0},requirementType:{"":"string",step:"string",base:"number"},priority:256},pattern:{validateString:function(e,t){return t.test(e)},requirementType:"regexp",priority:64},minlength:{validateString:function(e,t){return e.length>=t},requirementType:"integer",priority:30},maxlength:{validateString:function(e,t){return e.length<=t},requirementType:"integer",priority:30},length:{validateString:function(e,t,i){return e.length>=t&&e.length<=i},requirementType:["integer","integer"],priority:30},mincheck:{validateMultiple:function(e,t){return e.length>=t},requirementType:"integer",priority:30},maxcheck:{validateMultiple:function(e,t){return e.length<=t},requirementType:"integer",priority:30},check:{validateMultiple:function(e,t,i){return e.length>=t&&e.length<=i},requirementType:["integer","integer"],priority:30},min:{validateNumber:function(e,t){return e>=t},requirementType:"number",priority:30},max:{validateNumber:function(e,t){return t>=e},requirementType:"number",priority:30},range:{validateNumber:function(e,t,i){return e>=t&&i>=e},requirementType:["number","number"],priority:30},equalto:{validateString:function(t,i){var n=e(i);return n.length?t===n.val():t===i},priority:256}}};var y={},_=function k(e,t,i){for(var n=[],r=[],s=0;s<e.length;s++){for(var a=!1,o=0;o<t.length;o++)if(e[s].assert.name===t[o].assert.name){a=!0;break}a?r.push(e[s]):n.push(e[s])}return{kept:r,added:n,removed:i?[]:k(t,e,!0).added}};y.Form={_actualizeTriggers:function(){var e=this;this.$element.on("submit.Parsley",function(t){e.onSubmitValidate(t)}),this.$element.on("click.Parsley",'input[type="submit"], button[type="submit"]',function(t){e.onSubmitButton(t)}),!1!==this.options.uiEnabled&&this.$element.attr("novalidate","")},focus:function(){if(this._focusedField=null,!0===this.validationResult||"none"===this.options.focus)return null;for(var e=0;e<this.fields.length;e++){var t=this.fields[e];if(!0!==t.validationResult&&t.validationResult.length>0&&"undefined"==typeof t.options.noFocus&&(this._focusedField=t.$element,"first"===this.options.focus))break}return null===this._focusedField?null:this._focusedField.focus()},_destroyUI:function(){this.$element.off(".Parsley")}},y.Field={_reflowUI:function(){if(this._buildUI(),this._ui){var e=_(this.validationResult,this._ui.lastValidationResult);this._ui.lastValidationResult=this.validationResult,this._manageStatusClass(),this._manageErrorsMessages(e),this._actualizeTriggers(),!e.kept.length&&!e.added.length||this._failedOnce||(this._failedOnce=!0,this._actualizeTriggers())}},getErrorsMessages:function(){if(!0===this.validationResult)return[];for(var e=[],t=0;t<this.validationResult.length;t++)e.push(this.validationResult[t].errorMessage||this._getErrorMessage(this.validationResult[t].assert));return e},addError:function(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],i=t.message,n=t.assert,r=t.updateClass,s=void 0===r?!0:r;this._buildUI(),this._addError(e,{message:i,assert:n}),s&&this._errorClass()},updateError:function(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],i=t.message,n=t.assert,r=t.updateClass,s=void 0===r?!0:r;this._buildUI(),this._updateError(e,{message:i,assert:n}),s&&this._errorClass()},removeError:function(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],i=t.updateClass,n=void 0===i?!0:i;this._buildUI(),this._removeError(e),n&&this._manageStatusClass()},_manageStatusClass:function(){this.hasConstraints()&&this.needsValidation()&&
93!0===this.validationResult?this._successClass():this.validationResult.length>0?this._errorClass():this._resetClass()},_manageErrorsMessages:function(t){if("undefined"==typeof this.options.errorsMessagesDisabled){if("undefined"!=typeof this.options.errorMessage)return t.added.length||t.kept.length?(this._insertErrorWrapper(),0===this._ui.$errorsWrapper.find(".parsley-custom-error-message").length&&this._ui.$errorsWrapper.append(e(this.options.errorTemplate).addClass("parsley-custom-error-message")),this._ui.$errorsWrapper.addClass("filled").find(".parsley-custom-error-message").html(this.options.errorMessage)):this._ui.$errorsWrapper.removeClass("filled").find(".parsley-custom-error-message").remove();for(var i=0;i<t.removed.length;i++)this._removeError(t.removed[i].assert.name);for(i=0;i<t.added.length;i++)this._addError(t.added[i].assert.name,{message:t.added[i].errorMessage,assert:t.added[i].assert});for(i=0;i<t.kept.length;i++)this._updateError(t.kept[i].assert.name,{message:t.kept[i].errorMessage,assert:t.kept[i].assert})}},_addError:function(t,i){var n=i.message,r=i.assert;this._insertErrorWrapper(),this._ui.$errorsWrapper.addClass("filled").append(e(this.options.errorTemplate).addClass("parsley-"+t).html(n||this._getErrorMessage(r)))},_updateError:function(e,t){var i=t.message,n=t.assert;this._ui.$errorsWrapper.addClass("filled").find(".parsley-"+e).html(i||this._getErrorMessage(n))},_removeError:function(e){this._ui.$errorsWrapper.removeClass("filled").find(".parsley-"+e).remove()},_getErrorMessage:function(e){var t=e.name+"Message";return"undefined"!=typeof this.options[t]?window.Parsley.formatMessage(this.options[t],e.requirements):window.Parsley.getErrorMessage(e)},_buildUI:function(){if(!this._ui&&!1!==this.options.uiEnabled){var t={};this.$element.attr(this.options.namespace+"id",this.__id__),t.$errorClassHandler=this._manageClassHandler(),t.errorsWrapperId="parsley-id-"+(this.options.multiple?"multiple-"+this.options.multiple:this.__id__),t.$errorsWrapper=e(this.options.errorsWrapper).attr("id",t.errorsWrapperId),t.lastValidationResult=[],t.validationInformationVisible=!1,this._ui=t}},_manageClassHandler:function(){if("string"==typeof this.options.classHandler&&e(this.options.classHandler).length)return e(this.options.classHandler);var t=this.options.classHandler.call(this,this);return"undefined"!=typeof t&&t.length?t:!this.options.multiple||this.$element.is("select")?this.$element:this.$element.parent()},_insertErrorWrapper:function(){var t;if(0!==this._ui.$errorsWrapper.parent().length)return this._ui.$errorsWrapper.parent();if("string"==typeof this.options.errorsContainer){if(e(this.options.errorsContainer).length)return e(this.options.errorsContainer).append(this._ui.$errorsWrapper);o.warn("The errors container `"+this.options.errorsContainer+"` does not exist in DOM")}else"function"==typeof this.options.errorsContainer&&(t=this.options.errorsContainer.call(this,this));if("undefined"!=typeof t&&t.length)return t.append(this._ui.$errorsWrapper);var i=this.$element;return this.options.multiple&&(i=i.parent()),i.after(this._ui.$errorsWrapper)},_actualizeTriggers:function(){var e=this,t=this._findRelated();t.off(".Parsley"),this._failedOnce?t.on(o.namespaceEvents(this.options.triggerAfterFailure,"Parsley"),function(){e.validate()}):t.on(o.namespaceEvents(this.options.trigger,"Parsley"),function(t){e._eventValidate(t)})},_eventValidate:function(e){(!/key|input/.test(e.type)||this._ui&&this._ui.validationInformationVisible||!(this.getValue().length<=this.options.validationThreshold))&&this.validate()},_resetUI:function(){this._failedOnce=!1,this._actualizeTriggers(),"undefined"!=typeof this._ui&&(this._ui.$errorsWrapper.removeClass("filled").children().remove(),this._resetClass(),this._ui.lastValidationResult=[],this._ui.validationInformationVisible=!1)},_destroyUI:function(){this._resetUI(),"undefined"!=typeof this._ui&&this._ui.$errorsWrapper.remove(),delete this._ui},_successClass:function(){this._ui.validationInformationVisible=!0,this._ui.$errorClassHandler.removeClass(this.options.errorClass).addClass(this.options.successClass)},_errorClass:function(){this._ui.validationInformationVisible=!0,this._ui.$errorClassHandler.removeClass(this.options.successClass).addClass(this.options.errorClass)},_resetClass:function(){this._ui.$errorClassHandler.removeClass(this.options.successClass).removeClass(this.options.errorClass)}};var w=function(t,i,n){this.__class__="ParsleyForm",this.$element=e(t),this.domOptions=i,this.options=n,this.parent=window.Parsley,this.fields=[],this.validationResult=null},b={pending:null,resolved:!0,rejected:!1};w.prototype={onSubmitValidate:function(e){var t=this;if(!0!==e.parsley){var i=this._$submitSource||this.$element.find('input[type="submit"], button[type="submit"]').first();if(this._$submitSource=null,this.$element.find(".parsley-synthetic-submit-button").prop("disabled",!0),!i.is("[formnovalidate]")){var n=this.whenValidate({event:e});"resolved"===n.state()&&!1!==this._trigger("submit")||(e.stopImmediatePropagation(),e.preventDefault(),"pending"===n.state()&&n.done(function(){t._submit(i)}))}}},onSubmitButton:function(t){this._$submitSource=e(t.target)},_submit:function(t){if(!1!==this._trigger("submit")){if(t){var i=this.$element.find(".parsley-synthetic-submit-button").prop("disabled",!1);0===i.length&&(i=e('<input class="parsley-synthetic-submit-button" type="hidden">').appendTo(this.$element)),i.attr({name:t.attr("name"),value:t.attr("value")})}this.$element.trigger(e.extend(e.Event("submit"),{parsley:!0}))}},validate:function(t){if(arguments.length>=1&&!e.isPlainObject(t)){o.warnOnce("Calling validate on a parsley form without passing arguments as an object is deprecated.");var i=_slice.call(arguments),n=i[0],r=i[1],s=i[2];t={group:n,force:r,event:s}}return b[this.whenValidate(t).state()]},whenValidate:function(){var t,i=this,n=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],r=n.group,s=n.force,a=n.event;this.submitEvent=a,a&&(this.submitEvent=e.extend({},a,{preventDefault:function(){o.warnOnce("Using `this.submitEvent.preventDefault()` is deprecated; instead, call `this.validationResult = false`"),i.validationResult=!1}})),this.validationResult=!0,this._trigger("validate"),this._refreshFields();var l=this._withoutReactualizingFormOptions(function(){return e.map(i.fields,function(e){return e.whenValidate({force:s,group:r})})});return(t=e.when.apply(e,_toConsumableArray(l)).done(function(){i._trigger("success")}).fail(function(){i.validationResult=!1,i.focus(),i._trigger("error")}).always(function(){i._trigger("validated")})).pipe.apply(t,_toConsumableArray(this._pipeAccordingToValidationResult()))},isValid:function(t){if(arguments.length>=1&&!e.isPlainObject(t)){o.warnOnce("Calling isValid on a parsley form without passing arguments as an object is deprecated.");var i=_slice.call(arguments),n=i[0],r=i[1];t={group:n,force:r}}return b[this.whenValid(t).state()]},whenValid:function(){var t=this,i=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=i.group,r=i.force;this._refreshFields();var s=this._withoutReactualizingFormOptions(function(){return e.map(t.fields,function(e){return e.whenValid({group:n,force:r})})});return e.when.apply(e,_toConsumableArray(s))},_refreshFields:function(){return this.actualizeOptions()._bindFields()},_bindFields:function(){var t=this,i=this.fields;return this.fields=[],this.fieldsMappedById={},this._withoutReactualizingFormOptions(function(){t.$element.find(t.options.inputs).not(t.options.excluded).each(function(e,i){var n=new window.Parsley.Factory(i,{},t);"ParsleyField"!==n.__class__&&"ParsleyFieldMultiple"!==n.__class__||!0===n.options.excluded||"undefined"==typeof t.fieldsMappedById[n.__class__+"-"+n.__id__]&&(t.fieldsMappedById[n.__class__+"-"+n.__id__]=n,t.fields.push(n))}),e(i).not(t.fields).each(function(e,t){t._trigger("reset")})}),this},_withoutReactualizingFormOptions:function(e){var t=this.actualizeOptions;this.actualizeOptions=function(){return this};var i=e();return this.actualizeOptions=t,i},_trigger:function(e){return this.trigger("form:"+e)}};var F=function(t,i,n,r,s){if(!/ParsleyField/.test(t.__class__))throw new Error("ParsleyField or ParsleyFieldMultiple instance expected");var a=window.Parsley._validatorRegistry.validators[i],o=new f(a);e.extend(this,{validator:o,name:i,requirements:n,priority:r||t.options[i+"Priority"]||o.priority,isDomConstraint:!0===s}),this._parseRequirements(t.options)},C=function(e){var t=e[0].toUpperCase();return t+e.slice(1)};F.prototype={validate:function(e,t){var i=this.requirementList.slice(0);return i.unshift(e),i.push(t),this.validator.validate.apply(this.validator,i)},_parseRequirements:function(e){var t=this;this.requirementList=this.validator.parseRequirements(this.requirements,function(i){return e[t.name+C(i)]})}};var $=function(t,i,n,r){this.__class__="ParsleyField",this.$element=e(t),"undefined"!=typeof r&&(this.parent=r),this.options=n,this.domOptions=i,this.constraints=[],this.constraintsByName={},this.validationResult=!0,this._bindConstraints()},x={pending:null,resolved:!0,rejected:!1};$.prototype={validate:function(t){arguments.length>=1&&!e.isPlainObject(t)&&(o.warnOnce("Calling validate on a parsley field without passing arguments as an object is deprecated."),t={options:t});var i=this.whenValidate(t);if(!i)return!0;
93switch(i.state()){case"pending":return null;case"resolved":return!0;case"rejected":return this.validationResult}},whenValidate:function(){var e,t=this,i=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=i.force,r=i.group;return this.refreshConstraints(),!r||this._isInGroup(r)?(this.value=this.getValue(),this._trigger("validate"),(e=this.whenValid({force:n,value:this.value,_refreshed:!0}).always(function(){t._reflowUI()}).done(function(){t._trigger("success")}).fail(function(){t._trigger("error")}).always(function(){t._trigger("validated")})).pipe.apply(e,_toConsumableArray(this._pipeAccordingToValidationResult()))):void 0},hasConstraints:function(){return 0!==this.constraints.length},needsValidation:function(e){return"undefined"==typeof e&&(e=this.getValue()),e.length||this._isRequired()||"undefined"!=typeof this.options.validateIfEmpty?!0:!1},_isInGroup:function(t){return e.isArray(this.options.group)?-1!==e.inArray(t,this.options.group):this.options.group===t},isValid:function(t){if(arguments.length>=1&&!e.isPlainObject(t)){o.warnOnce("Calling isValid on a parsley field without passing arguments as an object is deprecated.");var i=_slice.call(arguments),n=i[0],r=i[1];t={force:n,value:r}}var s=this.whenValid(t);return s?x[s.state()]:!0},whenValid:function(){var t=this,i=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],n=i.force,r=void 0===n?!1:n,s=i.value,a=i.group,o=i._refreshed;if(o||this.refreshConstraints(),!a||this._isInGroup(a)){if(this.validationResult=!0,!this.hasConstraints())return e.when();if(("undefined"==typeof s||null===s)&&(s=this.getValue()),!this.needsValidation(s)&&!0!==r)return e.when();var l=this._getGroupedConstraints(),u=[];return e.each(l,function(i,n){var r=e.when.apply(e,_toConsumableArray(e.map(n,function(e){return t._validateConstraint(s,e)})));return u.push(r),"rejected"===r.state()?!1:void 0}),e.when.apply(e,u)}},_validateConstraint:function(t,i){var n=this,r=i.validate(t,this);return!1===r&&(r=e.Deferred().reject()),e.when(r).fail(function(e){n.validationResult instanceof Array||(n.validationResult=[]),n.validationResult.push({assert:i,errorMessage:"string"==typeof e&&e})})},getValue:function(){var e;return e="function"==typeof this.options.value?this.options.value(this):"undefined"!=typeof this.options.value?this.options.value:this.$element.val(),"undefined"==typeof e||null===e?"":this._handleWhitespace(e)},refreshConstraints:function(){return this.actualizeOptions()._bindConstraints()},addConstraint:function(e,t,i,n){if(window.Parsley._validatorRegistry.validators[e]){var r=new F(this,e,t,i,n);"undefined"!==this.constraintsByName[r.name]&&this.removeConstraint(r.name),this.constraints.push(r),this.constraintsByName[r.name]=r}return this},removeConstraint:function(e){for(var t=0;t<this.constraints.length;t++)if(e===this.constraints[t].name){this.constraints.splice(t,1);break}return delete this.constraintsByName[e],this},updateConstraint:function(e,t,i){return this.removeConstraint(e).addConstraint(e,t,i)},_bindConstraints:function(){for(var e=[],t={},i=0;i<this.constraints.length;i++)!1===this.constraints[i].isDomConstraint&&(e.push(this.constraints[i]),t[this.constraints[i].name]=this.constraints[i]);this.constraints=e,this.constraintsByName=t;for(var n in this.options)this.addConstraint(n,this.options[n],void 0,!0);return this._bindHtml5Constraints()},_bindHtml5Constraints:function(){(this.$element.hasClass("required")||this.$element.attr("required"))&&this.addConstraint("required",!0,void 0,!0),"string"==typeof this.$element.attr("pattern")&&this.addConstraint("pattern",this.$element.attr("pattern"),void 0,!0),"undefined"!=typeof this.$element.attr("min")&&"undefined"!=typeof this.$element.attr("max")?this.addConstraint("range",[this.$element.attr("min"),this.$element.attr("max")],void 0,!0):"undefined"!=typeof this.$element.attr("min")?this.addConstraint("min",this.$element.attr("min"),void 0,!0):"undefined"!=typeof this.$element.attr("max")&&this.addConstraint("max",this.$element.attr("max"),void 0,!0),"undefined"!=typeof this.$element.attr("minlength")&&"undefined"!=typeof this.$element.attr("maxlength")?this.addConstraint("length",[this.$element.attr("minlength"),this.$element.attr("maxlength")],void 0,!0):"undefined"!=typeof this.$element.attr("minlength")?this.addConstraint("minlength",this.$element.attr("minlength"),void 0,!0):"undefined"!=typeof this.$element.attr("maxlength")&&this.addConstraint("maxlength",this.$element.attr("maxlength"),void 0,!0);var e=this.$element.attr("type");return"undefined"==typeof e?this:"number"===e?this.addConstraint("type",["number",{step:this.$element.attr("step"),base:this.$element.attr("min")||this.$element.attr("value")}],void 0,!0):/^(email|url|range)$/i.test(e)?this.addConstraint("type",e,void 0,!0):this},_isRequired:function(){return"undefined"==typeof this.constraintsByName.required?!1:!1!==this.constraintsByName.required.requirements},_trigger:function(e){return this.trigger("field:"+e)},_handleWhitespace:function(e){return!0===this.options.trimValue&&o.warnOnce('data-parsley-trim-value="true" is deprecated, please use data-parsley-whitespace="trim"'),"squish"===this.options.whitespace&&(e=e.replace(/\s{2,}/g," ")),("trim"===this.options.whitespace||"squish"===this.options.whitespace||!0===this.options.trimValue)&&(e=o.trimString(e)),e},_getGroupedConstraints:function(){if(!1===this.options.priorityEnabled)return[this.constraints];for(var e=[],t={},i=0;i<this.constraints.length;i++){var n=this.constraints[i].priority;t[n]||e.push(t[n]=[]),t[n].push(this.constraints[i])}return e.sort(function(e,t){return t[0].priority-e[0].priority}),e}};var E=$,P=function(){this.__class__="ParsleyFieldMultiple"};P.prototype={addElement:function(e){return this.$elements.push(e),this},refreshConstraints:function(){var t;if(this.constraints=[],this.$element.is("select"))return this.actualizeOptions()._bindConstraints(),this;for(var i=0;i<this.$elements.length;i++)if(e("html").has(this.$elements[i]).length){t=this.$elements[i].data("ParsleyFieldMultiple").refreshConstraints().constraints;for(var n=0;n<t.length;n++)this.addConstraint(t[n].name,t[n].requirements,t[n].priority,t[n].isDomConstraint)}else this.$elements.splice(i,1);return this},getValue:function(){if("function"==typeof this.options.value)return this.options.value(this);if("undefined"!=typeof this.options.value)return this.options.value;if(this.$element.is("input[type=radio]"))return this._findRelated().filter(":checked").val()||"";if(this.$element.is("input[type=checkbox]")){var t=[];return this._findRelated().filter(":checked").each(function(){t.push(e(this).val())}),t}return this.$element.is("select")&&null===this.$element.val()?[]:this.$element.val()},_init:function(){return this.$elements=[this.$element],this}};var V=function(t,i,n){this.$element=e(t);var r=this.$element.data("Parsley");if(r)return"undefined"!=typeof n&&r.parent===window.Parsley&&(r.parent=n,r._resetOptions(r.options)),r;if(!this.$element.length)throw new Error("You must bind Parsley on an existing element.");if("undefined"!=typeof n&&"ParsleyForm"!==n.__class__)throw new Error("Parent instance must be a ParsleyForm instance");return this.parent=n||window.Parsley,this.init(i)};V.prototype={init:function(e){return this.__class__="Parsley",this.__version__="2.3.10",this.__id__=o.generateID(),this._resetOptions(e),this.$element.is("form")||o.checkAttr(this.$element,this.options.namespace,"validate")&&!this.$element.is(this.options.inputs)?this.bind("parsleyForm"):this.isMultiple()?this.handleMultiple():this.bind("parsleyField")},isMultiple:function(){return this.$element.is("input[type=radio], input[type=checkbox]")||this.$element.is("select")&&"undefined"!=typeof this.$element.attr("multiple")},handleMultiple:function(){var t,i,n=this;if(this.options.multiple||("undefined"!=typeof this.$element.attr("name")&&this.$element.attr("name").length?this.options.multiple=t=this.$element.attr("name"):"undefined"!=typeof this.$element.attr("id")&&this.$element.attr("id").length&&(this.options.multiple=this.$element.attr("id"))), 94this.$element.is("select")&&"undefined"!=typeof this.$element.attr("multiple"))return this.options.multiple=this.options.multiple||this.__id__,this.bind("parsleyFieldMultiple");if(!this.options.multiple)return o.warn("To be bound by Parsley, a radio, a checkbox and a multiple select input must have either a name or a multiple option.",this.$element),this;this.options.multiple=this.options.multiple.replace(/(:|\.|\[|\]|\{|\}|\$)/g,""),"undefined"!=typeof t&&e('input[name="'+t+'"]').each(function(t,i){e(i).is("input[type=radio], input[type=checkbox]")&&e(i).attr(n.options.namespace+"multiple",n.options.multiple)});for(var r=this._findRelated(),s=0;s<r.length;s++)if(i=e(r.get(s)).data("Parsley"),"undefined"!=typeof i){this.$element.data("ParsleyFieldMultiple")||i.addElement(this.$element);break}return this.bind("parsleyField",!0),i||this.bind("parsleyFieldMultiple")},bind:function(t,i){var n;switch(t){case"parsleyForm":n=e.extend(new w(this.$element,this.domOptions,this.options),new u,window.ParsleyExtend)._bindFields();break;case"parsleyField":n=e.extend(new E(this.$element,this.domOptions,this.options,this.parent),new u,window.ParsleyExtend);break;case"parsleyFieldMultiple":n=e.extend(new E(this.$element,this.domOptions,this.options,this.parent),new P,new u,
94window.ParsleyExtend)._init();break;default:throw new Error(t+"is not a supported Parsley type")}return this.options.multiple&&o.setAttr(this.$element,this.options.namespace,"multiple",this.options.multiple),"undefined"!=typeof i?(this.$element.data("ParsleyFieldMultiple",n),n):(this.$element.data("Parsley",n),n._actualizeTriggers(),n._trigger("init"),n)}};var M=e.fn.jquery.split(".");if(parseInt(M[0])<=1&&parseInt(M[1])<8)throw"The loaded version of jQuery is too old. Please upgrade to 1.8.x or better.";M.forEach||o.warn("Parsley requires ES5 to run properly. Please include https://github.com/es-shims/es5-shim");var O=e.extend(new u,{$element:e(document),actualizeOptions:null,_resetOptions:null,Factory:V,version:"2.3.10"});e.extend(E.prototype,y.Field,u.prototype),e.extend(w.prototype,y.Form,u.prototype),e.extend(V.prototype,u.prototype),e.fn.parsley=e.fn.psly=function(t){if(this.length>1){var i=[];return this.each(function(){i.push(e(this).parsley(t))}),i}return e(this).length?new V(this,t):void o.warn("You must bind Parsley on an existing element.")},"undefined"==typeof window.ParsleyExtend&&(window.ParsleyExtend={}),O.options=e.extend(o.objectCreate(l),window.ParsleyConfig),window.ParsleyConfig=O.options,window.Parsley=window.psly=O,window.ParsleyUtils=o;var A=window.Parsley._validatorRegistry=new m(window.ParsleyConfig.validators,window.ParsleyConfig.i18n);window.ParsleyValidator={},e.each("setLocale addCatalog addMessage addMessages getErrorMessage formatMessage addValidator updateValidator removeValidator".split(" "),function(t,i){window.Parsley[i]=e.proxy(A,i),window.ParsleyValidator[i]=function(){var e;return o.warnOnce("Accessing the method '"+i+"' through ParsleyValidator is deprecated. Simply call 'window.Parsley."+i+"(...)'"),(e=window.Parsley)[i].apply(e,arguments)}}),window.Parsley.UI=y,window.ParsleyUI={removeError:function(e,t,i){var n=!0!==i;return o.warnOnce("Accessing ParsleyUI is deprecated. Call 'removeError' on the instance directly. Please comment in issue 1073 as to your need to call this method."),e.removeError(t,{updateClass:n})},getErrorsMessages:function(e){return o.warnOnce("Accessing ParsleyUI is deprecated. Call 'getErrorsMessages' on the instance directly."),e.getErrorsMessages()}},e.each("addError updateError".split(" "),function(e,t){window.ParsleyUI[t]=function(e,i,n,r,s){var a=!0!==s;return o.warnOnce("Accessing ParsleyUI is deprecated. Call '"+t+"' on the instance directly. Please comment in issue 1073 as to your need to call this method."),e[t](i,{message:n,assert:r,updateClass:a})}}),!1!==window.ParsleyConfig.autoBind&&e(function(){e("[data-parsley-validate]").length&&e("[data-parsley-validate]").parsley()});var R=e({}),T=function(){o.warnOnce("Parsley's pubsub module is deprecated; use the 'on' and 'off' methods on parsley instances or window.Parsley")},q="parsley:";e.listen=function(e,n){var r;if(T(),"object"==typeof arguments[1]&&"function"==typeof arguments[2]&&(r=arguments[1],n=arguments[2]),"function"!=typeof n)throw new Error("Wrong parameters");window.Parsley.on(i(e),t(n,r))},e.listenTo=function(e,n,r){if(T(),!(e instanceof E||e instanceof w))throw new Error("Mu
94st give Parsley instance");if("string"!=typeof n||"function"!=typeof r)throw new Error("Wrong parameters");e.on(i(n),t(r))},e.unsubscribe=function(e,t){if(T(),"string"!=typeof e||"function"!=typeof t)throw new Error("Wrong arguments");window.Parsley.off(i(e),t.parsleyAdaptedCallback)},e.unsubscribeTo=function(e,t){if(T(),!(e instanceof E||e instanceof w))throw new Error("Must give Parsley instance");e.off(i(t))},e.unsubscribeAll=function(t){T(),window.Parsley.off(i(t)),e("form,input,textarea,select").each(function(){var n=e(this).data("Parsley");n&&n.off(i(t))})},e.emit=function(e,t){var n;T();var r=t instanceof E||t instanceof w,s=Array.prototype.slice.call(arguments,r?2:1);s.unshift(i(e)),r||(t=window.Parsley),(n=t).trigger.apply(n,_toConsumableArray(s))};e.extend(!0,O,{asyncValidators:{"default":{fn:function(e){return e.status>=200&&e.status<300},url:!1},reverse:{fn:function(e){return e.status<200||e.status>=300},url:!1}},addAsyncValidator:function(e,t,i,n){return O.asyncValidators[e]={fn:t,url:i||!1,options:n||{}},this}}),O.addValidator("remote",{requirementType:{"":"string",validator:"string",reverse:"boolean",options:"object"},validateString:function(t,i,n,r){var s,a,o={},l=n.validator||(!0===n.reverse?"reverse":"default");if("undefined"==typeof O.asyncValidators[l])throw new Error("Calling an undefined async validator: `"+l+"`");i=O.asyncValidators[l].url||i,i.indexOf("{value}")>-1?i=i.replace("{value}",encodeURIComponent(t)):o[r.$element.attr("name")||r.$element.attr("id")]=t;var u=e.extend(!0,n.options||{},O.asyncValidators[l].options);s=e.extend(!0,{},{url:i,data:o,type:"GET"},u),r.trigger("field:ajaxoptions",r,s),a=e.param(s),"undefined"==typeof O._remoteCache&&(O._remoteCache={});var d=O._remoteCache[a]=O._remoteCache[a]||e.ajax(s),h=function(){var t=O.asyncValidators[l].fn.call(r,d,i,n);return t||(t=e.Deferred().reject()),e.when(t)};return d.then(h,h)},priority:-1}),O.on("form:submit",function(){O._remoteCache={}}),window.ParsleyExtend.addAsyncValidator=function(){return ParsleyUtils.warnOnce("Accessing the method `addAsyncValidator` through an instance is deprecated. Simply call `Parsley.addAsyncValidator(...)`"),O.addAsyncValidator.apply(O,arguments)},O.addMessages("en",{defaultMessage:"This value seems to be invalid.",type:{email:"This value should be a valid email.",url:"This value should be a valid url.",number:"This value should be a valid number.",integer:"This value should be a valid integer.",digits:"This value should be digits.",alphanum:"This value should be alphanumeric."},notblank:"This value should not be blank.",required:"This value is required.",pattern:"This value seems to be invalid.",min:"This value should be greater than or equal to %s.",max:"This value should be lower than or equal to %s.",range:"This value should be between %s and %s.",minlength:"This value is too short. It should have %s characters or more.",maxlength:"This value is too long. It should have %s characters or fewer.",length:"This value length is invalid. It should be between %s and %s characters long.",mincheck:"You must select at least %s choices.",maxcheck:"You must select %s choices or fewer.",check:"You must select between %s and %s choices.",equalto:"This value should be the same."}),O.setLocale("en");var D=new n;D.install();var I=O;return I}); 95 96!function(){"use strict";const e=()=>{var e=document.querySelector(".body__wrapper"),t=document.querySelector(".language-suggest"),i=document.querySelector(".toolbar__wrap"),a=document.querySelector(".sub-menu__bar");e&&i&&(t=t?t.offsetHeight:0,i=i.offsetHeight,a=a?a.offsetHeight:0,e.style.paddingTop=t+i+a+"px")};const f=t=>{t.style.opacity=1,function e(){(t.style.opacity-=.1)<0?(t.style.display="none",t.style.opacity=null):requestAnimationFrame(e)}()},g=(i,e)=>{i.style.opacity=0,i.style.display=e||"block",function e(){var t=parseFloat(i.style.opacity);1<(t+=.1)||(i.style.opacity=t,requestAnimationFrame(e))}()};function z(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function a(t={},i={}
96){Object.keys(i).forEach(e=>{void 0===t[e]?t[e]=i[e]:z(i[e])&&z(t[e])&&0<Object.keys(i[e]).length&&a(t[e],i[e])})}const D={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector(){return null},querySelectorAll(){return[]},getElementById(){return null},createEvent(){return{initEvent(){}}},createElement(){return{children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName(){return[]}}},createElementNS(){return{}},importNode(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function m(){var e="undefined"!=typeof document?document:{};return a(e,D),e}const B={document:D,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle(){return{getPropertyValue(){return""}}},Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia(){return{}},requestAnimationFrame(e){return"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0)},cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function h(){var e="undefined"!=typeof window?window:{};return a(e,B),e}class l extends Array{constructor(e){if("number"!=typeof e){super(...e||[]);{var t=this;const i=t.__proto__;Object.defineProperty(t,"__proto__",{get(){return i},set(e){i.__proto__=e}})}}else super(e)}}function s(e=[]){const t=[];return e.forEach(e=>{Array.isArray(e)?t.push(...s(e)):t.push(e)}),t}function F(e,t){return Array.prototype.filter.call(e,t)}function S(e,t){var i=h(),a=m();let s=[];if(!t&&e instanceof l)return e;if(!e)return new l(s);if("string"==typeof e){var n=e.trim();if(0<=n.indexOf("<")&&0<=n.indexOf(">")){let e="div";0===n.indexOf("<li")&&(e="ul"),0===n.indexOf("<tr")&&(e="tbody"),0!==n.indexOf("<td")&&0!==n.indexOf("<th")||(e="tr"),0===n.indexOf("<tbody")&&(e="table"),0===n.indexOf("<option")&&(e="select");var r=a.createElement(e);r.innerHTML=n;for(let e=0;e<r.childNodes.length;e+=1)s.push(r.childNodes[e])}else s=function(e,t){if("string"!=typeof e)return[e];var i=[],a=t.querySelectorAll(e);for(let e=0;e<a.length;e+=1)i.push(a[e]);return i}(e.trim(),t||a)}else if(e.nodeType||e===i||e===a)s.push(e);else if(Array.isArray(e)){if(e instanceof l)return e;s=e}return new l(function(t){var i=[];for(let e=0;e<t.length;e+=1)-1===i.indexOf(t[e])&&i.push(t[e]);return i}(s))}S.fn=l.prototype;const N={addClass:function(...e){const t=s(e.map(e=>e.split(" ")));return this.forEach(e=>{e.classList.add(...t)}),this},removeClass:function(...e){const t=s(e.map(e=>e.split(" ")));return this.forEach(e=>{e.classList.remove(...t)}),this},hasClass:function(...e){const i=s(e.map(e=>e.split(" ")));return 0<F(this,t=>0<i.filter(e=>t.classList.contains(e)).length).length},toggleClass:function(...e){const i=s(e.map(e=>e.split(" ")));this.forEach(t=>{i.forEach(e=>{t.classList.toggle(e)})})},attr:function(t,i){if(1===arguments.length&&"string"==typeof t)return this[0]?this[0].getAttribute(t):void 0;for(let e=0;e<this.length;e+=1)if(2===arguments.length)this[e].setAttribute(t,i);else for(const a in t)this[e][a]=t[a],this[e].setAttribute(a,t[a]);return this},removeAttr:function(t){for(let e=0;e<this.length;e+=1)this[e].removeAttribute(t);return this},transform:function(t){for(let e=0;e<this.length;e+=1)this[e].style.transform=t;return this},transition:function(t){for(let e=0;e<this.length;e+=1)this[e].style.transitionDuration="string"!=typeof t?t+"ms":t;return this},on:function(...e){let[t,s,n,i]=e;function a(e){var t=e.target;if(t){var i=e.target.dom7EventData||[];if(i.indexOf(e)<0&&i.unshift(e),S(t).is(s))n.apply(t,i);else{var a=S(t).parents();for(let e=0;e<a.length;e+=1)S(a[e]).is(s)&&n.apply(a[e],i)}}}function r(e){var t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),n.apply(this,t)}"function"==typeof e[1]&&([t,n,i]=e,s=void 0),i=i||!1;var l=t.split(" ");let o;for(let e=0;e<this.length;e+=1){var d=this[e];if(s)for(o=0;o<l.length;o+=1){var c=l[o];d.dom7LiveListeners||(d.dom7LiveListeners={}),d.dom7LiveListeners[c]||(d.dom7LiveListeners[c]=[]),d.dom7LiveListeners[c].push({listener:n,proxyListener:a}),d.addEventListener(c,a,i)}else for(o=0;o<l.length;o+=1){var p=l[o];d.dom7Listeners||(d.dom7Listeners={}),d.dom7Listeners[p]||(d.dom7Listeners[p]=[]),d.dom7Listeners[p].push({listener:n,proxyListener:r}),d.addEventListener(p,r,i)}}return this},off:function(...e){let[t,i,a,s]=e;"function"==typeof e[1]&&([t,a,s]=e,i=void 0),s=s||!1;var n=t.split(" ");for(let e=0;e<n.length;e+=1){var r=n[e];for(let e=0;e<this.length;e+=1){var l=this[e];let t;if(!i&&l.dom7Listeners?t=l.dom7Listeners[r]:i&&l.dom7LiveListeners&&(t=l.dom7LiveListeners[r]),t&&t.length)for(let e=t.length-1;0<=e;--e){var o=t[e];(a&&o.listener===a||a&&o.listener&&o.listener.dom7proxy&&o.listener.dom7proxy===a||!a)&&(l.removeEventListener(r,o.proxyListener,s),t.splice(e,1))}}}return this},trigger:function(...t){var i=h(),a=t[0].split(" "),s=t[1];for(let e=0;e<a.length;e+=1){var n=a[e];for(let e=0;e<this.length;e+=1){var r,l=this[e];i.CustomEvent&&(r=new i.CustomEvent(n,{detail:s,bubbles:!0,cancelable:!0}),l.dom7EventData=t.filter((e,t)=>
960<t),l.dispatchEvent(r),l.dom7EventData=[],delete l.dom7EventData)}}return this},transitionEnd:function(i){const a=this;return i&&a.on("transitionend",function e(t){t.target===this&&(i.call(this,t),a.off("transitionend",e))}),this},outerWidth:function(e){return 0<this.length?e?(e=this.styles(),this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))):this[0].offsetWidth:null},outerHeight:function(e){return 0<this.length?e?(e=this.styles(),this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))):this[0].offsetHeight:null},styles:function(){var e=h();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){var e,t,i,a,s,n;return 0<this.length?(n=h(),a=m(),t=(e=this[0]).getBoundingClientRect(),a=a.body,i=e.clientTop||a.clientTop||0,a=e.clientLeft||a.clientLeft||0,s=e===n?n.scrollY:e.scrollTop,n=e===n?n.scrollX:e.scrollLeft,{top:t.top+s-i,left:t.left+n-a}):null},css:function(e,t){var i=h();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a<this.length;a+=1)for(const s in e)this[a].style[s]=e[s];return this}if(this[0])return i.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e)for(a=0;a<this.length;a+=1)this[a].style[e]=t;return this},each:function(i){return i&&this.forEach((e,t)=>{i.apply(e,[e,t])}),this},html:function(t){if(void 0===t)return this[0]?this[0].innerHTML:null;for(let e=0;e<this.length;e+=1)this[e].innerHTML=t;return this},text:function(t){if(void 0===t)return this[0]?this[0].textContent.trim():null;for(let e=0;e<this.length;e+=1)this[e].textContent=t;return this},is:function(e){var t=h(),i=m(),a=this[0];let s,n;if(a&&void 0!==e)if("string"==typeof e){if(a.matches)return a.matches(e);if(a.webkitMatchesSelector)return a.webkitMatchesSelector(e);if(a.msMatchesSelector)return a.msMatchesSelector(e);for(s=S(e),n=0;n<s.length;n+=1)if(s[n]===a)return!0}else{if(e===i)return a===i;if(e===t)return a===t;if(e.nodeType||e instanceof l)for(s=e.nodeType?[e]:e,n=0;n<s.length;n+=1)if(s[n]===a)return!0}return!1},index:function(){let e=this[0],t;if(e){for(t=0;null!==(e=e.previousSibling);)1===e.nodeType&&(t+=1);return t}},eq:function(e){var t;return void 0===e?this:S((t=this.length)-1<e?[]:e<0?(t=t+e)<0?[]:[this[t]]:[this[e]])},append:function(...t){var i,a=m();for(let e=0;e<t.length;e+=1){i=t[e];for(let t=0;t<this.length;t+=1)if("string"==typeof i){var s=a.createElement("div");for(s.innerHTML=i;s.firstChild;)this[t].appendChild(s.firstChild)}else if(i instanceof l)for(let e=0;e<i.length;e+=1)this[t].appendChild(i[e]);else this[t].appendChild(i)}return this},prepend:function(e){var t=m();let i,a;for(i=0;i<this.length;i+=1)if("string"==typeof e){var s=t.createElement("div");for(s.innerHTML=e,a=s.childNodes.length-1;0<=a;--a)this[i].insertBefore(s.childNodes[a],this[i].childNodes[0])}else if(e instanceof l)for(a=0;a<e.length;a+=1)this[i].insertBefore(e[a],this[i].childNodes[0]);else this[i].insertBefore(e,this[i].childNodes[0]);return this},next:function(e){return 0<this.length?e?this[0].nextElementSibling&&S(this[0].nextElementSibling).is(e)?S([this[0].nextElementSibling]):S([]):this[0].nextElementSibling?S([this[0].nextElementSibling]):S([]):S([])},nextAll:function(e){var t=[];let i=this[0];if(!i)return S([]);for(;i.nextElementSibling;){var a=i.nextElementSibling;(!e||S(a).is(e))&&t.push(a),i=a}return S(t)},prev:function(e){var t;return 0<this.length?(t=this[0],e?t.previousElementSibling&&S(t.previousElementSibling).is(e)?S([t.previousElementSibling]):S([]):t.previousElementSibling?S([t.previousElementSibling]):S([])):S([])},prevAll:function(e){var t=[];let i=this[0];if(!i)return S([]);for(;i.previousElementSibling;){var a=i.previousElementSibling;(!e||S(a).is(e))&&t.push(a),i=a}return S(t)},parent:function(t){var i=[];for(let e=0;e<this.length;e+=1)null===this[e].parentNode||t&&!S(this[e].parentNode).is(t)||i.push(this[e].parentNode);return S(i)},parents:function(i){var a=[];for(let t=0;t<this.length;t+=1){let e=this[t].parentNode;for(;e;)i&&!S(e).is(i)||a.push(e),e=e.parentNode}return S(a)},closest:function(e){let t=this;return void 0===e?S([]):t=t.is(e)?t:t.parents(e).eq(0)},find:function(t){var i=[];for(let e=0;e<this.length;e+=1){var a=this[e].querySelectorAll(t);for(let e=0;e<a.length;e+=1)i.push(a[e])}return S(i)},children:function(t){var i=[];for(let e=0;e<this.length;e+=1){var a=this[e].children;for(let e=0;e<a.length;e+=1)t&&!S(a[e]).is(t)||i.push(a[e])}return S(i)},filter:function(e){return S(F(this,e))},remove:function(){for(let e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}};function v(e,t=0){return setTimeout(e,t)}function y(){return Date.now()}function H(e,t="x"){var i=h();let a,s,n;e=function(e){var t=h();let i;return i=(i=!(i=t.getComputedStyle?t.getComputedStyle(e,null):i)&&e.currentStyle?e.currentStyle:i)||e.style}(e);return i.WebKitCSSMatrix?(6<(s=e.transform||e.webkitTransform).split(",").length&&(s=s.split(", ").map(e=>e.replace(",",".")).join(", ")),n=new i.WebKitCSSMatrix("none"===s?"":s)):(n=e.MozTransform||e.OTransform||e.MsTransform||e.msTransform||e.transform||e.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(s=i.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),(s="y"===t?i.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5]):s)||0}function d(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function p(...t){var i,a=Object(t[0]);const s=["__proto__","constructor","prototype"];for(let e=1;e<t.length;e+=1){var n=t[e];if(null!=n&&(i=n,!("undefined"!=typeof window&&void 0!==window.HTMLElement?i instanceof HTMLElement:i&&(1===i.nodeType||11===i.nodeType)))){var r=Object.keys(Object(n)).filter(e=>s.indexOf(e)<0);for(let e=0,t=r.length;e<t;e+=1){var l=r[e],o=Object.getOwnPropertyDescriptor(n,l);void 0!==o&&o.enumerable&&(d(a[l])&&d(n[l])?n[l].__swiper__?a[l]=n[l]:p(a[l],n[l]):d(a[l])||!d(n[l])||(a[l]={},n[l].__swiper__)?a[l]=n[l]:p(a[l],n[l]))}}}return a}function G(e,t,i){e.style.setProperty(t,i)}function j({swiper:i,targetPosition:a,side:s}){const n=h(),r=-i.translate;let l=null,o;const d=i.params.speed,c=(i.wrapperEl.style.scrollSnapType="none",n.cancelAnimationFrame(i.cssModeFrameID),a>r?"next":"prev"),p=(e,t)=>"next"===c&&t<=e||"prev"===c&&e<=t,u=()=>{o=(new Date).getTime(),null===l&&(l=o);var e=Math.max(Math.min((o-l)/d,1),0),e=.5-Math.cos(e*Math.PI)/2;let t=r+e*(a-r);p(t,a)&&(t=a),i.wrapperEl.scrollTo({[s]:t}),p(t,a)?(i.wrapperEl.style.overflow="hidden",i.wrapperEl.style.scrollSnapType="",setTimeout(()=>{i.wrapperEl.style.overflow="",i.wrapperEl.scrollTo({[s]:t})}),n.cancelAnimationFrame(i.cssModeFrameID)):i.cssModeFrameID=n.requestAnimationFrame(u)};u()}
96Object.keys(N).forEach(e=>{Object.defineProperty(S.fn,e,{value:N[e],writable:!0})});let R;function V(){return R=R||function(){const i=h();var e=m();return{smoothScroll:e.documentElement&&"scrollBehavior"in e.documentElement.style,touch:!!("ontouchstart"in i||i.DocumentTouch&&e instanceof i.DocumentTouch),passiveListener:function(){let e=!1;try{var t=Object.defineProperty({},"passive",{get(){e=!0}});i.addEventListener("testPassiveListener",null,t)}catch(e){}return e}(),gestures:"ongesturestart"in i}}()}let W;function X(e={}){return W=W||function({userAgent:e}={}){var t=V(),i=(n=h()).navigator.platform,e=e||n.navigator.userAgent,a={ios:!1,android:!1},s=n.screen.width,n=n.screen.height,r=e.match(/(Android);?[\s\/]+([\d.]+)?/);let l=e.match(/(iPad).*OS\s([\d_]+)/);var o=e.match(/(iPod)(.*OS\s([\d_]+))?/),d=!l&&e.match(/(iPhone\sOS|iOS)\s([\d_]+)/),c="Win32"===i,i="MacIntel"===i;return!l&&i&&t.touch&&0<=["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(s+"x"+n)&&(l=(l=e.match(/(Version)\/([\d.]+)/))||[0,1,"13_0_0"]),r&&!c&&(a.os="android",a.android=!0),(l||d||o)&&(a.os="ios",a.ios=!0),a}(e)}let Y;function U(){return Y=Y||function(){const e=h();return{isSafari:0<=(t=e.navigator.userAgent.toLowerCase()).indexOf("safari")&&t.indexOf("chrome")<0&&t.indexOf("android")<0,isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)};var t}()}function Z({swiper:e,runCallbacks:t,direction:i,step:a}){var{activeIndex:s,previousIndex:n}=e;let r=i;r=r||(n<s?"next":s<n?"prev":"reset"),e.emit("transition"+a),t&&s!==n&&("reset"===r?e.emit("slideResetTransition"+a):(e.emit("slideChangeTransition"+a),"next"===r?e.emit("slideNextTransition"+a):e.emit("slidePrevTransition"+a)))}function K(a,e=this){return function e(t){var i;return t&&t!==m()&&t!==h()&&((i=(t=t.assignedSlot||t).closest(a))||t.getRootNode)?i||e(t.getRootNode().host):null}(e)}function Q(){var e,t,i=this,{params:a,el:s}=i;s&&0===s.offsetWidth||(a.breakpoints&&i.setBreakpoint(),{allowSlideNext:s,allowSlidePrev:e,snapGrid:t}=i,i.allowSlideNext=!0,i.allowSlidePrev=!0,i.updateSize(),i.updateSlides(),i.updateSlidesClasses(),("auto"===a.slidesPerView||1<a.slidesPerView)&&i.isEnd&&!i.isBeginning&&!i.params.centeredSlides?i.slideTo(i.slides.length-1,0,!1,!0):i.slideTo(i.activeIndex,0,!1,!0),i.autoplay&&i.autoplay.running&&i.autoplay.paused&&i.autoplay.run(),i.allowSlidePrev=e,i.allowSlideNext=s,i.params.watchOverflow&&t!==i.snapGrid&&i.checkOverflow())}let J=!1;function ee(){}const te=(e,t)=>{var i,a=m(),{params:s,touchEvents:n,el:r,wrapperEl:l,device:o,support:d}=e,c=!!s.nested,p="on"===t?"addEventListener":"removeEventListener";d.touch?(i=!("touchstart"!==n.start||!d.passiveListener||!s.passiveListeners)&&{passive:!0,capture:!1},r[p](n.start,e.onTouchStart,i),r[p](n.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),r[p](n.end,e.onTouchEnd,i),n.cancel&&r[p](n.cancel,e.onTouchEnd,i)):(r[p](n.start,e.onTouchStart,!1),a[p](n.move,e.onTouchMove,c),a[p](n.end,e.onTouchEnd,!1)),(s.preventClicks||s.preventClicksPropagation)&&r[p]("click",e.onClick,!0),s.cssMode&&l[p]("scroll",e.onScroll),s.updateOnWindowResize?e[t](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",Q,!0):e[t]("observerUpdate",Q,!0)};const ie=(e,t)=>e.grid&&t.grid&&1<t.grid.rows;var ae={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopedSlidesLimit:!0,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};const i={eventsEmitter:{on(e,t,i){const a=this;if(a.eventsListeners&&!a.destroyed&&"function"==typeof t){const s=i?"unshift":"push";
96e.split(" ").forEach(e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][s](t)})}return a},once(t,i,e){const a=this;return!a.eventsListeners||a.destroyed||"function"!=typeof i?a:(s.__emitterProxy=i,a.on(t,s,e));function s(...e){a.off(t,s),s.__emitterProxy&&delete s.__emitterProxy,i.apply(a,e)}},onAny(e,t){var i=this;return i.eventsListeners&&!i.destroyed&&"function"==typeof e&&(t=t?"unshift":"push",i.eventsAnyListeners.indexOf(e)<0)&&i.eventsAnyListeners[t](e),i},offAny(e){var t=this;return t.eventsListeners&&!t.destroyed&&t.eventsAnyListeners&&0<=(e=t.eventsAnyListeners.indexOf(e))&&t.eventsAnyListeners.splice(e,1),t},off(e,a){const s=this;return s.eventsListeners&&!s.destroyed&&s.eventsListeners&&e.split(" ").forEach(i=>{void 0===a?s.eventsListeners[i]=[]:s.eventsListeners[i]&&s.eventsListeners[i].forEach((e,t)=>{(e===a||e.__emitterProxy&&e.__emitterProxy===a)&&s.eventsListeners[i].splice(t,1)})}),s},emit(...t){const s=this;if(s.eventsListeners&&!s.destroyed&&s.eventsListeners){let e,i,a;a="string"==typeof t[0]||Array.isArray(t[0])?(e=t[0],i=t.slice(1,t.length),s):(e=t[0].events,i=t[0].data,t[0].context||s),i.unshift(a),(Array.isArray(e)?e:e.split(" ")).forEach(t=>{s.eventsAnyListeners&&s.eventsAnyListeners.length&&s.eventsAnyListeners.forEach(e=>{e.apply(a,[t,...i])}),s.eventsListeners&&s.eventsListeners[t]&&s.eventsListeners[t].forEach(e=>{e.apply(a,i)})})}return s}},update:{updateSize:function(){var e=this;let t,i;var a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,i=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===i&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),i=i-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(i)&&(i=0),Object.assign(e,{width:t,height:i,size:e.isHorizontal()?t:i}))},updateSlides:function(){const i=this;function a(e){return i.isHorizontal()?e:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[e]}function s(e,t){return parseFloat(e.getPropertyValue(a(t))||0)}const n=i.params;var{$wrapperEl:e,size:r,rtlTranslate:l,wrongRTL:o}=i,d=i.virtual&&n.virtual.enabled,D=(d?i.virtual:i).slides.length;const c=e.children("."+i.params.slideClass);var p=(d?i.virtual.slides:c).length;let u=[];const m=[];var h=[];let f=n.slidesOffsetBefore,g=("function"==typeof f&&(f=n.slidesOffsetBefore.call(i)),n.slidesOffsetAfter);"function"==typeof g&&(g=n.slidesOffsetAfter.call(i));var B=i.snapGrid.length,F=i.slidesGrid.length;let v=n.spaceBetween,y=-f,b=0,w=0;if(void 0!==r){"string"==typeof v&&0<=v.indexOf("%")&&(v=parseFloat(v.replace("%",""))/100*r),i.virtualSize=-v,l?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),n.centeredSlides&&n.cssMode&&(G(i.wrapperEl,"--swiper-centered-offset-before",""),G(i.wrapperEl,"--swiper-centered-offset-after",""));var S=n.grid&&1<n.grid.rows&&i.grid;S&&i.grid.initSlides(p);let t;var N="auto"===n.slidesPerView&&n.breakpoints&&0<Object.keys(n.breakpoints).filter(e=>void 0!==n.breakpoints[e].slidesPerView).length;for(let e=0;e<p;e+=1){t=0;var E,C,T,x,_,k,M,L,$,P=c.eq(e);S&&i.grid.updateSlide(e,P,p,a),"none"!==P.css("display")&&("auto"===n.slidesPerView?(N&&(c[e].style[a("width")]=""),L=getComputedStyle(P[0]),E=P[0].style.transform,C=P[0].style.webkitTransform,E&&(P[0].style.transform="none"),C&&(P[0].style.webkitTransform="none"),t=n.roundLengths?i.isHorizontal()?P.outerWidth(!0):P.outerHeight(!0):(T=s(L,"width"),x=s(L,"padding-left"),_=s(L,"padding-right"),k=s(L,"margin-left"),M=s(L,"margin-right"),(L=L.getPropertyValue("box-sizing"))&&"border-box"===L?T+k+M:({clientWidth:L,offsetWidth:$}=P[0],T+x+_+k+M+($-L))),E&&(P[0].style.transform=E),C&&(P[0].style.webkitTransform=C),n.roundLengths&&(t=Math.floor(t))):(t=(r-(n.slidesPerView-1)*v)/n.slidesPerView,n.roundLengths&&(t=Math.floor(t)),c[e]&&(c[e].style[a("width")]=t+"px")),c[e]&&(c[e].swiperSlideSize=t),h.push(t),n.centeredSlides?(y=y+t/2+b/2+v,0===b&&0!==e&&(y=y-r/2-v),0===e&&(y=y-r/2-v),Math.abs(y)<.001&&(y=0),n.roundLengths&&(y=Math.floor(y)),w%n.slidesPerGroup==0&&u.push(y),m.push(y)):(n.roundLengths&&(y=Math.floor(y)),(w-Math.min(i.params.slidesPerGroupSkip,w))%i.params.slidesPerGroup==0&&u.push(y),m.push(y),y=y+t+v),i.virtualSize+=t+v,b=t,w+=1)}if(i.virtualSize=Math.max(i.virtualSize,r)+g,l&&o&&("slide"===n.effect||"coverflow"===n.effect)&&e.css({width:i.virtualSize+n.spaceBetween+"px"}),n.setWrapperSize&&e.css({[a("width")]:i.virtualSize+n.spaceBetween+"px"}),S&&i.grid.updateWrapperSize(t,u,a),!n.centeredSlides){var q=[];for(let t=0;t<u.length;t+=1){let e=u[t];n.roundLengths&&(e=Math.floor(e)),u[t]<=i.virtualSize-r&&q.push(e)}u=q,1<Math.floor(i.virtualSize-r)-Math.floor(u[u.length-1])&&u.push(i.virtualSize-r)}if(0===u.length&&(u=[0]),0!==n.spaceBetween&&(o=i.isHorizontal()&&l?"marginLeft":a("marginRight"),c.filter((e,t)=>
96!n.cssMode||t!==c.length-1).css({[o]:v+"px"})),n.centeredSlides&&n.centeredSlidesBounds){let t=0;h.forEach(e=>{t+=e+(n.spaceBetween||0)});const A=(t-=n.spaceBetween)-r;u=u.map(e=>e<0?-f:e>A?A+g:e)}if(n.centerInsufficientSlides){let t=0;if(h.forEach(e=>{t+=e+(n.spaceBetween||0)}),(t-=n.spaceBetween)<r){const O=(r-t)/2;u.forEach((e,t)=>{u[t]=e-O}),m.forEach((e,t)=>{m[t]=e+O})}}if(Object.assign(i,{slides:c,snapGrid:u,slidesGrid:m,slidesSizesGrid:h}),n.centeredSlides&&n.cssMode&&!n.centeredSlidesBounds){G(i.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),G(i.wrapperEl,"--swiper-centered-offset-after",i.size/2-h[h.length-1]/2+"px");const I=-i.snapGrid[0],z=-i.slidesGrid[0];i.snapGrid=i.snapGrid.map(e=>e+I),i.slidesGrid=i.slidesGrid.map(e=>e+z)}p!==D&&i.emit("slidesLengthChange"),u.length!==B&&(i.params.watchOverflow&&i.checkOverflow(),i.emit("snapGridLengthChange")),m.length!==F&&i.emit("slidesGridLengthChange"),n.watchSlidesProgress&&i.updateSlidesOffset(),d||n.cssMode||"slide"!==n.effect&&"fade"!==n.effect||(e=n.containerModifierClass+"backface-hidden",l=i.$el.hasClass(e),p<=n.maxBackfaceHiddenSlides?l||i.$el.addClass(e):l&&i.$el.removeClass(e))}},updateAutoHeight:function(e){const i=this,t=[],a=i.virtual&&i.params.virtual.enabled;let s=0,n;"number"==typeof e?i.setTransition(e):!0===e&&i.setTransition(i.params.speed);var r,l=t=>(a?i.slides.filter(e=>parseInt(e.getAttribute("data-swiper-slide-index"),10)===t):i.slides.eq(t))[0];if("auto"!==i.params.slidesPerView&&1<i.params.slidesPerView)if(i.params.centeredSlides)(i.visibleSlides||S([])).each(e=>{t.push(e)});else for(n=0;n<Math.ceil(i.params.slidesPerView);n+=1){var o=i.activeIndex+n;if(o>i.slides.length&&!a)break;t.push(l(o))}else t.push(l(i.activeIndex));for(n=0;n<t.length;n+=1)void 0!==t[n]&&(r=t[n].offsetHeight,s=r>s?r:s);!s&&0!==s||i.$wrapperEl.css("height",s+"px")},updateSlidesOffset:function(){var t=this.slides;for(let e=0;e<t.length;e+=1)t[e].swiperSlideOffset=this.isHorizontal()?t[e].offsetLeft:t[e].offsetTop},updateSlidesProgress:function(e=this&&this.translate||0){var a=this,s=a.params,{slides:n,rtlTranslate:r,snapGrid:l}=a;if(0!==n.length){void 0===n[0].swiperSlideOffset&&a.updateSlidesOffset();let i=r?e:-e;n.removeClass(s.slideVisibleClass),a.visibleSlidesIndexes=[],a.visibleSlides=[];for(let t=0;t<n.length;t+=1){var o=n[t];let e=o.swiperSlideOffset;s.cssMode&&s.centeredSlides&&(e-=n[0].swiperSlideOffset);var d=(i+(s.centeredSlides?a.minTranslate():0)-e)/(o.swiperSlideSize+s.spaceBetween),c=(i-l[0]+(s.centeredSlides?a.minTranslate():0)-e)/(o.swiperSlideSize+s.spaceBetween),p=-(i-e),u=p+a.slidesSizesGrid[t];(0<=p&&p<a.size-1||1<u&&u<=a.size||p<=0&&u>=a.size)&&(a.visibleSlides.push(o),a.visibleSlidesIndexes.push(t),n.eq(t).addClass(s.slideVisibleClass)),o.progress=r?-d:d,o.originalProgress=r?-c:c}a.visibleSlides=S(a.visibleSlides)}},updateProgress:function(e){var t=this,i=(void 0===e&&(i=t.rtlTranslate?-1:1,e=t&&t.translate&&t.translate*i||0),t.params),a=t.maxTranslate()-t.minTranslate();let{progress:s,isBeginning:n,isEnd:r}=t;var l=n,o=r;r=0==a?(s=0,n=!0):(s=(e-t.minTranslate())/a,n=s<=0,1<=s),Object.assign(t,{progress:s,isBeginning:n,isEnd:r}),(i.watchSlidesProgress||i.centeredSlides&&i.autoHeight)&&t.updateSlidesProgress(e),n&&!l&&t.emit("reachBeginning toEdge"),r&&!o&&t.emit("reachEnd toEdge"),(l&&!n||o&&!r)&&t.emit("fromEdge"),t.emit("progress",s)},updateSlidesClasses:function(){var{slides:e,params:t,$wrapperEl:i,activeIndex:a,realIndex:s}=this,n=this.virtual&&t.virtual.enabled;e.removeClass(`${t.slideActiveClass} ${t.slideNextClass} ${t.slidePrevClass} ${t.slideDuplicateActiveClass} ${t.slideDuplicateNextClass} `+t.slideDuplicatePrevClass);let r,l=((r=n?this.$wrapperEl.find(`.${t.slideClass}[data-swiper-slide-index="${a}"]`):e.eq(a)).addClass(t.slideActiveClass),t.loop&&(r.hasClass(t.slideDuplicateClass)?i.children(`.${t.slideClass}:not(.${t.slideDuplicateClass})[data-swiper-slide-index="${s}"]`):i.children(`.${t.slideClass}.${t.slideDuplicateClass}[data-swiper-slide-index="${s}"]`)).addClass(t.slideDuplicateActiveClass),r.nextAll("."+t.slideClass).eq(0).addClass(t.slideNextClass)),o=(t.loop&&0===l.length&&(l=e.eq(0)).addClass(t.slideNextClass),r.prevAll("."+t.slideClass).eq(0).addClass(t.slidePrevClass));t.loop&&0===o.length&&(o=e.eq(-1)).addClass(t.slidePrevClass),t.loop&&((l.hasClass(t.slideDuplicateClass)?i.children(`.${t.slideClass}:not(.${t.slideDuplicateClass})[data-swiper-slide-index="${l.attr("data-swiper-slide-index")}"]`):i.children(`.${t.slideClass}.${t.slideDuplicateClass}[data-swiper-slide-index="${l.attr("data-swiper-slide-index")}"]`)).addClass(t.slideDuplicateNextClass),(o.hasClass(t.slideDuplicateClass)?i.children(`.${t.slideClass}:not(.${t.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`):i.children(`.${t.slideClass}.${t.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`)).addClass(t.slideDuplicatePrevClass)),this.emitSlidesClasses()},updateActiveIndex:function(e){var t=this,i=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:s,params:n,activeIndex:r,realIndex:l,snapIndex:o}=t;let d=e,c;if(void 0===d){for(let e=0;e<a.length;e+=1)void 0!==a[e+1]?i>=a[e]&&i<a[e+1]-(a[e+1]-a[e])/2?d=e:i>
96=a[e]&&i<a[e+1]&&(d=e+1):i>=a[e]&&(d=e);n.normalizeSlideIndex&&(d<0||void 0===d)&&(d=0)}(c=0<=s.indexOf(i)?s.indexOf(i):(e=Math.min(n.slidesPerGroupSkip,d))+Math.floor((d-e)/n.slidesPerGroup))>=s.length&&(c=s.length-1),d===r?c!==o&&(t.snapIndex=c,t.emit("snapIndexChange")):(e=parseInt(t.slides.eq(d).attr("data-swiper-slide-index")||d,10),Object.assign(t,{snapIndex:c,realIndex:e,previousIndex:r,activeIndex:d}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==e&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange"))},updateClickedSlide:function(e){var t=this,i=t.params,a=S(e).closest("."+i.slideClass)[0];let s=!1,n;if(a)for(let e=0;e<t.slides.length;e+=1)if(t.slides[e]===a){s=!0,n=e;break}a&&s?(t.clickedSlide=a,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(S(a).attr("data-swiper-slide-index"),10):t.clickedIndex=n,i.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()):(t.clickedSlide=void 0,t.clickedIndex=void 0)}},translate:{getTranslate:function(e=this.isHorizontal()?"x":"y"){var{params:t,rtlTranslate:i,translate:a,$wrapperEl:s}=this;if(t.virtualTranslate)return i?-a:a;if(t.cssMode)return a;let n=H(s[0],e);return(n=i?-n:n)||0},setTranslate:function(e,t){var i=this,{rtlTranslate:a,params:s,$wrapperEl:n,wrapperEl:r,progress:l}=i;let o=0,d=0;i.isHorizontal()?o=a?-e:e:d=e,s.roundLengths&&(o=Math.floor(o),d=Math.floor(d)),s.cssMode?r[i.isHorizontal()?"scrollLeft":"scrollTop"]=i.isHorizontal()?-o:-d:s.virtualTranslate||n.transform(`translate3d(${o}px, ${d}px, 0px)`),i.previousTranslate=i.translate,i.translate=i.isHorizontal()?o:d;let c;a=i.maxTranslate()-i.minTranslate(),(c=0==a?0:(e-i.minTranslate())/a)!==l&&i.updateProgress(e),i.emit("setTranslate",i.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e=0,t=this.params.speed,i=!0,a=!0,s){const n=this;var{params:r,wrapperEl:l}=n;if(n.animating&&r.preventInteractionOnTransition)return!1;var o=n.minTranslate(),d=n.maxTranslate();let c;if(c=a&&o<e?o:a&&e<d?d:e,n.updateProgress(c),r.cssMode){o=n.isHorizontal();if(0===t)l[o?"scrollLeft":"scrollTop"]=-c;else{if(!n.support.smoothScroll)return j({swiper:n,targetPosition:-c,side:o?"left":"top"}),!0;l.scrollTo({[o?"left":"top"]:-c,behavior:"smooth"})}}else 0===t?(n.setTransition(0),n.setTranslate(c),i&&(n.emit("beforeTransitionStart",t,s),n.emit("transitionEnd"))):(n.setTransition(t),n.setTranslate(c),i&&(n.emit("beforeTransitionStart",t,s),n.emit("transitionStart")),n.animating||(n.animating=!0,n.onTranslateToWrapperTransitionEnd||(n.onTranslateToWrapperTransitionEnd=function(e){n&&!n.destroyed&&e.target===this&&(n.$wrapperEl[0].removeEventListener("transitionend",n.onTranslateToWrapperTransitionEnd),n.$wrapperEl[0].removeEventListener("webkitTransitionEnd",n.onTranslateToWrapperTransitionEnd),n.onTranslateToWrapperTransitionEnd=null,delete n.onTranslateToWrapperTransitionEnd,i)&&n.emit("transitionEnd")}),n.$wrapperEl[0].addEventListener("transitionend",n.onTranslateToWrapperTransitionEnd),n.$wrapperEl[0].addEventListener("webkitTransitionEnd",n.onTranslateToWrapperTransitionEnd)));return!0}},transition:{setTransition:function(e,t){this.params.cssMode||this.$wrapperEl.transition(e),this.emit("setTransition",e,t)},transitionStart:function(e=!0,t){var i=this["params"];i.cssMode||(i.autoHeight&&this.updateAutoHeight(),Z({swiper:this,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e=!0,t){var i=this["params"];this.animating=!1,i.cssMode||(this.setTransition(0),Z({swiper:this,runCallbacks:e,direction:t,step:"End"}))}},slide:{slideTo:function(e=0,t=this.params.speed,i=!0,a,s){if("number"!=typeof e&&"string"!=typeof e)throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof e}] given.`);if("string"==typeof e){var n=parseInt(e,10);if(!isFinite(n))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=n}const r=this;let l=e;l<0&&(l=0);var{params:n,snapGrid:e,slidesGrid:o,previousIndex:d,activeIndex:c,rtlTranslate:p,wrapperEl:u,enabled:m}=r;if(r.animating&&n.preventInteractionOnTransition||!m&&!a&&!s)return!1;let h=(m=Math.min(r.params.slidesPerGroupSkip,l))+Math.floor((l-m)/r.params.slidesPerGroup);var f=-e[h=h>=e.length?e.length-1:h];if(n.normalizeSlideIndex)for(let e=0;e<o.length;e+=1){var g=-Math.floor(100*f),v=Math.floor(100*o[e]),y=Math.floor(100*o[e+1]);void 0!==o[e+1]?v<=g&&g<y-(y-v)/2?l=e:v<=g&&g<y&&(l=e+1):v<=g&&(l=e)}if(r.initialized&&l!==c){if(!r.allowSlideNext&&f<r.translate&&f<r.minTranslate())return!1;if(!r.allowSlidePrev&&f>r.translate&&f>r.maxTranslate()&&(c||0)!==l)return!1}l!==(d||0)&&i&&r.emit("beforeSlideChangeStart"),r.updateProgress(f);let b;if(b=l>c?"next":l<c?"prev":"reset",p&&-f===r.translate||!p&&f===r.translate)return r.updateActiveIndex(l),n.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),"slide"!==n.effect&&r.setTranslate(f),"reset"!==b&&(r.transitionStart(i,b),r.transitionEnd(i,b)),!1;if(n.cssMode){s=r.isHorizontal(),m=p?f:-f;if(0===t){e=r.virtual&&r.params.virtual.enabled;e&&(r.wrapperEl.style.scrollSnapType="none",r._immediateVirtual=!0),u[s?"scrollLeft":"scrollTop"]=m,e&&requestAnimationFrame(()=>{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1})}else{if(!r.support.smoothScroll)return j({swiper:r,targetPosition:m,side:s?"left":"top"}),!0;u.scrollTo({[s?"left":"top"]:m,behavior:"smooth"})}}else r.setTransition(t),r.setTranslate(f),r.updateActiveIndex(l),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(i,b),0===t?r.transitionEnd(i,b):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$
96wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(i,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd));return!0},slideToLoop:function(e=0,t=this.params.speed,i=!0,a){if("string"==typeof e){var s=parseInt(e,10);if(!isFinite(s))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=s}let n=e;return this.params.loop&&(n+=this.loopedSlides),this.slideTo(n,t,i,a)},slideNext:function(e=this.params.speed,t=!0,i){var a=this,{animating:s,enabled:n,params:r}=a;if(!n)return a;let l=r.slidesPerGroup;if("auto"===r.slidesPerView&&1===r.slidesPerGroup&&r.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1)),n=a.activeIndex<r.slidesPerGroupSkip?1:l,r.loop){if(s&&r.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}return r.rewind&&a.isEnd?a.slideTo(0,e,t,i):a.slideTo(a.activeIndex+n,e,t,i)},slidePrev:function(e=this.params.speed,t=!0,i){var a=this,{params:s,animating:n,snapGrid:r,slidesGrid:l,rtlTranslate:o,enabled:d}=a;if(!d)return a;if(s.loop){if(n&&s.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}function c(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const p=c(o?a.translate:-a.translate);d=r.map(e=>c(e));let u=r[d.indexOf(p)-1];if(void 0===u&&s.cssMode){let i;r.forEach((e,t)=>{p>=e&&(i=t)}),void 0!==i&&(u=r[0<i?i-1:i])}let m=0;return void 0!==u&&((m=l.indexOf(u))<0&&(m=a.activeIndex-1),"auto"===s.slidesPerView)&&1===s.slidesPerGroup&&s.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0)),s.rewind&&a.isBeginning?(n=a.params.virtual&&a.params.virtual.enabled&&a.virtual?a.virtual.slides.length-1:a.slides.length-1,a.slideTo(n,e,t,i)):a.slideTo(m,e,t,i)},slideReset:function(e=this.params.speed,t=!0,i){return this.slideTo(this.activeIndex,e,t,i)},slideToClosest:function(e=this.params.speed,t=!0,i,a=.5){var s=this;let n=s.activeIndex;var r,l=(l=Math.min(s.params.slidesPerGroupSkip,n))+Math.floor((n-l)/s.params.slidesPerGroup),o=s.rtlTranslate?s.translate:-s.translate;return o>=s.snapGrid[l]?(r=s.snapGrid[l],(s.snapGrid[l+1]-r)*a<o-r&&(n+=s.params.slidesPerGroup)):o-(r=s.snapGrid[l-1])<=(s.snapGrid[l]-r)*a&&(n-=s.params.slidesPerGroup),n=Math.max(n,0),n=Math.min(n,s.slidesGrid.length-1),s.slideTo(n,e,t,i)},slideToClickedSlide:function(){const e=this;var t,{params:i,$wrapperEl:a}=e,s="auto"===i.slidesPerView?e.slidesPerViewDynamic():i.slidesPerView;let n=e.clickedIndex;i.loop?e.animating||(t=parseInt(S(e.clickedSlide).attr("data-swiper-slide-index"),10),i.centeredSlides?n<e.loopedSlides-s/2||n>e.slides.length-e.loopedSlides+s/2?(e.loopFix(),n=a.children(`.${i.slideClass}[data-swiper-slide-index="${t}"]:not(.${i.slideDuplicateClass})`).eq(0).index(),v(()=>{e.slideTo(n)})):e.slideTo(n):n>e.slides.length-s?(e.loopFix(),n=a.children(`.${i.slideClass}[data-swiper-slide-index="${t}"]:not(.${i.slideDuplicateClass})`).eq(0).index(),v(()=>{e.slideTo(n)})):e.slideTo(n)):e.slideTo(n)}},loop:{loopCreate:function(){var t=this,i=m(),{params:a,$wrapperEl:e}=t,s=0<e.children().length?S(e.children()[0].parentNode):e;s.children(`.${a.slideClass}.`+a.slideDuplicateClass).remove();let n=s.children("."+a.slideClass);if(a.loopFillGroupWithBlank){var r=a.slidesPerGroup-n.length%a.slidesPerGroup;if(r!==a.slidesPerGroup){for(let e=0;e<r;e+=1){var l=S(i.createElement("div")).addClass(a.slideClass+" "+a.slideBlankClass);s.append(l)}n=s.children("."+a.slideClass)}}"auto"!==a.slidesPerView||a.loopedSlides||(a.loopedSlides=n.length),t.loopedSlides=Math.ceil(parseFloat(a.loopedSlides||a.slidesPerView,10)),t.loopedSlides+=a.loopAdditionalSlides,t.loopedSlides>n.length&&t.params.loopedSlidesLimit&&(t.loopedSlides=n.length);var o=[],d=[];n.each((e,t)=>{S(e).attr("data-swiper-slide-index",t)});for(let e=0;e<t.loopedSlides;e+=1){var c=e-Math.floor(e/n.length)*n.length;d.push(n.eq(c)[0]),o.unshift(n.eq(n.length-c-1)[0])}for(let e=0;e<d.length;e+=1)s.append(S(d[e].cloneNode(!0)).addClass(a.slideDuplicateClass));for(let e=o.length-1;0<=e;--e)s.prepend(S(o[e].cloneNode(!0)).addClass(a.slideDuplicateClass))},loopFix:function(){var e=this,{activeIndex:t,slides:i,loopedSlides:a,allowSlidePrev:s,allowSlideNext:n,snapGrid:r,rtlTranslate:l}=(e.emit("beforeLoopFix"),e);let o;e.allowSlidePrev=!0,e.allowSlideNext=!0,r=-r[t]-e.getTranslate(),t<a?(o=i.length-3*a+t,o+=a,e.slideTo(o,0,!1,!0)&&0!=r&&e.setTranslate((l?-e.translate:e.translate)-r)):t>=i.length-a&&(o=-i.length+t+a,o+=a,e.slideTo(o,0,!1,!0))&&0!=r&&e.setTranslate((l?-e.translate:e.translate)-r),e.allowSlidePrev=s,e.allowSlideNext=n,e.emit("loopFix")},loopDestroy:function(){var{$wrapperEl:e,params:t,slides:i}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.`+t.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}},grabCursor:{setGrabCursor:function(e){var t=this;t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode||((t="container"===t.params.touchEventsTarget?t.el:t.wrapperEl).style.cursor="move",t.style.cursor=e?"grabbing":"grab")},unsetGrabCursor:function(){var e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:{attachEvents:function(){var e=this,t=m(),{params:i,support:a}=e;e.onTouchStart=function(e){var a=this,s=m(),n=h(),r=a.touchEventsData,{params:l,touches:o,enabled:d}=a;if(d&&(!a.animating||!l.preventInteractionOnTransition)){!a.animating&&l.cssMode&&l.loop&&a.loopFix();let t=e,i=S((t=t.originalEvent?t.originalEvent:t).target);if(("wrapper"!==l.touchEventsTarget||i.closest(a.wrapperEl).length)&&(r.isTouchEvent="touchstart"===t.type,r.isTouchEvent||!("which"in t)||3!==t.which)&&!(!r.isTouchEvent&&"button"in t&&0<t.button||r.isTouched&&r.isMoved)){var d=!!l.noSwipingClass&&""!==l.noSwipingClass,c=e.composedPath?e.composedPath():e.path,d=(d&&t.target&&t.target.shadowRoot&&c&&(i=S(c[0])),l.noSwipingSelector||"."+l.noSwipingClass),c=!(!t.target||!t.target.shadowRoot);if(l.noSwiping&&(c?K(d,i[0]):i.closest(d)[0]))a.allowClick=!0;else if(!l.swipeHandler||i.closest(l.swipeHandler)[0]){o.currentX=("touchstart"===t.type?t.targetTouches[0]:t).pageX,o.currentY=("touchstart"===t.type?t.targetTouches[0]:t).pageY;var c=o.currentX,d=o.currentY,p=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,u=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(p&&(c<=u||c>=n.innerWidth-u)){if("prevent"!==p)return;e.preventDefault()}if(Object.assign(r,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=c,o.startY=d,r.touchStartTime=y(),a.allowClick=!0,a.updateSize(),a.swipeDirection=void 0,0<l.threshold&&(r.allowThresholdMove=!1),"touchstart"!==t.type){let e=!0;i.is(r.focusableElements)&&(e=!1,"SELECT"===i[0].nodeName)&&(r.isTouched=!1),s.activeElement&&S(s.activeElement).is(r.focusableElements)&&s.activeElement!==i[0]&&s.activeElement.blur();n=e&&a.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!n||i[0].isContentEditable||t.preventDefault()}a.params.freeMode&&a.params.freeMode.enabled&&a.freeMode&&a.animating&&!l.cssMode&&a.freeMode.onTouchStart(),a.emit("touchStart",t)}}}}.bind(e),e.onTouchMove=function(e){var s=m(),n=this,r=n.touchEventsData,{params:l,touches:o,rtlTranslate:d,enabled:t}=n;if(t){let a=e;if(a.originalEvent&&(a=a.originalEvent),r.isTouched){if(!r.isTouchEvent||"touchmove"===a.type){t="touchmove"===a.type&&a.targetTouches&&(a.targetTouches[0]||a.changedTouches[0]),e=("touchmove"===a.type?t:a).pageX,t=("touchmove"===a.type?t:a).pageY;if(a.preventedByNestedSwiper)o.startX=e,o.startY=t;else if(n.allowTouchMove){if(r.isTouchEvent&&l.touchReleaseOnEdges&&!l.loop)if(n.isVertical()){if(t<o.startY&&n.translate<=n.maxTranslate()||t>o.startY&&n.translate>=n.minTranslate())return r.isTouched=!1,void(r.isMoved=!1)}else if(e<o.startX&&n.translate<=n.maxTranslate()||e>o.startX&&n.translate>=n.minTranslate())return;if(r.isTouchEvent&&s.activeElement&&a.target===s.activeElement&&S(a.target).is(r.focusableElements))r.isMoved=!0,n.allowClick=!1;else if(r.allowTouchCallbacks&&n.emit("touchMove",a),!(a.targetTouches&&1<a.targetTouches.length)){o.currentX=e,o.currentY=t;var i,s=o.currentX-o.startX,c=o.currentY-o.startY;if(!(n.params.threshold&&Math.sqrt(s**2+c**2)<n.params.threshold))if(void 0===r.isScrolling&&(n.isHorizontal()&&o.currentY===o.startY||n.isVertical()&&o.currentX===o.startX?r.isScrolling=!1:25<=s*s+c*c&&(i=180*Math.atan2(Math.abs(c),Math.abs(s))/Math.PI,r.isScrolling=n.isHorizontal()?i>l.touchAngle:90-i>l.touchAngle)),r.isScrolling&&n.emit("touchMoveOpposite",a),void 0!==r.startMoving||o.currentX===o.startX&&o.currentY===o.startY||(r.startMoving=!0),r.isScrolling)r.isTouched=!1;else if(r.startMoving){n.allowClick=!1,!l.cssMode&&a.cancelable&&a.preventDefault(),l.touchMoveStopPropagation&&!l.nested&&a.stopPropagation(),r.isMoved||(l.loop&&!l.cssMode&&n.loopFix(),r.startTranslate=n.getTranslate(),n.setTransition(0),n.animating&&n.$wrapperEl.trigger("webkitTransitionEnd transitionend"),r.allowMomentumBounce
96=!1,!l.grabCursor||!0!==n.allowSlideNext&&!0!==n.allowSlidePrev||n.setGrabCursor(!0),n.emit("sliderFirstMove",a)),n.emit("sliderMove",a),r.isMoved=!0;let e=n.isHorizontal()?s:c,t=(o.diff=e,e*=l.touchRatio,d&&(e=-e),n.swipeDirection=0<e?"prev":"next",r.currentTranslate=e+r.startTranslate,!0),i=l.resistanceRatio;if(l.touchReleaseOnEdges&&(i=0),0<e&&r.currentTranslate>n.minTranslate()?(t=!1,l.resistance&&(r.currentTranslate=n.minTranslate()-1+(-n.minTranslate()+r.startTranslate+e)**i)):e<0&&r.currentTranslate<n.maxTranslate()&&(t=!1,l.resistance)&&(r.currentTranslate=n.maxTranslate()+1-(n.maxTranslate()-r.startTranslate-e)**i),t&&(a.preventedByNestedSwiper=!0),!n.allowSlideNext&&"next"===n.swipeDirection&&r.currentTranslate<r.startTranslate&&(r.currentTranslate=r.startTranslate),!n.allowSlidePrev&&"prev"===n.swipeDirection&&r.currentTranslate>r.startTranslate&&(r.currentTranslate=r.startTranslate),n.allowSlidePrev||n.allowSlideNext||(r.currentTranslate=r.startTranslate),0<l.threshold){if(!(Math.abs(e)>l.threshold||r.allowThresholdMove))return void(r.currentTranslate=r.startTranslate);
96if(!r.allowThresholdMove)return r.allowThresholdMove=!0,o.startX=o.currentX,o.startY=o.currentY,r.currentTranslate=r.startTranslate,void(o.diff=n.isHorizontal()?o.currentX-o.startX:o.currentY-o.startY)}l.followFinger&&!l.cssMode&&((l.freeMode&&l.freeMode.enabled&&n.freeMode||l.watchSlidesProgress)&&(n.updateActiveIndex(),n.updateSlidesClasses()),n.params.freeMode&&l.freeMode.enabled&&n.freeMode&&n.freeMode.onTouchMove(),n.updateProgress(r.currentTranslate),n.setTranslate(r.currentTranslate))}}}else S(a.target).is(r.focusableElements)||(n.allowClick=!1),r.isTouched&&(Object.assign(o,{startX:e,startY:t,currentX:e,currentY:t}),r.touchStartTime=y())}}else r.startMoving&&r.isScrolling&&n.emit("touchMoveOpposite",a)}}.bind(e),e.onTouchEnd=function(r){const l=this;var e=l.touchEventsData,{params:o,touches:t,rtlTranslate:i,slidesGrid:d,enabled:a}=l;if(a){let n=r;if(n.originalEvent&&(n=n.originalEvent),e.allowTouchCallbacks&&l.emit("touchEnd",n),e.allowTouchCallbacks=!1,e.isTouched){o.grabCursor&&e.isMoved&&e.isTouched&&(!0===l.allowSlideNext||!0===l.allowSlidePrev)&&l.setGrabCursor(!1);a=y(),r=a-e.touchStartTime;if(l.allowClick&&(c=n.path||n.composedPath&&n.composedPath(),l.updateClickedSlide(c&&c[0]||n.target),l.emit("tap click",n),r<300)&&a-e.lastClickTime<300&&l.emit("doubleTap doubleClick",n),e.lastClickTime=y(),v(()=>{l.destroyed||(l.allowClick=!0)}),e.isTouched&&e.isMoved&&l.swipeDirection&&0!==t.diff&&e.currentTranslate!==e.startTranslate){e.isTouched=!1,e.isMoved=!1,e.startMoving=!1;let s;if(s=o.followFinger?i?l.translate:-l.translate:-e.currentTranslate,!o.cssMode)if(l.params.freeMode&&o.freeMode.enabled)l.freeMode.onTouchEnd({currentPos:s});else{let t=0,i=l.slidesSizesGrid[0];for(let e=0;e<d.length;e+=e<o.slidesPerGroupSkip?1:o.slidesPerGroup){const p=e<o.slidesPerGroupSkip-1?1:o.slidesPerGroup;void 0!==d[e+p]?s>=d[e]&&s<d[e+p]&&(t=e,i=d[e+p]-d[e]):s>=d[e]&&(t=e,i=d[d.length-1]-d[d.length-2])}let e=null,a=null;o.rewind&&(l.isBeginning?a=l.params.virtual&&l.params.virtual.enabled&&l.virtual?l.virtual.slides.length-1:l.slides.length-1:l.isEnd&&(e=0));var c=(s-d[t])/i;const p=t<o.slidesPerGroupSkip-1?1:o.slidesPerGroup;r>o.longSwipesMs?o.longSwipes?("next"===l.swipeDirection&&(c>=o.longSwipesRatio?l.slideTo(o.rewind&&l.isEnd?e:t+p):l.slideTo(t)),"prev"===l.swipeDirection&&(c>1-o.longSwipesRatio?l.slideTo(t+p):null!==a&&c<0&&Math.abs(c)>o.longSwipesRatio?l.slideTo(a):l.slideTo(t))):l.slideTo(l.activeIndex):o.shortSwipes?l.navigation&&(n.target===l.navigation.nextEl||n.target===l.navigation.prevEl)?n.target===l.navigation.nextEl?l.slideTo(t+p):l.slideTo(t):("next"===l.swipeDirection&&l.slideTo(null!==e?e:t+p),"prev"===l.swipeDirection&&l.slideTo(null!==a?a:t)):l.slideTo(l.activeIndex)}}else e.isTouched=!1,e.isMoved=!1,e.startMoving=!1}else e.isMoved&&o.grabCursor&&l.setGrabCursor(!1),e.isMoved=!1,e.startMoving=!1}}.bind(e),i.cssMode&&(e.onScroll=function(){var t=this,{wrapperEl:i,rtlTranslate:a,enabled:s}=t;if(s){t.previousTranslate=t.translate,t.isHorizontal()?t.translate=-i.scrollLeft:t.translate=-i.scrollTop,0===t.translate&&(t.translate=0),t.updateActiveIndex(),t.updateSlidesClasses();let e;s=t.maxTranslate()-t.minTranslate();(e=0==s?0:(t.translate-t.minTranslate())/s)!==t.progress&&t.updateProgress(a?-t.translate:t.translate),t.emit("setTranslate",t.translate,!1)}}.bind(e)),e.onClick=function(e){var t=this;t.enabled&&!t.allowClick&&(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation)&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())}.bind(e),a.touch&&!J&&(t.addEventListener("touchstart",ee),J=!0),te(e,"on")},detachEvents:function(){te(this,"off")}},breakpoints:{setBreakpoint:function(){const a=this,{activeIndex:e,initialized:t,loopedSlides:i=0,params:s,$el:n}=a;if((l=s.breakpoints)&&0!==Object.keys(l).length){var r=a.getBreakpoint(l,a.params.breakpointsBase,a.el);if(r&&a.currentBreakpoint!==r){const c=(r in l?l[r]:void 0)||a.originalParams;var l=ie(a,s),o=ie(a,c),d=s.enabled,l=(l&&!o?(n.removeClass(`${s.containerModifierClass}grid ${s.containerModifierClass}grid-column`),a.emitContainerClasses()):!l&&o&&(n.addClass(s.containerModifierClass+"grid"),(c.grid.fill&&"column"===c.grid.fill||!c.grid.fill&&"column"===s.grid.fill)&&n.addClass(s.containerModifierClass+"grid-column"),a.emitContainerClasses()),["navigation","pagination","scrollbar"].forEach(e
96=>{var t=s[e]&&s[e].enabled,i=c[e]&&c[e].enabled;t&&!i&&a[e].disable(),!t&&i&&a[e].enable()}),c.direction&&c.direction!==s.direction),o=s.loop&&(c.slidesPerView!==s.slidesPerView||l),l=(l&&t&&a.changeDirection(),p(a.params,c),a.params.enabled);Object.assign(a,{allowTouchMove:a.params.allowTouchMove,allowSlideNext:a.params.allowSlideNext,allowSlidePrev:a.params.allowSlidePrev}),d&&!l?a.disable():!d&&l&&a.enable(),a.currentBreakpoint=r,a.emit("_beforeBreakpoint",c),o&&t&&(a.loopDestroy(),a.loopCreate(),a.updateSlides(),a.slideTo(e-i+a.loopedSlides,0,!1)),a.emit("breakpoint",c)}}},getBreakpoint:function(e,i="window",a){if(e&&("container"!==i||a)){let t=!1;var s=h();const o="window"===i?s.innerHeight:a.clientHeight;var n=Object.keys(e).map(e=>{var t;return"string"==typeof e&&0===e.indexOf("@")?(t=parseFloat(e.substr(1)),{value:o*t,point:e}):{value:e,point:e}});n.sort((e,t)=>parseInt(e.value,10)-parseInt(t.value,10));for(let e=0;e<n.length;e+=1){var{point:r,value:l}=n[e];"window"===i?s.matchMedia(`(min-width: ${l}px)`).matches&&(t=r):l<=a.clientWidth&&(t=r)}return t||"max"}}},checkOverflow:{checkOverflow:function(){var e,t=this,{isLocked:i,params:a}=t,s=a["slidesOffsetBefore"];s?(e=t.slides.length-1,e=t.slidesGrid[e]+t.slidesSizesGrid[e]+2*s,t.isLocked=t.size>e):t.isLocked=1===t.snapGrid.length,!0===a.allowSlideNext&&(t.allowSlideNext=!t.isLocked),!0===a.allowSlidePrev&&(t.allowSlidePrev=!t.isLocked),i&&i!==t.isLocked&&(t.isEnd=!1),i!==t.isLocked&&t.emit(t.isLocked?"lock":"unlock")}},classes:{addClasses:function(){var{classNames:e,params:t,rtl:i,$el:a,device:s,support:n}=this,n=function(e,i){const a=[];return e.forEach(t=>{"object"==typeof t?Object.keys(t).forEach(e=>{t[e]&&a.push(i+e)}):"string"==typeof t&&a.push(i+t)}),a}(["initialized",t.direction,{"pointer-events":!n.touch},{"free-mode":this.params.freeMode&&t.freeMode.enabled},{autoheight:t.autoHeight},{rtl:i},{grid:t.grid&&1<t.grid.rows},{"grid-column":t.grid&&1<t.grid.rows&&"column"===t.grid.fill},{android:s.android},{ios:s.ios},{"css-mode":t.cssMode},{centered:t.cssMode&&t.centeredSlides},{"watch-progress":t.watchSlidesProgress}],t.containerModifierClass);e.push(...n),a.addClass([...e].join(" ")),this.emitContainerClasses()},removeClasses:function(){var{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}},images:{loadImage:function(e,t,i,a,s,n){var r=h();function l(){n&&n()}!(S(e).parent("picture")[0]||e.complete&&s)&&t?((e=new r.Image).onload=l,e.onerror=l,a&&(e.sizes=a),i&&(e.srcset=i),t&&(e.src=t)):l()},preloadImages:function(){const t=this;function i(){void 0!==t&&null!==t&&t&&!t.destroyed&&(void 0!==t.imagesLoaded&&(t.imagesLoaded+=1),t.imagesLoaded===t.imagesToLoad.length)&&(t.params.updateOnImagesReady&&t.update(),t.emit("imagesReady"))}t.imagesToLoad=t.$el.find("img");for(let e=0;e<t.imagesToLoad.length;e+=1){var a=t.imagesToLoad[e];t.loadImage(a,a.currentSrc||a.getAttribute("src"),a.srcset||a.getAttribute("srcset"),a.sizes||a.getAttribute("sizes"),!0,i)}}}},o={};class c{constructor(...e){let t,i;if(1===e.length&&e[0].constructor&&"Object"===Object.prototype.toString.call(e[0]).slice(8,-1)?i=e[0]:[t,i]=e,i=p({},i=i||{}),t&&!i.el&&(i.el=t),i.el&&1<S(i.el).length){const s=[];return S(i.el).each(e=>{e=p({},i,{el:e});s.push(new c(e))}),s}const n=this,r=(n.__swiper__=!0,n.support=V(),n.device=X({userAgent:i.userAgent}),n.browser=U(),n.eventsListeners={},n.eventsAnyListeners=[],n.modules=[...n.__modules__],i.modules&&Array.isArray(i.modules)&&n.modules.push(...i.modules),{});n.modules.forEach(e=>{var a,s;e({swiper:n,extendParams:(a=i,s=r,function(e={}){var t=Object.keys(e)[0],i=e[t];"object"==typeof i&&null!==i&&(0<=["navigation","pagination","scrollbar"].indexOf(t)&&!0===a[t]&&(a[t]={auto:!0}),t in a&&"enabled"in i)&&(!0===a[t]&&(a[t]={enabled:!0}),"object"!=typeof a[t]||"enabled"in a[t]||(a[t].enabled=!0),a[t]||(a[t]={enabled:!1})),p(s,e)}),on:n.on.bind(n),once:n.once.bind(n),off:n.off.bind(n),emit:n.emit.bind(n)})});var a,e=p({},ae,r);return n.params=p({},e,o,i),n.originalParams=p({},n.params),n.passedParams=p({}
96,i),n.params&&n.params.on&&Object.keys(n.params.on).forEach(e=>{n.on(e,n.params.on[e])}),n.params&&n.params.onAny&&n.onAny(n.params.onAny),n.$=S,Object.assign(n,{enabled:n.params.enabled,el:t,classNames:[],slides:S(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal(){return"horizontal"===n.params.direction},isVertical(){return"vertical"===n.params.direction},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:n.params.allowSlideNext,allowSlidePrev:n.params.allowSlidePrev,touchEvents:(e=["touchstart","touchmove","touchend","touchcancel"],a=["pointerdown","pointermove","pointerup"],n.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},n.touchEventsDesktop={start:a[0],move:a[1],end:a[2]},n.support.touch||!n.params.simulateTouch?n.touchEventsTouch:n.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:n.params.focusableElements,lastClickTime:y(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:n.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),n.emit("_swiper"),n.params.init&&n.init(),n}enable(){var e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){var e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){var i=this,a=(e=Math.min(Math.max(e,0),1),i.minTranslate()),s=i.maxTranslate();i.translateTo((s-a)*e+a,void 0===t?0:t),i.updateActiveIndex(),i.updateSlidesClasses()}emitContainerClasses(){const t=this;var e;t.params._emitClasses&&t.el&&(e=t.el.className.split(" ").filter(e=>0===e.indexOf("swiper")||0===e.indexOf(t.params.containerModifierClass)),t.emit("_containerClasses",e.join(" ")))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter(e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass)).join(" ")}emitSlidesClasses(){const i=this;if(i.params._emitClasses&&i.el){const a=[];i.slides.each(e=>{var t=i.getSlideClasses(e);a.push({slideEl:e,classNames:t}),i.emit("_slideClass",e,t)}),i.emit("_slideClasses",a)}}slidesPerViewDynamic(e="current",t=!1){var{params:i,slides:a,slidesGrid:s,slidesSizesGrid:n,size:r,activeIndex:l}=this;let o=1;if(i.centeredSlides){let t=a[l].swiperSlideSize,i;for(let e=l+1;e<a.length;e+=1)a[e]&&!i&&(t+=a[e].swiperSlideSize,o+=1,t>r)&&(i=!0);for(let e=l-1;0<=e;--e)a[e]&&!i&&(t+=a[e].swiperSlideSize,o+=1,t>r)&&(i=!0)}else if("current"===e)for(let e=l+1;e<a.length;e+=1)(t?s[e]+n[e]-s[l]<r:s[e]-s[l]<r)&&(o+=1);else for(let e=l-1;0<=e;--e)s[l]-s[e]<r&&(o+=1);return o}update(){const t=this;if(t&&!t.destroyed){var{snapGrid:i,params:a}=t;a.breakpoints&&t.setBreakpoint(),t.updateSize(),t.updateSlides(),t.updateProgress(),t.updateSlidesClasses();let e;function s(){var e=t.rtlTranslate?-1*t.translate:t.translate,e=Math.min(Math.max(e,t.maxTranslate()),t.minTranslate());t.setTranslate(e),t.updateActiveIndex(),t.updateSlidesClasses()}t.params.freeMode&&t.params.freeMode.enabled?(s(),t.params.autoHeight&&t.updateAutoHeight()):(e=("auto"===t.params.slidesPerView||1<t.params.slidesPerView)&&t.isEnd&&!t.params.centeredSlides?t.slideTo(t.slides.length-1,0,!1,!0):t.slideTo(t.activeIndex,0,!1,!0))||s(),a.watchOverflow&&i!==t.snapGrid&&t.checkOverflow(),t.emit("update")}}changeDirection(t,e=!0){var i=this,a=i.params.direction;return(t=t||("horizontal"===a?"vertical":"horizontal"))===a||"horizontal"!==t&&"vertical"!==t||(i.$el.removeClass(""+i.params.containerModifierClass+a).addClass(""+i.params.containerModifierClass+t),i.emitContainerClasses(),i.params.direction=t,i.slides.each(e=>{"vertical"===t?e.style.width="":e.style.height=""}),i.emit("changeDirection"),e&&i.update()),i}changeLanguageDirection(e){var t=this;t.rtl&&"rtl"===e||!t.rtl&&"ltr"===e||(t.rtl="rtl"===e,t.rtlTranslate="horizontal"===t.params.direction&&t.rtl,t.rtl?(t.$el.addClass(t.params.containerModifierClass+"rtl"),t.el.dir="rtl"):(t.$el.removeClass(t.params.containerModifierClass+"rtl"),t.el.dir="ltr"),t.update(
96))}mount(e){const i=this;if(!i.mounted){const s=S(e||i.params.el);if(!(e=s[0]))return!1;e.swiper=i;const n=()=>"."+(i.params.wrapperClass||"").trim().split(" ").join(".");var a;let t=e&&e.shadowRoot&&e.shadowRoot.querySelector?((a=S(e.shadowRoot.querySelector(n()))).children=e=>s.children(e),a):(s.children?s:S(s)).children(n());0===t.length&&i.params.createElements&&(a=m().createElement("div"),t=S(a),a.className=i.params.wrapperClass,s.append(a),s.children("."+i.params.slideClass).each(e=>{t.append(e)})),Object.assign(i,{$el:s,el:e,$wrapperEl:t,wrapperEl:t[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===i.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===t.css("display")})}return!0}init(e){var t=this;return t.initialized||!1!==t.mount(e)&&(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e=!0,t=!0){const i=this;var{params:a,$el:s,$wrapperEl:n,slides:r}=i;if(void 0!==i.params&&!i.destroyed){if(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),a.loop&&i.loopDestroy(),t&&(i.removeClasses(),s.removeAttr("style"),n.removeAttr("style"),r)&&r.length&&r.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index"),i.emit("destroy"),Object.keys(i.eventsListeners).forEach(e=>{i.off(e)}),!1!==e){i.$el[0].swiper=null;{t=i;const l=t;Object.keys(l).forEach(e=>{try{l[e]=null}catch(e){}try{delete l[e]}catch(e){}})}}i.destroyed=!0}return null}static extendDefaults(e){p(o,e)}static get extendedDefaults(){return o}static get defaults(){return ae}static installModule(e){c.prototype.__modules__||(c.prototype.__modules__=[]);var t=c.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?e.forEach(e=>c.installModule(e)):c.installModule(e),c}}function se(i,a,s,n){const r=m();return i.params.createElements&&Object.keys(n).forEach(t=>{if(!s[t]&&!0===s.auto){let e=i.$el.children("."+n[t])[0];e||((e=r.createElement("div")).className=n[t],i.$el.append(e)),s[t]=e,a[t]=e}}),s}function n({swiper:s,extendParams:e,on:t,emit:n}){function a(e){let t;return t=e&&(t=S(e),s.params.uniqueNavElements)&&"string"==typeof e&&1<t.length&&1===s.$el.find(e).length?s.$el.find(e):t}function i(e,t){var i=s.params.navigation;e&&0<e.length&&(e[t?"addClass":"removeClass"](i.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=t),s.params.watchOverflow)&&s.enabled&&e[s.isLocked?"addClass":"removeClass"](i.lockClass)}function r(){var e,t;s.params.loop||({$nextEl:e,$prevEl:t}=s.navigation,i(t,s.isBeginning&&!s.params.rewind),i(e,s.isEnd&&!s.params.rewind))}function l(e){e.preventDefault(),s.isBeginning&&!s.params.loop&&!s.params.rewind||(s.slidePrev(),n("navigationPrev"))}function o(e){e.preventDefault(),s.isEnd&&!s.params.loop&&!s.params.rewind||(s.slideNext(),n("navigationNext"))}function d(){var e,t,i=s.params.navigation;s.params.navigation=se(s,s.originalParams.navigation,s.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),(i.nextEl||i.prevEl)&&(e=a(i.nextEl),t=a(i.prevEl),e&&0<e.length&&e.on("click",o),t&&0<t.length&&t.on("click",l),Object.assign(s.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}),s.enabled||(e&&e.addClass(i.lockClass),t&&t.addClass(i.lockClass)))}function c(){var{$nextEl:e,$prevEl:t}=s.navigation;e&&e.length&&(e.off("click",o),e.removeClass(s.params.navigation.disabledClass)),t&&t.length&&(t.off("click",l),t.removeClass(s.params.navigation.disabledClass))}e({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),s.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},t("init",()=>{(!1===s.params.navigation.enabled?p:(d(),r))()}),t("toEdge fromEdge lock unlock",()=>{r()}),t("destroy",()=>{c()}),t("enable disable",()=>{var{$nextEl:e,$prevEl:t}=s.navigation;e&&e[s.enabled?"removeClass":"addClass"](s.params.navigation.lockClass),t&&t[
96s.enabled?"removeClass":"addClass"](s.params.navigation.lockClass)}),t("click",(e,t)=>{var{$nextEl:i,$prevEl:a}=s.navigation,t=t.target;if(s.params.navigation.hideOnClick&&!S(t).is(a)&&!S(t).is(i)&&(!(s.pagination&&s.params.pagination&&s.params.pagination.clickable)||s.pagination.el!==t&&!s.pagination.el.contains(t))){let e;i?e=i.hasClass(s.params.navigation.hiddenClass):a&&(e=a.hasClass(s.params.navigation.hiddenClass)),!0===e?n("navigationShow"):n("navigationHide"),i&&i.toggleClass(s.params.navigation.hiddenClass),a&&a.toggleClass(s.params.navigation.hiddenClass)}});const p=()=>{s.$el.addClass(s.params.navigation.navigationDisabledClass),c()};Object.assign(s.navigation,{enable:()=>{s.$el.removeClass(s.params.navigation.navigationDisabledClass),d(),r()},disable:p,update:r,init:d,destroy:c})}function E(e=""){return"."+e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}function r({swiper:p,extendParams:e,on:t,emit:u}){var i="swiper-pagination";e({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:i+"-bullet",bulletActiveClass:i+"-bullet-active",modifierClass:i+"-",currentClass:i+"-current",totalClass:i+"-total",hiddenClass:i+"-hidden",progressbarFillClass:i+"-progressbar-fill",progressbarOppositeClass:i+"-progressbar-opposite",clickableClass:i+"-clickable",lockClass:i+"-lock",horizontalClass:i+"-horizontal",verticalClass:i+"-vertical",paginationDisabledClass:i+"-disabled"}}),p.pagination={el:null,$el:null,bullets:[]};let m,h=0;function f(){return!p.params.pagination.el||!p.pagination.el||!p.pagination.$el||0===p.pagination.$el.length}function g(e,t){var i=p.params.pagination["bulletActiveClass"];e[t]().addClass(i+"-"+t)[t]().addClass(i+`-${t}-`+t)}function a(){var t=p.rtl;const n=p.params.pagination;if(!f()){var r=(p.virtual&&p.params.virtual.enabled?p.virtual:p).slides.length,l=p.pagination.$el;let s;var a=p.params.loop?Math.ceil((r-2*p.loopedSlides)/p.params.slidesPerGroup):p.snapGrid.length;if(p.params.loop?((s=Math.ceil((p.activeIndex-p.loopedSlides)/p.params.slidesPerGroup))>r-1-2*p.loopedSlides&&(s-=r-2*p.loopedSlides),s>a-1&&(s-=a),s<0&&"bullets"!==p.params.paginationType&&(s=a+s)):s=void 0!==p.snapIndex?p.snapIndex:p.activeIndex||0,"bullets"===n.type&&p.pagination.bullets&&0<p.pagination.bullets.length){var o=p.pagination.bullets;let i,a,e;if(n.dynamicBullets&&(m=o.eq(0)[p.isHorizontal()?"outerWidth":"outerHeight"](!0),l.css(p.isHorizontal()?"width":"height",m*(n.dynamicMainBullets+4)+"px"),1<n.dynamicMainBullets&&void 0!==p.previousIndex&&((h+=s-(p.previousIndex-p.loopedSlides||0))>n.dynamicMainBullets-1?h=n.dynamicMainBullets-1:h<0&&(h=0)),i=Math.max(s-h,0),a=i+(Math.min(o.length,n.dynamicMainBullets)-1),e=(a+i)/2),o.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map(e=>""+n.bulletActiveClass+e).join(" ")),1<l.length)o.each(e=>{var e=S(e),t=e.index();t===s&&e.addClass(n.bulletActiveClass),n.dynamicBullets&&(t>=i&&t<=a&&e.addClass(n.bulletActiveClass+"-main"),t===i&&g(e,"prev"),t===a)&&g(e,"next")});else{var r=o.eq(s),d=r.index();if(r.addClass(n.bulletActiveClass),n.dynamicBullets){var r=o.eq(i),c=o.eq(a);for(let e=i;e<=a;e+=1)o.eq(e).addClass(n.bulletActiveClass+"-main");if(p.params.loop)if(d>=o.length){for(let e=n.dynamicMainBullets;0<=e;--e)o.eq(o.length-e).addClass(n.bulletActiveClass+"-main");o.eq(o.length-n.dynamicMainBullets-1).addClass(n.bulletActiveClass+"-prev")}else g(r,"prev"),g(c,"next");else g(r,"prev"),g(c,"next")}}n.dynamicBullets&&(d=Math.min(o.length,n.dynamicMainBullets+4),r=(m*d-m)/2-e*m,c=t?"right":"left",o.css(p.isHorizontal()?c:"top",r+"px"))}if("fraction"===n.type&&(l.find(E(n.currentClass)).text(n.formatFractionCurrent(s+1)),l.find(E(n.totalClass)).text(n.formatFractionTotal(a))),"progressbar"===n.type){let e;e=n.progressbarOpposite?p.isHorizontal()?"vertical":"horizontal":p.isHorizontal()?"horizontal":"vertical";d=(s+1)/a;let t=1,i=1;"horizontal"===e?t=d:i=d,l.find(E(n.progressbarFillClass)).transform(`translate3d(0,
960,0) scaleX(${t}) scaleY(${i})`).transition(p.params.speed)}"custom"===n.type&&n.renderCustom?(l.html(n.renderCustom(p,s+1,a)),u("paginationRender",l[0])):u("paginationUpdate",l[0]),p.params.watchOverflow&&p.enabled&&l[p.isLocked?"addClass":"removeClass"](n.lockClass)}}function s(){var a=p.params.pagination;if(!f()){var e=(p.virtual&&p.params.virtual.enabled?p.virtual:p).slides.length,s=p.pagination.$el;let i="";if("bullets"===a.type){let t=p.params.loop?Math.ceil((e-2*p.loopedSlides)/p.params.slidesPerGroup):p.snapGrid.length;p.params.freeMode&&p.params.freeMode.enabled&&!p.params.loop&&t>e&&(t=e);for(let e=0;e<t;e+=1)a.renderBullet?i+=a.renderBullet.call(p,e,a.bulletClass):i+=`<${a.bulletElement} class="${a.bulletClass}"></${a.bulletElement}>`;s.html(i),p.pagination.bullets=s.find(E(a.bulletClass))}"fraction"===a.type&&(i=a.renderFraction?a.renderFraction.call(p,a.currentClass,a.totalClass):`<span class="${a.currentClass}"></span>`+" / "+`<span class="${a.totalClass}"></span>`,s.html(i)),"progressbar"===a.type&&(i=a.renderProgressbar?a.renderProgressbar.call(p,a.progressbarFillClass):`<span class="${a.progressbarFillClass}"></span>`,s.html(i)),"custom"!==a.type&&u("paginationRender",p.pagination.$el[0])}}function n(){p.params.pagination=se(p,p.originalParams.pagination,p.params.pagination,{el:"swiper-pagination"});var t=p.params.pagination;if(t.el){let e=S(t.el);0===e.length||(p.params.uniqueNavElements&&"string"==typeof t.el&&1<e.length&&1<(e=p.$el.find(t.el)).length&&(e=e.filter(e=>S(e).parents(".swiper")[0]===p.el)),"bullets"===t.type&&t.clickable&&e.addClass(t.clickableClass),e.addClass(t.modifierClass+t.type),e.addClass(p.isHorizontal()?t.horizontalClass:t.verticalClass),"bullets"===t.type&&t.dynamicBullets&&(e.addClass(""+t.modifierClass+t.type+"-dynamic"),h=0,t.dynamicMainBullets<1)&&(t.dynamicMainBullets=1),"progressbar"===t.type&&t.progressbarOpposite&&e.addClass(t.progressbarOppositeClass),t.clickable&&e.on("click",E(t.bulletClass),function(e){e.preventDefault();let t=S(this).index()*p.params.slidesPerGroup;p.params.loop&&(t+=p.loopedSlides),p.slideTo(t)}),Object.assign(p.pagination,{$el:e,el:e[0]}),p.enabled)||e.addClass(t.lockClass)}}function r(){var e,t=p.params.pagination;f()||((e=p.pagination.$el).removeClass(t.hiddenClass),e.removeClass(t.modifierClass+t.type),e.removeClass(p.isHorizontal()?t.horizontalClass:t.verticalClass),p.pagination.bullets&&p.pagination.bullets.removeClass&&p.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&e.off("click",E(t.bulletClass)))}t("init",()=>{(!1===p.params.pagination.enabled?l:(n(),s(),a))()}),t("activeIndexChange",()=>{(p.params.loop||void 0===p.snapIndex)&&a()}),t("snapIndexChange",()=>{p.params.loop||a()}),t("slidesLengthChange",()=>{p.params.loop&&(s(),a())}),t("snapGridLengthChange",()=>{p.params.loop||(s(),a())}),t("destroy",()=>{r()}),t("enable disable",()=>{var e=p.pagination["$el"];e&&e[p.enabled?"removeClass":"addClass"](p.params.pagination.lockClass)}),t("lock unlock",()=>{a()}),t("click",(e,t)=>{var t=t.target,i=p.pagination["$el"];p.params.pagination.el&&p.params.pagination.hideOnClick&&i&&0<i.length&&!S(t).hasClass(p.params.pagination.bulletClass)&&(p.navigation&&(p.navigation.nextEl&&t===p.navigation.nextEl||p.navigation.prevEl&&t===p.navigation.prevEl)||(t=i.hasClass(p.params.pagination.hiddenClass),u(!0===t?"paginationShow":"paginationHide"),i.toggleClass(p.params.pagination.hiddenClass)))});const l=()=>{p.$el.addClass(p.params.pagination.paginationDisabledClass),p.pagination.$el&&p.pagination.$el.addClass(p.params.pagination.paginationDisabledClass),r()};Object.assign(p.pagination,{enable:()=>{p.$el.removeClass(p.params.pagination.paginationDisabledClass),p.pagination.$el&&p.pagination.$el.removeClass(p.params.pagination.paginationDisabledClass),n(),s(),a()},disable:l,render:s,update:a,init:n,destroy:r})}function ne({swiper:r,extendParams:e,on:t}){e({a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",slideLabelMessage:"{{index}} / {{slidesLength}}",containerMessage:null,containerRoleDescriptionMessage:null,itemRoleDescriptionMessage:null,slideRole:"group",id:null}}),r.a11y={clicked:!1};let l=null;function i(e){var t=l;0!==t.length&&(t.html(""),t.html(e))}function a(e){e.attr("tabIndex","0")}function s(e){e.attr("tabIndex","-1")}function n(e,t){e.attr("role",t)}function o(e,t){e.attr("aria-roledescription",t)}function d(e,t){e.attr("aria-label",t)}function c(e){e.attr("aria-disabled",!0)}function p(e){e.attr("aria-disabled",!1)}function u(e){var t;13!==e.keyCode&&32!==e.keyCode||(t=r.params.a11y,e=S(e.target),r.navigation&&r.navigation.$nextEl&&e.is(r.navigation.$nextEl)&&(r.isEnd&&!r.params.loop||r.slideNext(),r.isEnd?i(t.lastSlideMessage):i(t.nextSlideMessage)),r.navigation&&r.navigation.$prevEl&&e.is(r.navigation.$prevEl)&&(r.isBeginning&&!r.params.loop||r.slidePrev(),r.isBeginning?i(t.firstSlideMessage):i(t.prevSlideMessage)),r.pagination&&e.is(E(r.params.pagination.bulletClass))&&e[0].click())}function m(){return r.pagination&&r.pagination.bullets&&r.pagination.bullets.length}function h(){return m()&&r.params.pagination.clickable}const f=(e,t,i)=>
96{a(e),"BUTTON"!==e[0].tagName&&(n(e,"button"),e.on("keydown",u)),d(e,i),e.attr("aria-controls",t)},g=()=>{r.a11y.clicked=!0},v=()=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{r.destroyed||(r.a11y.clicked=!1)})})},y=e=>{var t,i,a;r.a11y.clicked||(t=e.target.closest("."+r.params.slideClass))&&r.slides.includes(t)&&(i=r.slides.indexOf(t)===r.activeIndex,a=r.params.watchSlidesProgress&&r.visibleSlides&&r.visibleSlides.includes(t),i||a||e.sourceCapabilities&&e.sourceCapabilities.firesTouchEvents||(r.isHorizontal()?r.el.scrollLeft=0:r.el.scrollTop=0,r.slideTo(r.slides.indexOf(t),0)))},b=()=>{const i=r.params.a11y,a=(i.itemRoleDescriptionMessage&&o(S(r.slides),i.itemRoleDescriptionMessage),i.slideRole&&n(S(r.slides),i.slideRole),(r.params.loop?r.slides.filter(e=>!e.classList.contains(r.params.slideDuplicateClass)):r.slides).length);i.slideLabelMessage&&r.slides.each((e,t)=>{e=S(e),t=r.params.loop?parseInt(e.attr("data-swiper-slide-index"),10):t;d(e,i.slideLabelMessage.replace(/\{\{index\}\}/,t+1).replace(/\{\{slidesLength\}\}/,a))})},w=()=>{var e=r.params.a11y,t=(r.$el.append(l),r.$el),t=(e.containerRoleDescriptionMessage&&o(t,e.containerRoleDescriptionMessage),e.containerMessage&&d(t,e.containerMessage),r.$wrapperEl),i=e.id||t.attr("id")||"swiper-wrapper-"+"x".repeat(16).replace(/x/g,()=>Math.round(16*Math.random()).toString(16)),a=r.params.autoplay&&r.params.autoplay.enabled?"off":"polite";t.attr("id",i),t.attr("aria-live",a),b();let s,n;r.navigation&&r.navigation.$nextEl&&(s=r.navigation.$nextEl),r.navigation&&r.navigation.$prevEl&&(n=r.navigation.$prevEl),s&&s.length&&f(s,i,e.nextSlideMessage),n&&n.length&&f(n,i,e.prevSlideMessage),h()&&r.pagination.$el.on("keydown",E(r.params.pagination.bulletClass),u),r.$el.on("focus",y,!0),r.$el.on("pointerdown",g,!0),r.$el.on("pointerup",v,!0)};t("beforeInit",()=>{l=S(`<span class="${r.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`)}),t("afterInit",()=>{r.params.a11y.enabled&&w()}),t("slidesLengthChange snapGridLengthChange slidesGridLengthChange",()=>{r.params.a11y.enabled&&b()}),t("fromEdge toEdge afterInit lock unlock",()=>{var e,t;r.params.a11y.enabled&&!r.params.loop&&!r.params.rewind&&r.navigation&&({$nextEl:e,$prevEl:t}=r.navigation,t&&0<t.length&&(r.isBeginning?(c(t),s):(p(t),a))(t),e&&0<e.length)&&(r.isEnd?(c(e),s):(p(e),a))(e)}),t("paginationUpdate",()=>{if(r.params.a11y.enabled){const t=r.params.a11y;m()&&r.pagination.bullets.each(e=>{e=S(e);r.params.pagination.clickable&&(a(e),r.params.pagination.renderBullet||(n(e,"button"),d(e,t.paginationBulletMessage.replace(/\{\{index\}\}/,e.index()+1)))),e.is("."+r.params.pagination.bulletActiveClass)?e.attr("aria-current","true"):e.removeAttr("aria-current")})}}),t("destroy",()=>{if(r.params.a11y.enabled){l&&0<l.length&&l.remove();let e,t;r.navigation&&r.navigation.$nextEl&&(e=r.navigation.$nextEl),r.navigation&&r.navigation.$prevEl&&(t=r.navigation.$prevEl),e&&e.off("keydown",u),t&&t.off("keydown",u),h()&&r.pagination.$el.off("keydown",E(r.params.pagination.bulletClass),u),r.$el.off("focus",y,!0),r.$el.off("pointerdown",g,!0),r.$el.off("pointerup",v,!0)}})}function re({swiper:a,extendParams:e,on:t,emit:i}){let s;function n(){if(a.size){var t=a.slides.eq(a.activeIndex);let e=a.params.autoplay.delay;t.attr("data-swiper-autoplay")&&(e=t.attr("data-swiper-autoplay")||a.params.autoplay.delay),clearTimeout(s),s=v(()=>{let e;a.params.autoplay.reverseDirection?a.params.loop?(a.loopFix(),e=a.slidePrev(a.params.speed,!0,!0),i("autoplay")):a.isBeginning?a.params.autoplay.stopOnLastSlide?l(
96):(e=a.slideTo(a.slides.length-1,a.params.speed,!0,!0),i("autoplay")):(e=a.slidePrev(a.params.speed,!0,!0),i("autoplay")):a.params.loop?(a.loopFix(),e=a.slideNext(a.params.speed,!0,!0),i("autoplay")):a.isEnd?a.params.autoplay.stopOnLastSlide?l():(e=a.slideTo(0,a.params.speed,!0,!0),i("autoplay")):(e=a.slideNext(a.params.speed,!0,!0),i("autoplay")),(a.params.cssMode&&a.autoplay.running||!1===e)&&n()},e)}else a.autoplay.running=!1,a.autoplay.paused=!1}function r(){return void 0===s&&!a.autoplay.running&&(a.autoplay.running=!0,i("autoplayStart"),n(),!0)}function l(){return!!a.autoplay.running&&void 0!==s&&(s&&(clearTimeout(s),s=void 0),a.autoplay.running=!1,i("autoplayStop"),!0)}function o(e){!a.autoplay.running||a.autoplay.paused||(s&&clearTimeout(s),a.autoplay.paused=!0,0!==e&&a.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach(e=>{a.$wrapperEl[0].addEventListener(e,c)}):(a.autoplay.paused=!1,n()))}function d(){var e=m();"hidden"===e.visibilityState&&a.autoplay.running&&o(),"visible"===e.visibilityState&&a.autoplay.paused&&(n(),a.autoplay.paused=!1)}function c(e){a&&!a.destroyed&&a.$wrapperEl&&e.target===a.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach(e=>{a.$wrapperEl[0].removeEventListener(e,c)}),a.autoplay.paused=!1,(a.autoplay.running?n:l)())}function p(){(a.params.autoplay.disableOnInteraction?l:(i("autoplayPause"),o))(),["transitionend","webkitTransitionEnd"].forEach(e=>{a.$wrapperEl[0].removeEventListener(e,c)})}function u(){a.params.autoplay.disableOnInteraction||(a.autoplay.paused=!1,i("autoplayResume"),n())}e({autoplay:{enabled:!(a.autoplay={running:!1,paused:!1}),delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),t("init",()=>{a.params.autoplay.enabled&&(r(),m().addEventListener("visibilitychange",d),a.params.autoplay.pauseOnMouseEnter)&&(a.$el.on("mouseenter",p),a.$el.on("mouseleave",u))}),t("beforeTransitionStart",(e,t,i)=>{a.autoplay.running&&(i||!a.params.autoplay.disableOnInteraction?a.autoplay.pause(t):l())}),t("sliderFirstMove",()=>{a.autoplay.running&&(a.params.autoplay.disableOnInteraction?l:o)()}),t("touchEnd",()=>{a.params.cssMode&&a.autoplay.paused&&!a.params.autoplay.disableOnInteraction&&n()}),t("destroy",()=>{a.$el.off("mouseenter",p),a.$el.off("mouseleave",u),a.autoplay.running&&l(),m().removeEventListener("visibilitychange",d)}),Object.assign(a.autoplay,{pause:o,run:n,start:r,stop:l})}function u({swiper:m,extendParams:e,emit:h,once:f}){e({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(m,{freeMode:{onTouchStart:function(){var e=m.getTranslate();m.setTranslate(e),m.setTransition(0),m.touchEventsData.velocities.length=0,m.freeMode.onTouchEnd({currentPos:m.rtl?m.translate:-m.translate})},onTouchMove:function(){var{touchEventsData:e,touches:t}=m;0===e.velocities.length&&e.velocities.push({position:t[m.isHorizontal()?"startX":"startY"],time:e.touchStartTime}),e.velocities.push({position:t[m.isHorizontal()?"currentX":"currentY"],time:y()})},onTouchEnd:function({currentPos:n}){const{params:r,$wrapperEl:l,rtlTranslate:o,snapGrid:d,touchEventsData:c}=m;var e=y()-c.touchStartTime;if(n<-m.minTranslate())m.slideTo(m.activeIndex);else if(n>-m.maxTranslate())m.slides.length<d.length?m.slideTo(d.length-1):m.slideTo(m.slides.length-1);else{if(r.freeMode.momentum){(!(1<c.velocities.length)||(n=c.velocities.pop(),u=c.velocities.pop(),p=n.position-u.position,u=n.time-u.time,m.velocity=p/u,m.velocity/=2,Math.abs(m.velocity)<r.freeMode.minimumVelocity&&(m.velocity=0),150<u)||300<y()-n.time)&&(m.velocity=0),m.velocity*=r.freeMode.momentumVelocityRatio,c.velocities.length=0;let e=1e3*r.freeMode.momentumRatio;var p=m.velocity*e;let i=m.translate+p,t=(o&&(i=-i),!1),a;var u=20*Math.abs(m.velocity)*r.freeMode.momentumBounceRatio;let s;if(i<m.maxTranslate())r.freeMode.momentumBounce?(i+m.maxTranslate()<-u&&(i=m.maxTranslate()-u),a=m.maxTranslate(),t=!0,c.allowMomentumBounce=!0):i=m.maxTranslate(),r.loop&&r.centeredSlides&&(s=!0);else if(i>m.minTranslate())r.freeMode.momentumBounce?(i-m.minTranslate()>u&&(i=m.minTranslate()+u),a=m.minTranslate(),t=!0,c.allowMomentumBounce
96=!0):i=m.minTranslate(),r.loop&&r.centeredSlides&&(s=!0);else if(r.freeMode.sticky){let t;for(let e=0;e<d.length;e+=1)if(d[e]>-i){t=e;break}i=-(i=Math.abs(d[t]-i)<Math.abs(d[t-1]-i)||"next"===m.swipeDirection?d[t]:d[t-1])}if(s&&f("transitionEnd",()=>{m.loopFix()}),0!==m.velocity)e=o?Math.abs((-i-m.translate)/m.velocity):Math.abs((i-m.translate)/m.velocity),r.freeMode.sticky&&(n=Math.abs((o?-i:i)-m.translate),p=m.slidesSizesGrid[m.activeIndex],e=n<p?r.speed:n<2*p?1.5*r.speed:2.5*r.speed);else if(r.freeMode.sticky)return void m.slideToClosest();r.freeMode.momentumBounce&&t?(m.updateProgress(a),m.setTransition(e),m.setTranslate(i),m.transitionStart(!0,m.swipeDirection),m.animating=!0,l.transitionEnd(()=>{m&&!m.destroyed&&c.allowMomentumBounce&&(h("momentumBounce"),m.setTransition(r.speed),setTimeout(()=>{m.setTranslate(a),l.transitionEnd(()=>{m&&!m.destroyed&&m.transitionEnd()})},0))})):m.velocity?(h("_freeModeNoMomentumRelease"),m.updateProgress(i),m.setTransition(e),m.setTranslate(i),m.transitionStart(!0,m.swipeDirection),m.animating||(m.animating=!0,l.transitionEnd(()=>{m&&!m.destroyed&&m.transitionEnd()}))):m.updateProgress(i),m.updateActiveIndex(),m.updateSlidesClasses()}else{if(r.freeMode.sticky)return void m.slideToClosest();r.freeMode&&h("_freeModeNoMomentumRelease")}(!r.freeMode.momentum||e>=r.longSwipesMs)&&(m.updateProgress(),m.updateActiveIndex(),m.updateSlidesClasses())}}}})}function le(e){const{effect:i,swiper:a,on:t,setTranslate:s,setTransition:n,overwriteParams:r,perspective:l,recreateShadows:o,getEffectParams:d}=e;t("beforeInit",()=>{var e;a.params.effect===i&&(a.classNames.push(""+a.params.containerModifierClass+i),l&&l()&&a.classNames.push(a.params.containerModifierClass+"3d"),e=r?r():{},Object.assign(a.params,e),Object.assign(a.originalParams,e))}),t("setTranslate",()=>{a.params.effect===i&&s()}),t("setTransition",(e,t)=>{a.params.effect===i&&n(t)}),t("transitionEnd",()=>{a.params.effect===i&&o&&d&&d().slideShadows&&(a.slides.each(e=>{a.$(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").remove()}),o())});let c;t("virtualUpdate",()=>{a.params.effect===i&&(a.slides.length||(c=!0),requestAnimationFrame(()=>{c&&a.slides&&a.slides.length&&(s(),c=!1)}))})}function oe(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function de({swiper:i,duration:e,transformEl:a,allSlides:s}){const{slides:n,activeIndex:r,$wrapperEl:l}=i;if(i.params.virtualTranslate&&0!==e){let e=!1,t;(t=s?a?n.find(a):n:a?n.eq(r).find(a):n.eq(r)).transitionEnd(()=>{if(!e&&i&&!i.destroyed){e=!0,i.animating=!1;var t=["webkitTransitionEnd","transitionend"];for(let e=0;e<t.length;e+=1)l.trigger(t[e])}})}}function ce({swiper:r,extendParams:e,on:t}){e({fadeEffect:{crossFade:!1,transformEl:null}});le({effect:"fade",swiper:r,on:t,setTranslate:()=>{var e=r["slides"],a=r.params.fadeEffect;for(let i=0;i<e.length;i+=1){var s=r.slides.eq(i);let e=-s[0].swiperSlideOffset,t=(r.params.virtualTranslate||(e-=r.translate),0);r.isHorizontal()||(t=e,e=0);var n=r.params.fadeEffect.crossFade?Math.max(1-Math.abs(s[0].progress),0):1+Math.min(Math.max(s[0].progress,-1),0);oe(a,s).css({opacity:n}).transform(`translate3d(${e}px, ${t}px, 0px)`)}},setTransition:e=>{var t=r.params.fadeEffect["transformEl"];(t?r.slides.find(t):r.slides).transition(e),de({swiper:r,duration:e,transformEl:t,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!r.params.cssMode})})}function pe({swiper:b,extendParams:e,on:t}){e({cardsEffect:{slideShadows:!0,transformEl:null,rotate:!0,perSlideRotate:2,perSlideOffset:8}});le({effect:"cards",swiper:b,on:t,setTranslate:()=>{var{slides:l,activeIndex:o}=b,d=b.params.cardsEffect,{startTranslate:c,isTouched:p}=b.touchEventsData,u=b.translate;for(let r=0;r<l.length;r+=1){var m=l.eq(r),h=m[0].progress,f=Math.min(Math.max(h,-4),4);let e=m[0].swiperSlideOffset,t=(b.params.centeredSlides&&!b.params.cssMode&&b.$wrapperEl.transform(`translateX(${b.minTranslate()}px)`),b.params.centeredSlides&&b.params.cssMode&&(e-=l[0].swiperSlideOffset),b.params.cssMode?-e-b.translate:-e),i=0;var g=-100*Math.abs(f);let a=1,s=-d.perSlideRotate*f,n=d.perSlideOffset-.75*Math.abs(f);var v=b.virtual&&b.params.virtual.enabled?b.virtual.from+r:r,y=(v===o||v===o-1)&&0<f&&f<1&&(p||b.params.cssMode)&&u<c,v=(v===o||v===o+1)&&f<0&&-1<f&&(p||b.params.cssMode)&&c<u,y=((y||v)&&(y=(1-Math.abs((Math.abs(f)-.5)/.5))**.5,s+=-28*f*y,a+=-.5*y,n+=96*y,i=-25*y*Math.abs(f)+"%"),f<0?t=`calc(${t}px + (${n*Math.abs(f)}%))`:0<f?t=`calc(${t}px + (-${n*Math.abs(f)}%))`:t+="px",b.isHorizontal()||(v=i,i=t,t=v),f<0?""+(1+(1-a)*f):""+(1-(1-a)*f)),v=` 97 translate3d(${t}, ${i}, ${g}px) 98 rotateZ(${d.rotate?s:0}deg) 99 scale(${y}) 100 `;if(d.slideShadows){let e=m.find(".swiper-slide-shadow");(e=0===e.length?function(e,t,i){var a="swiper-slide-shadow"+(i?"-"+i:"");let s=(e=e.transformEl?t.find(e.transformEl):t).children("."+a);return s.length||(s=S(`<div class="swiper-slide-shadow${i?"-"+i:""}"></div>`),e.append(s)),s}(d,m):e).length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(f)-.5)/.5,0),1))}m[0].style.zIndex=-Math.abs(Math.round(h))+l.length,oe(d,m).transform(v)}},setTransition:e=>{var t=b.params.cardsEffect["transformEl"];(t?b.slides.find(t):b.slides).transition(e).find(".swiper-slide-shadow").transition(e),de({swiper:b,duration:e,transformEl:t})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!b.params.cssMode})})}
100Object.keys(i).forEach(t=>{Object.keys(i[t]).forEach(e=>{c.prototype[e]=i[t][e]})}),c.use([function({swiper:n,on:e,emit:t}){const a=h();let i=null,s=null;const r=()=>{n&&!n.destroyed&&n.initialized&&(t("beforeResize"),t("resize"))},l=()=>{n&&!n.destroyed&&n.initialized&&t("orientationchange")};e("init",()=>{n.params.resizeObserver&&void 0!==a.ResizeObserver?n&&!n.destroyed&&n.initialized&&(i=new ResizeObserver(i=>{s=a.requestAnimationFrame(()=>{var{width:e,height:t}=n;let a=e,s=t;i.forEach(({contentBoxSize:e,contentRect:t,target:i})=>{i&&i!==n.el||(a=t?t.width:(e[0]||e).inlineSize,s=t?t.height:(e[0]||e).blockSize)}),a===e&&s===t||r()})})).observe(n.el):(a.addEventListener("resize",r),a.addEventListener("orientationchange",l))}),e("destroy",()=>{s&&a.cancelAnimationFrame(s),i&&i.unobserve&&n.el&&(i.unobserve(n.el),i=null),a.removeEventListener("resize",r),a.removeEventListener("orientationchange",l)})},function({swiper:e,extendParams:t,on:i,emit:a}){const s=[],n=h(),r=(e,t={})=>{var i=new(n.MutationObserver||n.WebkitMutationObserver)(e=>{var t;1===e.length?a("observerUpdate",e[0]):(t=function(){a("observerUpdate",e[0])},n.requestAnimationFrame?n.requestAnimationFrame(t):n.setTimeout(t,0))});i.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),s.push(i)};t({observer:!1,observeParents:!1,observeSlideChildren:!1}),i("init",()=>{if(e.params.observer){if(e.params.observeParents){var t=e.$el.parents();for(let e=0;e<t.length;e+=1)r(t[e])}r(e.$el[0],{childList:e.params.observeSlideChildren}),r(e.$wrapperEl[0],{attributes:!1})}}),i("destroy",()=>{s.forEach(e=>{e.disconnect()}),s.splice(0,s.length)})}]);function ue(){var e=document.documentElement.clientWidth;document.documentElement.style.setProperty("--client-vw",e+"px")}if(jQuery.event.special.touchstart={setup:function(e,t,i){this.addEventListener("touchstart",i,{passive:!t.includes("noPreventDefault")})}},jQuery.event.special.touchmove={setup:function(e,t,i){this.addEventListener("touchmove",i,{passive:!t.includes("noPreventDefault")})}},jQuery.event.special.wheel={setup:function(e,t,i){this.addEventListener("wheel",i,{passive:!0})}},jQuery.event.special.mousewheel={setup:function(e,t,i){this.addEventListener("mousewheel",i,{passive:!0})}},ue(),window.addEventListener("resize",ue),(()=>{const s=document.querySelector(".global-search");if(!s)return;const e=document.querySelector("#header"),n=document.querySelector(".toolbar");var t=document.querySelector(".toolbar__search-button");const i=document.querySelector(".toolbar__navigation"),a=document.querySelector(".main-menu__wrap");var r=document.querySelectorAll(".global-search a[href], .global-search button, .global-search a[href], .global-search button, .global-search input");const l=r[0],o=r[r.length-1],d=document.querySelector(".quicklinks"),c=e=>{s.contains(e.target)||h()},p=()=>{h()},u=e=>{"Escape"===e.key?h():e.shiftKey&&"Tab"===e.key?document.activeElement===l&&(o.focus(),e.preventDefault()):"Tab"===e.key&&document.activeElement===o&&(l.focus(),e.preventDefault())},m=()=>{f(i),g(s),setTimeout(()=>{if(d){var[t,i=500]=[d];t.style.removeProperty("display");let e=window.getComputedStyle(t).display;"none"===e&&(e="block"),t.style.display=e;var a=t.offsetHeight;t.style.overflow="hidden",t.style.height=0,t.style.paddingTop=0,t.style.paddingBottom=0,t.style.marginTop=0,t.style.marginBottom=0,t.style.borderTopWidth=0,t.style.borderBottomWidth=0,t.offsetHeight,t.style.boxSizing="border-box",t.style.transitionProperty="height, margin, padding, border-width",t.style.transitionDuration=i+"ms",t.style.height=a+"px",t.style.removeProperty("padding-top"),t.style.removeProperty("padding-bottom"),t.style.removeProperty("margin-top"),t.style.removeProperty("margin-bottom"),t.style.removeProperty("border-top-width"),t.style.removeProperty("border-bottom-width"),window.setTimeout(()=>{t.style.removeProperty("height"),t.style.removeProperty("overflow"),t.style.removeProperty("transition-duration"),t.style.removeProperty("transition-property")},i)}s.querySelector("#global-search-input").focus(),n.classList.add("toolbar--search--open"),window.addEventListener("click",c),window.addEventListener("resize",p),window.addEventListener("keydown",u)},100)},h=()=>{var e,t;d&&(e=d,t=500,e.style.transitionProperty="height, margin, padding, border-width",e.style.transitionDuration=t+"ms",e.style.boxSizing="border-box",e.style.height=e.offsetHeight+"px",e.offsetHeight,e.style.overflow="hidden",e.style.height=0,e.style.paddingTop=0,e.style.paddingBottom=0,e.style.marginTop=0,e.style.marginBottom=0,e.style.borderTopWidth=0,e.style.borderBottomWidth=0,window.setTimeout(()=>{e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("border-top-width"),e.style.removeProperty("border-bottom-width"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")},t)),window.removeEventListener("click",c),window.removeEventListener("resize",p),window.removeEventListener("keydown",u),setTimeout(()=>{g(i,"flex"),f(s),n.classList.remove("toolbar--search--open")},100)};t.addEventListener("click",e=>{m()}),s.querySelector(".global-search__close").addEventListener("click",e=>{e.preventDefault(),h()});r=()=>{window.matchMedia("(min-width: 993px)").matches?(e.appendChild(s),s.style.display="none"):(a.appendChild(s),s.style.display="block")};r(),window.addEventListener("resize",r)})(),(()=>{const e=document.querySelector(".main-menu");if(!e)return;const t=document.querySelector(".toolbar"),i=document.querySelector(".toolbar__search-button"),a=document.querySelector(".toolbar__nav-search-button"),s=a.title,n=a.getAttribute("data-title-close"),r=document.querySelector(".toolbar__donate-btn"),l=document.querySelector(".main-menu__wrap");var o=document.querySelectorAll(".toolbar a[href], .toolbar button, .main-menu__wrap a[href], .main-menu__wrap button, .main-menu__wrap input");const d=o[0],c=o[o.length-1],p=e=>{l.contains(e.target)||h()},u=()=>{h()},m=e=>{"Escape"===e.key?h():e.shiftKey&&"Tab"===e.key?document.activeElement===d&&(c.focus(),e.preventDefault()):"Tab"===e.key&&document.activeElement===c&&(d.focus(),e.preventDefault())},h=()=>{a.classList.remove("toolbar__nav-search-button--open"),a.title=s,t.classList.remove("toolbar--menu--open"),r&&g(r),l.classList.remove("main-menu__wrap--open"),l.addEventListener("transitionend",function(e){l.style.display="none"},{once:!0}),document.body.classList.remove("prevent-scroll"),window.removeEventListener("click",p),window.removeEventListener("resize",u),window.removeEventListener("keydown",m)};a.addEventListener("click",e=>{e.stopPropagation(),a.classList.contains("toolbar__nav-search-button--open")?h():(a.classList.add("toolbar__nav-search-button--open"),a.title=n,t.classList.add("toolbar--menu--open"),r&&f(r),l.style.display="block",setTimeout(function(){l.classList.add("main-menu__wrap--open")},20),document.body.classList.add("prevent-scroll"),window.addEventListener("click",p),window.addEventListener("resize",u),window.addEventListener("keydown",m))});o=()=>{window.matchMedia("(min-width: 993px)").matches?i.before(e):l.appendChild(e)};o(),window.addEventListener("resize",o)})(),(()=>{if(!document.querySelector(".sub-menu__bar"))return;const t=document.querySelector(".toolbar__wrap"),i=document.querySelector(".sub-menu__topic-button"),a=document.querySelector(".sub-menu__nav-wrap"),s=document.querySelector(".sub-menu__nav");var e=document.querySelectorAll(".sub-menu__button--next"),n=document.querySelectorAll(".sub-menu__button--back"),r=document.querySelector(".sub-menu__list-wrap > .sub-menu__list"),l=document.querySelector(".sub-menu__link--current")||document.querySelector(".sub-menu__link--active");const o=()=>{var e=document.querySelectorAll(".sub-menu__nav-wrap a[href], .sub-menu__nav-wrap button"),e=[].slice.call(e).filter(e=>0<e.offsetWidth||0<e.offsetHeight||0<e.getClientRects().length);return{firstFocusableEl:e[0],lastFocusableEl:e[e.length-1]}},d=e=>{e.style.display="block",(e=>{for(var t=[];e.parentNode&&"body"!==e.parentNode.nodeName.toLowerCase();)e=e.parentNode,t.push(e);return t}
100)(e).forEach(e=>{e.matches(".sub-menu__list, .sub-menu__item")&&(e.style.display="block")}),e.querySelectorAll(":scope > .sub-menu__item").forEach(e=>{e.classList.add("visible"),e.style.display="block";var t=e.querySelector(":scope > .sub-menu__button"),t=(t&&(t.style.display="flex"),e.querySelector(":scope > .sub-menu__link"));t&&(t.style.display="block")}),o().firstFocusableEl&&o().firstFocusableEl.focus()},c=(l?d(l.closest(".sub-menu__list")):d(r),()=>{var e=document.querySelectorAll(".sub-menu__list"),t=document.querySelectorAll(".sub-menu__item"),i=document.querySelectorAll(".sub-menu__button");e.forEach(e=>{e.style.display="none"}),t.forEach(e=>{e.classList.remove("visible"),e.style.display="none"}),i.forEach(e=>{e.style.display="none"})}),p=()=>{i.classList.remove("sub-menu__topic-button--open"),a.classList.remove("sub-menu__nav-wrap--open"),document.body.classList.remove("prevent-scroll"),setTimeout(()=>{a.style.visibility="hidden"},400),window.removeEventListener("click",u),window.removeEventListener("resize",m),window.removeEventListener("keydown",h)},u=e=>{s.contains(e.target)||i.contains(e.target)||p()},m=()=>{p()},h=e=>{"Escape"===e.key&&p(),e.shiftKey&&"Tab"===e.key&&document.activeElement===o().firstFocusableEl&&(o().lastFocusableEl.focu
100s(),e.preventDefault()),"Tab"===e.key&&document.activeElement===o().lastFocusableEl&&(o().firstFocusableEl.focus(),e.preventDefault()),"ArrowRight"===e.key&&event.target.classList.contains("sub-menu__button--next")&&(e.preventDefault(),e.target.click()),"ArrowLeft"===e.key&&event.target.classList.contains("sub-menu__button--back")&&(e.preventDefault(),e.target.click())};i.addEventListener("click",e=>{i.classList.contains("sub-menu__topic-button--open")?p():(a.style.visibility="visible",i.classList.add("sub-menu__topic-button--open"),a.classList.add("sub-menu__nav-wrap--open"),document.body.classList.add("prevent-scroll"),window.addEventListener("click",u),window.addEventListener("resize",m),window.addEventListener("keydown",h))}),e.forEach(e=>{e.addEventListener("click",function(){var e;e=this,c(),d(e.nextElementSibling)})});n.forEach(e=>{e.addEventListener("click",function(){var e=this;e=e.closest(".sub-menu__list").parentElement.closest(".sub-menu__list"),c(),d(e)})});let f=0,g=null;const v=()=>{var e=document.documentElement.scrollTop;e>f?(document.documentElement.classList.add("hidden-toolbar"),g=g||setTimeout(()=>{t.style.visibility="hidden"},4e3)):(g&&(clearTimeout(g),g=null),t.style.visibility=null,document.documentElement.classList.remove("hidden-toolbar")),f=e<=0?0:e};v(),window.addEventListener("scroll",()=>{v()},!1)})(),(C=document.querySelectorAll(".language-menu__select"))&&C.forEach(e=>{e.addEventListener("change",e=>{var t=e.target.closest(".language-menu"),i=e.target.options[e.target.selectedIndex].dataset.flag;t.querySelectorAll(".language-menu__flag").forEach(e=>{e.style.display="none"}),t.querySelector(".language-menu__flag--"+i).style.display="block",window.location.href=e.target.value})}),(()=>{const a=document.querySelector(".language-suggest");if(a){var e=document.documentElement.lang.substring(0,2),t=navigator.language.substring(0,2);if(t!==e&&"true"!==sessionStorage.getItem("drk_language-suggest-closed")){if(null!==sessionStorage.getItem("drk_language-suggest-init-time")){var i=sessionStorage.getItem("drk_language-suggest-init-time");if(60<(Date.now()-i)/1e3)return}else{i=Date.now();sessionStorage.setItem("drk_language-suggest-init-time",i.toString())}var i=document.querySelector(".language-suggest__message--current"),s=document.querySelector(".language-suggest__message--suggest"),n=document.querySelector(".language-suggest__close");const r=document.querySelector(".body__wrapper"),l=document.querySelector(".toolbar__wrap"),o=document.querySelector(".main-menu__wrap"),d=document.querySelector(".sub-menu__bar"),c=document.querySelector(".sub-menu__nav-wrap"),p=document.querySelector(".global-search"),u=(a.style.display="block","de"===t||"en"===t?(i.querySelector(`[data-suggest-language="${e}"]`).style.display="block",s.querySelector(`[data-suggest-language="${t}"]`).style.display="block",n.querySelector(`[data-suggest-language="${e}"]`).style.display="block"):(i.querySelector('[data-suggest-language="fallback"]').style.display="block",s.querySelector('[data-suggest-language="fallback"]').style.display="block",n.querySelector('[data-suggest-language="fallback"]').style.display="block"),()=>{let e=l.offsetHeight;var t=d?d.offsetHeight:0,i=a?a.offsetHeight:0;r.style.paddingTop=i+e+t+"px",document.documentElement.classList.contains("hidden-toolbar")&&(e=0),l.style.top=i+"px",o.style.top=i+e+"px",o.style.height=`calc(100% - ${i+e}px)`,d&&(d.style.top=i+e+"px"),c&&(c.style.top=i+e+t+"px"),p.style.top=12+i+"px"});u(),window.addEventListener("resize",u),window.addEventListener("scroll",u);t=()=>{a.style.display="none",r.style.paddingTop=null,l.style.top=null,o.style.top=null,o.style.height=null,d.style.top=null,c.style.top=null,p.style.top=null,window.removeEventListener("resize",u),window.removeEventListener("scroll",u),sessionStorage.setItem("drk_language-suggest-closed","true")};n.addEventListener("click",t),a.querySelector(".language-menu__select").addEventListener("change",()=>{sessionStorage.setItem("drk_language-suggest-closed","true")}),setTimeout(t,6e4)}}})(),e(),e(),window.addEventListener("resize",e),$(".contenttable").wrap('<div class="contenttable__wrap"></div>'),$(".ce-main table[style], .ce-main td[style]").removeAttr("style"),C=$("select"),b=$("input, textarea"),$(".frame-type-form_formframework").wrapInner('<div class="inner"></div>'),$(document).ready(function(){$('input[type="file"]').each(function(){$(this).addClass("custom-file-input"),$(this).parent().addClass("custom-file");var e='<label class="custom-file-label" for="'+$(this).attr("id")+'"> </label>';$(e).insertAfter($(this))}),bsCustomFileInput.init()}
100),b.on("keydown keypress keyup paste blur change",function(){$(this).val()?$(this).addClass("filled"):$(this).removeClass("filled filled--focusout")}),b.on("focusout",function(){$(this).val()?$(this).addClass("filled--focusout"):$(this).removeClass("filled--focusout")}),C.on("change",function(){$(this).children("option:not(:first-child):selected").val()?$(this).addClass("filled"):$(this).removeClass("filled")}),$("input[type=file]").on("change",function(){$(this).val()?$(this).addClass("filled"):$(this).removeClass("filled")}),$(".inputs-list .radio").closest(".inputs-list").closest(".form-group").each(function(){$(this).addClass("form-group-radio")}),$(".inputs-list .form-check").closest(".inputs-list").closest(".form-group").each(function(){$(this).addClass("form-group-checkbox")}),$(".form-group-checkbox").find(".control-label").each(function(){$(this).addClass("form-group-label")}),$(".form-group-radio").find(".control-label").each(function(){$(this).addClass("form-group-label")}),document.querySelectorAll("textarea").forEach(e=>{e.setAttribute("style","height:"+e.scrollHeight+"px;overflow-y:hidden;"),e.addEventListener("input",function(){this.style.height="auto",this.style.height=this.scrollHeight+"px"},!1)}),(new class{constructor(){}preventDisabledButtons(){document.querySelectorAll("a.button--disabled, a:disabled").forEach(e=>{e.addEventListener("click",e=>{e.preventDefault()})})}init(){this.preventDisabledButtons()}}).init(),(new class{constructor(){}removeDescription(){document.querySelectorAll(".stage-image .ce-gallery .image-caption").forEach(e=>{e.remove()})}removeLink(){document.querySelectorAll(".stage-image .ce-gallery a, .textmedia .ce-gallery a").forEach(e=>{e.replaceWith(...e.childNodes)})}init(){this.removeDescription(),this.removeLink()}}).init(),document.querySelector(".swiper.swiper--gallery")){var me=window.matchMedia("(prefers-reduced-motion: reduce)")?.matches?0:300;const k=document.querySelectorAll(".swiper.swiper--gallery");for(let e=0;e<k.length;e++){var t=k[e].dataset.swiperId;const we=document.getElementById("galleryAnnouncements-"+t);var he=".swiper-button-next-"+t,t=".swiper-button-prev-"+t;new c(k[e],{modules:[n,r,ne],loop:!0,speed:me,preloadImages:!1,a11y:{prevSlideMessage:galleryNext,nextSlideMessage:galleryPrev,paginationBulletMessage:galleryPaginationBullet},pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:he,prevEl:t},on:{slideChange:function(){var e=this.realIndex+1;we.textContent=galleryImage+" "+e}}})}var b=()=>{k.forEach(e=>{var t=e.nextElementSibling,i=t.nextElementSibling,e=e.querySelector('[data-swiper-slide-index="0"] img').clientHeight/2+"px";t.style.top=e,i.style.top=e})};window.addEventListener("load",b),window.addEventListener("resize",b)}if(document.querySelector(".swiper__teaser")){var w=document.querySelectorAll(".swiper__teaser");for(let e=0;e<w.length;e++){var fe=w[e].dataset.swiperId;const Se=document.getElementById("teaserAnnouncements-"+fe);new c(w[e],{modules:[r,u],slidesPerView:"auto",freeMode:!0,centeredSlides:!0,spaceBetween:16,grabCursor:!0,preloadImages:!1,on:{slideChange:function(){var e=this.realIndex+1;Se.textContent=teaserImage+" "+e}}})}}if(document.querySelector(".news__swiper")){var ge=document.querySelectorAll(".news__swiper");for(let e=0;e<ge.length;e++)new c(ge[e],{modules:[r,u],slidesPerView:"auto",freeMode:!0,centeredSlides:!0,centeredSlidesBounds:!0,spaceBetween:16,grabCursor:!0,preloadImages:!1,on:{slideChange:function(){var e=this.realIndex+1,t=document.querySelectorAll(".teaser__item");t&&void 0!==t&&(t=t[e].getElementsByTagName("img"))&&void 0!==t&&(e=document.querySelectorAll(".news__announcements"))&&void 0!==e&&(e[0].innerHTML=t[0].alt)}}});document.querySelectorAll(".frame-type-news_newsliststicky");var ve=document.querySelectorAll(".news__container--grey");for(let e=0;e<ve.length;e++)ve[e].classList.add("bg","bg--grey")}{$(".ce-acco__trigger").each(function(){$(this).click(function(){Ee($(this))})});const Ee=e=>{var t="true"===e.attr("aria-expanded"),i=e.parent().next();e.attr("aria-expanded",!t),i.attr("aria-expanded",(!t).toString()),i.attr("aria-hidden",t.toString()),$(i).stop().slideToggle(300)}}{const M=$(".footer-acco__trigger"),Ce=$(".footer-acco__label"),Te=(M.each(function(){$(this).click(function(){Te($(this))})}),e=>{var t="true"===e.attr("aria-expanded"),i=e.parent().next();e.attr("aria-expanded",!t),i.attr("aria-expanded",(!t).toString()),i.attr("aria-hidden",t.toString()),$(i).stop().slideToggle(300)});var C;(C=()=>{matchMedia("(min-width: 577px)").matches?(Ce.show().removeAttr("aria-hidden"),M.hide().attr("aria-hidden","true")):(Ce.hide().attr("aria-hidden","true"),M.show().removeAttr("aria-hidden"))})(),$(window).resize(C)}b=document.querySelectorAll(".textmedia__expandable"),C=document.querySelectorAll(".textmedia__unfold"),b.forEach(function(e){e.offsetHeight<e.scrollHeight&&e.classList.add("textmedia__expandable--folded")}
100),C.forEach(function(t){t.addEventListener("click",function(){const e=t.closest(".textmedia__expandable");e.classList.remove("textmedia__expandable--folded"),e.style.maxHeight=e.scrollHeight+"px",setTimeout(()=>{e.style.maxHeight="unset"},400)})}),document.querySelectorAll(".frame-textmedia-beside + .frame-textmedia-beside").forEach(e=>{e.previousElementSibling.classList.contains("frame-textmedia-beside--reverse")||e.classList.add("frame-textmedia-beside--reverse")});{const L=document.querySelector(".donation-cta"),xe=document.querySelector("#footer");if(L&&document.querySelector(".sub-menu__bar")){const _e=()=>{L.classList.contains("donation-cta--animating")||(L.style.visibility="visible",L.style.opacity=1,L.classList.remove("donation-cta--hidden"),L.classList.add("donation-cta--animating"),setTimeout(()=>{L.classList.remove("donation-cta--animating")},400))},ke=()=>{L.classList.contains("donation-cta--animating")||(L.classList.add("donation-cta--hidden"),setTimeout(()=>{L.style.visibility="hidden",L.style.opacity=0},400),L.classList.add("donation-cta--animating"),setTimeout(()=>{L.classList.remove("donation-cta--animating")},400))};let n=0;const Me=()=>{var e,t,i,a,s=document.documentElement.scrollTop;(s>n&&(e=L.getBoundingClientRect().top,t=L.offsetHeight,i=xe.getBoundingClientRect().top,a=xe.offsetHeight,e+t<i||i+a<e)?_e:ke)(),n=s<=0?0:s};Me(),window.addEventListener("scroll",()=>{Me()},!1)}}if(document.querySelector(".donation-info__swiper")){var ye=document.querySelectorAll(".donation-info__swiper");for(let e=0;e<ye.length;e++)new c(ye[e],{modules:[r,u],slidesPerView:"auto",grabCursor:!0,centerInsufficientSlides:!0})}if(document.querySelector("#card_token-form")){var b=document.querySelector("#user"),C=document.querySelector("#user-secret"),T=document.querySelector("#company");const P=document.querySelector(".donation-form__data-item--company.visually-hidden.h-hide"),q=document.querySelector(".donation-form__section--personal-data"),A=document.querySelector("#form-donation-mode_1"),O=document.querySelectorAll(".donation-form__frequency-item--monthly, .donation-form__frequency-item--quarterly, .donation-form__frequency-item--yearly"),I=document.querySelectorAll(".donation-form__payment-button");var x=document.querySelector("#jsPayment__sepa"),_=document.querySelector("#jsPayment__creditcard");b&&b.addEventListener("click",()=>{q.classList.remove("visually-hidden","h-hide"),P.classList.add("visually-hidden","h-hide"),I.forEach(e=>{e.classList.remove("visually-hidden","h-hide")}),O.forEach(e=>e.style.display="flex")}),C&&C.addEventListener("click",()=>{q.classList.add("visually-hidden","h-hide"),I.forEach(e=>{e.classList.contains("anonym")?e.classList.remove("visually-hidden","h-hide","donation-form__payment-button--inactive"):e.classList.add("visually-hidden","h-hide")}),document.querySelector(".donation-form__item--sepa").classList.add("h-hide"),document.querySelector(".donation-form__item--creditcard-group").classList.add("h-hide"),O.forEach(e=>e.style.display="none"),A.checked||(A.checked=!0,A.nextElementSibling.classList.add("active"))}),T&&T.addEventListener("click",()=>{q.classList.remove("visually-hidden","h-hide"),P.classList.contains("visually-hidden")&&P.classList.contains("h-hide")&&P.classList.remove("visually-hidden","h-hide"),I.forEach(e=>{e.classList.remove("visually-hidden","h-hide")}),O.forEach(e=>e.style.display="flex")}),I&&I.forEach(e=>{e.addEventListener("click",()=>{const t=e;t.classList.add("donation-form__payment-button--active"),I.forEach(e=>{e!==t?(e.classList.add("donation-form__payment-button--inactive"),e.classList.remove("donation-form__payment-button--active")):e.classList.remove("donation-form__payment-button--inactive")})})}),A&&A.addEventListener("click",()=>{I.forEach(e=>{e.classList.remove("h-hide","visually-hidden","donation-form__payment-button--inactive")})}),x&&x.addEventListener("click",()=>{document.querySelector(".donation-form__item--sepa.h-hide")&&document.querySelector(".donation-form__item--sepa").classList.remove("h-hide")}),_&&_.addEventListener("click",()=>{document.querySelector(".donation-form__item--creditcard-group.h-hide")&&document.querySelector(".donation-form__item--creditcard-group").classList.remove("h-hide")}),document.querySelectorAll(".frame.bg--lightgrey.frame-type-textmedia").forEach((e,t)=>{e.nextElementSibling.classList.contains("frame-type-textmedia")&&(e.style.paddingBottom="0")})}if(document.querySelector(".donation-carousel__swiper")&&new c(".donation-carousel__swiper",{modules:[n,pe,re],navigation:{nextEl:".swiper-button-next",prevEl:".swiper-button-prev"},effect:"cards",slidesPerView:"auto",centeredSlides:!0,grabCursor:!0,autoplay:{delay:2500,disableOnInteraction:!0}}),document.querySelector(".header-slider__swiper")){var be=document.querySelectorAll(".header-slider__swiper");for(let e=0;e<be.length;e++)new c(be[e],{modules:[re,ce],loop:!0,speed:2e3,effect:"fade",fadeEffect:{crossFade:!0},autoplay:{delay:2500,disableOnInteraction:!0}})}b=document.querySelectorAll(".video__swiper");if(b.length){const Le=window.matchMedia("(prefers-reduced-motion: reduce)")?.matches?0:300;
100b.forEach(e=>{var t=e.querySelector(".swiper-button-next"),i=e.querySelector(".swiper-button-prev");const a=e.querySelector(".swiper-announcements");new c(e,{modules:[n,r,ne,u],slidesPerView:"auto",spaceBetween:12,freeMode:!0,speed:Le,preloadImages:!1,a11y:{prevSlideMessage:videoGalleryNext,nextSlideMessage:videoGalleryPrev,paginationBulletMessage:videoGalleryPaginationBullet},pagination:{el:".swiper-pagination",clickable:!0},navigation:{nextEl:t,prevEl:i},breakpoints:{[1056]:{spaceBetween:32,centeredSlides:!0,freeMode:!1}},on:{init(){this.slides.forEach(e=>{e!==this.slides[0]&&e.querySelectorAll("iframe, video, button, a").forEach(e=>{e.setAttribute("tabindex","-1")})})},slideChange(){var e=this.realIndex+1;this.slides.forEach(e=>{e.querySelectorAll("iframe, video, button, a").forEach(e=>{e.setAttribute("tabindex","-1")})}),this.slides[this.activeIndex].querySelectorAll("iframe, video, button, a").forEach(e=>{e.removeAttribute("tabindex")}),a.textContent=videoGalleryVideo+" "+e}}})})}document.querySelectorAll(".donation-barometer")&&(C=document.querySelectorAll(".donation-barometer"),T=document.querySelectorAll(".donation-button"),C.length&&C.forEach(e=>{e.parentNode.classList.add("bg","bg--lightgrey")}),T.length)&&T.forEach(e=>{e.parentNode.classList.add("bg","bg--red")}),x={$form:null,$zipField:null,$mailField:null,$urlField:null,$chapterNameField:null,$chapterSelectField:null,$chapterSelectContainer:null,$firstChapterSelectOption:null,$submitButton:null,$informationField:null,errorClass:"parsley-error",_timeout:500,init:function(){this.$form=$(".o-form--membership__application").parent("form"),this.$form.length&&(this.addParsleyValidator(),this.$zipField=$("#powermail_field_zip"),this.$chapterSelectField=this.$form.find("#powermail_field_chapter"),this.$chapterSelectContainer=this.$form.find("#powermail_fieldwrap_145"),this.$urlField=this.$form.find("#powermail_field_organisation_url"),this.$mailField=this.$form.find("#powermail_field_organisation_mail"),this.$informationField=this.$form.find("#powermail_fieldwrap_148").addClass("hidden"),this.$requiredText=this.$form.find("#powermail_fieldwrap_149"),this.$chapterNameField=this.$form.find("#powermail_field_kreisverbandname"),this.$submitButton=this.$form.find(".powermail_submit"),this.$firstChapterSelectOption=this.$chapterSelectField.find("option:first").clone(),this.$zipField.on("keyup change input",$.proxy(this._handleZipInput,this)),3<=this.$zipField.val().length)&&this._requestLocalChapters()},addParsleyValidator:function(){window.Parsley.addValidator("validateChapter",{requirementType:"integer",validateNumber:function(e,t){return 0<e},messages:{de:"Bitte wählen Sie einen Kreisverband aus!",en:"Please choose a local chapter!"}})},getRequestUrl:function(){return this.$zipField.attr("data-zipsuggesturl")},_handleZipInput:function(){3<=this.$zipField.val().length&&(clearTimeout(this._timeoutId),this._timeoutId=setTimeout($.proxy(this._requestLocalChapters,this),this._timeout))},_requestLocalChapters:function(){var e=this.$zipField.val();this._oldZipcode=e,this.$zipField.addClass(this.loadingClass),$.ajax({method:"get",dataType:"json",url:this.getRequestUrl()+e,success:$.proxy(this._handleResponse,this),error:$.proxy(this._handleError,this,this.defaultError)})},_handleResponse:function(e){let t,i;if(this.$zipField.removeClass(this.loadingClass),e.orgdata){for(i in t=[],e.orgdata)e.orgdata.hasOwnProperty(i)&&t.push(e.orgdata[i]);0<t.length&&this._renderChapterSelection(t),this._handleSuccess()}else this._handleError(e.warning),this._resetChapterInformation(),this._hideChapterSelection()},_renderChapterSelection:function(e){let t="",i;var a=e.length;for(1<a&&(t+=this.$firstChapterSelectOption.prop("outerHTML")),i=0;i<a;i+=1)0===i?t+='<option data-mail="'+e[i].data.mail+'" data-name="'+e[i].name+'"data-id="'+e[i].data.id+'"data-url="'+e[i].data.url+'" value="'+e[i].data.id+'" selected="selected">'+e[i].name+"</option>":t+='<option data-mail="'+e[i].data.mail+'" data-name="'+e[i].name+'"data-id="'+e[i].data.id+'"data-url="'+e[i].data.url+'" value="'+e[i].data.id+'">'+e[i].name+"</option>";this.$chapterSelectField.find("option").remove(),this.$chapterSelectField.append(t),this.$chapterSelectContainer.removeClass("hidden"),this.$chapterSelectField.on("change",$.proxy(this._handleSelectChange,this)),1===a&&this._updateChapterInformation(this.$chapterSelectField.find("option:first"))},_handleError:function(e){0===$("#chapter-error").length&&(void 0===e&&(e="Hier hat etwas nicht funktioniert! Mit einem Klick auf unten stehenden Button werden Sie zu unserem Online-Formular weitergeleitet."),this.$error=$('<p id="chapter-error"
100class="o-form__non-parsley-error"></p>'),this.$error.html(e),this.$requiredText.before(this.$error)),this.$chapterSelectContainer.addClass("hidden"),this.$informationField.addClass("hidden")},_handleSuccess:function(){this.$error&&$("#chapter-error",this.$form).remove()},_handleSelectChange:function(e){this._updateChapterInformation($(e.target).find("option:selected"))},_hideChapterSelection:function(){this.$chapterSelectField&&(this.$chapterSelectContainer.addClass("hidden"),this.$informationField.addClass("hidden"))},_updateChapterInformation:function(e){void 0!==e&&"-1"!==e.val()?(this.$mailField.val(e.data("mail")),this.$urlField.val(e.data("url")),this.$chapterNameField.val(e.data("name")),this.$informationField.removeClass("hidden")):this._resetChapterInformation()},_resetChapterInformation:function(){this.$mailField.val(""),this.$urlField.val(""),this.$chapterNameField.val(""),this.$informationField.addClass("hidden")}},document.querySelector(".o-form--membership__application")&&x.init(),parsley.addMessages("de",{defaultMessage:"Die Eingabe scheint nicht korrekt zu sein.",type:{email:"Die Eingabe muss eine gültige E-Mail-Adresse sein.",url:"Die Eingabe muss eine gültige URL sein.",number:"Die Eingabe muss eine Zahl sein.",integer:"Die Eingabe muss eine Zahl sein.",digits:"Die Eingabe darf nur Ziffern enthalten.",alphanum:"Die Eingabe muss alphanumerisch sein.",tel:"Die Eingabe darf nur Ziffern enthalten."},notblank:"Die Eingabe darf nicht leer sein.",required:"Dies ist ein Pflichtfeld.",pattern:"Die Eingabe scheint ungültig zu sein.",min:"Die Eingabe muss größer oder gleich %s sein.",max:"Die Eingabe muss kleiner oder gleich %s sein.",range:"Die Eingabe muss zwischen %s und %s liegen.",minlength:"Die Eingabe ist zu kurz. Es müssen mindestens %s Zeichen eingegeben werden.",maxlength:"Die Eingabe ist zu lang. Es dürfen höchstens %s Zeichen eingegeben werden.",length:"Die Länge der Eingabe ist ungültig. Es müssen zwischen %s und %s Zeichen eingegeben werden.",mincheck:"Wählen Sie mindestens %s Angaben aus.",maxcheck:"Wählen Sie maximal %s Angaben aus.",check:"Wählen Sie zwischen %s und %s Angaben.",equalto:"Dieses Feld muss dem anderen entsprechen."}),"de"===document.documentElement.lang||"de-DE"===document.documentElement.lang?parsley.setLocale("de"):parsley.setLocale("en"),(_=jQuery(".o-form"))&&_.length&&(_.parsley({trigger:"change"}),_.attr("data-parsley-excluded","[disabled]")),document.querySelectorAll(".js-create-telephone-link").forEach(e=>{var t=e.innerHTML,i=t.replace(/\(0\)/g,"").replace(/[^0-9+]/g,""),a=document.createElement("a");a.href="tel:"+i,a.classList.add(...e.classList),a.innerHTML=t,e.parentNode.replaceChild(a,e)}),document.querySelector(".pagets__category")&&(b=document.querySelector(".pagets__category #main > .frame .header"),C=document.querySelector(".page-category"),b)&&C&&(b.appendChild(C),C.style.display="block")}(); 101//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy91dGlsaXR5LmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9VdGlsaXR5L2FuaW1hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvc3NyLXdpbmRvdy9zc3Itd2luZG93LmVzbS5qcyIsIm5vZGVfbW9kdWxlcy9kb203L2RvbTcuZXNtLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZG9tLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9nZXQtc3VwcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2dldC1kZXZpY2UuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9nZXQtYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL3RyYW5zaXRpb25FbWl0LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9vblRvdWNoU3RhcnQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uUmVzaXplLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9icmVha3BvaW50cy9zZXRCcmVha3BvaW50LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NoZWNrLW92ZXJmbG93L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2RlZmF1bHRzLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2Nvcm
101UuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzLWVtaXR0ZXIuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVTaXplLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXMuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZUF1dG9IZWlnaHQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc09mZnNldC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlU2xpZGVzUHJvZ3Jlc3MuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVByb2dyZXNzLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVTbGlkZXNDbGFzc2VzLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVBY3RpdmVJbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlQ2xpY2tlZFNsaWRlLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zbGF0ZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvZ2V0VHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zbGF0ZS9zZXRUcmFuc2xhdGUuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL21pblRyYW5zbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvbWF4VHJhbnNsYXRlLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zbGF0ZS90cmFuc2xhdGVUby5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zaXRpb24vc2V0VHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL3RyYW5zaXRpb25TdGFydC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL3RyYW5zaXRpb25FbmQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUby5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9zbGlkZS9zbGlkZVRvTG9vcC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9zbGlkZS9zbGlkZU5leHQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVQcmV2LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL3NsaWRlUmVzZXQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUb0Nsb3Nlc3QuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUb0NsaWNrZWRTbGlkZS5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2xvb3AvbG9vcENyZWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2xvb3BGaXguanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9sb29wRGVzdHJveS5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ncmFiLWN1cnNvci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ncmFiLWN1cnNvci9zZXRHcmFiQ3Vyc29yLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2dyYWItY3Vyc29yL3Vuc2V0R3JhYkN1cnNvci5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMvb25Ub3VjaE1vdmUuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uVG91Y2hFbmQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uU2Nyb2xsLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9vbkNsaWNrLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2JyZWFrcG9pbnRzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2JyZWFrcG9pbnRzL2dldEJyZWFrcG9pbnQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2xhc3Nlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9jbGFzc2VzL2FkZENsYXNzZXMuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2xhc3Nlcy9yZW1vdmVDbGFzc2VzLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2ltYWdlcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9pbWFnZXMvbG9hZEltYWdlLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2ltYWdlcy9wcmVsb2FkSW1hZ2VzLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL21vZHVsZUV4dGVuZFBhcmFtcy5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2NyZWF0ZS1lbGVtZW50LWlmLW5vdC1kZWZpbmVkLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2NsYXNzZXMtdG8tc2VsZWN0b3IuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2ExMXkvYTExeS5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9hdXRvcGxheS9hdXRvcGxheS5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9mcmVlLW1vZGUvZnJlZS1tb2RlLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZWZmZWN0LWluaXQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9lZmZlY3QtdGFyZ2V0LmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZWZmZWN0LXZpcnR1YWwtdHJhbnNpdGlvbi1lbmQuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWZhZGUvZWZmZWN0LWZhZGUuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWNhcmRzL2VmZmVjdC1jYXJkcy5qcyIsIm5vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2NyZWF0ZS1zaGFkb3cuanMiLCJub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlcy9yZXNpemUvcmVzaXplLmpzIiwibm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL21vZHVsZXMvb2JzZXJ2ZXIvb2JzZXJ2ZXIuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvZ2FsbGVyeS5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9qUXVlcnlFdmVudEV4dGVuc2lvbnMuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvZ2xvYmFsLXNlYXJjaC5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9tZW51LmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL3N1Ym1lbnUuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L1V0aWxpdHkvZ2V0UGFyZW50cy5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9sYW5ndWFnZS1tZW51LmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL3RhYmxlcy5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9mb3Jtcy5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvY29sbGVjdGlvbi5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9idXR0b25zLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL2ltYWdlLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL3RlYXNlci5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9uZXdzLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL2FjY29yZGlvbi5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9mb290ZXIuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvdGV4dG1lZGlhLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL2RvbmF0aW9uQ3RhLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL2RvbmF0aW9uSW5mby5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9kb25hdGlvbkZvcm0uanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvaGVhZGVyU2xpZGVyLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL2RvbmF0aW9uQ2Fyb3VzZWwuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvdmlkZW8uanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvZG9uYXRpb25GcmFtZS5qcyIsIkRpc3RyaWJ1dGlvblBhY2thZ2VzL0V4dGVuc2lvbnMtRFJLL2Rya190ZW1wbGF0ZS9SZXNvdXJjZXMvUHVibGljL0phdmFTY3JpcHQvTW9kdWxlcy9tZW1iZXJzaGlwLWFwcGxpY2F0aW9uLmpzIiwiRGlzdHJpYnV0aW9uUGFja2FnZXMvRXh0ZW5zaW9ucy1EUksvZHJrX3RlbXBsYXRlL1Jlc291cmNlcy9QdWJsaWMvSmF2YVNjcmlwdC9Nb2R1bGVzL3BhcnNsZXktc2V0dGluZ3MuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvdGVsZXBob25lTGlua3MuanMiLCJEaXN0cmlidXRpb25QYWNrYWdlcy9FeHRlbnNpb25zLURSSy9kcmtfdGVtcGxhdGUvUmVzb3VyY2VzL1B1YmxpYy9KYXZhU2NyaXB0L01vZHVsZXMvcGFnZUNhdGVnb3J5LmpzIl0sIm5hbWVzIjpbImNhbGN1bGF0ZUhlYWRlckhlaWdodCIsImJvZHlXcmFwcGVyIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwibGFuZ3VhZ2VTdWdnZXN0IiwidG9vbGJhcldyYXAiLCJzdWJNZW51QmFyIiwibGFuZ3VhZ2VTdWdnZXN0SGVpZ2h0Iiwib2Zmc2V0SGVpZ2h0IiwidG9vbGJhcldyYXBIZWlnaHQiLCJzdWJNZW51QmFySGVpZ2h0Iiwic3R5bGUiLCJwYWRkaW5nVG9wIiwiZmFkZU91dCIsImVsIiwib3BhY2l0eSIsImZhZGUiLCJkaXNwbGF5IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZmFkZUluIiwibGV0IiwidmFsIiwicGFyc2VGbG9hdCIsImlzT2JqZWN0Iiwib2JqIiwiY29uc3RydWN0b3IiLCJPYmplY3QiLCJleHRlbmQiLCJ0YXJnZXQiLCJzcmMiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImxlbmd0aCIsInNzckRvY3VtZW50IiwiYm9keSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiYWN0aXZlRWxlbWVudCIsImJsdXIiLCJub2RlTmFtZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJnZXRFbGVtZW50QnlJZCIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiY3JlYXRlRWxlbWVudCIsImNoaWxkcmVuIiwiY2hpbGROb2RlcyIsInNldEF0dHJpYnV0ZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3JlYXRlRWxlbWVudE5TIiwiaW1wb3J0Tm9kZSIsImxvY2F0aW9uIiwiaGFzaCIsImhvc3QiLCJob3N0bmFtZSIsImhy
101ZWYiLCJvcmlnaW4iLCJwYXRobmFtZSIsInByb3RvY29sIiwic2VhcmNoIiwiZ2V0RG9jdW1lbnQiLCJkb2MiLCJzc3JXaW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJoaXN0b3J5IiwicmVwbGFjZVN0YXRlIiwicHVzaFN0YXRlIiwiZ28iLCJiYWNrIiwiQ3VzdG9tRXZlbnQiLCJ0aGlzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJJbWFnZSIsIkRhdGUiLCJzY3JlZW4iLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwibWF0Y2hNZWRpYSIsImNhbGxiYWNrIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpZCIsImdldFdpbmRvdyIsIndpbiIsIndpbmRvdyIsIkRvbTciLCJBcnJheSIsIml0ZW1zIiwic3VwZXIiLCJtYWtlUmVhY3RpdmUiLCJwcm90byIsIl9fcHJvdG9fXyIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwidmFsdWUiLCJhcnJheUZsYXQiLCJhcnIiLCJyZXMiLCJpc0FycmF5IiwicHVzaCIsImFycmF5RmlsdGVyIiwicHJvdG90eXBlIiwiZmlsdGVyIiwiY2FsbCIsIiQiLCJzZWxlY3RvciIsImNvbnRleHQiLCJodG1sIiwidHJpbSIsImluZGV4T2YiLCJ0b0NyZWF0ZSIsInRlbXBQYXJlbnQiLCJpbm5lckhUTUwiLCJpIiwiYSIsIm5vZGVUeXBlIiwidW5pcXVlQXJyYXkiLCJmbiIsIk1ldGhvZHMiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJjbGFzc05hbWVzIiwibWFwIiwiYyIsInNwbGl0IiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJoYXNDbGFzcyIsImNsYXNzTmFtZSIsImNvbnRhaW5zIiwidG9nZ2xlQ2xhc3MiLCJ0b2dnbGUiLCJhdHRyIiwiYXR0cnMiLCJhcmd1bWVudHMiLCJnZXRBdHRyaWJ1dGUiLCJhdHRyTmFtZSIsInJlbW92ZUF0dHIiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJvbiIsImFyZ3MiLCJldmVudFR5cGUiLCJ0YXJnZXRTZWxlY3RvciIsImxpc3RlbmVyIiwiY2FwdHVyZSIsImhhbmRsZUxpdmVFdmVudCIsImUiLCJldmVudERhdGEiLCJkb203RXZlbnREYXRhIiwidW5zaGlmdCIsImlzIiwiYXBwbHkiLCJwYXJlbnRzIiwiayIsImhhbmRsZUV2ZW50IiwidW5kZWZpbmVkIiwiZXZlbnRzIiwiaiIsImV2ZW50IiwiZG9tN0xpdmVMaXN0ZW5lcnMiLCJwcm94eUxpc3RlbmVyIiwiZG9tN0xpc3RlbmVycyIsIm9mZiIsImhhbmRsZXJzIiwiaGFuZGxlciIsImRvbTdwcm94eSIsInNwbGljZSIsInRyaWdnZXIiLCJldnQiLCJkZXRhaWwiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRhdGEiLCJkYXRhSW5kZXgiLCJkaXNwYXRjaEV2ZW50IiwidHJhbnNpdGlvbkVuZCIsImRvbSIsImZpcmVDYWxsQmFjayIsIm91dGVyV2lkdGgiLCJpbmNsdWRlTWFyZ2lucyIsInN0eWxlcyIsIm9mZnNldFdpZHRoIiwib3V0ZXJIZWlnaHQiLCJvZmZzZXQiLCJib3giLCJjbGllbnRUb3AiLCJjbGllbnRMZWZ0Iiwic2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbFkiLCJzY3JvbGxYIiwidG9wIiwibGVmdCIsImNzcyIsInByb3BzIiwicHJvcCIsImVhY2giLCJpbmRleCIsInRleHQiLCJ0ZXh0Q29udGVudCIsImNvbXBhcmVXaXRoIiwibWF0Y2hlcyIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwiY2hpbGQiLCJwcmV2aW91c1NpYmxpbmciLCJlcSIsInJldHVybkluZGV4IiwiYXBwZW5kIiwiZWxzIiwibmV3Q2hpbGQiLCJ0ZW1wRGl2IiwiZmlyc3RDaGlsZCIsImFwcGVuZENoaWxkIiwicHJlcGVuZCIsImluc2VydEJlZm9yZSIsIm5leHQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJuZXh0QWxsIiwibmV4dEVscyIsInByZXYiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwicHJldkFsbCIsInByZXZFbHMiLCJwYXJlbnQiLCJwYXJlbnROb2RlIiwiY2xvc2VzdCIsImZpbmQiLCJmb3VuZEVsZW1lbnRzIiwiZm91bmQiLCJyZW1vdmVDaGlsZCIsIm5leHRUaWNrIiwiZGVsYXkiLCJub3ciLCJnZXRUcmFuc2xhdGUiLCJheGlzIiwibWF0cml4IiwiY3VyVHJhbnNmb3JtIiwidHJhbnNmb3JtTWF0cml4IiwiY3VyU3R5bGUiLCJjdXJyZW50U3R5bGUiLCJXZWJLaXRDU1NNYXRyaXgiLCJ3ZWJraXRUcmFuc2Zvcm0iLCJyZXBsYWNlIiwiam9pbiIsIk1velRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJNc1RyYW5zZm9ybSIsIm1zVHJhbnNmb3JtIiwidG9TdHJpbmciLCJtNDEiLCJtNDIiLCJvIiwic2xpY2UiLCJub2RlIiwidG8iLCJub0V4dGVuZCIsIm5leHRTb3VyY2UiLCJIVE1MRWxlbWVudCIsImtleXNBcnJheSIsIm5leHRJbmRleCIsImxlbiIsIm5leHRLZXkiLCJkZXNjIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsIl9fc3dpcGVyX18iLCJzZXRDU1NQcm9wZXJ0eSIsInZhck5hbWUiLCJ2YXJWYWx1ZSIsInNldFByb3BlcnR5IiwiYW5pbWF0ZUNTU01vZGVTY3JvbGwiLCJzd2lwZXIiLCJ0YXJnZXRQb3NpdGlvbiIsInNpZGUiLCJzdGFydFBvc2l0aW9uIiwidHJhbnNsYXRlIiwic3RhcnRUaW1lIiwidGltZSIsInBhcmFtcyIsInNwZWVkIiwiZGlyIiwid3JhcHBlckVsIiwic2Nyb2xsU25hcFR5cGUiLCJjc3NNb2RlRnJhbWVJRCIsImlzT3V0T2ZCb3VuZCIsImN1cnJlbnQiLCJhbmltYXRlIiwiZ2V0VGltZSIsInByb2dyZXNzIiwiTWF0aCIsIm1heCIsIm1pbiIsImVhc2VQcm9ncmVzcyIsImNvcyIsIlBJIiwiY3VycmVudFBvc2l0aW9uIiwic2Nyb2xsVG8iLCJvdmVyZmxvdyIsIm1ldGhvZE5hbWUiLCJ3cml0YWJsZSIsInN1cHBvcnQiLCJnZXRTdXBwb3J0Iiwic21vb3RoU2Nyb2xsIiwiZG9jdW1lbnRFbGVtZW50IiwidG91Y2giLCJEb2N1bWVudFRvdWNoIiwicGFzc2l2ZUxpc3RlbmVyIiwic3VwcG9ydHNQYXNzaXZlIiwib3B0cyIsImdlc3R1cmVzIiwiZGV2aWNlQ2FjaGVkIiwiZ2V0RGV2aWNlIiwib3ZlcnJpZGVzIiwicGxhdGZvcm0iLCJ1YSIsImRldmljZSIsImlvcyIsImFuZHJvaWQiLCJzY3JlZW5XaWR0aCIsIndpZHRoIiwic2NyZWVuSGVpZ2h0IiwiaGVpZ2h0IiwibWF0Y2giLCJpcGFkIiwiaXBvZCIsImlwaG9uZSIsIndpbmRvd3MiLCJtYWNvcyIsIm9zIiwiYnJvd3NlciIsImdldEJyb3dzZXIiLCJpc1NhZmFyaSIsInRvTG93ZXJDYXNlIiwiaXNXZWJWaWV3IiwidGVzdCIsInRyYW5zaXRpb25FbWl0IiwicnVuQ2FsbGJhY2tzIiwiZGlyZWN0aW9uIiwic3RlcCIsImFjdGl2ZUluZGV4IiwicHJldmlvdXNJbmRleCIsImVtaXQiLCJjbG9zZXN0RWxlbWVudCIsImJhc2UiLCJfX2Nsb3Nlc3RGcm9tIiwiYXNzaWduZWRTbG90IiwiZ2V0Um9vdE5vZGUiLCJvblJlc2l6ZSIsImFsbG93U2xpZGVQcmV2Iiwic25hcEdyaWQiLCJicmVha3BvaW50cyIsInNldEJyZWFrcG9pbnQiLCJhbGxvd1NsaWRlTmV4dCIsInVwZGF0ZVNpemUiLCJ1cGRhdGVTbGlkZXMiLCJ1cGRhdGVTbGlkZXNDbGFzc2VzIiwic2xpZGVzUGVyVmlldyIsImlzRW5kIiwiaXNCZWdpbm5pbmciLCJ
101jZW50ZXJlZFNsaWRlcyIsInNsaWRlVG8iLCJzbGlkZXMiLCJhdXRvcGxheSIsInJ1bm5pbmciLCJwYXVzZWQiLCJydW4iLCJ3YXRjaE92ZXJmbG93IiwiY2hlY2tPdmVyZmxvdyIsImR1bW15RXZlbnRBdHRhY2hlZCIsImR1bW15RXZlbnRMaXN0ZW5lciIsIm1ldGhvZCIsInRvdWNoRXZlbnRzIiwibmVzdGVkIiwiZG9tTWV0aG9kIiwic3RhcnQiLCJwYXNzaXZlTGlzdGVuZXJzIiwicGFzc2l2ZSIsIm9uVG91Y2hTdGFydCIsIm1vdmUiLCJvblRvdWNoTW92ZSIsImVuZCIsIm9uVG91Y2hFbmQiLCJjYW5jZWwiLCJwcmV2ZW50Q2xpY2tzIiwicHJldmVudENsaWNrc1Byb3BhZ2F0aW9uIiwib25DbGljayIsImNzc01vZGUiLCJvblNjcm9sbCIsInVwZGF0ZU9uV2luZG93UmVzaXplIiwic3dpcGVyTWV0aG9kIiwiaXNHcmlkRW5hYmxlZCIsImdyaWQiLCJyb3dzIiwiZGVmYXVsdHMiLCJpbml0IiwidG91Y2hFdmVudHNUYXJnZXQiLCJpbml0aWFsU2xpZGUiLCJyZXNpemVPYnNlcnZlciIsImNyZWF0ZUVsZW1lbnRzIiwiZW5hYmxlZCIsImZvY3VzYWJsZUVsZW1lbnRzIiwicHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uIiwidXJsIiwiZWRnZVN3aXBlRGV0ZWN0aW9uIiwiZWRnZVN3aXBlVGhyZXNob2xkIiwiYXV0b0hlaWdodCIsInNldFdyYXBwZXJTaXplIiwidmlydHVhbFRyYW5zbGF0ZSIsImVmZmVjdCIsImJyZWFrcG9pbnRzQmFzZSIsInNwYWNlQmV0d2VlbiIsInNsaWRlc1Blckdyb3VwIiwic2xpZGVzUGVyR3JvdXBTa2lwIiwic2xpZGVzUGVyR3JvdXBBdXRvIiwiY2VudGVyZWRTbGlkZXNCb3VuZHMiLCJzbGlkZXNPZmZzZXRCZWZvcmUiLCJzbGlkZXNPZmZzZXRBZnRlciIsIm5vcm1hbGl6ZVNsaWRlSW5kZXgiLCJjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXMiLCJyb3VuZExlbmd0aHMiLCJ0b3VjaFJhdGlvIiwidG91Y2hBbmdsZSIsInNpbXVsYXRlVG91Y2giLCJzaG9ydFN3aXBlcyIsImxvbmdTd2lwZXMiLCJsb25nU3dpcGVzUmF0aW8iLCJsb25nU3dpcGVzTXMiLCJmb2xsb3dGaW5nZXIiLCJhbGxvd1RvdWNoTW92ZSIsInRocmVzaG9sZCIsInRvdWNoTW92ZVN0b3BQcm9wYWdhdGlvbiIsInRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdCIsInRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0IiwidG91Y2hSZWxlYXNlT25FZGdlcyIsInVuaXF1ZU5hdkVsZW1lbnRzIiwicmVzaXN0YW5jZSIsInJlc2lzdGFuY2VSYXRpbyIsIndhdGNoU2xpZGVzUHJvZ3Jlc3MiLCJncmFiQ3Vyc29yIiwic2xpZGVUb0NsaWNrZWRTbGlkZSIsInByZWxvYWRJbWFnZXMiLCJ1cGRhdGVPbkltYWdlc1JlYWR5IiwibG9vcCIsImxvb3BBZGRpdGlvbmFsU2xpZGVzIiwibG9vcGVkU2xpZGVzIiwibG9vcGVkU2xpZGVzTGltaXQiLCJsb29wRmlsbEdyb3VwV2l0aEJsYW5rIiwibG9vcFByZXZlbnRzU2xpZGUiLCJyZXdpbmQiLCJzd2lwZUhhbmRsZXIiLCJub1N3aXBpbmciLCJub1N3aXBpbmdDbGFzcyIsIm5vU3dpcGluZ1NlbGVjdG9yIiwibWF4QmFja2ZhY2VIaWRkZW5TbGlkZXMiLCJjb250YWluZXJNb2RpZmllckNsYXNzIiwic2xpZGVDbGFzcyIsInNsaWRlQmxhbmtDbGFzcyIsInNsaWRlQWN0aXZlQ2xhc3MiLCJzbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzIiwic2xpZGVWaXNpYmxlQ2xhc3MiLCJzbGlkZUR1cGxpY2F0ZUNsYXNzIiwic2xpZGVOZXh0Q2xhc3MiLCJzbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyIsInNsaWRlUHJldkNsYXNzIiwic2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MiLCJ3cmFwcGVyQ2xhc3MiLCJydW5DYWxsYmFja3NPbkluaXQiLCJfZW1pdENsYXNzZXMiLCJwcm90b3R5cGVzIiwiZXZlbnRzRW1pdHRlciIsInByaW9yaXR5Iiwic2VsZiIsImV2ZW50c0xpc3RlbmVycyIsImRlc3Ryb3llZCIsIm9uY2UiLCJvbmNlSGFuZGxlciIsIl9fZW1pdHRlclByb3h5Iiwib25BbnkiLCJldmVudHNBbnlMaXN0ZW5lcnMiLCJvZmZBbnkiLCJldmVudEhhbmRsZXIiLCJ1cGRhdGUiLCIkZWwiLCJjbGllbnRXaWR0aCIsIm
101NsaWVudEhlaWdodCIsImlzSG9yaXpvbnRhbCIsImlzVmVydGljYWwiLCJwYXJzZUludCIsIk51bWJlciIsImlzTmFOIiwiYXNzaWduIiwic2l6ZSIsImdldERpcmVjdGlvbkxhYmVsIiwicHJvcGVydHkiLCJtYXJnaW4tdG9wIiwibWFyZ2luLWJvdHRvbSAiLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsInBhZGRpbmctbGVmdCIsInBhZGRpbmctcmlnaHQiLCJtYXJnaW5SaWdodCIsImdldERpcmVjdGlvblByb3BlcnR5VmFsdWUiLCJsYWJlbCIsIiR3cmFwcGVyRWwiLCJzd2lwZXJTaXplIiwicnRsVHJhbnNsYXRlIiwicnRsIiwid3JvbmdSVEwiLCJpc1ZpcnR1YWwiLCJ2aXJ0dWFsIiwicHJldmlvdXNTbGlkZXNMZW5ndGgiLCJzbGlkZXNMZW5ndGgiLCJzbGlkZXNHcmlkIiwic2xpZGVzU2l6ZXNHcmlkIiwib2Zmc2V0QmVmb3JlIiwib2Zmc2V0QWZ0ZXIiLCJwcmV2aW91c1NuYXBHcmlkTGVuZ3RoIiwicHJldmlvdXNTbGlkZXNHcmlkTGVuZ3RoIiwic2xpZGVQb3NpdGlvbiIsInByZXZTbGlkZVNpemUiLCJ2aXJ0dWFsU2l6ZSIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5Ub3AiLCJncmlkRW5hYmxlZCIsImluaXRTbGlkZXMiLCJzbGlkZVNpemUiLCJzaG91bGRSZXNldFNsaWRlU2l6ZSIsImN1cnJlbnRUcmFuc2Zvcm0iLCJjdXJyZW50V2ViS2l0VHJhbnNmb3JtIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJzbGlkZSIsInVwZGF0ZVNsaWRlIiwic2xpZGVTdHlsZXMiLCJib3hTaXppbmciLCJmbG9vciIsInN3aXBlclNsaWRlU2l6ZSIsImFicyIsInVwZGF0ZVdyYXBwZXJTaXplIiwibmV3U2xpZGVzR3JpZCIsInNsaWRlc0dyaWRJdGVtIiwiXyIsInNsaWRlSW5kZXgiLCJhbGxTbGlkZXNTaXplIiwic2xpZGVTaXplVmFsdWUiLCJtYXhTbmFwIiwic25hcCIsImFsbFNsaWRlc09mZnNldCIsInNuYXBJbmRleCIsImFkZFRvU25hcEdyaWQiLCJhZGRUb1NsaWRlc0dyaWQiLCJ2IiwidXBkYXRlU2xpZGVzT2Zmc2V0IiwiYmFja0ZhY2VIaWRkZW5DbGFzcyIsImhhc0NsYXNzQmFja2ZhY2VDbGFzc0FkZGVkIiwidXBkYXRlQXV0b0hlaWdodCIsImFjdGl2ZVNsaWRlcyIsIm5ld0hlaWdodCIsInNldFRyYW5zaXRpb24iLCJnZXRTbGlkZUJ5SW5kZXgiLCJ2aXNpYmxlU2xpZGVzIiwiY2VpbCIsInN3aXBlclNsaWRlT2Zmc2V0Iiwib2Zmc2V0TGVmdCIsIm9mZnNldFRvcCIsInVwZGF0ZVNsaWRlc1Byb2dyZXNzIiwib2Zmc2V0Q2VudGVyIiwidmlzaWJsZVNsaWRlc0luZGV4ZXMiLCJzbGlkZU9mZnNldCIsInNsaWRlUHJvZ3Jlc3MiLCJtaW5UcmFuc2xhdGUiLCJvcmlnaW5hbFNsaWRlUHJvZ3Jlc3MiLCJzbGlkZUJlZm9yZSIsInNsaWRlQWZ0ZXIiLCJvcmlnaW5hbFByb2dyZXNzIiwidXBkYXRlUHJvZ3Jlc3MiLCJtdWx0aXBsaWVyIiwidHJhbnNsYXRlc0RpZmYiLCJtYXhUcmFuc2xhdGUiLCJ3YXNCZWdpbm5pbmciLCJ3YXNFbmQiLCJyZWFsSW5kZXgiLCJhY3RpdmVTbGlkZSIsIm5leHRTbGlkZSIsInByZXZTbGlkZSIsImVtaXRTbGlkZXNDbGFzc2VzIiwidXBkYXRlQWN0aXZlSW5kZXgiLCJuZXdBY3RpdmVJbmRleCIsInByZXZpb3VzUmVhbEluZGV4IiwicHJldmlvdXNTbmFwSW5kZXgiLCJza2lwIiwiaW5pdGlhbGl6ZWQiLCJ1cGRhdGVDbGlja2VkU2xpZGUiLCJzbGlkZUZvdW5kIiwiY2xpY2tlZFNsaWRlIiwiY2xpY2tlZEluZGV4IiwiY3VycmVudFRyYW5zbGF0ZSIsInNldFRyYW5zbGF0ZSIsImJ5Q29udHJvbGxlciIsIngiLCJ5IiwicHJldmlvdXNUcmFuc2xhdGUiLCJuZXdQcm9ncmVzcyIsInRyYW5zbGF0ZVRvIiwidHJhbnNsYXRlQm91bmRzIiwiaW50ZXJuYWwiLCJhbmltYXRpbmciLCJuZXdUcmFuc2xhdGUiLCJpc0giLCJiZWhhdmlvciIsIm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCIsInRyYW5zaXRpb25TdGFydCIsImluaXRpYWwiLCJFcnJvciIsImluZGV4QXNOdW1iZXIiLCJpc0Zpbml0ZSIsIm5vcm1hbGl6ZWRUcmFuc2xhdGUiLCJub3JtYWxpemVkR3JpZCIsIm5vcm1hbGl6ZWRHcmlkTmV4dCIsInQiLCJfaW1tZWRpYXRlVmlydHVhbCIsIl9zd2lwZXJJbW1lZGlhdGVWaXJ0dWFsIiwib25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQiLCJzbGlkZVRvTG9vcCIsIm5ld0luZGV4Iiwic2xpZGVOZXh0IiwicGVyR3JvdXAiLCJzbGlkZXNQZXJWaWV3RHluYW1pYyIsImluY3JlbWVudCIsImxvb3BGaXgiLCJfY2xpZW50TGVmdCIsInNsaWRlUHJldiIsIm5vcm1hbGl6ZSIsIm5vcm1hbGl6ZWRTbmFwR3JpZCIsInByZXZTbmFwIiwicHJldlNuYXBJbmRleCIsInByZXZJbmRleCIsImxhc3RJbmRleCIsInNsaWRlUmVzZXQiLCJzbGlkZVRvQ2xvc2VzdCIsImN1cnJlbnRTbmFwIiwic2xpZGVUb0luZGV4IiwibG9vcENyZWF0ZSIsIiRzZWxlY3RvciIsImJsYW5rU2xpZGVzTnVtIiwiYmxhbmtOb2RlIiwicHJlcGVuZFNsaWRlcyIsImFwcGVuZFNsaWRlcyIsImNsb25lTm9kZSIsImRpZmYiLCJsb29wRGVzdHJveSIsInNldEdyYWJDdXJzb3IiLCJtb3ZpbmciLCJpc0xvY2tlZCIsImN1cnNvciIsInVuc2V0R3JhYkN1cnNvciIsImF0dGFjaEV2ZW50cyIsInRvdWNoRXZlbnRzRGF0YSIsInRvdWNoZXMiLCIkdGFyZ2V0RWwiLCJvcmlnaW5hbEV2ZW50IiwiaXNUb3VjaEV2ZW50IiwidHlwZSIsIndoaWNoIiwiYnV0dG9uIiwiaXNUb3VjaGVkIiwiaXNNb3ZlZCIsInN3aXBpbmdDbGFzc0hhc1ZhbHVlIiwiZXZlbnRQYXRoIiwiY29tcG9zZWRQYXRoIiwicGF0aCIsInNoYWRvd1Jvb3QiLCJpc1RhcmdldFNoYWRvdyIsImFsbG93Q2xpY2siLCJjdXJyZW50WCIsInRhcmdldFRvdWNoZXMiLCJwYWdlWCIsImN1cnJlbnRZIiwicGFnZVkiLCJzdGFydFgiLCJzdGFydFkiLCJpT1NFZGdlU3dpcGVEZXRlY3Rpb24iLCJpT1NFZGdlU3dpcGVUaHJlc2hvbGQiLCJpbm5lcldpZHRoIiwicHJldmVudERlZmF1bHQiLCJhbGxvd1RvdWNoQ2FsbGJhY2tzIiwiaXNTY3JvbGxpbmciLCJzdGFydE1vdmluZyIsInRvdWNoU3RhcnRUaW1lIiwic3dpcGVEaXJlY3Rpb24iLCJhbGxvd1RocmVzaG9sZE1vdmUiLCJzaG91bGRQcmV2ZW50RGVmYXVsdCIsImlzQ29udGVudEVkaXRhYmxlIiwiZnJlZU1vZGUiLCJiaW5kIiwidGFyZ2V0VG91Y2giLCJjaGFuZ2VkVG91Y2hlcyIsInByZXZlbn
101RlZEJ5TmVzdGVkU3dpcGVyIiwiZGlmZlgiLCJkaWZmWSIsInNxcnQiLCJhdGFuMiIsInN0b3BQcm9wYWdhdGlvbiIsInN0YXJ0VHJhbnNsYXRlIiwiYWxsb3dNb21lbnR1bUJvdW5jZSIsImRpc2FibGVQYXJlbnRTd2lwZXIiLCJ0b3VjaEVuZFRpbWUiLCJ0aW1lRGlmZiIsInBhdGhUcmVlIiwibGFzdENsaWNrVGltZSIsImN1cnJlbnRQb3MiLCJzdG9wSW5kZXgiLCJncm91cFNpemUiLCJyZXdpbmRGaXJzdEluZGV4IiwicmV3aW5kTGFzdEluZGV4IiwicmF0aW8iLCJuYXZpZ2F0aW9uIiwibmV4dEVsIiwicHJldkVsIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiZGV0YWNoRXZlbnRzIiwiYnJlYWtwb2ludCIsImdldEJyZWFrcG9pbnQiLCJjdXJyZW50QnJlYWtwb2ludCIsImJyZWFrcG9pbnRQYXJhbXMiLCJvcmlnaW5hbFBhcmFtcyIsIndhc011bHRpUm93IiwiaXNNdWx0aVJvdyIsIndhc0VuYWJsZWQiLCJkaXJlY3Rpb25DaGFuZ2VkIiwiZW1pdENvbnRhaW5lckNsYXNzZXMiLCJmaWxsIiwid2FzTW9kdWxlRW5hYmxlZCIsImlzTW9kdWxlRW5hYmxlZCIsImRpc2FibGUiLCJlbmFibGUiLCJuZWVkc1JlTG9vcCIsImlzRW5hYmxlZCIsImNoYW5nZURpcmVjdGlvbiIsImNvbnRhaW5lckVsIiwiY3VycmVudEhlaWdodCIsImlubmVySGVpZ2h0IiwicG9pbnRzIiwicG9pbnQiLCJtaW5SYXRpbyIsInN1YnN0ciIsInNvcnQiLCJiIiwibGFzdFNsaWRlUmlnaHRFZGdlIiwid2FzTG9ja2VkIiwibGFzdFNsaWRlSW5kZXgiLCJhZGRDbGFzc2VzIiwic3VmZml4ZXMiLCJlbnRyaWVzIiwicHJlZml4IiwicmVzdWx0Q2xhc3NlcyIsIml0ZW0iLCJwb2ludGVyLWV2ZW50cyIsImZyZWUtbW9kZSIsImF1dG9oZWlnaHQiLCJncmlkLWNvbHVtbiIsImNzcy1tb2RlIiwiY2VudGVyZWQiLCJ3YXRjaC1wcm9ncmVzcyIsInJlbW92ZUNsYXNzZXMiLCJpbWFnZXMiLCJsb2FkSW1hZ2UiLCJpbWFnZUVsIiwic3Jjc2V0Iiwic2l6ZXMiLCJjaGVja0ZvckNvbXBsZXRlIiwib25SZWFkeSIsImNvbXBsZXRlIiwiaW1hZ2UiLCJvbmxvYWQiLCJvbmVycm9yIiwiaW1hZ2VzTG9h
101ZGVkIiwiaW1hZ2VzVG9Mb2FkIiwiY3VycmVudFNyYyIsImV4dGVuZGVkRGVmYXVsdHMiLCJTd2lwZXIiLCJzd2lwZXJzIiwibmV3UGFyYW1zIiwiYWxsTW9kdWxlc1BhcmFtcyIsIm1vZHVsZXMiLCJfX21vZHVsZXNfXyIsIm1vZCIsImV4dGVuZFBhcmFtcyIsIm1vZHVsZVBhcmFtTmFtZSIsIm1vZHVsZVBhcmFtcyIsImF1dG8iLCJkZXNrdG9wIiwic3dpcGVyUGFyYW1zIiwicGFzc2VkUGFyYW1zIiwiZXZlbnROYW1lIiwidmVsb2NpdHkiLCJ0b3VjaEV2ZW50c1RvdWNoIiwidG91Y2hFdmVudHNEZXNrdG9wIiwiY2xpY2tUaW1lb3V0IiwidmVsb2NpdGllcyIsInNldFByb2dyZXNzIiwiY2xzIiwiZ2V0U2xpZGVDbGFzc2VzIiwic2xpZGVFbCIsInVwZGF0ZXMiLCJ2aWV3IiwiZXhhY3QiLCJzcHYiLCJicmVha0xvb3AiLCJ0cmFuc2xhdGVkIiwidHJhbnNsYXRlVmFsdWUiLCJuZXdEaXJlY3Rpb24iLCJuZWVkVXBkYXRlIiwiY3VycmVudERpcmVjdGlvbiIsImNoYW5nZUxhbmd1YWdlRGlyZWN0aW9uIiwibW91bnQiLCJtb3VudGVkIiwiZ2V0V3JhcHBlclNlbGVjdG9yIiwid3JhcHBlciIsIm9wdGlvbnMiLCJkZXN0cm95IiwiZGVsZXRlSW5zdGFuY2UiLCJjbGVhblN0eWxlcyIsImRlbGV0ZVByb3BzIiwib2JqZWN0IiwiZXh0ZW5kRGVmYXVsdHMiLCJuZXdEZWZhdWx0cyIsImluc3RhbGxNb2R1bGUiLCJ1c2UiLCJtb2R1bGUiLCJtIiwiY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZCIsImNoZWNrUHJvcHMiLCJlbGVtZW50IiwiTmF2aWdhdGlvbiIsImdldEVsIiwidG9nZ2xlRWwiLCJkaXNhYmxlZCIsImRpc2FibGVkQ2xhc3MiLCJ0YWdOYW1lIiwibG9ja0NsYXNzIiwiJG5leHRFbCIsIiRwcmV2RWwiLCJvblByZXZDbGljayIsIm9uTmV4dENsaWNrIiwiaGlkZU9uQ2xpY2siLCJoaWRkZW5DbGFzcyIsIm5hdmlnYXRpb25EaXNhYmxlZENsYXNzIiwiX3MiLCJ0YXJnZXRFbCIsInBhZ2luYXRpb24iLCJjbGlja2FibGUiLCJpc0hpZGRlbiIsImNsYXNzZXNUb1NlbGVjdG9yIiwiUGFnaW5hdGlvbiIsInBmeCIsImJ1bGxldEVsZW1lbnQiLCJyZW5kZXJCdWxsZXQiLCJyZW5kZXJQcm9ncmVzc2JhciIsInJlbmRlckZyYWN0aW9uIiwicmVuZGVyQ3VzdG9tIiwicHJvZ3Jlc3NiYXJPcHBvc2l0ZSIsImR5bmFtaWNCdWxsZXRzIiwiZHluYW1pY01haW5CdWxsZXRzIiwiZm9ybWF0RnJhY3Rpb25DdXJyZW50IiwibnVtYmVyIiwiZm9ybWF0RnJhY3Rpb25Ub3RhbCIsImJ1bGxldENsYXNzIiwiYnVsbGV0QWN0aXZlQ2xhc3MiLCJtb2RpZmllckNsYXNzIiwiY3VycmVudENsYXNzIiwidG90YWxDbGFzcyIsInByb2dyZXNzYmFyRmlsbENsYXNzIiwicHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzIiwiY2xpY2thYmxlQ2xhc3MiLCJob3Jpem9udGFsQ2xhc3MiLCJ2ZXJ0aWNhbENsYXNzIiwicGFnaW5hdGlvbkRpc2FibGVkQ2xhc3MiLCJidWxsZXRzIiwiYnVsbGV0U2l6ZSIsImR5bmFtaWNCdWxsZXRJbmRleCIsImlzUGFnaW5hdGlvbkRpc2FibGVkIiwic2V0U2lkZUJ1bGxldHMiLCIkYnVsbGV0RWwiLCJwb3NpdGlvbiIsInRvdGFsIiwicGFnaW5hdGlvblR5cGUiLCJmaXJzdEluZGV4IiwibWlkSW5kZXgiLCJzdWZmaXgiLCJidWxsZXQiLCIkYnVsbGV0IiwiYnVsbGV0SW5kZXgiLCIkZmlyc3REaXNwbGF5ZWRCdWxsZXQiLCIkbGFzdERpc3BsYXllZEJ1bGxldCIsImR5bmFtaWNCdWxsZXRzTGVuZ3RoIiwiYnVsbGV0c09mZnNldCIsIm9mZnNldFByb3AiLCJwcm9ncmVzc2JhckRpcmVjdGlvbiIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwicmVuZGVyIiwicGFnaW5hdGlvbkhUTUwiLCJudW1iZXJPZkJ1bGxldHMiLCJBMTF5IiwiYTExeSIsIm5vdGlmaWNhdGlvbkNsYXNzIiwicHJldlNsaWRlTWVzc2FnZSIsIm5leHRTbGlkZU1lc3NhZ2UiLCJmaXJzdFNsaWRlTWVzc2FnZSIsImxhc3RTbGlkZU1lc3NhZ2UiLCJwYWdpbmF0aW9uQnVsbGV0TWVzc2FnZSIsInNsaWRlTGFiZWxNZXNzYWdlIiwiY29udGFpbmVyTWVzc2FnZSIsImNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UiLCJpdGVtUm9sZURlc2NyaXB0aW9uTWVzc2FnZSIsInNsaWRlUm9sZSIsImNsaWNrZWQiLCJsaXZlUmVnaW9uIiwibm90aWZ5IiwibWVzc2FnZSIsIm5vdGlmaWNhdGlvbiIsIm1ha2VFbEZvY3VzYWJsZSIsIm1ha2VFbE5vdEZvY3VzYWJsZSIsImFkZEVsUm9sZSIsInJvbGUiLCJhZGRFbFJvbGVEZXNjcmlwdGlvbiIsImRlc2NyaXB0aW9uIiwiYWRkRWxMYWJlbCIsImRpc2FibGVFbCIsImVuYWJsZUVsIiwib25FbnRlck9yU3BhY2VLZXkiLCJrZXlDb2RlIiwiY2xpY2siLCJoYXNQYWdpbmF0aW9uIiwiaGFzQ2xpY2thYmxlUGFnaW5hdGlvbiIsImluaXROYXZFbCIsIndyYXBwZXJJZCIsImhhbmRsZVBvaW50ZXJEb3duIiwiaGFuZGxlUG9pbnRlclVwIiwiaGFuZGxlRm9jdXMiLCJpc0FjdGl2ZSIsImlzVmlzaWJsZSIsImluY2x1ZGVzIiwic291cmNlQ2FwYWJpbGl0aWVzIiwiZmlyZXNUb3VjaEV2ZW50cyIsIiRzbGlkZUVsIiwiJGNvbnRhaW5lckVsIiwicmVwZWF0Iiwicm91bmQiLCJyYW5kb20iLCJsaXZlIiwidXBkYXRlUGFnaW5hdGlvbiIsImJ1bGxldEVsIiwiQXV0b3BsYXkiLCJ0aW1lb3V0IiwiJGFjdGl2ZVNsaWRlRWwiLCJhdXRvcGxheVJlc3VsdCIsInJldmVyc2VEaXJlY3Rpb24iLCJzdG9wT25MYXN0U2xpZGUiLCJzdG9wIiwicGF1c2UiLCJ3YWl0Rm9yVHJhbnNpdGlvbiIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsInZpc2liaWxpdHlTdGF0ZSIsIm9uTW91c2VFbnRlciIsImRpc2FibGVPbkludGVyYWN0aW9uIiwib25Nb3VzZUxlYXZlIiwicGF1c2VPbk1vdXNlRW50ZXIiLCJtb21lbnR1bSIsIm1vbWVudHVtUmF0aW8iLCJtb21lbnR1bUJvdW5jZSIsIm1vbWVudHVtQm91bmNlUmF0aW8iLCJtb21lbnR1bVZlbG9jaXR5UmF0aW8iLCJzdGlja3kiLCJtaW5pbXVtVmVsb2NpdHkiLCJsYXN0TW92ZUV2ZW50IiwicG9wIiwidmVsb2NpdHlFdmVudCIsImRpc3RhbmNlIiwibW9tZW50dW1EdXJhdGlvbiIsIm1vbWVudHVtRGlzdGFuY2UiLCJuZXdQb3NpdGlvbiIsImRvQm91bmNlIiwiYWZ0ZXJCb3VuY2VQb3NpdGlvbiIsImJvdW5jZUFtb3VudCIsIm5lZWRzTG9vcEZpeCIsIm1vdmVEaXN0YW5jZSIsImN1cnJlbnRTbGlkZVNpemUiLCJlZmZlY3RJbml0Iiwib3ZlcndyaXRlUGFyYW1zIiwicGVyc3BlY3RpdmUiLCJyZWNyZWF0ZVNoYWRvd3MiLCJnZXRFZmZlY3RQYXJhbXMiLCJvdmVyd3JpdGVQYXJhbXNSZXN1bHQiLCJzbGlkZVNoYWRvd3MiLCJyZXF1aXJlVXBkYXRlT25WaXJ0dWFsIiwiZWZmZWN0VGFyZ2V0IiwiZWZmZWN0UGFyYW1zIiwidHJhbnNmb3JtRWwiLCJiYWNrZmFjZS12aXNpYmlsaXR5IiwiLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5IiwiZWZmZWN0VmlydHVhbFRyYW5zaXRpb25FbmQiLCJhbGxTbGlkZXMiLCJldmVudFRyaWdnZXJlZCIsIiR0cmFuc2l0aW9uRW5kVGFyZ2V0IiwidHJpZ2dlckV2ZW50cyIsIkVmZmVjdEZhZGUiLCJmYWRlRWZmZWN0IiwiY3Jvc3NGYWRlIiwidHgiLCJ0eSIsInNsaWRlT3BhY2l0eSIsIkVmZmVjdENhcmRzIiwiY2FyZHNFZmZlY3QiLCJyb3RhdGUiLCJwZXJTbGlkZVJvdGF0ZSIsInBlclNsaWRlT2Zmc2V0IiwidFgiLCJ0WSIsInRaIiwidFhBZGQiLCJmcm9tIiwiaXNTd2lwZVRvTmV4dCIsImlzU3dpcGVUb1ByZXYiLCJzY2FsZVN0cmluZyIsInN1YlByb2dyZXNzIiwicHJldlkiLCIkc2hhZG93RWwiLCJzaGFkb3dDbGFzcyIsIiRzaGFkb3dDb250YWluZXIiLCJ6SW5kZXgiLCJwcm90b3R5cGVHcm91cCIsInByb3RvTWV0aG9kIiwib2JzZXJ2ZXIiLCJhbmltYXRpb25GcmFtZSIsInJlc2l6ZUhhbmRsZXIiLCJvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIiLCJSZXNpemVPYnNlcnZlciIsIm5ld1dpZHRoIiwiY29udGVudEJveFNpemUiLCJjb250ZW50UmVjdCIsImlubGluZVNpemUiLCJibG9ja1NpemUiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwib2JzZXJ2ZXJzIiwiYXR0YWNoIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYmtpdE11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJvYnNlcnZlclVwZGF0ZSIsImF0dHJpYnV0ZXMiLCJjaGlsZExpc3QiLCJjaGFyYWN0ZXJEYXRhIiwib2JzZXJ2ZVBhcmVudHMiLCJvYnNlcnZlU2xpZGVDaGlsZHJlbiIsImNvbn
101RhaW5lclBhcmVudHMiLCJkaXNjb25uZWN0Iiwic2V0Q3VycmVudFZpZXdXaWR0aCIsImNsaWVudFZ3IiwialF1ZXJ5Iiwic3BlY2lhbCIsInRvdWNoc3RhcnQiLCJzZXR1cCIsIm5zIiwiaGFuZGxlIiwidG91Y2htb3ZlIiwid2hlZWwiLCJtb3VzZXdoZWVsIiwiZ2xvYmFsU2VhcmNoIiwiaGVhZGVyIiwidG9vbGJhciIsInRvb2xiYXJTZWFyY2hCdXR0b24iLCJ0b29sYmFyTmF2aWdhdGlvbiIsIm1haW5NZW51V3JhcCIsImZvY3VzYWJsZUVscyIsImZpcnN0Rm9jdXNhYmxlRWwiLCJsYXN0Rm9jdXNhYmxlRWwiLCJxdWlja0xpbmtzIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiY2xvc2VHbG9iYWxTZWFyY2giLCJoYW5kbGVSZXNpemUiLCJoYW5kbGVLZXlEb3duIiwic2hpZnRLZXkiLCJmb2N1cyIsIm9wZW5HbG9iYWxTZWFyY2giLCJzbGlkZURvd24iLCJyZW1vdmVQcm9wZXJ0eSIsInBhZGRpbmdCb3R0b20iLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidHJhbnNpdGlvblByb3BlcnR5IiwiaGFuZGxlUmVzcG9uc2l2ZSIsIm1haW5NZW51IiwibmF2U2VhcmNoQnV0dG9uIiwibmF2U2VhcmNoQnV0dG9uVGl0bGUiLCJ0aXRsZSIsIm5hdlNlYXJjaEJ1dHRvblRpdGxlQ2xvc2UiLCJkb25hdGVCdXR0b24iLCJjbG9zZU1vYmlsZU1lbnUiLCJiZWZvcmUiLCJ0b3BpY0J1dHRvbiIsInN1Yk1lbnVOYXZXcmFwIiwic3ViTWVudU5hdiIsInN1Yk1lbnVCdXR0b25zTmV4dCIsInN1Yk1lbnVCdXR0b25zQmFjayIsInN1Yk1lbnVGaXJzdExpc3QiLCJzdWJNZW51Q3VycmVudExpbmsiLCJnZXRDdXJyZW50Rmlyc3RGb2N1c2FibGVFbGVtZW50cyIsImVsZW1lbnRzT25TaG93IiwiZ2V0Q2xpZW50UmVjdHMiLCJzaG93Q3VycmVudFN1Yk1lbnVMaXN0IiwiY3VycmVudExpc3QiLCJlbGVtIiwibGluayIsImhpZGVBbGxTdWJtZW51Tm9kZXMiLCJzdWJNZW51TGlzdHMiLCJzdWJNZW51SXRlbXMiLCJzdWJNZW51QnV0dG9ucyIsImxpc3QiLCJjbG9zZVN1Yk1lbnVOYXYiLCJ2aXNpYmlsaXR5IiwibmV4dEJ1dHRvbiIsImJhY2tCdXR0b24iLCJjbG9zZUN1cnJlbnRTdWJNZW51IiwicHJldmlvdXNMaXN0IiwicGFyZW50RWxlbWVudCIsImxhc3RTY3JvbGxUb3AiLCJoYW5kbGVTY3JvbGwiLCJsYW5ndWFnZU1lbnVTZWxlY3QiLCJzZWxlY3QiLCJsYW5ndWFnZU1lbnUiLCJzZWxlY3RlZE9wdGlvblZhbHVlIiwic2VsZWN0ZWRJbmRleCIsImRhdGFzZXQiLCJmbGFnIiwiaHRtbExhbmd1YWdlIiwibGFuZyIsInN1YnN0cmluZyIsImJyb3dzZXJMYW5ndWFnZSIsImxhbmd1YWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJnZXRJdGVtIiwiaW5pdFRpbWUiLCJjdXJyZW50VGltZSIsInNldEl0ZW0iLCJsYW5ndWFnZVN1Z2dlc3RNZXNzYWdlQ3VycmVudCIsImxhbmd1YWdlU3VnZ2VzdE1lc3NhZ2VTdWdnZXN0IiwibGFuZ3VhZ2VTdWdnZXN0Q2xvc2UiLCJyZXNlcnZlSGVpZ2h0IiwiY2xvc2VMYW5ndWFnZVN1Z2dlc3QiLCJ3cmFwIiwiZm9ybVNlbGVjdHMiLCJmb3JtVHh0SW5wdXRzIiwid3JhcElubmVyIiwicmVhZHkiLCJjdXN0b21MYWJlbCIsImluc2VydEFmdGVyIiwiYnNDdXN0b21GaWxlSW5wdXQiLCJ0ZXh0QXJlYSIsInByZXZlbnREaXNhYmxlZEJ1dHRvbnMiLCJyZW1vdmVEZXNjcmlwdGlvbiIsInJlbW92ZUxpbmsiLCJyZXBsYWNlV2l0aCIsImFsbFN3aXBlckVsZW1lbnRzIiwic3dpcGVySWQiLCJnYWxsZXJ5QW5ub3VuY2VtZW50cyIsImdhbGxlcnlOZXh0IiwiZ2FsbGVyeVByZXYiLCJnYWxsZXJ5UGFnaW5hdGlvbkJ1bGxldCIsInNsaWRlQ2hhbmdlIiwiY3VycmVudFNsaWRlIiwiZ2FsbGVyeUltYWdlIiwiY2VudGVyTmF2aWdhdGlvbnMiLCJzd2lwZXJOYXZpZ2F0aW9uUHJldiIsInN3aXBlckVsZW1lbnQiLCJzd2lwZXJOYXZpZ2F0aW9uTmV4dCIsInN3aXBlck5hdmlnYXRpb25JZGVhbFRvcFZhbHVlIiwidGVhc2VyQW5ub3VuY2VtZW50cyIsIkZyZWVNb2RlIiwidGVhc2VySW1hZ2UiLCJ0ZWFzZXJJdGVtIiwibmV3c0ltYWdlIiwibmV3c0Fubm91bmNlbWVudHMiLCJhbHQiLCJuZXdzR3JleUNvbnRhaW5lciIsImFjY29yZGlvbiIsInRvZ2dsZUFjY29yZGlvbiIsImV4cGFuZGVkIiwiY29udGVudCIsInNsaWRlVG9nZ2xlIiwiZm9vdGVyIiwiYWNjb3JkaW9uVHJpZ2dlciIsImFjY29yZGlvbkxhYmVsIiwic3dpdGNoVG9CdXR0b25zIiwic2hvdyIsImhpZGUiLCJyZXNpemUiLCJleHBhbmRhYmxlVGV4dHMiLCJleHBhbmRhYmxlVGV4dFRyaWdnZXJzIiwiZXhwYW5kYWJsZVRleHQiLCJzY3JvbGxIZWlnaHQiLCJleHBhbmRhYmxlVGV4dFRyaWdnZXIiLCJtYXhIZWlnaHQiLCJ0ZXh0bWVkaWFCZXNpZGUiLCJkb25hdGlvbkN0YSIsInNob3dEb25hdGlvbkN0YSIsImhpZGVEb25hdGlvbkN0YSIsImRvbmF0aW9uQ3RhUG9zaXRpb24iLCJkb25hdGlvbkN0YUhlaWdodCIsImZvb3RlclBvc2l0aW9uIiwiZm9vdGVySGVpZ2h0IiwiZG9uYXRpb25UeXBlVXNlciIsImRvbmF0aW9uVHlwZVVzZXJTZWNyZXQiLCJkb25hdGlvblR5cGVDb21wYW55IiwiY29tcGFueUFkZHJlc3MiLCJwZXJzb25hbERhdGEiLCJwYXltZW50RnJlcXVlbmN5T25jZSIsInBheW1lbnRGcmVxdWVuY2llcyIsInBheW1lbnRCdXR0b25zIiwicGF5bWVudFNlcGEiLCJwYXltZW50Q3JlZGl0Q2FyZCIsIm1vZGUiLCJjaGVja2VkIiwiYWN0aXZlQnV0dG9uIiwiZnJhbWUiLCJ2aWRlb1N3aXBlckVsZW1lbnRzIiwidmlkZW9Td2lwZXJFbGVtZW50IiwiYW5ub3VuY2VtZW50cyIsInZpZGVvR2FsbGVyeU5leHQiLCJ2aWRlb0dhbGxlcnlQcmV2IiwidmlkZW9HYWxsZXJ5UGFnaW5hdGlvbkJ1bGxldCIsInZpZGVvR2FsbGVyeVZpZGVvIiwiZG9uYXRpb25CYXJvbWV0ZXIiLCJkb25hdGlvbkJ1dHRvbiIsIk1lbWJlcnNoaXAiLCIkZm9ybSIsIiR6aXBGaWVsZCIsIiRtYWlsRmllbGQiLCIkdXJsRmllbGQiLCIkY2hhcHRlck5hbWVGaWVsZCIsIiRjaGFwdGVyU2VsZWN0RmllbGQiLCIkY2hhcHRlclNlbGVjdENvbnRhaW5lciIsIiRmaXJzdENoYXB0ZXJTZWxlY3RPcHRpb24iLCIkc3VibWl0QnV0dG9uIiwiJGluZm9ybWF0aW9uRmllbGQiLCJlcnJvckNsYXNzIiwiX3RpbWVvdXQiLCJhZGRQYXJzbGV5VmFsaWRhdG9yIiwiJHJlcXVpcmVkVGV4dCIsImNsb25lIiwicHJveHkiLCJfaGFuZGxlWmlwSW5wdXQiLCJfcmVxdW
101VzdExvY2FsQ2hhcHRlcnMiLCJQYXJzbGV5IiwiYWRkVmFsaWRhdG9yIiwicmVxdWlyZW1lbnRUeXBlIiwidmFsaWRhdGVOdW1iZXIiLCJyZXF1aXJlbWVudCIsIm1lc3NhZ2VzIiwiZGUiLCJlbiIsImdldFJlcXVlc3RVcmwiLCJfdGltZW91dElkIiwiemlwY29kZSIsIl9vbGRaaXBjb2RlIiwibG9hZGluZ0NsYXNzIiwiYWpheCIsImRhdGFUeXBlIiwic3VjY2VzcyIsIl9oYW5kbGVSZXNwb25zZSIsImVycm9yIiwiX2hhbmRsZUVycm9yIiwiZGVmYXVsdEVycm9yIiwicmVzcG9uc2UiLCJjaGFwdGVycyIsIm9yZ0lkIiwib3JnZGF0YSIsImhhc093blByb3BlcnR5IiwiX3JlbmRlckNoYXB0ZXJTZWxlY3Rpb24iLCJfaGFuZGxlU3VjY2VzcyIsIndhcm5pbmciLCJfcmVzZXRDaGFwdGVySW5mb3JtYXRpb24iLCJfaGlkZUNoYXB0ZXJTZWxlY3Rpb24iLCJtYWlsIiwibmFtZSIsIl9oYW5kbGVTZWxlY3RDaGFuZ2UiLCJfdXBkYXRlQ2hhcHRlckluZm9ybWF0aW9uIiwiJGVycm9yIiwic2VsZWN0ZWRPcHRpb24iLCJwYXJzbGV5IiwiYWRkTWVzc2FnZXMiLCJkZWZhdWx0TWVzc2FnZSIsImVtYWlsIiwiaW50ZWdlciIsImRpZ2l0cyIsImFscGhhbnVtIiwidGVsIiwibm90YmxhbmsiLCJyZXF1aXJlZCIsInBhdHRlcm4iLCJyYW5nZSIsIm1pbmxlbmd0aCIsIm1heGxlbmd0aCIsIm1pbmNoZWNrIiwibWF4Y2hlY2siLCJjaGVjayIsImVxdWFsdG8iLCJzZXRMb2NhbGUiLCIkbWFpbEZvcm0iLCJ0ZWxlcGhvbmVOdW1iZXIiLCJvcmlnaW5hbE5vZGUiLCJjbGVhbmVkVGVsZXBob25lTnVtYmVyIiwicmVwbGFjZUNoaWxkIiwiZmlyc3RGcmFtZUhlYWRlciIsImNhdGVnb3J5Il0sIm1hcHBpbmdzIjoieUJBa0JPLE1BQU1BLEVBQXdCLEtBQ25DLElBQU1DLEVBQWNDLFNBQVNDLGNBQWMsZ0JBQWd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BQWFua0MsV0FBV3FrQyxhQU
101Fhdk0sRUFBTXFNLENBQVksQ0FDM0QsQ0FBRyxFQ3BCSTV5QyxTQUFTQyxjQUFjLG1CQUFtQixJQUV6Qzh5QyxFQUFtQi95QyxTQUFTQyxjQUFjLDBDQUEwQyxFQUNwRit5QyxFQUFXaHpDLFNBQVNDLGNBQWMsZ0JBQWdCLEVBSXBEOHlDLElBQW9CQyxJQUN0QkQsRUFBaUJsbEMsWUFBWW1sQyxDQUFRLEVBQ3JDQSxFQUFTdnlDLE1BQU1NLFFBQVUsUSIsImZpbGUiOiJjb2xsZWN0aW9uLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyB3aWxsIGFkZCBhIENTUyBjdXN0b20gcHJvcGVydHkgZm9yIHRoZSBhY3R1YWwgdncgd2l0aG91dCBzY3JvbGxiYXJcbiAqL1xuXG5leHBvcnQgY29uc3Qgc2V0Vmlld1dpZHRoID0gKCkgPT4ge1xuICBmdW5jdGlvbiBzZXRDdXJyZW50Vmlld1dpZHRoICgpIHtcbiAgICBjb25zdCBjbGllbnRWdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aFxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1jbGllbnQtdncnLCBgJHtjbGllbnRWd31weGApXG4gIH1cblxuICBzZXRDdXJyZW50Vmlld1dpZHRoKClcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNldEN1cnJlbnRWaWV3V2lkdGgpXG59XG5cbi8qKlxuICogUmVzZXJ2ZSBzcGFjZSBmb3IgYWxsIG1lbnVzIGFuZCB0b29sYmFycyBpbiBmaXhlZCBoZWFkZXJcbiAqL1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICBjb25zdCBib2R5V3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ib2R5X193cmFwcGVyJylcbiAgY29uc3QgbGFuZ3VhZ2VTdWdnZXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhbmd1YWdlLXN1Z2dlc3QnKVxuICBjb25zdCB0b29sYmFyV3JhcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyX193cmFwJylcbiAgY29uc3Qgc3ViTWVudUJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdWItbWVudV9fYmFyJylcblxuICAvLyBFeGl0IGlmIG5vbmUgb2YgdGhlIGVsZW1lbnRzIGFyZSBhdmFpbGFibGVcbiAgaWYgKCFib2R5V3JhcHBlciB8fCAhdG9vbGJhcldyYXApIHsgcmV0dXJuIH1cblxuICAvLyBHZXQgYWxsIGhlaWdodCB2YWx1ZXNcbiAgY29uc3QgbGFuZ3VhZ2VTdWdnZXN0SGVpZ2h0ID0gbGFuZ3VhZ2VTdWdnZXN0ID8gbGFuZ3VhZ2VTdWdnZXN0Lm9mZnNldEhlaWdodCA6IDBcbiAgY29uc3QgdG9vbGJhcldyYXBIZWlnaHQgPSB0b29sYmFyV3JhcC5vZmZzZXRIZWlnaHRcbiAgY29uc3Qgc3ViTWVudUJhckhlaWdodCA9IHN1Yk1lbnVCYXIgPyBzdWJNZW51QmFyLm9mZnNldEhlaWdodCA6IDBcblxuICBib2R5V3JhcHBlci5zdHlsZS5wYWRkaW5nVG9wID0gYCR7bGFuZ3VhZ2VTdWdnZXN0SGVpZ2h0ICsgdG9vbGJhcldyYXBIZWlnaHQgKyBzdWJNZW51QmFySGVpZ2h0fXB4YFxufVxuXG5leHBvcnQgY29uc3QgcmVzZXJ2ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgY2FsY3VsYXRlSGVhZGVySGVpZ2h0KClcblxuICAvLyBSZXNlcnZlIGhlaWdodCBvbiBsb2FkLCByZXNpemUgYW5kIHNjcm9sbFxuICBjYWxjdWxhdGVIZWFkZXJIZWlnaHQoKVxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2FsY3VsYXRlSGVhZGVySGVpZ2h0KVxufVxuIiwiLyoqXG4gKiBTbW9vdGggZmFkaW5nIGluIHdpdGggb3BhY2l0eVxuICpcbiAqIEBwYXJhbSBlbCBlbGVtZW50IHRvIGZhZGVcbiAqL1xuY29uc3QgZmFkZU91dCA9IGVsID0+IHtcbiAgZWwuc3R5bGUub3BhY2l0eSA9IDE7XG4gIChmdW5jdGlvbiBmYWRlICgpIHtcbiAgICBpZiAoKGVsLnN0eWxlLm9wYWNpdHkgLT0gMC4xKSA8IDApIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShmYWRlKVxuICAgIH1cbiAgfSkoKVxufVxuXG4vKipcbiAqIFNtb290aCBmYWRpbmcgaW4gd2l0aCBvcGFjaXR5XG4gKlxuICogQHBhcmFtIGVsIGVsZW1lbnQgdG8gZmFkZVxuICogQHBhcmFtIGRpc3BsYXkgdGFyZ2V0IGRpc3BsYXkgcHJvcGVydHkgKGRlZmF1bHQgYmxvY2spXG4gKi9cbmNvbnN0IGZhZGVJbiA9IChlbCwgZGlzcGxheSkgPT4ge1xuICBlbC5zdHlsZS5vcGFjaXR5ID0gMFxuICBlbC5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheSB8fCAnYmxvY2snO1xuICAoZnVuY3Rpb24gZmFkZSAoKSB7XG4gICAgbGV0IHZhbCA9IHBhcnNlRmxvYXQoZWwuc3R5bGUub3BhY2l0eSlcbiAgICBpZiAoISgodmFsICs9IDAuMSkgPiAxKSkge1xuICAgICAgZWwuc3R5bGUub3BhY2l0eSA9IHZhbFxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZhZGUpXG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogU2xpZGUgdG9nZ2xlIHNob3J0aGFuZFxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0YXJnZXQgZWxlbWVudCB0byBzbGlkZVxuICogQHBhcmFtIHtudW1iZXJ9IGR1cmF0aW9uIGR1cmF0aW9uIChkZWZhdWx0IDUwMG1zKVxuICovXG5cbmNvbnN0IHNsaWRlVG9nZ2xlID0gKHRhcmdldCwgZHVyYXRpb24gPSA1MDApID0+IHtcbiAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgcmV0dXJuIHNsaWRlRG93bih0YXJnZXQsIGR1cmF0aW9uKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzbGlkZVVwKHRhcmdldCwgZHVyYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBTbGlkZSB1cCBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdGFyZ2V0IGVsZW1lbnQgdG8gc2xpZGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiBkdXJhdGlvbiAoZGVmYXVsdCA1MDBtcylcbiAqL1xuXG5jb25zdCBzbGlkZVVwID0gKHRhcmdldCwgZHVyYXRpb24gPSA1MDApID0+IHtcbiAgdGFyZ2V0LnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eSA9ICdoZWlnaHQsIG1hcmdpbiwgcGFkZGluZywgYm9yZGVyLXdpZHRoJ1xuICB0YXJnZXQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gZHVyYXRpb24gKyAnbXMnXG4gIHRhcmdldC5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IHRhcmdldC5vZmZzZXRIZWlnaHQgKyAncHgnXG4gIHRhcmdldC5vZmZzZXRIZWlnaHQgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB0YXJnZXQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICB0YXJnZXQuc3R5bGUuaGVpZ2h0ID0gMFxuICB0YXJnZXQuc3R5bGUucGFkZGluZ1RvcCA9IDBcbiAgdGFyZ2V0LnN0eWxlLnBhZGRpbmdCb3R0b20gPSAwXG4gIHRhcmdldC5zdHlsZS5tYXJnaW5Ub3AgPSAwXG4gIHRhcmdldC5zdHlsZS5tYXJnaW5Cb3R0b20gPSAwXG4gIHRhcmdldC5zdHlsZS5ib3JkZXJUb3BXaWR0aCA9IDBcbiAgdGFyZ2V0LnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gMFxuICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2hlaWdodCcpXG4gICAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdwYWRkaW5nLXRvcCcpXG4gICAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdwYWRkaW5nLWJvdHRvbScpXG4gICAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4tdG9wJylcbiAgICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ21hcmdpbi1ib3R0b20nKVxuICAgIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnYm9yZGVyLXRvcC13aWR0aCcpXG4gICAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdib3JkZXItYm90dG9tLXdpZHR
101oJylcbiAgICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ292ZXJmbG93JylcbiAgICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3RyYW5zaXRpb24tZHVyYXRpb24nKVxuICAgIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndHJhbnNpdGlvbi1wcm9wZXJ0eScpXG4gIH0sIGR1cmF0aW9uKVxufVxuXG4vKipcbiAqIFNsaWRlIGRvd24gYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHRhcmdldCBlbGVtZW50IHRvIHNsaWRlXG4gKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gZHVyYXRpb24gKGRlZmF1bHQgNTAwbXMpXG4gKi9cblxuY29uc3Qgc2xpZGVEb3duID0gKHRhcmdldCwgZHVyYXRpb24gPSA1MDApID0+IHtcbiAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5JylcbiAgbGV0IGRpc3BsYXkgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLmRpc3BsYXlcbiAgaWYgKGRpc3BsYXkgPT09ICdub25lJykgZGlzcGxheSA9ICdibG9jaydcbiAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5XG4gIGNvbnN0IGhlaWdodCA9IHRhcmdldC5vZmZzZXRIZWlnaHRcbiAgdGFyZ2V0LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IDBcbiAgdGFyZ2V0LnN0eWxlLnBhZGRpbmdUb3AgPSAwXG4gIHRhcmdldC5zdHlsZS5wYWRkaW5nQm90dG9tID0gMFxuICB0YXJnZXQuc3R5bGUubWFyZ2luVG9wID0gMFxuICB0YXJnZXQuc3R5bGUubWFyZ2luQm90dG9tID0gMFxuICB0YXJnZXQuc3R5bGUuYm9yZGVyVG9wV2lkdGggPSAwXG4gIHRhcmdldC5zdHlsZS5ib3JkZXJCb3R0b21XaWR0aCA9IDBcbiAgdGFyZ2V0Lm9mZnNldEhlaWdodCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIHRhcmdldC5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCdcbiAgdGFyZ2V0LnN0eWxlLnRyYW5zaXRpb25Qcm9wZXJ0eSA9ICdoZWlnaHQsIG1hcmdpbiwgcGFkZGluZywgYm9yZGVyLXdpZHRoJ1xuICB0YXJnZXQuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gZHVyYXRpb24gKyAnbXMnXG4gIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnXG4gIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgncGFkZGluZy10b3AnKVxuICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3BhZGRpbmctYm90dG9tJylcbiAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4tdG9wJylcbiAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdtYXJnaW4tYm90dG9tJylcbiAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdib3JkZXItdG9wLXdpZHRoJylcbiAgdGFyZ2V0LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdib3JkZXItYm90dG9tLXdpZHRoJylcbiAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnaGVpZ2h0JylcbiAgICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ292ZXJmbG93JylcbiAgICB0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3RyYW5zaXRpb24tZHVyYXRpb24nKVxuICAgIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgndHJhbnNpdGlvbi1wcm9wZXJ0eScpXG4gIH0sIGR1cmF0aW9uKVxufVxuXG5leHBvcnQge1xuICBmYWRlT3V0LFxuICBmYWRlSW4sXG4gIHNsaWRlVG9nZ2xlLFxuICBzbGlkZVVwLFxuICBzbGlkZURvd24sXG59XG4iLCIvKipcbiAqIFNTUiBXaW5kb3cgNC4wLjJcbiAqIEJldHRlciBoYW5kbGluZyBmb3Igd2luZG93IG9iamVjdCBpbiBTU1IgZW52aXJvbm1lbnRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2xpbWl0czR3ZWIvc3NyLXdpbmRvd1xuICpcbiAqIENvcHlyaWdodCAyMDIxLCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICpcbiAqIFJlbGVhc2VkIG9uOiBEZWNlbWJlciAxMywgMjAyMVxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIChvYmogIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgJ2NvbnN0cnVjdG9yJyBpbiBvYmogJiZcbiAgICAgICAgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QpO1xufVxuZnVuY3Rpb24gZXh0ZW5kKHRhcmdldCA9IHt9LCBzcmMgPSB7fSkge1xuICAgIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W2tleV0gPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSBzcmNba2V5XTtcbiAgICAgICAgZWxzZSBpZiAoaXNPYmplY3Qoc3JjW2tleV0pICYmXG4gICAgICAgICAgICBpc09iamVjdCh0YXJnZXRba2V5XSkgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNyY1trZXldKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBleHRlbmQodGFyZ2V0W2tleV0sIHNyY1trZXldKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5jb25zdCBzc3JEb2N1bWVudCA9IHtcbiAgICBib2R5OiB7fSxcbiAgICBhZGRFdmVudExpc3RlbmVyKCkgeyB9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7IH0sXG4gICAgYWN0aXZlRWxlbWVudDoge1xuICAgICAgICBibHVyKCkgeyB9LFxuICAgICAgICBub2RlTmFtZTogJycsXG4gICAgfSxcbiAgICBxdWVyeVNlbGVjdG9yKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3JBbGwoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGdldEVsZW1lbnRCeUlkKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGNyZWF0ZUV2ZW50KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5pdEV2ZW50KCkgeyB9LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgIGNoaWxkTm9kZXM6IFtdLFxuICAgICAgICAgICAgc3R5bGU6IHt9LFxuICAgICAgICAgICAgc2V0QXR0cmlidXRlKCkgeyB9LFxuICAgICAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZUVsZW1lbnROUygpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgaW1wb3J0Tm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgaG9zdDogJycsXG4gICAgICAgIGhvc3RuYW1lOiAnJyxcbiAgICAgICAgaHJlZjogJycsXG4gICAgICAgIG9yaWdpbjogJycsXG4gICAgICAgI
101HBhdGhuYW1lOiAnJyxcbiAgICAgICAgcHJvdG9jb2w6ICcnLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG4gICAgY29uc3QgZG9jID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDoge307XG4gICAgZXh0ZW5kKGRvYywgc3NyRG9jdW1lbnQpO1xuICAgIHJldHVybiBkb2M7XG59XG5cbmNvbnN0IHNzcldpbmRvdyA9IHtcbiAgICBkb2N1bWVudDogc3NyRG9jdW1lbnQsXG4gICAgbmF2aWdhdG9yOiB7XG4gICAgICAgIHVzZXJBZ2VudDogJycsXG4gICAgfSxcbiAgICBsb2NhdGlvbjoge1xuICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgaG9zdDogJycsXG4gICAgICAgIGhvc3RuYW1lOiAnJyxcbiAgICAgICAgaHJlZjogJycsXG4gICAgICAgIG9yaWdpbjogJycsXG4gICAgICAgIHBhdGhuYW1lOiAnJyxcbiAgICAgICAgcHJvdG9jb2w6ICcnLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgIH0sXG4gICAgaGlzdG9yeToge1xuICAgICAgICByZXBsYWNlU3RhdGUoKSB7IH0sXG4gICAgICAgIHB1c2hTdGF0ZSgpIHsgfSxcbiAgICAgICAgZ28oKSB7IH0sXG4gICAgICAgIGJhY2soKSB7IH0sXG4gICAgfSxcbiAgICBDdXN0b21FdmVudDogZnVuY3Rpb24gQ3VzdG9tRXZlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG4gICAgYWRkRXZlbnRMaXN0ZW5lcigpIHsgfSxcbiAgICByZW1vdmVFdmVudExpc3RlbmVyKCkgeyB9LFxuICAgIGdldENvbXB1dGVkU3R5bGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBJbWFnZSgpIHsgfSxcbiAgICBEYXRlKCkgeyB9LFxuICAgIHNjcmVlbjoge30sXG4gICAgc2V0VGltZW91dCgpIHsgfSxcbiAgICBjbGVhclRpbWVvdXQoKSB7IH0sXG4gICAgbWF0Y2hNZWRpYSgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dChjYWxsYmFjaywgMCk7XG4gICAgfSxcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZShpZCkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICB9LFxufTtcbmZ1bmN0aW9uIGdldFdpbmRvdygpIHtcbiAgICBjb25zdCB3aW4gPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuICAgIGV4dGVuZCh3aW4sIHNzcldpbmRvdyk7XG4gICAgcmV0dXJuIHdpbjtcbn1cblxuZXhwb3J0IHsgZXh0ZW5kLCBnZXREb2N1bWVudCwgZ2V0V2luZG93LCBzc3JEb2N1bWVudCwgc3NyV2luZG93IH07XG4iLCIvKipcbiAqIERvbTcgNC4wLjZcbiAqIE1pbmltYWxpc3RpYyBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIERPTSBtYW5pcHVsYXRpb24sIHdpdGggYSBqUXVlcnktY29tcGF0aWJsZSBBUElcbiAqIGh0dHBzOi8vZnJhbWV3b3JrNy5pby9kb2NzL2RvbTcuaHRtbFxuICpcbiAqIENvcHlyaWdodCAyMDIzLCBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVFxuICpcbiAqIFJlbGVhc2VkIG9uOiBGZWJydWFyeSAyLCAyMDIzXG4gKi9cbmltcG9ydCB7IGdldFdpbmRvdywgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcblxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbmZ1bmN0aW9uIG1ha2VSZWFjdGl2ZShvYmopIHtcbiAgY29uc3QgcHJvdG8gPSBvYmouX19wcm90b19fO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19wcm90b19fJywge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBwcm90bztcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBwcm90by5fX3Byb3RvX18gPSB2YWx1ZTtcbiAgICB9XG5cbiAgfSk7XG59XG5cbmNsYXNzIERvbTcgZXh0ZW5kcyBBcnJheSB7XG4gIGNvbnN0cnVjdG9yKGl0ZW1zKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VwZXIoLi4uKGl0ZW1zIHx8IFtdKSk7XG4gICAgICBtYWtlUmVhY3RpdmUodGhpcyk7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gYXJyYXlGbGF0KGFyciA9IFtdKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBhcnIuZm9yRWFjaChlbCA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWwpKSB7XG4gICAgICByZXMucHVzaCguLi5hcnJheUZsYXQoZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnB1c2goZWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYXJyLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBhcnJheVVuaXF1ZShhcnIpIHtcbiAgY29uc3QgdW5pcXVlQXJyYXkgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh1bmlxdWVBcnJheS5pbmRleE9mKGFycltpXSkgPT09IC0xKSB1bmlxdWVBcnJheS5wdXNoKGFycltpXSk7XG4gIH1cblxuICByZXR1cm4gdW5pcXVlQXJyYXk7XG59XG5mdW5jdGlvbiB0b0NhbWVsQ2FzZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLy0oLikvZywgKG1hdGNoLCBncm91cCkgPT4gZ3JvdXAudG9VcHBlckNhc2UoKSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG5mdW5jdGlvbiBxc2Eoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgaWYgKHR5cGVvZiBzZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gW3NlbGVjdG9yXTtcbiAgfVxuXG4gIGNvbnN0IGEgPSBbXTtcbiAgY29uc3QgcmVzID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGEucHVzaChyZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGE7XG59XG5cbmZ1bmN0aW9uICQoc2VsZWN0b3IsIGNvbnRleHQpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgbGV0IGFyciA9IFtdO1xuXG4gIGlmICghY29udGV4dCAmJiBzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICByZXR1cm4gc2VsZWN0b3I7XG4gIH1cblxuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBEb203KGFycik7XG4gIH1cblxuICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGh0bWwgPSBzZWxlY3Rvci50cmltKCk7XG5cbiAgICBpZiAoaHRtbC5pbmRleE9mKCc8JykgPj0gMCAmJiBodG
1011sLmluZGV4T2YoJz4nKSA+PSAwKSB7XG4gICAgICBsZXQgdG9DcmVhdGUgPSAnZGl2JztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzxsaScpID09PSAwKSB0b0NyZWF0ZSA9ICd1bCc7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8dHInKSA9PT0gMCkgdG9DcmVhdGUgPSAndGJvZHknO1xuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRkJykgPT09IDAgfHwgaHRtbC5pbmRleE9mKCc8dGgnKSA9PT0gMCkgdG9DcmVhdGUgPSAndHInO1xuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRib2R5JykgPT09IDApIHRvQ3JlYXRlID0gJ3RhYmxlJztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzxvcHRpb24nKSA9PT0gMCkgdG9DcmVhdGUgPSAnc2VsZWN0JztcbiAgICAgIGNvbnN0IHRlbXBQYXJlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRvQ3JlYXRlKTtcbiAgICAgIHRlbXBQYXJlbnQuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW1wUGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXJyLnB1c2godGVtcFBhcmVudC5jaGlsZE5vZGVzW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXJyID0gcXNhKHNlbGVjdG9yLnRyaW0oKSwgY29udGV4dCB8fCBkb2N1bWVudCk7XG4gICAgfSAvLyBhcnIgPSBxc2Eoc2VsZWN0b3IsIGRvY3VtZW50KTtcblxuICB9IGVsc2UgaWYgKHNlbGVjdG9yLm5vZGVUeXBlIHx8IHNlbGVjdG9yID09PSB3aW5kb3cgfHwgc2VsZWN0b3IgPT09IGRvY3VtZW50KSB7XG4gICAgYXJyLnB1c2goc2VsZWN0b3IpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2VsZWN0b3IpKSB7XG4gICAgaWYgKHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykgcmV0dXJuIHNlbGVjdG9yO1xuICAgIGFyciA9IHNlbGVjdG9yO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBEb203KGFycmF5VW5pcXVlKGFycikpO1xufVxuXG4kLmZuID0gRG9tNy5wcm90b3R5cGU7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG5mdW5jdGlvbiBhZGRDbGFzcyguLi5jbGFzc2VzKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBhcnJheUZsYXQoY2xhc3Nlcy5tYXAoYyA9PiBjLnNwbGl0KCcgJykpKTtcbiAgdGhpcy5mb3JFYWNoKGVsID0+IHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzTmFtZXMpO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKC4uLmNsYXNzZXMpIHtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGFycmF5RmxhdChjbGFzc2VzLm1hcChjID0+IGMuc3BsaXQoJyAnKSkpO1xuICB0aGlzLmZvckVhY2goZWwgPT4ge1xuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3NOYW1lcyk7XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoLi4uY2xhc3Nlcykge1xuICBjb25zdCBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGMgPT4gYy5zcGxpdCgnICcpKSk7XG4gIHRoaXMuZm9yRWFjaChlbCA9PiB7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzcyguLi5jbGFzc2VzKSB7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBhcnJheUZsYXQoY2xhc3Nlcy5tYXAoYyA9PiBjLnNwbGl0KCcgJykpKTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKHRoaXMsIGVsID0+IHtcbiAgICByZXR1cm4gY2xhc3NOYW1lcy5maWx0ZXIoY2xhc3NOYW1lID0+IGVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKS5sZW5ndGggPiAwO1xuICB9KS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhdHRyKGF0dHJzLCB2YWx1ZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXR0cnMgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gR2V0IGF0dHJcbiAgICBpZiAodGhpc1swXSkgcmV0dXJuIHRoaXNbMF0uZ2V0QXR0cmlidXRlKGF0dHJzKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IC8vIFNldCBhdHRyc1xuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFN0cmluZ1xuICAgICAgdGhpc1tpXS5zZXRBdHRyaWJ1dGUoYXR0cnMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT2JqZWN0XG4gICAgICBmb3IgKGNvbnN0IGF0dHJOYW1lIGluIGF0dHJzKSB7XG4gICAgICAgIHRoaXNbaV1bYXR0ck5hbWVdID0gYXR0cnNbYXR0ck5hbWVdO1xuICAgICAgICB0aGlzW2ldLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cnNbYXR0ck5hbWVdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cihhdHRyKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHByb3AocHJvcHMsIHZhbHVlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBHZXQgcHJvcFxuICAgIGlmICh0aGlzWzBdKSByZXR1cm4gdGhpc1swXVtwcm9wc107XG4gIH0gZWxzZSB7XG4gICAgLy8gU2V0IHByb3BzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBTdHJpbmdcbiAgICAgICAgdGhpc1tpXVtwcm9wc10gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgICAgICAgdGhpc1tpXVtwcm9wTmFtZV0gPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybi
101B0aGlzO1xufVxuXG5mdW5jdGlvbiBkYXRhKGtleSwgdmFsdWUpIHtcbiAgbGV0IGVsO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwpIHJldHVybiB1bmRlZmluZWQ7IC8vIEdldCB2YWx1ZVxuXG4gICAgaWYgKGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UgJiYga2V5IGluIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV07XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YUtleSA9IGVsLmdldEF0dHJpYnV0ZShgZGF0YS0ke2tleX1gKTtcblxuICAgIGlmIChkYXRhS2V5KSB7XG4gICAgICByZXR1cm4gZGF0YUtleTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IC8vIFNldCB2YWx1ZVxuXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgZWwgPSB0aGlzW2ldO1xuICAgIGlmICghZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSA9IHt9O1xuICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGEoa2V5KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGVsID0gdGhpc1tpXTtcblxuICAgIGlmIChlbC5kb203RWxlbWVudERhdGFTdG9yYWdlICYmIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSkge1xuICAgICAgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldID0gbnVsbDtcbiAgICAgIGRlbGV0ZSBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRhdGFzZXQoKSB7XG4gIGNvbnN0IGVsID0gdGhpc1swXTtcbiAgaWYgKCFlbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZGF0YXNldCA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgaWYgKGVsLmRhdGFzZXQpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFLZXkgaW4gZWwuZGF0YXNldCkge1xuICAgICAgZGF0YXNldFtkYXRhS2V5XSA9IGVsLmRhdGFzZXRbZGF0YUtleV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWwuYXR0cmlidXRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgYXR0ciA9IGVsLmF0dHJpYnV0ZXNbaV07XG5cbiAgICAgIGlmIChhdHRyLm5hbWUuaW5kZXhPZignZGF0YS0nKSA+PSAwKSB7XG4gICAgICAgIGRhdGFzZXRbdG9DYW1lbENhc2UoYXR0ci5uYW1lLnNwbGl0KCdkYXRhLScpWzFdKV0gPSBhdHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGFzZXQpIHtcbiAgICBpZiAoZGF0YXNldFtrZXldID09PSAnZmFsc2UnKSBkYXRhc2V0W2tleV0gPSBmYWxzZTtlbHNlIGlmIChkYXRhc2V0W2tleV0gPT09ICd0cnVlJykgZGF0YXNldFtrZXldID0gdHJ1ZTtlbHNlIGlmIChwYXJzZUZsb2F0KGRhdGFzZXRba2V5XSkgPT09IGRhdGFzZXRba2V5XSAqIDEpIGRhdGFzZXRba2V5XSAqPSAxO1xuICB9XG5cbiAgcmV0dXJuIGRhdGFzZXQ7XG59XG5cbmZ1bmN0aW9uIHZhbCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIGdldCB2YWx1ZVxuICAgIGNvbnN0IGVsID0gdGhpc1swXTtcbiAgICBpZiAoIWVsKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGVsLm11bHRpcGxlICYmIGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzZWxlY3QnKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFsdWVzLnB1c2goZWwuc2VsZWN0ZWRPcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICByZXR1cm4gZWwudmFsdWU7XG4gIH0gLy8gc2V0IHZhbHVlXG5cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgZWwubXVsdGlwbGUgJiYgZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWwub3B0aW9ucy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBlbC5vcHRpb25zW2pdLnNlbGVjdGVkID0gdmFsdWUuaW5kZXhPZihlbC5vcHRpb25zW2pdLnZhbHVlKSA+PSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBlbC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB2YWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy52YWwodmFsdWUpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gIT09ICdzdHJpbmcnID8gYCR7ZHVyYXRpb259bXNgIDogZHVyYXRpb247XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gb24oLi4uYXJncykge1xuICBsZXQgW2V2ZW50VHlwZSwgdGFyZ2V0U2VsZWN0b3IsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG5cbiAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgW2V2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmVdID0gYXJncztcbiAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghY2FwdHVyZSkgY2FwdHVyZSA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpdmVFdmVudChlKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybjtcbiAgICBjb25zdCBldmVudERhdGEgPSBlLnRhcmdldC5kb203RXZlbnREYXRhIHx8IFtdO1xuXG4gICAgaWYgKGV2ZW50RGF0YS5pbmRleE9mKGUpIDwgMCkge1xuICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgfVxuXG4gICAgaWYgKCQodGFyZ2V0KS5pcyh0YXJnZXRTZWxlY3RvcikpIGxpc3RlbmVyLmFwcGx5KHRhcmdldCwgZXZlbnREYXRhKTtlbHNlIHtcbiAgICAgIGNvbnN0IHBhcmVudHMgPSAkKHRhcmdldCkucGFyZW50cygpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcGFyZW50cy5sZW5ndGg7IGsgKz0gMSkge1xuICAgICAgICBpZiAoJChwYXJlbnRzW2tdKS5pcyh0YXJnZXRTZWxlY3RvcikpIGxpc3RlbmVyLmFwcGx5KHBhcmVudHNba10sIGV2ZW50RGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXZlbnQoZSkge1xuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGUgJiYgZS50YXJnZXQgPyBlLnRhcmdldC5kb203RXZlbnREYXRhIHx8IFtdIDogW107XG5cbiAgICBpZiAoZXZlbnREYXRhLmluZGV4T2YoZSkgPCAwKSB7XG4gICAgICBldmVudERhdGEudW5zaGlmdChlKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudERhdGEpO1xuICB9XG5cbiAgY29uc3QgZXZlbnRzID0gZXZlbnRUeXBlLnNwbGl0KCcgJyk7XG4gIGxldCBqO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGVsID0gdGhpc1tpXTtcblxuICAgIGlmICghdGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBldmVudHMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbal07XG4gICAgICAgIGlmICghZWwuZG9tN0xpc3RlbmVycykgZWwuZG9tN0xpc3RlbmVycyA9IHt9O1xuICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdKSBlbC5kb203TGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICBlbC5kb203TGlzdGVuZXJzW2V2ZW50XS5wdXNoKHtcbiAgICAgICAgICBsaXN0ZW5lcixcbiAgICAgICAgICBwcm94eUxpc3RlbmVyOiBoYW5kbGVFdmVudFxuICAgICAgICB9KTtcbiAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlRXZlbnQsIGNhcHR1cmUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXZlIGV2ZW50c1xuICAgICAgZm9yIChqID0gMDsgaiA8IGV2ZW50cy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tqXTtcbiAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVycykgZWwuZG9tN0xpdmVMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgaWYgKCFlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF0pIGVsLmRvbTdMaX
101ZlTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgICBlbC5kb203TGl2ZUxpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgbGlzdGVuZXIsXG4gICAgICAgICAgcHJveHlMaXN0ZW5lcjogaGFuZGxlTGl2ZUV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVMaXZlRXZlbnQsIGNhcHR1cmUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBvZmYoLi4uYXJncykge1xuICBsZXQgW2V2ZW50VHlwZSwgdGFyZ2V0U2VsZWN0b3IsIGxpc3RlbmVyLCBjYXB0dXJlXSA9IGFyZ3M7XG5cbiAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgW2V2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmVdID0gYXJncztcbiAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghY2FwdHVyZSkgY2FwdHVyZSA9IGZhbHNlO1xuICBjb25zdCBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2ldO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXNbal07XG4gICAgICBsZXQgaGFuZGxlcnM7XG5cbiAgICAgIGlmICghdGFyZ2V0U2VsZWN0b3IgJiYgZWwuZG9tN0xpc3RlbmVycykge1xuICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgfSBlbHNlIGlmICh0YXJnZXRTZWxlY3RvciAmJiBlbC5kb203TGl2ZUxpc3RlbmVycykge1xuICAgICAgICBoYW5kbGVycyA9IGVsLmRvbTdMaXZlTGlzdGVuZXJzW2V2ZW50XTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhbmRsZXJzICYmIGhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGxldCBrID0gaGFuZGxlcnMubGVuZ3RoIC0gMTsgayA+PSAwOyBrIC09IDEpIHtcbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gaGFuZGxlcnNba107XG5cbiAgICAgICAgICBpZiAobGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gb25jZSguLi5hcmdzKSB7XG4gIGNvbnN0IGRvbSA9IHRoaXM7XG4gIGxldCBbZXZlbnROYW1lLCB0YXJnZXRTZWxlY3RvciwgbGlzdGVuZXIsIGNhcHR1cmVdID0gYXJncztcblxuICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBbZXZlbnROYW1lLCBsaXN0ZW5lciwgY2FwdHVyZV0gPSBhcmdzO1xuICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gb25jZUhhbmRsZXIoLi4uZXZlbnRBcmdzKSB7XG4gICAgbGlzdGVuZXIuYXBwbHkodGhpcywgZXZlbnRBcmdzKTtcbiAgICBkb20ub2ZmKGV2ZW50TmFtZSwgdGFyZ2V0U2VsZWN0b3IsIG9uY2VIYW5kbGVyLCBjYXB0dXJlKTtcblxuICAgIGlmIChvbmNlSGFuZGxlci5kb203cHJveHkpIHtcbiAgICAgIGRlbGV0ZSBvbmNlSGFuZGxlci5kb203cHJveHk7XG4gICAgfVxuICB9XG5cbiAgb25jZUhhbmRsZXIuZG9tN3Byb3h5ID0gbGlzdGVuZXI7XG4gIHJldHVybiBkb20ub24oZXZlbnROYW1lLCB0YXJnZXRTZWxlY3Rvciwgb25jZUhhbmRsZXIsIGNhcHR1cmUpO1xufVxuXG5mdW5jdGlvbiB0cmlnZ2VyKC4uLmFyZ3MpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGV2ZW50cyA9IGFyZ3NbMF0uc3BsaXQoJyAnKTtcbiAgY29uc3QgZXZlbnREYXRhID0gYXJnc1sxXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2ldO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBjb25zdCBlbCA9IHRoaXNbal07XG5cbiAgICAgIGlmICh3aW5kb3cuQ3VzdG9tRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXZ0ID0gbmV3IHdpbmRvdy5DdXN0b21FdmVudChldmVudCwge1xuICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgZWwuZG9tN0V2ZW50RGF0YSA9IGFyZ3MuZmlsdGVyKChkYXRhLCBkYXRhSW5kZXgpID0+IGRhdGFJbmRleCA+IDApO1xuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgIGVsLmRvbTdFdmVudERhdGEgPSBbXTtcbiAgICAgICAgZGVsZXRlIGVsLmRvbTdFdmVudERhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb25TdGFydChjYWxsYmFjaykge1xuICBjb25zdCBkb20gPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGZpcmVDYWxsQmFjayhlKSB7XG4gICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBlKTtcbiAgICBkb20ub2ZmKCd0cmFuc2l0aW9uc3RhcnQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgZG9tLm9uKCd0cmFuc2l0aW9uc3RhcnQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoY2FsbGJhY2spIHtcbiAgY29uc3QgZG9tID0gdGhpcztcblxuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZSk7XG4gICAgZG9tLm9mZigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gIH1cblxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBkb20ub24oJ3RyYW5zaXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGlvbkVuZChjYWxsYmFjaykge1xuICBjb25zdCBkb20gPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIGZpcmVDYWxsQmFjayhlKSB7XG4gICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBlKTtcbiAgICBkb20ub2ZmKCdhbmltYXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgZG9tLm9uKCdhbmltYXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHdpZHRoKCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICBpZiAodGhpc1swXSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoO1xuICB9XG5cbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybi
101BwYXJzZUZsb2F0KHRoaXMuY3NzKCd3aWR0aCcpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBvdXRlcldpZHRoKGluY2x1ZGVNYXJnaW5zKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoaW5jbHVkZU1hcmdpbnMpIHtcbiAgICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuc3R5bGVzKCk7XG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1yaWdodCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1sZWZ0JykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzWzBdLm9mZnNldFdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGhlaWdodCgpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgaWYgKHRoaXNbMF0gPT09IHdpbmRvdykge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIH1cblxuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodGhpcy5jc3MoJ2hlaWdodCcpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2lucykge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICBjb25zdCBzdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuICAgICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLXRvcCcpKSArIHBhcnNlRmxvYXQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICBjb25zdCBlbCA9IHRoaXNbMF07XG4gICAgY29uc3QgYm94ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50LmJvZHk7XG4gICAgY29uc3QgY2xpZW50VG9wID0gZWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XG4gICAgY29uc3QgY2xpZW50TGVmdCA9IGVsLmNsaWVudExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDA7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gZWwgPT09IHdpbmRvdyA/IHdpbmRvdy5zY3JvbGxZIDogZWwuc2Nyb2xsVG9wO1xuICAgIGNvbnN0IHNjcm9sbExlZnQgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFggOiBlbC5zY3JvbGxMZWZ0O1xuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGJveC50b3AgKyBzY3JvbGxUb3AgLSBjbGllbnRUb3AsXG4gICAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBoaWRlKCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc2hvdygpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzW2ldO1xuXG4gICAgaWYgKGVsLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgZWwuc3R5bGUuZGlzcGxheSA9ICcnO1xuICAgIH1cblxuICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnZGlzcGxheScpID09PSAnbm9uZScpIHtcbiAgICAgIC8vIFN0aWxsIG5vdCB2aXNpYmxlXG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc3R5bGVzKCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgaWYgKHRoaXNbMF0pIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzWzBdLCBudWxsKTtcbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBjc3MocHJvcHMsIHZhbHVlKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgaTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAuY3NzKCd3aWR0aCcpXG4gICAgICBpZiAodGhpc1swXSkgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXNbMF0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAuY3NzKHsgd2lkdGg6ICcxMDBweCcgfSlcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBwcm9wcykge1xuICAgICAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcF0gPSBwcm9wc1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gLmNzcygnd2lkdGgnLCAnMTAwcHgnKVxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICB0aGlzW2ldLnN0eWxlW3Byb3BzXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGVhY2goY2FsbGJhY2spIHtcbiAgaWYgKCFjYWxsYmFjaykgcmV0dXJuIHRoaXM7XG4gIHRoaXMuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7XG4gICAgY2FsbGJhY2suYXBwbHkoZWwsIFtlbCwgaW5kZXhdKTtcbiAgfSk7XG4gIHJldHVybi
101B0aGlzO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2spIHtcbiAgY29uc3QgcmVzdWx0ID0gYXJyYXlGaWx0ZXIodGhpcywgY2FsbGJhY2spO1xuICByZXR1cm4gJChyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBodG1sKGh0bWwpIHtcbiAgaWYgKHR5cGVvZiBodG1sID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzWzBdID8gdGhpc1swXS5pbm5lckhUTUwgOiBudWxsO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5pbm5lckhUTUwgPSBodG1sO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRleHQodGV4dCkge1xuICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLnRleHRDb250ZW50LnRyaW0oKSA6IG51bGw7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBjb25zdCBlbCA9IHRoaXNbMF07XG4gIGxldCBjb21wYXJlV2l0aDtcbiAgbGV0IGk7XG4gIGlmICghZWwgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGVsLm1hdGNoZXMpIHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICBpZiAoZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKSByZXR1cm4gZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgY29tcGFyZVdpdGggPSAkKHNlbGVjdG9yKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlbGVjdG9yID09PSBkb2N1bWVudCkge1xuICAgIHJldHVybiBlbCA9PT0gZG9jdW1lbnQ7XG4gIH1cblxuICBpZiAoc2VsZWN0b3IgPT09IHdpbmRvdykge1xuICAgIHJldHVybiBlbCA9PT0gd2luZG93O1xuICB9XG5cbiAgaWYgKHNlbGVjdG9yLm5vZGVUeXBlIHx8IHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgIGNvbXBhcmVXaXRoID0gc2VsZWN0b3Iubm9kZVR5cGUgPyBbc2VsZWN0b3JdIDogc2VsZWN0b3I7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChjb21wYXJlV2l0aFtpXSA9PT0gZWwpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaW5kZXgoKSB7XG4gIGxldCBjaGlsZCA9IHRoaXNbMF07XG4gIGxldCBpO1xuXG4gIGlmIChjaGlsZCkge1xuICAgIGkgPSAwOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIGkgKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGVxKGluZGV4KSB7XG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdGhpcztcbiAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG5cbiAgaWYgKGluZGV4ID4gbGVuZ3RoIC0gMSkge1xuICAgIHJldHVybiAkKFtdKTtcbiAgfVxuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBjb25zdCByZXR1cm5JbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGlmIChyZXR1cm5JbmRleCA8IDApIHJldHVybiAkKFtdKTtcbiAgICByZXR1cm4gJChbdGhpc1tyZXR1cm5JbmRleF1dKTtcbiAgfVxuXG4gIHJldHVybiAkKFt0aGlzW2luZGV4XV0pO1xufVxuXG5mdW5jdGlvbiBhcHBlbmQoLi4uZWxzKSB7XG4gIGxldCBuZXdDaGlsZDtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gIGZvciAobGV0IGsgPSAwOyBrIDwgZWxzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgbmV3Q2hpbGQgPSBlbHNba107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcblxuICAgICAgICB3aGlsZSAodGVtcERpdi5maXJzdENoaWxkKSB7XG4gICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgdGhpc1tpXS5hcHBlbmRDaGlsZChuZXdDaGlsZFtqXSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBhcHBlbmRUbyhwYXJlbnQpIHtcbiAgJChwYXJlbnQpLmFwcGVuZCh0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHByZXBlbmQobmV3Q2hpbGQpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBsZXQgaTtcbiAgbGV0IGo7XG5cbiAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcblxuICAgICAgZm9yIChqID0gdGVtcERpdi5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XG4gICAgICAgI
101HRoaXNbaV0uaW5zZXJ0QmVmb3JlKHRlbXBEaXYuY2hpbGROb2Rlc1tqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2ldLmluc2VydEJlZm9yZShuZXdDaGlsZCwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gcHJlcGVuZFRvKHBhcmVudCkge1xuICAkKHBhcmVudCkucHJlcGVuZCh0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShzZWxlY3Rvcikge1xuICBjb25zdCBiZWZvcmUgPSAkKHNlbGVjdG9yKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYmVmb3JlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYmVmb3JlWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0sIGJlZm9yZVswXSk7XG4gICAgfSBlbHNlIGlmIChiZWZvcmUubGVuZ3RoID4gMSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBiZWZvcmUubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYmVmb3JlW2pdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0uY2xvbmVOb2RlKHRydWUpLCBiZWZvcmVbal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRBZnRlcihzZWxlY3Rvcikge1xuICBjb25zdCBhZnRlciA9ICQoc2VsZWN0b3IpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChhZnRlci5sZW5ndGggPT09IDEpIHtcbiAgICAgIGFmdGVyWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXNbaV0sIGFmdGVyWzBdLm5leHRTaWJsaW5nKTtcbiAgICB9IGVsc2UgaWYgKGFmdGVyLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWZ0ZXIubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYWZ0ZXJbal0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc1tpXS5jbG9uZU5vZGUodHJ1ZSksIGFmdGVyW2pdLm5leHRTaWJsaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV4dChzZWxlY3Rvcikge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcgJiYgJCh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiAkKFt0aGlzWzBdLm5leHRFbGVtZW50U2libGluZ10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChbXSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nKSByZXR1cm4gJChbdGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmddKTtcbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICByZXR1cm4gJChbXSk7XG59XG5cbmZ1bmN0aW9uIG5leHRBbGwoc2VsZWN0b3IpIHtcbiAgY29uc3QgbmV4dEVscyA9IFtdO1xuICBsZXQgZWwgPSB0aGlzWzBdO1xuICBpZiAoIWVsKSByZXR1cm4gJChbXSk7XG5cbiAgd2hpbGUgKGVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgIGNvbnN0IG5leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCQobmV4dCkuaXMoc2VsZWN0b3IpKSBuZXh0RWxzLnB1c2gobmV4dCk7XG4gICAgfSBlbHNlIG5leHRFbHMucHVzaChuZXh0KTtcblxuICAgIGVsID0gbmV4dDtcbiAgfVxuXG4gIHJldHVybiAkKG5leHRFbHMpO1xufVxuXG5mdW5jdGlvbiBwcmV2KHNlbGVjdG9yKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbMF07XG5cbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nICYmICQoZWwucHJldmlvdXNFbGVtZW50U2libGluZykuaXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiAkKFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykgcmV0dXJuICQoW2VsLnByZXZpb3VzRWxlbWVudFNpYmxpbmddKTtcbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICByZXR1cm4gJChbXSk7XG59XG5cbmZ1bmN0aW9uIHByZXZBbGwoc2VsZWN0b3IpIHtcbiAgY29uc3QgcHJldkVscyA9IFtdO1xuICBsZXQgZWwgPSB0aGlzWzBdO1xuICBpZiAoIWVsKSByZXR1cm4gJChbXSk7XG5cbiAgd2hpbGUgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICBjb25zdCBwcmV2ID0gZWwucHJldmlvdXNFbGVtZW50U2libGluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoJChwcmV2KS5pcyhzZWxlY3RvcikpIHByZXZFbHMucHVzaChwcmV2KTtcbiAgICB9IGVsc2UgcHJldkVscy5wdXNoKHByZXYpO1xuXG4gICAgZWwgPSBwcmV2O1xuICB9XG5cbiAgcmV0dXJuICQocHJldkVscyk7XG59XG5cbmZ1bmN0aW9uIHNpYmxpbmdzKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0aGlzLm5leHRBbGwoc2VsZWN0b3IpLmFkZCh0aGlzLnByZXZBbGwoc2VsZWN0b3IpKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50KHNlbGVjdG9yKSB7XG4gIGNvbnN0IHBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJCh0aGlzW2ldLnBhcmVudE5vZGUpLmlzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKHRoaXNbaV0ucGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnRzLnB1c2godGhpc1tpXS5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gI
101H1cblxuICByZXR1cm4gJChwYXJlbnRzKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50cyhzZWxlY3Rvcikge1xuICBjb25zdCBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBsZXQgcGFyZW50ID0gdGhpc1tpXS5wYXJlbnROb2RlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCQocGFyZW50KS5pcyhzZWxlY3RvcikpIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAkKHBhcmVudHMpO1xufVxuXG5mdW5jdGlvbiBjbG9zZXN0KHNlbGVjdG9yKSB7XG4gIGxldCBjbG9zZXN0ID0gdGhpczsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgaWYgKCFjbG9zZXN0LmlzKHNlbGVjdG9yKSkge1xuICAgIGNsb3Nlc3QgPSBjbG9zZXN0LnBhcmVudHMoc2VsZWN0b3IpLmVxKDApO1xuICB9XG5cbiAgcmV0dXJuIGNsb3Nlc3Q7XG59XG5cbmZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgY29uc3QgZm91bmRFbGVtZW50cyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpc1tpXS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZm91bmQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGZvdW5kRWxlbWVudHMucHVzaChmb3VuZFtqXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICQoZm91bmRFbGVtZW50cyk7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKHNlbGVjdG9yKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBjaGlsZE5vZGVzID0gdGhpc1tpXS5jaGlsZHJlbjtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgaWYgKCFzZWxlY3RvciB8fCAkKGNoaWxkTm9kZXNbal0pLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAkKGNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodGhpc1tpXS5wYXJlbnROb2RlKSB0aGlzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc1tpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gZGV0YWNoKCkge1xuICByZXR1cm4gdGhpcy5yZW1vdmUoKTtcbn1cblxuZnVuY3Rpb24gYWRkKC4uLmVscykge1xuICBjb25zdCBkb20gPSB0aGlzO1xuICBsZXQgaTtcbiAgbGV0IGo7XG5cbiAgZm9yIChpID0gMDsgaSA8IGVscy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHRvQWRkID0gJChlbHNbaV0pO1xuXG4gICAgZm9yIChqID0gMDsgaiA8IHRvQWRkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBkb20ucHVzaCh0b0FkZFtqXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRvbTtcbn1cblxuZnVuY3Rpb24gZW1wdHkoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGVsID0gdGhpc1tpXTtcblxuICAgIGlmIChlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2pdLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICBlbC5jaGlsZE5vZGVzW2pdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwuY2hpbGROb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbmZ1bmN0aW9uIHNjcm9sbFRvKC4uLmFyZ3MpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGxldCBbbGVmdCwgdG9wLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja10gPSBhcmdzO1xuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBlYXNpbmc7XG4gICAgW2xlZnQsIHRvcCwgZHVyYXRpb24sIGNhbGxiYWNrLCBlYXNpbmddID0gYXJncztcbiAgfVxuXG4gIGlmICh0eXBlb2YgZWFzaW5nID09PSAndW5kZWZpbmVkJykgZWFzaW5nID0gJ3N3aW5nJztcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgIGNvbnN0IGVsID0gdGhpcztcbiAgICBsZXQgY3VycmVudFRvcDtcbiAgICBsZXQgY3VycmVudExlZnQ7XG4gICAgbGV0IG1heFRvcDtcbiAgICBsZXQgbWF4TGVmdDtcbiAgICBsZXQgbmV3VG9wO1xuICAgIGxldCBuZXdMZWZ0O1xuICAgIGxldCBzY3JvbGxUb3A7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGxldCBzY3JvbGxMZWZ0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBsZXQgYW5pbWF0ZVRvcCA9IHRvcCA+IDAgfHwgdG9wID09PSAwO1xuICAgIGxldCBhbmltYXRlTGVmdCA9IGxlZnQgPiAwIHx8IGxlZnQgPT09IDA7XG5cbiAgICBpZiAodHlwZW9mIGVhc2luZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVhc2luZyA9ICdzd2luZyc7XG4gICAgfVxuXG4gICAgaWYgKGFuaW1hdGVUb3ApIHtcbiAgICAgIGN1cnJlbnRUb3AgPSBlbC5zY3JvbGxUb3A7XG5cbiAgICAgIGlmICghZHVyYXRpb24pIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gdG9wO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbmltYXRlTGVmdCkge1xuICAgICAgY3VycmVudExlZnQgPSBlbC5zY3JvbGxMZWZ0O1xuXG4gICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgIGVsLnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZHVyYXRpb24pIHJldHVybjtcblxuICAgIGlmIChhbmltYXRlVG9wKSB7XG4gICAgICBtYXhUb3AgPSBlbC5zY3JvbGxIZWlnaHQgLSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBuZXdUb3AgPSBNYXRoLm1heChNYXRoLm1pbih0b3AsIG1heFRvcCksIDApO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlTGVmdCkge1xuICAgICAgbWF4TGVmdCA9IGVsLnNjcm9sbFdpZHR
101oIC0gZWwub2Zmc2V0V2lkdGg7XG4gICAgICBuZXdMZWZ0ID0gTWF0aC5tYXgoTWF0aC5taW4obGVmdCwgbWF4TGVmdCksIDApO1xuICAgIH1cblxuICAgIGxldCBzdGFydFRpbWUgPSBudWxsO1xuICAgIGlmIChhbmltYXRlVG9wICYmIG5ld1RvcCA9PT0gY3VycmVudFRvcCkgYW5pbWF0ZVRvcCA9IGZhbHNlO1xuICAgIGlmIChhbmltYXRlTGVmdCAmJiBuZXdMZWZ0ID09PSBjdXJyZW50TGVmdCkgYW5pbWF0ZUxlZnQgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIHJlbmRlcih0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbiwgMSksIDApO1xuICAgICAgY29uc3QgZWFzZVByb2dyZXNzID0gZWFzaW5nID09PSAnbGluZWFyJyA/IHByb2dyZXNzIDogMC41IC0gTWF0aC5jb3MocHJvZ3Jlc3MgKiBNYXRoLlBJKSAvIDI7XG4gICAgICBsZXQgZG9uZTtcbiAgICAgIGlmIChhbmltYXRlVG9wKSBzY3JvbGxUb3AgPSBjdXJyZW50VG9wICsgZWFzZVByb2dyZXNzICogKG5ld1RvcCAtIGN1cnJlbnRUb3ApO1xuICAgICAgaWYgKGFuaW1hdGVMZWZ0KSBzY3JvbGxMZWZ0ID0gY3VycmVudExlZnQgKyBlYXNlUHJvZ3Jlc3MgKiAobmV3TGVmdCAtIGN1cnJlbnRMZWZ0KTtcblxuICAgICAgaWYgKGFuaW1hdGVUb3AgJiYgbmV3VG9wID4gY3VycmVudFRvcCAmJiBzY3JvbGxUb3AgPj0gbmV3VG9wKSB7XG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IG5ld1RvcDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbmltYXRlVG9wICYmIG5ld1RvcCA8IGN1cnJlbnRUb3AgJiYgc2Nyb2xsVG9wIDw9IG5ld1RvcCkge1xuICAgICAgICBlbC5zY3JvbGxUb3AgPSBuZXdUb3A7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA+IGN1cnJlbnRMZWZ0ICYmIHNjcm9sbExlZnQgPj0gbmV3TGVmdCkge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbmV3TGVmdDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbmltYXRlTGVmdCAmJiBuZXdMZWZ0IDwgY3VycmVudExlZnQgJiYgc2Nyb2xsTGVmdCA8PSBuZXdMZWZ0KSB7XG4gICAgICAgIGVsLnNjcm9sbExlZnQgPSBuZXdMZWZ0O1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhbmltYXRlVG9wKSBlbC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICBpZiAoYW5pbWF0ZUxlZnQpIGVsLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXIpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgfSk7XG59IC8vIHNjcm9sbFRvcCh0b3AsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrKSB7XG5cblxuZnVuY3Rpb24gc2Nyb2xsVG9wKC4uLmFyZ3MpIHtcbiAgbGV0IFt0b3AsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrXSA9IGFyZ3M7XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAzICYmIHR5cGVvZiBlYXNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBbdG9wLCBkdXJhdGlvbiwgY2FsbGJhY2ssIGVhc2luZ10gPSBhcmdzO1xuICB9XG5cbiAgY29uc3QgZG9tID0gdGhpcztcblxuICBpZiAodHlwZW9mIHRvcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoZG9tLmxlbmd0aCA+IDApIHJldHVybiBkb21bMF0uc2Nyb2xsVG9wO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGRvbS5zY3JvbGxUbyh1bmRlZmluZWQsIHRvcCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBzY3JvbGxMZWZ0KC4uLmFyZ3MpIHtcbiAgbGV0IFtsZWZ0LCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja10gPSBhcmdzO1xuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgW2xlZnQsIGR1cmF0aW9uLCBjYWxsYmFjaywgZWFzaW5nXSA9IGFyZ3M7XG4gIH1cblxuICBjb25zdCBkb20gPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoZG9tLmxlbmd0aCA+IDApIHJldHVybiBkb21bMF0uc2Nyb2xsTGVmdDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkb20uc2Nyb2xsVG8obGVmdCwgdW5kZWZpbmVkLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG5mdW5jdGlvbiBhbmltYXRlKGluaXRpYWxQcm9wcywgaW5pdGlhbFBhcmFtcykge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3QgZWxzID0gdGhpcztcbiAgY29uc3QgYSA9IHtcbiAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7fSwgaW5pdGlhbFByb3BzKSxcbiAgICBwYXJhbXM6IE9iamVjdC5hc3NpZ24oe1xuICAgICAgZHVyYXRpb246IDMwMCxcbiAgICAgIGVhc2luZzogJ3N3aW5nJyAvLyBvciAnbGluZWFyJ1xuXG4gICAgICAvKiBDYWxsYmFja3NcbiAgICAgIGJlZ2luKGVsZW1lbnRzKVxuICAgICAgY29tcGxldGUoZWxlbWVudHMpXG4gICAgICBwcm9ncmVzcyhlbGVtZW50cywgY29tcGxldGUsIHJlbWFpbmluZywgc3RhcnQsIHR3ZWVuVmFsdWUpXG4gICAgICAqL1xuXG4gICAgfSwgaW5pdGlhbFBhcmFtcyksXG4gICAgZWxlbWVudHM6IGVscyxcbiAgICBhbmltYXRpbmc6IGZhbHNlLFxuICAgIHF1ZTogW10sXG5cbiAgICBlYXNpbmdQcm9ncmVzcyhlYXNpbmcsIHByb2dyZXNzKSB7XG4gICAgICBpZiAoZWFzaW5nID09PSAnc3dpbmcnKSB7XG4gICAgICAgIHJldHVybiAwLjUgLSBNYXRoLmNvcyhwcm9ncmVzcyAqIE1hdGguUEkpIC8gMjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGVhc2luZyhwcm9ncmVzcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybi
101Bwcm9ncmVzcztcbiAgICB9LFxuXG4gICAgc3RvcCgpIHtcbiAgICAgIGlmIChhLmZyYW1lSWQpIHtcbiAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGEuZnJhbWVJZCk7XG4gICAgICB9XG5cbiAgICAgIGEuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICBhLmVsZW1lbnRzLmVhY2goZWwgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWw7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LmRvbTdBbmltYXRlSW5zdGFuY2U7XG4gICAgICB9KTtcbiAgICAgIGEucXVlID0gW107XG4gICAgfSxcblxuICAgIGRvbmUoY29tcGxldGUpIHtcbiAgICAgIGEuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICBhLmVsZW1lbnRzLmVhY2goZWwgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWw7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LmRvbTdBbmltYXRlSW5zdGFuY2U7XG4gICAgICB9KTtcbiAgICAgIGlmIChjb21wbGV0ZSkgY29tcGxldGUoZWxzKTtcblxuICAgICAgaWYgKGEucXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcXVlID0gYS5xdWUuc2hpZnQoKTtcbiAgICAgICAgYS5hbmltYXRlKHF1ZVswXSwgcXVlWzFdKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYW5pbWF0ZShwcm9wcywgcGFyYW1zKSB7XG4gICAgICBpZiAoYS5hbmltYXRpbmcpIHtcbiAgICAgICAgYS5xdWUucHVzaChbcHJvcHMsIHBhcmFtc10pO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHMgPSBbXTsgLy8gRGVmaW5lICYgQ2FjaGUgSW5pdGlhbHMgJiBVbml0c1xuXG4gICAgICBhLmVsZW1lbnRzLmVhY2goKGVsLCBpbmRleCkgPT4ge1xuICAgICAgICBsZXQgaW5pdGlhbEZ1bGxWYWx1ZTtcbiAgICAgICAgbGV0IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgbGV0IHVuaXQ7XG4gICAgICAgIGxldCBmaW5hbFZhbHVlO1xuICAgICAgICBsZXQgZmluYWxGdWxsVmFsdWU7XG4gICAgICAgIGlmICghZWwuZG9tN0FuaW1hdGVJbnN0YW5jZSkgYS5lbGVtZW50c1tpbmRleF0uZG9tN0FuaW1hdGVJbnN0YW5jZSA9IGE7XG4gICAgICAgIGVsZW1lbnRzW2luZGV4XSA9IHtcbiAgICAgICAgICBjb250YWluZXI6IGVsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIGluaXRpYWxGdWxsVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKS5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgICBpbml0aWFsVmFsdWUgPSBwYXJzZUZsb2F0KGluaXRpYWxGdWxsVmFsdWUpO1xuICAgICAgICAgIHVuaXQgPSBpbml0aWFsRnVsbFZhbHVlLnJlcGxhY2UoaW5pdGlhbFZhbHVlLCAnJyk7XG4gICAgICAgICAgZmluYWxWYWx1ZSA9IHBhcnNlRmxvYXQocHJvcHNbcHJvcF0pO1xuICAgICAgICAgIGZpbmFsRnVsbFZhbHVlID0gcHJvcHNbcHJvcF0gKyB1bml0O1xuICAgICAgICAgIGVsZW1lbnRzW2luZGV4XVtwcm9wXSA9IHtcbiAgICAgICAgICAgIGluaXRpYWxGdWxsVmFsdWUsXG4gICAgICAgICAgICBpbml0aWFsVmFsdWUsXG4gICAgICAgICAgICB1bml0LFxuICAgICAgICAgICAgZmluYWxWYWx1ZSxcbiAgICAgICAgICAgIGZpbmFsRnVsbFZhbHVlLFxuICAgICAgICAgICAgY3VycmVudFZhbHVlOiBpbml0aWFsVmFsdWVcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG4gICAgICBsZXQgdGltZTtcbiAgICAgIGxldCBlbGVtZW50c0RvbmUgPSAwO1xuICAgICAgbGV0IHByb3BzRG9uZSA9IDA7XG4gICAgICBsZXQgZG9uZTtcbiAgICAgIGxldCBiZWdhbiA9IGZhbHNlO1xuICAgICAgYS5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgbGV0IHByb2dyZXNzO1xuICAgICAgICBsZXQgZWFzZVByb2dyZXNzOyAvLyBsZXQgZWw7XG5cbiAgICAgICAgaWYgKCFiZWdhbikge1xuICAgICAgICAgIGJlZ2FuID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocGFyYW1zLmJlZ2luKSBwYXJhbXMuYmVnaW4oZWxzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHtcbiAgICAgICAgICBzdGFydFRpbWUgPSB0aW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy5wcm9ncmVzcykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgIHBhcmFtcy5wcm9ncmVzcyhlbHMsIE1hdGgubWF4KE1hdGgubWluKCh0aW1lIC0gc3RhcnRUaW1lKSAvIHBhcmFtcy5kdXJhdGlvbiwgMSksIDApLCBzdGFydFRpbWUgKyBwYXJhbXMuZHVyYXRpb24gLSB0aW1lIDwgMCA/IDAgOiBzdGFydFRpbWUgKyBwYXJhbXMuZHVyYXRpb24gLSB0aW1lLCBzdGFydFRpbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IGVsZW1lbnQ7XG4gICAgICAgICAgaWYgKGRvbmUgfHwgZWwuZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgICAgaWYgKGRvbmUgfHwgZWwuZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBwYXJhbXMuZHVyYXRpb24sIDEpLCAwKTtcbiAgICAgICAgICAgIGVhc2VQcm9ncmVzcyA9IGEuZWFzaW5nUHJvZ3Jlc3MocGFyYW1zLmVhc2luZywgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBpbml0aWFsVmFsdWUsXG4gICAgICAgICAgICAgIGZpbmFsVmFsdWUsXG4gICAgICAgICAgICAgIHVuaXRcbiAgICAgICAgICAgIH0gPSBlbFtwcm9wXTtcbiAgICAgICAgICAgIGVsW3Byb3BdLmN1cnJlbnRWYWx1ZSA9IGluaXRpYWxWYWx1ZSArIGVhc2VQcm9ncmVzcyAqIChmaW5hbFZhbHVlIC0gaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGVsW3Byb3BdLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGZpbmFsVmFsdWUgPiBpbml0aWFsVmFsdWUgJiYgY3VycmVudFZhbHVlID49IGZpbmFsVmFsdWUgfHwgZmluYWxWYWx1ZSA8IGluaXRpYWxWYWx1ZSAmJiBjdXJyZW50VmFsdWUgPD0gZmluYWxWYWx1ZSkge1xuICAgICAgICAgICAgICBlbC5jb250YWluZXIuc3R5bGVbcHJvcF0gPSBmaW5hbFZhbHVlICsgdW5pdDtcbiAgICAgICAgICAgICAgcHJvcHNEb25lICs9IDE7XG5cbiAgICAgICAgICAgICAgaWYgKHByb3BzRG9uZSA9PT0gT2JqZWN0LmtleXMocHJvcHMpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGVsLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzRG9uZSArPSAxO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnRzRG9uZSA9PT0gZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgI
101H1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgYS5kb25lKHBhcmFtcy5jb21wbGV0ZSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZWwuY29udGFpbmVyLnN0eWxlW3Byb3BdID0gY3VycmVudFZhbHVlICsgdW5pdDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm47IC8vIFRoZW4gY2FsbFxuXG4gICAgICAgIGEuZnJhbWVJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICAgIH1cblxuICAgICAgYS5mcmFtZUlkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXIpO1xuICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gIH07XG5cbiAgaWYgKGEuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGVscztcbiAgfVxuXG4gIGxldCBhbmltYXRlSW5zdGFuY2U7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmVsZW1lbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGEuZWxlbWVudHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZSkge1xuICAgICAgYW5pbWF0ZUluc3RhbmNlID0gYS5lbGVtZW50c1tpXS5kb203QW5pbWF0ZUluc3RhbmNlO1xuICAgIH0gZWxzZSBhLmVsZW1lbnRzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2UgPSBhO1xuICB9XG5cbiAgaWYgKCFhbmltYXRlSW5zdGFuY2UpIHtcbiAgICBhbmltYXRlSW5zdGFuY2UgPSBhO1xuICB9XG5cbiAgaWYgKGluaXRpYWxQcm9wcyA9PT0gJ3N0b3AnKSB7XG4gICAgYW5pbWF0ZUluc3RhbmNlLnN0b3AoKTtcbiAgfSBlbHNlIHtcbiAgICBhbmltYXRlSW5zdGFuY2UuYW5pbWF0ZShhLnByb3BzLCBhLnBhcmFtcyk7XG4gIH1cblxuICByZXR1cm4gZWxzO1xufVxuXG5mdW5jdGlvbiBzdG9wKCkge1xuICBjb25zdCBlbHMgPSB0aGlzO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGVsc1tpXS5kb203QW5pbWF0ZUluc3RhbmNlKSB7XG4gICAgICBlbHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZS5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IG5vVHJpZ2dlciA9ICdyZXNpemUgc2Nyb2xsJy5zcGxpdCgnICcpO1xuXG5mdW5jdGlvbiBzaG9ydGN1dChuYW1lKSB7XG4gIGZ1bmN0aW9uIGV2ZW50SGFuZGxlciguLi5hcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChub1RyaWdnZXIuaW5kZXhPZihuYW1lKSA8IDApIHtcbiAgICAgICAgICBpZiAobmFtZSBpbiB0aGlzW2ldKSB0aGlzW2ldW25hbWVdKCk7ZWxzZSB7XG4gICAgICAgICAgICAkKHRoaXNbaV0pLnRyaWdnZXIobmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm9uKG5hbWUsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50SGFuZGxlcjtcbn1cblxuY29uc3QgY2xpY2sgPSBzaG9ydGN1dCgnY2xpY2snKTtcbmNvbnN0IGJsdXIgPSBzaG9ydGN1dCgnYmx1cicpO1xuY29uc3QgZm9jdXMgPSBzaG9ydGN1dCgnZm9jdXMnKTtcbmNvbnN0IGZvY3VzaW4gPSBzaG9ydGN1dCgnZm9jdXNpbicpO1xuY29uc3QgZm9jdXNvdXQgPSBzaG9ydGN1dCgnZm9jdXNvdXQnKTtcbmNvbnN0IGtleXVwID0gc2hvcnRjdXQoJ2tleXVwJyk7XG5jb25zdCBrZXlkb3duID0gc2hvcnRjdXQoJ2tleWRvd24nKTtcbmNvbnN0IGtleXByZXNzID0gc2hvcnRjdXQoJ2tleXByZXNzJyk7XG5jb25zdCBzdWJtaXQgPSBzaG9ydGN1dCgnc3VibWl0Jyk7XG5jb25zdCBjaGFuZ2UgPSBzaG9ydGN1dCgnY2hhbmdlJyk7XG5jb25zdCBtb3VzZWRvd24gPSBzaG9ydGN1dCgnbW91c2Vkb3duJyk7XG5jb25zdCBtb3VzZW1vdmUgPSBzaG9ydGN1dCgnbW91c2Vtb3ZlJyk7XG5jb25zdCBtb3VzZXVwID0gc2hvcnRjdXQoJ21vdXNldXAnKTtcbmNvbnN0IG1vdXNlZW50ZXIgPSBzaG9ydGN1dCgnbW91c2VlbnRlcicpO1xuY29uc3QgbW91c2VsZWF2ZSA9IHNob3J0Y3V0KCdtb3VzZWxlYXZlJyk7XG5jb25zdCBtb3VzZW91dCA9IHNob3J0Y3V0KCdtb3VzZW91dCcpO1xuY29uc3QgbW91c2VvdmVyID0gc2hvcnRjdXQoJ21vdXNlb3ZlcicpO1xuY29uc3QgdG91Y2hzdGFydCA9IHNob3J0Y3V0KCd0b3VjaHN0YXJ0Jyk7XG5jb25zdCB0b3VjaGVuZCA9IHNob3J0Y3V0KCd0b3VjaGVuZCcpO1xuY29uc3QgdG91Y2htb3ZlID0gc2hvcnRjdXQoJ3RvdWNobW92ZScpO1xuY29uc3QgcmVzaXplID0gc2hvcnRjdXQoJ3Jlc2l6ZScpO1xuY29uc3Qgc2Nyb2xsID0gc2hvcnRjdXQoJ3Njcm9sbCcpO1xuXG5leHBvcnQgZGVmYXVsdCAkO1xuZXhwb3J0IHsgJCwgYWRkLCBhZGRDbGFzcywgYW5pbWF0ZSwgYW5pbWF0aW9uRW5kLCBhcHBlbmQsIGFwcGVuZFRvLCBhdHRyLCBibHVyLCBjaGFuZ2UsIGNoaWxkcmVuLCBjbGljaywgY2xvc2VzdCwgY3NzLCBkYXRhLCBkYXRhc2V0LCBkZXRhY2gsIGVhY2gsIGVtcHR5LCBlcSwgZmlsdGVyLCBmaW5kLCBmb2N1cywgZm9jdXNpbiwgZm9jdXNvdXQsIGhhc0NsYXNzLCBoZWlnaHQsIGhpZGUsIGh0bWwsIGluZGV4LCBpbnNlcnRBZnRlciwgaW5zZXJ0QmVmb3JlLCBpcywga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLCBtb3VzZWRvd24sIG1vdXNlZW50ZXIsIG1vdXNlbGVhdmUsIG1vdXNlbW92ZSwgbW91c2VvdXQsIG1vdXNlb3ZlciwgbW91c2V1cCwgbmV4dCwgbmV4dEFsbCwgb2ZmLCBvZmZzZXQsIG9uLCBvbmNlLCBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aCwgcGFyZW50LCBwYXJlbnRzLCBwcmVwZW5kLCBwcmVwZW5kVG8sIHByZXYsIHByZXZBbGwsIHByb3AsIHJlbW92ZSwgcmVtb3ZlQXR0ciwgcmVtb3ZlQ2xhc3MsIHJlbW92ZURhdGEsIHJlc2l6ZSwgc2Nyb2xsLCBzY3JvbGxMZWZ0LCBzY3JvbGxUbywgc2Nyb2xsVG9wLCBzaG93LCBzaWJsaW5ncywgc3RvcCwgc3R5bGVzLCBzdWJtaXQsIHRleHQsIHRvZ2dsZUNsYXNzLCB0b3VjaGVuZCwgdG91Y2htb3ZlLCB0b3VjaHN0YXJ0LCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24sIHRyYW5zaXRpb25FbmQsIHRyYW5zaXRpb25TdGFydCwgdHJpZ2dlciwgdmFsLCB2YWx1ZSwgd2lkdGggfTtcbiIsImltcG9ydCB7
101ICQsIGFkZENsYXNzLCByZW1vdmVDbGFzcywgaGFzQ2xhc3MsIHRvZ2dsZUNsYXNzLCBhdHRyLCByZW1vdmVBdHRyLCB0cmFuc2Zvcm0sIHRyYW5zaXRpb24sIG9uLCBvZmYsIHRyaWdnZXIsIHRyYW5zaXRpb25FbmQsIG91dGVyV2lkdGgsIG91dGVySGVpZ2h0LCBzdHlsZXMsIG9mZnNldCwgY3NzLCBlYWNoLCBodG1sLCB0ZXh0LCBpcywgaW5kZXgsIGVxLCBhcHBlbmQsIHByZXBlbmQsIG5leHQsIG5leHRBbGwsIHByZXYsIHByZXZBbGwsIHBhcmVudCwgcGFyZW50cywgY2xvc2VzdCwgZmluZCwgY2hpbGRyZW4sIGZpbHRlciwgcmVtb3ZlIH0gZnJvbSAnZG9tNyc7XG5jb25zdCBNZXRob2RzID0ge1xuICBhZGRDbGFzcyxcbiAgcmVtb3ZlQ2xhc3MsXG4gIGhhc0NsYXNzLFxuICB0b2dnbGVDbGFzcyxcbiAgYXR0cixcbiAgcmVtb3ZlQXR0cixcbiAgdHJhbnNmb3JtLFxuICB0cmFuc2l0aW9uLFxuICBvbixcbiAgb2ZmLFxuICB0cmlnZ2VyLFxuICB0cmFuc2l0aW9uRW5kLFxuICBvdXRlcldpZHRoLFxuICBvdXRlckhlaWdodCxcbiAgc3R5bGVzLFxuICBvZmZzZXQsXG4gIGNzcyxcbiAgZWFjaCxcbiAgaHRtbCxcbiAgdGV4dCxcbiAgaXMsXG4gIGluZGV4LFxuICBlcSxcbiAgYXBwZW5kLFxuICBwcmVwZW5kLFxuICBuZXh0LFxuICBuZXh0QWxsLFxuICBwcmV2LFxuICBwcmV2QWxsLFxuICBwYXJlbnQsXG4gIHBhcmVudHMsXG4gIGNsb3Nlc3QsXG4gIGZpbmQsXG4gIGNoaWxkcmVuLFxuICBmaWx0ZXIsXG4gIHJlbW92ZVxufTtcbk9iamVjdC5rZXlzKE1ldGhvZHMpLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkLmZuLCBtZXRob2ROYW1lLCB7XG4gICAgdmFsdWU6IE1ldGhvZHNbbWV0aG9kTmFtZV0sXG4gICAgd3JpdGFibGU6IHRydWVcbiAgfSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0ICQ7IiwiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5cbmZ1bmN0aW9uIGRlbGV0ZVByb3BzKG9iaikge1xuICBjb25zdCBvYmplY3QgPSBvYmo7XG4gIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBvYmplY3Rba2V5XSA9IG51bGw7XG4gICAgfSBjYXRjaCAoZSkgey8vIG5vIGdldHRlciBmb3Igb2JqZWN0XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgICB9IGNhdGNoIChlKSB7Ly8gc29tZXRoaW5nIGdvdCB3cm9uZ1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrLCBkZWxheSA9IDApIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbn1cblxuZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgbGV0IHN0eWxlO1xuXG4gIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuICB9XG5cbiAgaWYgKCFzdHlsZSAmJiBlbC5jdXJyZW50U3R5bGUpIHtcbiAgICBzdHlsZSA9IGVsLmN1cnJlbnRTdHlsZTtcbiAgfVxuXG4gIGlmICghc3R5bGUpIHtcbiAgICBzdHlsZSA9IGVsLnN0eWxlO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2xhdGUoZWwsIGF4aXMgPSAneCcpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGxldCBtYXRyaXg7XG4gIGxldCBjdXJUcmFuc2Zvcm07XG4gIGxldCB0cmFuc2Zvcm1NYXRyaXg7XG4gIGNvbnN0IGN1clN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCk7XG5cbiAgaWYgKHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgpIHtcbiAgICBjdXJUcmFuc2Zvcm0gPSBjdXJTdHlsZS50cmFuc2Zvcm0gfHwgY3VyU3R5bGUud2Via2l0VHJhbnNmb3JtO1xuXG4gICAgaWYgKGN1clRyYW5zZm9ybS5zcGxpdCgnLCcpLmxlbmd0aCA+IDYpIHtcbiAgICAgIGN1clRyYW5zZm9ybSA9IGN1clRyYW5zZm9ybS5zcGxpdCgnLCAnKS5tYXAoYSA9PiBhLnJlcGxhY2UoJywnLCAnLicpKS5qb2luKCcsICcpO1xuICAgIH0gLy8gU29tZSBvbGQgdmVyc2lvbnMgb2YgV2Via2l0IGNob2tlIHdoZW4gJ25vbmUnIGlzIHBhc3NlZDsgcGFzc1xuICAgIC8vIGVtcHR5IHN0cmluZyBpbnN0ZWFkIGluIHRoaXMgY2FzZVxuXG5cbiAgICB0cmFuc2Zvcm1NYXRyaXggPSBuZXcgd2luZG93LldlYktpdENTU01hdHJpeChjdXJUcmFuc2Zvcm0gPT09ICdub25lJyA/ICcnIDogY3VyVHJhbnNmb3JtKTtcbiAgfSBlbHNlIHtcbiAgICB0cmFuc2Zvcm1NYXRyaXggPSBjdXJTdHlsZS5Nb3pUcmFuc2Zvcm0gfHwgY3VyU3R5bGUuT1RyYW5zZm9ybSB8fCBjdXJTdHlsZS5Nc1RyYW5zZm9ybSB8fCBjdXJTdHlsZS5tc1RyYW5zZm9ybSB8fCBjdXJTdHlsZS50cmFuc2Zvcm0gfHwgY3VyU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgndHJhbnNmb3JtJykucmVwbGFjZSgndHJhbnNsYXRlKCcsICdtYXRyaXgoMSwgMCwgMCwgMSwnKTtcbiAgICBtYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXgudG9TdHJpbmcoKS5zcGxpdCgnLCcpO1xuICB9XG5cbiAgaWYgKGF4aXMgPT09ICd4Jykge1xuICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgaWYgKHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgpIGN1clRyYW5zZm9ybSA9IHRyYW5zZm9ybU1hdHJpeC5tNDE7IC8vIENyYXp5IElFMTAgTWF0cml4XG4gICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEyXSk7IC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgIGVsc2UgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNF0pO1xuICB9XG5cbiAgaWYgKGF4aXMgPT09ICd5Jykge1xuICAgIC8vIExhdGVzdCBDaHJvbWUgYW5kIHdlYmtpdHMgRml4XG4gICAgaWYgKHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgpIGN1clRyYW5zZm9ybSA9IHRyYW5zZm9ybU1hdHJpeC5tNDI7IC8vIENyYXp5IElFMTAgTWF0cml4XG4gICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEzXSk7IC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgIGVsc2UgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNV0pO1xuICB9XG5cbiAgcmV0dXJuIGN1clRyYW5zZm9ybSB8fCAwO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChvKSB7XG4gIHJldHVybi
101B0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiBvLmNvbnN0cnVjdG9yICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSkgPT09ICdPYmplY3QnO1xufVxuXG5mdW5jdGlvbiBpc05vZGUobm9kZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuSFRNTEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiBub2RlICYmIChub2RlLm5vZGVUeXBlID09PSAxIHx8IG5vZGUubm9kZVR5cGUgPT09IDExKTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKC4uLmFyZ3MpIHtcbiAgY29uc3QgdG8gPSBPYmplY3QoYXJnc1swXSk7XG4gIGNvbnN0IG5vRXh0ZW5kID0gWydfX3Byb3RvX18nLCAnY29uc3RydWN0b3InLCAncHJvdG90eXBlJ107XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgbmV4dFNvdXJjZSA9IGFyZ3NbaV07XG5cbiAgICBpZiAobmV4dFNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIG5leHRTb3VyY2UgIT09IG51bGwgJiYgIWlzTm9kZShuZXh0U291cmNlKSkge1xuICAgICAgY29uc3Qga2V5c0FycmF5ID0gT2JqZWN0LmtleXMoT2JqZWN0KG5leHRTb3VyY2UpKS5maWx0ZXIoa2V5ID0+IG5vRXh0ZW5kLmluZGV4T2Yoa2V5KSA8IDApO1xuXG4gICAgICBmb3IgKGxldCBuZXh0SW5kZXggPSAwLCBsZW4gPSBrZXlzQXJyYXkubGVuZ3RoOyBuZXh0SW5kZXggPCBsZW47IG5leHRJbmRleCArPSAxKSB7XG4gICAgICAgIGNvbnN0IG5leHRLZXkgPSBrZXlzQXJyYXlbbmV4dEluZGV4XTtcbiAgICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmV4dFNvdXJjZSwgbmV4dEtleSk7XG5cbiAgICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodG9bbmV4dEtleV0pICYmIGlzT2JqZWN0KG5leHRTb3VyY2VbbmV4dEtleV0pKSB7XG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZVtuZXh0S2V5XS5fX3N3aXBlcl9fKSB7XG4gICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICghaXNPYmplY3QodG9bbmV4dEtleV0pICYmIGlzT2JqZWN0KG5leHRTb3VyY2VbbmV4dEtleV0pKSB7XG4gICAgICAgICAgICB0b1tuZXh0S2V5XSA9IHt9O1xuXG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZVtuZXh0S2V5XS5fX3N3aXBlcl9fKSB7XG4gICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG87XG59XG5cbmZ1bmN0aW9uIHNldENTU1Byb3BlcnR5KGVsLCB2YXJOYW1lLCB2YXJWYWx1ZSkge1xuICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSh2YXJOYW1lLCB2YXJWYWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGVDU1NNb2RlU2Nyb2xsKHtcbiAgc3dpcGVyLFxuICB0YXJnZXRQb3NpdGlvbixcbiAgc2lkZVxufSkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IC1zd2lwZXIudHJhbnNsYXRlO1xuICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgbGV0IHRpbWU7XG4gIGNvbnN0IGR1cmF0aW9uID0gc3dpcGVyLnBhcmFtcy5zcGVlZDtcbiAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICdub25lJztcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHN3aXBlci5jc3NNb2RlRnJhbWVJRCk7XG4gIGNvbnN0IGRpciA9IHRhcmdldFBvc2l0aW9uID4gc3RhcnRQb3NpdGlvbiA/ICduZXh0JyA6ICdwcmV2JztcblxuICBjb25zdCBpc091dE9mQm91bmQgPSAoY3VycmVudCwgdGFyZ2V0KSA9PiB7XG4gICAgcmV0dXJuIGRpciA9PT0gJ25leHQnICYmIGN1cnJlbnQgPj0gdGFyZ2V0IHx8IGRpciA9PT0gJ3ByZXYnICYmIGN1cnJlbnQgPD0gdGFyZ2V0O1xuICB9O1xuXG4gIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gICAgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkge1xuICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWF4KE1hdGgubWluKCh0aW1lIC0gc3RhcnRUaW1lKSAvIGR1cmF0aW9uLCAxKSwgMCk7XG4gICAgY29uc3QgZWFzZVByb2dyZXNzID0gMC41IC0gTWF0aC5jb3MocHJvZ3Jlc3MgKiBNYXRoLlBJKSAvIDI7XG4gICAgbGV0IGN1cnJlbnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBlYXNlUHJvZ3Jlc3MgKiAodGFyZ2V0UG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTtcblxuICAgIGlmIChpc091dE9mQm91bmQoY3VycmVudFBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbikpIHtcbiAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHRhcmdldFBvc2l0aW9uO1xuICAgIH1cblxuICAgIHN3aXBlci53cmFwcGVyRWwuc2Nyb2xsVG8oe1xuICAgICAgW3NpZGVdOiBjdXJyZW50UG9zaXRpb25cbiAgICB9KTtcblxuICAgIGlmIChpc091dE9mQm91bmQoY3VycmVudFBvc2l0aW9uLCB0YXJnZXRQb3NpdGlvbikpIHtcbiAgICAgIHN3aXBlci53cmFwcGVyRWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHN3aXBlci53cmFwcGVyRWwuc3R5bGUuc2Nyb2xsU25hcFR5cGUgPSAnJztcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLm92ZXJmbG93ID0gJyc7XG4gICAgICAgI
101HN3aXBlci53cmFwcGVyRWwuc2Nyb2xsVG8oe1xuICAgICAgICAgIFtzaWRlXTogY3VycmVudFBvc2l0aW9uXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoc3dpcGVyLmNzc01vZGVGcmFtZUlEKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2lwZXIuY3NzTW9kZUZyYW1lSUQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICB9O1xuXG4gIGFuaW1hdGUoKTtcbn1cblxuZXhwb3J0IHsgYW5pbWF0ZUNTU01vZGVTY3JvbGwsIGRlbGV0ZVByb3BzLCBuZXh0VGljaywgbm93LCBnZXRUcmFuc2xhdGUsIGlzT2JqZWN0LCBleHRlbmQsIGdldENvbXB1dGVkU3R5bGUsIHNldENTU1Byb3BlcnR5IH07IiwiaW1wb3J0IHsgZ2V0V2luZG93LCBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xubGV0IHN1cHBvcnQ7XG5cbmZ1bmN0aW9uIGNhbGNTdXBwb3J0KCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICByZXR1cm4ge1xuICAgIHNtb290aFNjcm9sbDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICdzY3JvbGxCZWhhdmlvcicgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLFxuICAgIHRvdWNoOiAhISgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgd2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiB3aW5kb3cuRG9jdW1lbnRUb3VjaCksXG4gICAgcGFzc2l2ZUxpc3RlbmVyOiBmdW5jdGlvbiBjaGVja1Bhc3NpdmVMaXN0ZW5lcigpIHtcbiAgICAgIGxldCBzdXBwb3J0c1Bhc3NpdmUgPSBmYWxzZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgc3VwcG9ydHNQYXNzaXZlID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUxpc3RlbmVyJywgbnVsbCwgb3B0cyk7XG4gICAgICB9IGNhdGNoIChlKSB7Ly8gTm8gc3VwcG9ydFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlO1xuICAgIH0oKSxcbiAgICBnZXN0dXJlczogZnVuY3Rpb24gY2hlY2tHZXN0dXJlcygpIHtcbiAgICAgIHJldHVybiAnb25nZXN0dXJlc3RhcnQnIGluIHdpbmRvdztcbiAgICB9KClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U3VwcG9ydCgpIHtcbiAgaWYgKCFzdXBwb3J0KSB7XG4gICAgc3VwcG9ydCA9IGNhbGNTdXBwb3J0KCk7XG4gIH1cblxuICByZXR1cm4gc3VwcG9ydDtcbn1cblxuZXhwb3J0IHsgZ2V0U3VwcG9ydCB9OyIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZ2V0U3VwcG9ydCB9IGZyb20gJy4vZ2V0LXN1cHBvcnQuanMnO1xubGV0IGRldmljZUNhY2hlZDtcblxuZnVuY3Rpb24gY2FsY0RldmljZSh7XG4gIHVzZXJBZ2VudFxufSA9IHt9KSB7XG4gIGNvbnN0IHN1cHBvcnQgPSBnZXRTdXBwb3J0KCk7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBwbGF0Zm9ybSA9IHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm07XG4gIGNvbnN0IHVhID0gdXNlckFnZW50IHx8IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICBjb25zdCBkZXZpY2UgPSB7XG4gICAgaW9zOiBmYWxzZSxcbiAgICBhbmRyb2lkOiBmYWxzZVxuICB9O1xuICBjb25zdCBzY3JlZW5XaWR0aCA9IHdpbmRvdy5zY3JlZW4ud2lkdGg7XG4gIGNvbnN0IHNjcmVlbkhlaWdodCA9IHdpbmRvdy5zY3JlZW4uaGVpZ2h0O1xuICBjb25zdCBhbmRyb2lkID0gdWEubWF0Y2goLyhBbmRyb2lkKTs/W1xcc1xcL10rKFtcXGQuXSspPy8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgbGV0IGlwYWQgPSB1YS5tYXRjaCgvKGlQYWQpLipPU1xccyhbXFxkX10rKS8pO1xuICBjb25zdCBpcG9kID0gdWEubWF0Y2goLyhpUG9kKSguKk9TXFxzKFtcXGRfXSspKT8vKTtcbiAgY29uc3QgaXBob25lID0gIWlwYWQgJiYgdWEubWF0Y2goLyhpUGhvbmVcXHNPU3xpT1MpXFxzKFtcXGRfXSspLyk7XG4gIGNvbnN0IHdpbmRvd3MgPSBwbGF0Zm9ybSA9PT0gJ1dpbjMyJztcbiAgbGV0IG1hY29zID0gcGxhdGZvcm0gPT09ICdNYWNJbnRlbCc7IC8vIGlQYWRPcyAxMyBmaXhcblxuICBjb25zdCBpUGFkU2NyZWVucyA9IFsnMTAyNHgxMzY2JywgJzEzNjZ4MTAyNCcsICc4MzR4MTE5NCcsICcxMTk0eDgzNCcsICc4MzR4MTExMicsICcxMTEyeDgzNCcsICc3Njh4MTAyNCcsICcxMDI0eDc2OCcsICc4MjB4MTE4MCcsICcxMTgweDgyMCcsICc4MTB4MTA4MCcsICcxMDgweDgxMCddO1xuXG4gIGlmICghaXBhZCAmJiBtYWNvcyAmJiBzdXBwb3J0LnRvdWNoICYmIGlQYWRTY3JlZW5zLmluZGV4T2YoYCR7c2NyZWVuV2lkdGh9eCR7c2NyZWVuSGVpZ2h0fWApID49IDApIHtcbiAgICBpcGFkID0gdWEubWF0Y2goLyhWZXJzaW9uKVxcLyhbXFxkLl0rKS8pO1xuICAgIGlmICghaXBhZCkgaXBhZCA9IFswLCAxLCAnMTNfMF8wJ107XG4gICAgbWFjb3MgPSBmYWxzZTtcbiAgfSAvLyBBbmRyb2lkXG5cblxuICBpZiAoYW5kcm9pZCAmJiAhd2luZG93cykge1xuICAgIGRldmljZS5vcyA9ICdhbmRyb2lkJztcbiAgICBkZXZpY2UuYW5kcm9pZCA9IHRydWU7XG4gIH1cblxuICBpZiAoaXBhZCB8fCBpcGhvbmUgfHwgaXBvZCkge1xuICAgIGRldmljZS5vcyA9ICdpb3MnO1xuICAgIGRldmljZS5pb3MgPSB0cnVlO1xuICB9IC8vIEV4cG9ydCBvYmplY3RcblxuXG4gIHJldHVybiBkZXZpY2U7XG59XG5cbmZ1bmN0aW9uIGdldERldmljZShvdmVycmlkZXMgPSB7fSkge1xuICBpZiAoIWRldmljZUNhY2hlZCkge1xuICAgIGRldmljZUNhY2hlZCA9IGNhbGNEZXZpY2Uob3ZlcnJpZGVzKTtcbiAgfVxuXG4gIHJldHVybiBkZXZpY2VDYWNoZWQ7XG59XG5cbmV4cG9ydCB7
101IGdldERldmljZSB9OyIsImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xubGV0IGJyb3dzZXI7XG5cbmZ1bmN0aW9uIGNhbGNCcm93c2VyKCkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICBmdW5jdGlvbiBpc1NhZmFyaSgpIHtcbiAgICBjb25zdCB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgcmV0dXJuIHVhLmluZGV4T2YoJ3NhZmFyaScpID49IDAgJiYgdWEuaW5kZXhPZignY2hyb21lJykgPCAwICYmIHVhLmluZGV4T2YoJ2FuZHJvaWQnKSA8IDA7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlzU2FmYXJpOiBpc1NhZmFyaSgpLFxuICAgIGlzV2ViVmlldzogLyhpUGhvbmV8aVBvZHxpUGFkKS4qQXBwbGVXZWJLaXQoPyEuKlNhZmFyaSkvaS50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCcm93c2VyKCkge1xuICBpZiAoIWJyb3dzZXIpIHtcbiAgICBicm93c2VyID0gY2FsY0Jyb3dzZXIoKTtcbiAgfVxuXG4gIHJldHVybiBicm93c2VyO1xufVxuXG5leHBvcnQgeyBnZXRCcm93c2VyIH07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvbkVtaXQoe1xuICBzd2lwZXIsXG4gIHJ1bkNhbGxiYWNrcyxcbiAgZGlyZWN0aW9uLFxuICBzdGVwXG59KSB7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICBwcmV2aW91c0luZGV4XG4gIH0gPSBzd2lwZXI7XG4gIGxldCBkaXIgPSBkaXJlY3Rpb247XG5cbiAgaWYgKCFkaXIpIHtcbiAgICBpZiAoYWN0aXZlSW5kZXggPiBwcmV2aW91c0luZGV4KSBkaXIgPSAnbmV4dCc7ZWxzZSBpZiAoYWN0aXZlSW5kZXggPCBwcmV2aW91c0luZGV4KSBkaXIgPSAncHJldic7ZWxzZSBkaXIgPSAncmVzZXQnO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoYHRyYW5zaXRpb24ke3N0ZXB9YCk7XG5cbiAgaWYgKHJ1bkNhbGxiYWNrcyAmJiBhY3RpdmVJbmRleCAhPT0gcHJldmlvdXNJbmRleCkge1xuICAgIGlmIChkaXIgPT09ICdyZXNldCcpIHtcbiAgICAgIHN3aXBlci5lbWl0KGBzbGlkZVJlc2V0VHJhbnNpdGlvbiR7c3RlcH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdChgc2xpZGVDaGFuZ2VUcmFuc2l0aW9uJHtzdGVwfWApO1xuXG4gICAgaWYgKGRpciA9PT0gJ25leHQnKSB7XG4gICAgICBzd2lwZXIuZW1pdChgc2xpZGVOZXh0VHJhbnNpdGlvbiR7c3RlcH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmVtaXQoYHNsaWRlUHJldlRyYW5zaXRpb24ke3N0ZXB9YCk7XG4gICAgfVxuICB9XG59IiwiaW1wb3J0IHsgZ2V0V2luZG93LCBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnOyAvLyBNb2RpZmllZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU0NTIwNTU0L2N1c3RvbS1lbGVtZW50LWdldHJvb3Rub2RlLWNsb3Nlc3QtZnVuY3Rpb24tY3Jvc3NpbmctbXVsdGlwbGUtcGFyZW50LXNoYWRvd2RcblxuZnVuY3Rpb24gY2xvc2VzdEVsZW1lbnQoc2VsZWN0b3IsIGJhc2UgPSB0aGlzKSB7XG4gIGZ1bmN0aW9uIF9fY2xvc2VzdEZyb20oZWwpIHtcbiAgICBpZiAoIWVsIHx8IGVsID09PSBnZXREb2N1bWVudCgpIHx8IGVsID09PSBnZXRXaW5kb3coKSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKGVsLmFzc2lnbmVkU2xvdCkgZWwgPSBlbC5hc3NpZ25lZFNsb3Q7XG4gICAgY29uc3QgZm91bmQgPSBlbC5jbG9zZXN0KHNlbGVjdG9yKTtcblxuICAgIGlmICghZm91bmQgJiYgIWVsLmdldFJvb3ROb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm91bmQgfHwgX19jbG9zZXN0RnJvbShlbC5nZXRSb290Tm9kZSgpLmhvc3QpO1xuICB9XG5cbiAgcmV0dXJuIF9fY2xvc2VzdEZyb20oYmFzZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICB0b3VjaGVzLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG5cbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMuY3NzTW9kZSAmJiBwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wRml4KCk7XG4gIH1cblxuICBsZXQgZSA9IGV2ZW50O1xuICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50O1xuICBsZXQgJHRhcmdldEVsID0gJChlLnRhcmdldCk7XG5cbiAgaWYgKHBhcmFtcy50b3VjaEV2ZW50c1RhcmdldCA9PT0gJ3dyYXBwZXInKSB7XG4gICAgaWYgKCEkdGFyZ2V0RWwuY2xvc2VzdChzd2lwZXIud3JhcHBlckVsKS5sZW5ndGgpIHJldHVybjtcbiAgfVxuXG4gIGRhdGEuaXNUb3VjaEV2ZW50ID0gZS50eXBlID09PSAndG91Y2hzdGFydCc7XG4gIGlmICghZGF0YS5pc1RvdWNoRXZlbnQgJiYgJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHJldHVybjtcbiAgaWYgKCFkYXRhLmlzVG91Y2hFdmVudCAmJiAnYnV0dG9uJyBpbiBlICYmIGUuYnV0dG9uID4gMCkgcmV0dXJuO1xuICBpZiAoZGF0YS5pc1RvdWNoZWQgJiYgZGF0YS5pc01vdmVkKSByZXR1cm47IC8vIGNoYW5nZSB0YXJnZXQgZWwgZm9yIHNoYWRvdyByb290IGNvbXBvbmVudFxuXG4gIGNvbnN0IHN3aXBpbmdDbGFzc0hhc1ZhbHVlID0gISFwYXJhbXMubm9Td2lwaW5nQ2xhc3MgJiYgcGFyYW1zLm5vU3dpcGluZ0NsYXNzICE9PSAnJzsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgY29uc3QgZXZlbnRQYXR
101oID0gZXZlbnQuY29tcG9zZWRQYXRoID8gZXZlbnQuY29tcG9zZWRQYXRoKCkgOiBldmVudC5wYXRoO1xuXG4gIGlmIChzd2lwaW5nQ2xhc3NIYXNWYWx1ZSAmJiBlLnRhcmdldCAmJiBlLnRhcmdldC5zaGFkb3dSb290ICYmIGV2ZW50UGF0aCkge1xuICAgICR0YXJnZXRFbCA9ICQoZXZlbnRQYXRoWzBdKTtcbiAgfVxuXG4gIGNvbnN0IG5vU3dpcGluZ1NlbGVjdG9yID0gcGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yID8gcGFyYW1zLm5vU3dpcGluZ1NlbGVjdG9yIDogYC4ke3BhcmFtcy5ub1N3aXBpbmdDbGFzc31gO1xuICBjb25zdCBpc1RhcmdldFNoYWRvdyA9ICEhKGUudGFyZ2V0ICYmIGUudGFyZ2V0LnNoYWRvd1Jvb3QpOyAvLyB1c2UgY2xvc2VzdEVsZW1lbnQgZm9yIHNoYWRvdyByb290IGVsZW1lbnQgdG8gZ2V0IHRoZSBhY3R1YWwgY2xvc2VzdCBmb3IgbmVzdGVkIHNoYWRvdyByb290IGVsZW1lbnRcblxuICBpZiAocGFyYW1zLm5vU3dpcGluZyAmJiAoaXNUYXJnZXRTaGFkb3cgPyBjbG9zZXN0RWxlbWVudChub1N3aXBpbmdTZWxlY3RvciwgJHRhcmdldEVsWzBdKSA6ICR0YXJnZXRFbC5jbG9zZXN0KG5vU3dpcGluZ1NlbGVjdG9yKVswXSkpIHtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5zd2lwZUhhbmRsZXIpIHtcbiAgICBpZiAoISR0YXJnZXRFbC5jbG9zZXN0KHBhcmFtcy5zd2lwZUhhbmRsZXIpWzBdKSByZXR1cm47XG4gIH1cblxuICB0b3VjaGVzLmN1cnJlbnRYID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBlLnBhZ2VYO1xuICB0b3VjaGVzLmN1cnJlbnRZID0gZS50eXBlID09PSAndG91Y2hzdGFydCcgPyBlLnRhcmdldFRvdWNoZXNbMF0ucGFnZVkgOiBlLnBhZ2VZO1xuICBjb25zdCBzdGFydFggPSB0b3VjaGVzLmN1cnJlbnRYO1xuICBjb25zdCBzdGFydFkgPSB0b3VjaGVzLmN1cnJlbnRZOyAvLyBEbyBOT1Qgc3RhcnQgaWYgaU9TIGVkZ2Ugc3dpcGUgaXMgZGV0ZWN0ZWQuIE90aGVyd2lzZSBpT1MgYXBwIGNhbm5vdCBzd2lwZS10by1nby1iYWNrIGFueW1vcmVcblxuICBjb25zdCBlZGdlU3dpcGVEZXRlY3Rpb24gPSBwYXJhbXMuZWRnZVN3aXBlRGV0ZWN0aW9uIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVEZXRlY3Rpb247XG4gIGNvbnN0IGVkZ2VTd2lwZVRocmVzaG9sZCA9IHBhcmFtcy5lZGdlU3dpcGVUaHJlc2hvbGQgfHwgcGFyYW1zLmlPU0VkZ2VTd2lwZVRocmVzaG9sZDtcblxuICBpZiAoZWRnZVN3aXBlRGV0ZWN0aW9uICYmIChzdGFydFggPD0gZWRnZVN3aXBlVGhyZXNob2xkIHx8IHN0YXJ0WCA+PSB3aW5kb3cuaW5uZXJXaWR0aCAtIGVkZ2VTd2lwZVRocmVzaG9sZCkpIHtcbiAgICBpZiAoZWRnZVN3aXBlRGV0ZWN0aW9uID09PSAncHJldmVudCcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBPYmplY3QuYXNzaWduKGRhdGEsIHtcbiAgICBpc1RvdWNoZWQ6IHRydWUsXG4gICAgaXNNb3ZlZDogZmFsc2UsXG4gICAgYWxsb3dUb3VjaENhbGxiYWNrczogdHJ1ZSxcbiAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWRcbiAgfSk7XG4gIHRvdWNoZXMuc3RhcnRYID0gc3RhcnRYO1xuICB0b3VjaGVzLnN0YXJ0WSA9IHN0YXJ0WTtcbiAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gIHN3aXBlci51cGRhdGVTaXplKCk7XG4gIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSA9IGZhbHNlO1xuXG4gIGlmIChlLnR5cGUgIT09ICd0b3VjaHN0YXJ0Jykge1xuICAgIGxldCBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG5cbiAgICBpZiAoJHRhcmdldEVsLmlzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpKSB7XG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuXG4gICAgICBpZiAoJHRhcmdldEVsWzBdLm5vZGVOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuaXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gJHRhcmdldEVsWzBdKSB7XG4gICAgICBkb2
101N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IHByZXZlbnREZWZhdWx0ICYmIHN3aXBlci5hbGxvd1RvdWNoTW92ZSAmJiBwYXJhbXMudG91Y2hTdGFydFByZXZlbnREZWZhdWx0O1xuXG4gICAgaWYgKChwYXJhbXMudG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQgfHwgc2hvdWxkUHJldmVudERlZmF1bHQpICYmICEkdGFyZ2V0RWxbMF0uaXNDb250ZW50RWRpdGFibGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBzd2lwZXIucGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQgJiYgc3dpcGVyLmZyZWVNb2RlICYmIHN3aXBlci5hbmltYXRpbmcgJiYgIXBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLmZyZWVNb2RlLm9uVG91Y2hTdGFydCgpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ3RvdWNoU3RhcnQnLCBlKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBlbFxuICB9ID0gc3dpcGVyO1xuICBpZiAoZWwgJiYgZWwub2Zmc2V0V2lkdGggPT09IDApIHJldHVybjsgLy8gQnJlYWtwb2ludHNcblxuICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgc3dpcGVyLnNldEJyZWFrcG9pbnQoKTtcbiAgfSAvLyBTYXZlIGxvY2tzXG5cblxuICBjb25zdCB7XG4gICAgYWxsb3dTbGlkZU5leHQsXG4gICAgYWxsb3dTbGlkZVByZXYsXG4gICAgc25hcEdyaWRcbiAgfSA9IHN3aXBlcjsgLy8gRGlzYWJsZSBsb2NrcyBvbiByZXNpemVcblxuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSB0cnVlO1xuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSB0cnVlO1xuICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChzd2lwZXIuYXV0b3BsYXkgJiYgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgJiYgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkge1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW4oKTtcbiAgfSAvLyBSZXR1cm4gbG9ja3MgYWZ0ZXIgcmVzaXplXG5cblxuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzbmFwR3JpZCAhPT0gc3dpcGVyLnNuYXBHcmlkKSB7XG4gICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgfVxufSIsImltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgb25Ub3VjaFN0YXJ0IGZyb20gJy4vb25Ub3VjaFN0YXJ0LmpzJztcbmltcG9ydCBvblRvdWNoTW92ZSBmcm9tICcuL29uVG91Y2hNb3ZlLmpzJztcbmltcG9ydCBvblRvdWNoRW5kIGZyb20gJy4vb25Ub3VjaEVuZC5qcyc7XG5pbXBvcnQgb25SZXNpemUgZnJvbSAnLi9vblJlc2l6ZS5qcyc7XG5pbXBvcnQgb25DbGljayBmcm9tICcuL29uQ2xpY2suanMnO1xuaW1wb3J0IG9uU2Nyb2xsIGZyb20gJy4vb25TY3JvbGwuanMnO1xubGV0IGR1bW15RXZlbnRBdHRhY2hlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBkdW1teUV2ZW50TGlzdGVuZXIoKSB7fVxuXG5jb25zdCBldmVudHMgPSAoc3dpcGVyLCBtZXRob2QpID0+IHtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHRvdWNoRXZlbnRzLFxuICAgIGVsLFxuICAgIHdyYXBwZXJFbCxcbiAgICBkZXZpY2UsXG4gICAgc3VwcG9ydFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBjYXB0dXJlID0gISFwYXJhbXMubmVzdGVkO1xuICBjb25zdCBkb21NZXRob2QgPSBtZXRob2QgPT09ICdvbicgPyAnYWRkRXZlbnRMaXN0ZW5lcicgOiAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG4gIGNvbnN0IHN3aXBlck1ldGhvZCA9IG1ldGhvZDsgLy8gVG91Y2ggRXZlbnRzXG5cbiAgaWYgKCFzdXBwb3J0LnRvdWNoKSB7XG4gICAgZWxbZG9tTWV0aG9kXSh0b3VjaEV2ZW50cy5zdGFydCwgc3dpcGVyLm9uVG91Y2hTdGFydCwgZmFsc2UpO1xuICAgIGRvY3VtZW50W2RvbU1ldGhvZF0odG91Y2hFdmVudHMubW92ZSwgc3dpcGVyLm9uVG91Y2hNb3ZlLCBjYXB0dXJlKTtcbiAgICBkb2N1bWVudFtkb21NZXRob2RdKHRvdWNoRXZlbnRzLmVuZCwgc3dpcGVyLm9uVG91Y2hFbmQsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXNzaXZlTGlzdGVuZXIgPSB0b3VjaEV2ZW50cy5zdGFydCA9PT0gJ3RvdWNoc3RhcnQnICYmIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyICYmIHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfSA6IGZhbHNlO1xuICAgIGVsW2RvbU1ldGhvZF0odG91Y2hFdmVudHMuc3RhcnQsIHN3aXBlci5vblRvdWNoU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgZWxbZG9tTWV0aG9kXSh0b3VjaEV2ZW50cy5tb3ZlLCBzd2lwZXIub25Ub3VjaE1vdmUsIHN1cHBvcnQucGFzc2l2ZUxpc3RlbmVyID8ge1xuICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICBjYXB0dXJlXG4gICAgfSA6IGNhcHR1cmUpO1xuICAgIGVsW2RvbU1ldGhvZF0odG91Y2hFdmVudHMuZW5kLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcblxuICAgIGlmICh0b3VjaEV2ZW50cy5jYW5jZWwpIHtcbiAgICAgIGVsW2RvbU1ldGhvZF0odG91Y2hFdmVudHMuY2FuY2VsLCBzd2lwZXIub25Ub3VjaEVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9XG4gI
101H0gLy8gUHJldmVudCBMaW5rcyBDbGlja3NcblxuXG4gIGlmIChwYXJhbXMucHJldmVudENsaWNrcyB8fCBwYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uKSB7XG4gICAgZWxbZG9tTWV0aG9kXSgnY2xpY2snLCBzd2lwZXIub25DbGljaywgdHJ1ZSk7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICB3cmFwcGVyRWxbZG9tTWV0aG9kXSgnc2Nyb2xsJywgc3dpcGVyLm9uU2Nyb2xsKTtcbiAgfSAvLyBSZXNpemUgaGFuZGxlclxuXG5cbiAgaWYgKHBhcmFtcy51cGRhdGVPbldpbmRvd1Jlc2l6ZSkge1xuICAgIHN3aXBlcltzd2lwZXJNZXRob2RdKGRldmljZS5pb3MgfHwgZGV2aWNlLmFuZHJvaWQgPyAncmVzaXplIG9yaWVudGF0aW9uY2hhbmdlIG9ic2VydmVyVXBkYXRlJyA6ICdyZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyW3N3aXBlck1ldGhvZF0oJ29ic2VydmVyVXBkYXRlJywgb25SZXNpemUsIHRydWUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBzdXBwb3J0XG4gIH0gPSBzd2lwZXI7XG4gIHN3aXBlci5vblRvdWNoU3RhcnQgPSBvblRvdWNoU3RhcnQuYmluZChzd2lwZXIpO1xuICBzd2lwZXIub25Ub3VjaE1vdmUgPSBvblRvdWNoTW92ZS5iaW5kKHN3aXBlcik7XG4gIHN3aXBlci5vblRvdWNoRW5kID0gb25Ub3VjaEVuZC5iaW5kKHN3aXBlcik7XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLm9uU2Nyb2xsID0gb25TY3JvbGwuYmluZChzd2lwZXIpO1xuICB9XG5cbiAgc3dpcGVyLm9uQ2xpY2sgPSBvbkNsaWNrLmJpbmQoc3dpcGVyKTtcblxuICBpZiAoc3VwcG9ydC50b3VjaCAmJiAhZHVtbXlFdmVudEF0dGFjaGVkKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGR1bW15RXZlbnRMaXN0ZW5lcik7XG4gICAgZHVtbXlFdmVudEF0dGFjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIGV2ZW50cyhzd2lwZXIsICdvbicpO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hFdmVudHMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGV2ZW50cyhzd2lwZXIsICdvZmYnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBhdHRhY2hFdmVudHMsXG4gIGRldGFjaEV2ZW50c1xufTsiLCJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuXG5jb25zdCBpc0dyaWRFbmFibGVkID0gKHN3aXBlciwgcGFyYW1zKSA9PiB7XG4gIHJldHVybiBzd2lwZXIuZ3JpZCAmJiBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEJyZWFrcG9pbnQoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBhY3RpdmVJbmRleCxcbiAgICBpbml0aWFsaXplZCxcbiAgICBsb29wZWRTbGlkZXMgPSAwLFxuICAgIHBhcmFtcyxcbiAgICAkZWxcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3QgYnJlYWtwb2ludHMgPSBwYXJhbXMuYnJlYWtwb2ludHM7XG4gIGlmICghYnJlYWtwb2ludHMgfHwgYnJlYWtwb2ludHMgJiYgT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoIGFuZCB1cGRhdGUgcGFyYW1ldGVyc1xuXG4gIGNvbnN0IGJyZWFrcG9pbnQgPSBzd2lwZXIuZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgc3dpcGVyLnBhcmFtcy5icmVha3BvaW50c0Jhc2UsIHN3aXBlci5lbCk7XG4gIGlmICghYnJlYWtwb2ludCB8fCBzd2lwZXIuY3VycmVudEJyZWFrcG9pbnQgPT09IGJyZWFrcG9pbnQpIHJldHVybjtcbiAgY29uc3QgYnJlYWtwb2ludE9ubHlQYXJhbXMgPSBicmVha3BvaW50IGluIGJyZWFrcG9pbnRzID8gYnJlYWtwb2ludHNbYnJlYWtwb2ludF0gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGJyZWFrcG9pbnRQYXJhbXMgPSBicmVha3BvaW50T25seVBhcmFtcyB8fCBzd2lwZXIub3JpZ2luYWxQYXJhbXM7XG4gIGNvbnN0IHdhc011bHRpUm93ID0gaXNHcmlkRW5hYmxlZChzd2lwZXIsIHBhcmFtcyk7XG4gIGNvbnN0IGlzTXVsdGlSb3cgPSBpc0dyaWRFbmFibGVkKHN3aXBlciwgYnJlYWtwb2ludFBhcmFtcyk7XG4gIGNvbnN0IHdhc0VuYWJsZWQgPSBwYXJhbXMuZW5hYmxlZDtcblxuICBpZiAod2FzTXVsdGlSb3cgJiYgIWlzTXVsdGlSb3cpIHtcbiAgICAkZWwucmVtb3ZlQ2xhc3MoYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9Z3JpZCAke3BhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfWdyaWQtY29sdW1uYCk7XG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gIH0gZWxzZSBpZiAoIXdhc011bHRpUm93ICYmIGlzTXVsdGlSb3cpIHtcbiAgICAkZWwuYWRkQ2xhc3MoYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9Z3JpZGApO1xuXG4gICAgaWYgKGJyZWFrcG9pbnRQYXJhbXMuZ3JpZC5maWxsICYmIGJyZWFrcG9pbnRQYXJhbXMuZ3JpZC5maWxsID09PSAnY29sdW1uJyB8fCAhYnJlYWtwb2ludFBhcmFtcy5ncmlkLmZpbGwgJiYgcGFyYW1zLmdyaWQuZmlsbCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICRlbC5hZGRDbGFzcyhgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31ncmlkLWNvbHVtbmApO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xuICB9IC8vIFRvZ2dsZSBuYXZpZ2F0aW9uLCBwYWdpbmF0aW9uLCBzY3JvbGxiYXJcblxuXG4gIFsnbmF2aWdhdGlvbicsICdwYWdpbmF0aW9uJywgJ3Njcm9sbGJhciddLmZvckVhY2gocHJvcCA9PiB7XG4gICAgY29uc3Qgd2FzTW9kdWxlRW5hYmxlZCA9IHBhcmFtc1twcm9wXSAmJiBwYXJhbXNbcHJvcF0uZW5hYmxlZDtcbiAgICBjb25zdCBpc01vZHVsZUVuYWJsZWQgPSBicmVha3BvaW50UGFyYW1zW3Byb3BdICYmIGJyZWFrcG9pbnRQYXJhbXNbcHJvcF0uZW5hYmxlZDtcblxuICAgIGlmICh3YXNNb2R1bGVFbmFibGVkICYmICFpc01vZHVsZUVuYWJsZWQpIHtcbiAgICAgIHN3aXBlcltwcm9wXS5kaXNhYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKCF3YXNNb2R1bGVFbmFibGVkICYmIGlzTW9kdWxlRW5hYmxlZCkge1xuICAgICAgc3dpcGVyW3Byb3BdLmVuYWJsZSgpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IGRpcmVjdGlvbkNoYW5nZWQgPSBicmVha3BvaW50UGFyYW1zLmRpcmVjdGlvbiAmJiBicmVha3BvaW50UGFyYW1zLmRpcmVjdGlvbiAhPT0gcGFyYW1zLmRpcmVjdGlvbjtcbiAgY29uc3QgbmVlZHNSZUxvb3AgPSBwYXJhbXMubG9vcCAmJiAoYnJlYWtwb2ludFBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSBwYXJhbXMuc2xpZGVzUGVyVmlldyB8fCBkaXJlY3Rpb25DaGFuZ2VkKTtcblxuICBpZiAoZGlyZWN0aW9uQ2hhbmdlZCAmJiBpbml0aWFsaXplZCkge1xuICAgIHN3aXBlci5jaGFuZ2VEaXJlY3Rpb24oKTtcbiAgfVxuXG4gIGV4dGVuZChzd2lwZXIucGFyYW1zLCBicmVha3BvaW50UGFyYW1zKTtcbiAgY29uc3QgaXNFbmFibGVkID0gc3dpcGVyLnBhcmFtcy5lbmFibGVkO1xuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIGFsbG93VG91Y2hNb3ZlOiBzd2lwZXIucGFyYW1zLmFsbG93VG91Y2hNb3ZlLFxuICAgIGFsbG93U2xpZGVOZXh0OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVOZXh0LFxuICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2XG4gIH0pO1xuXG4gIGlmICh3YXNFbmFibGVkICYmICFpc0VuYWJsZWQpIHtcbiAgICBzd2lwZXIuZGlzYWJsZSgpO1xuICB9IGVsc2UgaWYgKCF3YXNFbmFibGVkICYmIGlzRW5hYmxlZCkge1xuICAgIHN3aXBlci5lbmFibGUoKTtcbiAgfVxuXG4gIHN3aXBlci5jdXJyZW50QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQ7XG4gIHN3aXBlci5lbWl0KCdfYmVmb3JlQnJlYWtwb2ludCcsIGJyZWFrcG9pbnRQYXJhbXMpO1xuXG4gIGlmIChuZWVkc1JlTG9vcCAmJiBpbml0aWFsaXplZCkge1xuICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIHN3aXBlci5zbGlkZVRvKGFjdGl2ZUluZGV4IC0gbG9vcGVkU2xpZGVzICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ2JyZWFrcG9pbnQnLCBicmVha3BvaW50UGFyYW1zKTtcbn0iLCJmdW5jdGlvbiBjaGVja092ZXJmbG93KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgaXNMb2NrZWQ6IHdhc0xvY2tlZCxcbiAgICBwYXJhbXNcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3Qge1xuICAgIHNsaWRlc09mZnNldEJlZm9yZVxuICB9ID0gcGFyYW1zO1xuXG4gIGlmIChzbGlkZXNPZmZzZXRCZWZvcmUpIHtcbiAgICBjb25zdCBsYXN0U2xpZGVJbmRleCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBsYXN0U2xpZGVSaWdodEVkZ2UgPSBzd2lwZXIuc2xpZGVzR3JpZFtsYXN0U2xpZGVJbmRleF0gKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2xhc3RTbGlkZUluZGV4XSArIHNsaWRlc09mZnNldEJlZm9yZSAqIDI7XG4gICAgc3dpcGVyLmlzTG9ja2VkID0gc3dpcGVyLnNpemUgPiBsYXN0U2xpZGVSaWdodEVkZ2U7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLmlzTG9ja2VkID0gc3dpcGVyLnNuYXBHcmlkLmxlbmd0aCA9PT0gMTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuYWxsb3dTbGlkZU5leHQgPT09IHRydWUpIHtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSAhc3dpcGVyLmlzTG9ja2VkO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9ICFzd2lwZXIuaXNMb2NrZWQ7XG4gIH1cblxuICBpZiAod2FzTG9ja2VkICYmIHdhc0xvY2tlZCAhPT0gc3dpcGVyLmlzTG9ja2VkKSB7XG4gICAgc3dpcGVyLmlzRW5kID0gZmFsc2U7XG4gIH1cblxuICBpZiAod2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICBzd2lwZXIuZW1pdChzd2lwZXIuaXNMb2NrZWQgPyAnbG9jaycgOiAndW5sb2NrJyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjaGVja092ZXJmbG93XG59OyIsImV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAnaG9yaXpvbn
101RhbCcsXG4gIHRvdWNoRXZlbnRzVGFyZ2V0OiAnd3JhcHBlcicsXG4gIGluaXRpYWxTbGlkZTogMCxcbiAgc3BlZWQ6IDMwMCxcbiAgY3NzTW9kZTogZmFsc2UsXG4gIHVwZGF0ZU9uV2luZG93UmVzaXplOiB0cnVlLFxuICByZXNpemVPYnNlcnZlcjogdHJ1ZSxcbiAgbmVzdGVkOiBmYWxzZSxcbiAgY3JlYXRlRWxlbWVudHM6IGZhbHNlLFxuICBlbmFibGVkOiB0cnVlLFxuICBmb2N1c2FibGVFbGVtZW50czogJ2lucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWEsIGJ1dHRvbiwgdmlkZW8sIGxhYmVsJyxcbiAgLy8gT3ZlcnJpZGVzXG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIC8vXG4gIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG4gIC8vIHNzclxuICB1c2VyQWdlbnQ6IG51bGwsXG4gIHVybDogbnVsbCxcbiAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICBlZGdlU3dpcGVUaHJlc2hvbGQ6IDIwLFxuICAvLyBBdXRvaGVpZ2h0XG4gIGF1dG9IZWlnaHQ6IGZhbHNlLFxuICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICBzZXRXcmFwcGVyU2l6ZTogZmFsc2UsXG4gIC8vIFZpcnR1YWwgVHJhbnNsYXRlXG4gIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuICAvLyBFZmZlY3RzXG4gIGVmZmVjdDogJ3NsaWRlJyxcbiAgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuICAvLyBCcmVha3BvaW50c1xuICBicmVha3BvaW50czogdW5kZWZpbmVkLFxuICBicmVha3BvaW50c0Jhc2U6ICd3aW5kb3cnLFxuICAvLyBTbGlkZXMgZ3JpZFxuICBzcGFjZUJldHdlZW46IDAsXG4gIHNsaWRlc1BlclZpZXc6IDEsXG4gIHNsaWRlc1Blckdyb3VwOiAxLFxuICBzbGlkZXNQZXJHcm91cFNraXA6IDAsXG4gIHNsaWRlc1Blckdyb3VwQXV0bzogZmFsc2UsXG4gIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgY2VudGVyZWRTbGlkZXNCb3VuZHM6IGZhbHNlLFxuICBzbGlkZXNPZmZzZXRCZWZvcmU6IDAsXG4gIC8vIGluIHB4XG4gIHNsaWRlc09mZnNldEFmdGVyOiAwLFxuICAvLyBpbiBweFxuICBub3JtYWxpemVTbGlkZUluZGV4OiB0cnVlLFxuICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IGZhbHNlLFxuICAvLyBEaXNhYmxlIHN3aXBlciBhbmQgaGlkZSBuYXZpZ2F0aW9uIHdoZW4gY29udGFpbmVyIG5vdCBvdmVyZmxvd1xuICB3YXRjaE92ZXJmbG93OiB0cnVlLFxuICAvLyBSb3VuZCBsZW5ndGhcbiAgcm91bmRMZW5ndGhzOiBmYWxzZSxcbiAgLy8gVG91Y2hlc1xuICB0b3VjaFJhdGlvOiAxLFxuICB0b3VjaEFuZ2xlOiA0NSxcbiAgc2ltdWxhdGVUb3VjaDogdHJ1ZSxcbiAgc2hvcnRTd2lwZXM6IHRydWUsXG4gIGxvbmdTd2lwZXM6IHRydWUsXG4gIGxvbmdTd2lwZXNSYXRpbzogMC41LFxuICBsb25nU3dpcGVzTXM6IDMwMCxcbiAgZm9sbG93RmluZ2VyOiB0cnVlLFxuICBhbGxvd1RvdWNoTW92ZTogdHJ1ZSxcbiAgdGhyZXNob2xkOiAwLFxuICB0b3VjaE1vdmVTdG9wUHJvcGFnYXRpb246IGZhbHNlLFxuICB0b3VjaFN0YXJ0UHJldmVudERlZmF1bHQ6IHRydWUsXG4gIHRvdWNoU3RhcnRGb3JjZVByZXZlbnREZWZhdWx0OiBmYWxzZSxcbiAgdG91Y2hSZWxlYXNlT25FZGdlczogZmFsc2UsXG4gIC8vIFVuaXF1ZSBOYXZpZ2F0aW9uIEVsZW1lbnRzXG4gIHVuaXF1ZU
1015hdkVsZW1lbnRzOiB0cnVlLFxuICAvLyBSZXNpc3RhbmNlXG4gIHJlc2lzdGFuY2U6IHRydWUsXG4gIHJlc2lzdGFuY2VSYXRpbzogMC44NSxcbiAgLy8gUHJvZ3Jlc3NcbiAgd2F0Y2hTbGlkZXNQcm9ncmVzczogZmFsc2UsXG4gIC8vIEN1cnNvclxuICBncmFiQ3Vyc29yOiBmYWxzZSxcbiAgLy8gQ2xpY2tzXG4gIHByZXZlbnRDbGlja3M6IHRydWUsXG4gIHByZXZlbnRDbGlja3NQcm9wYWdhdGlvbjogdHJ1ZSxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZTogZmFsc2UsXG4gIC8vIEltYWdlc1xuICBwcmVsb2FkSW1hZ2VzOiB0cnVlLFxuICB1cGRhdGVPbkltYWdlc1JlYWR5OiB0cnVlLFxuICAvLyBsb29wXG4gIGxvb3A6IGZhbHNlLFxuICBsb29wQWRkaXRpb25hbFNsaWRlczogMCxcbiAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICBsb29wZWRTbGlkZXNMaW1pdDogdHJ1ZSxcbiAgbG9vcEZpbGxHcm91cFdpdGhCbGFuazogZmFsc2UsXG4gIGxvb3BQcmV2ZW50c1NsaWRlOiB0cnVlLFxuICAvLyByZXdpbmRcbiAgcmV3aW5kOiBmYWxzZSxcbiAgLy8gU3dpcGluZy9ubyBzd2lwaW5nXG4gIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICBhbGxvd1NsaWRlTmV4dDogdHJ1ZSxcbiAgc3dpcGVIYW5kbGVyOiBudWxsLFxuICAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICBub1N3aXBpbmc6IHRydWUsXG4gIG5vU3dpcGluZ0NsYXNzOiAnc3dpcGVyLW5vLXN3aXBpbmcnLFxuICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcbiAgLy8gUGFzc2l2ZSBMaXN0ZW5lcnNcbiAgcGFzc2l2ZUxpc3RlbmVyczogdHJ1ZSxcbiAgbWF4QmFja2ZhY2VIaWRkZW5TbGlkZXM6IDEwLFxuICAvLyBOU1xuICBjb250YWluZXJNb2RpZmllckNsYXNzOiAnc3dpcGVyLScsXG4gIC8vIE5FV1xuICBzbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlJyxcbiAgc2xpZGVCbGFua0NsYXNzOiAnc3dpcGVyLXNsaWRlLWludmlzaWJsZS1ibGFuaycsXG4gIHNsaWRlQWN0aXZlQ2xhc3M6ICdzd2lwZXItc2xpZGUtYWN0aXZlJyxcbiAgc2xpZGVEdXBsaWNhdGVBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS1kdXBsaWNhdGUtYWN0aXZlJyxcbiAgc2xpZGVWaXNpYmxlQ2xhc3M6ICdzd2lwZXItc2xpZGUtdmlzaWJsZScsXG4gIHNsaWRlRHVwbGljYXRlQ2xhc3M6ICdzd2lwZXItc2xpZGUtZHVwbGljYXRlJyxcbiAgc2xpZGVOZXh0Q2xhc3M6ICdzd2lwZXItc2xpZGUtbmV4dCcsXG4gIHNsaWRlRHVwbGljYXRlTmV4dENsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1uZXh0JyxcbiAgc2xpZGVQcmV2Q2xhc3M6ICdzd2lwZXItc2xpZGUtcHJldicsXG4gIHNsaWRlRHVwbGljYXRlUHJldkNsYXNzOiAnc3dpcGVyLXNsaWRlLWR1cGxpY2F0ZS1wcmV2JyxcbiAgd3JhcHBlckNsYXNzOiAnc3dpcGVyLXdyYXBwZXInLFxuICAvLyBDYWxsYmFja3NcbiAgcnVuQ2FsbGJhY2tzT25Jbml0OiB0cnVlLFxuICAvLyBJbnRlcm5hbHNcbiAgX2VtaXRDbGFzc2VzOiBmYWxzZVxufTsiLCIvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IFwib2ZmXCIgKi9cbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi9zaGFyZWQvZG9tLmpzJztcbmltcG9ydCB7IGV4dGVuZCwgbm93LCBkZWxldGVQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC91dGlscy5qcyc7XG5pbXBvcnQgeyBnZXRTdXBwb3J0IH0gZnJvbSAnLi4vc2hhcmVkL2dldC1zdXBwb3J0LmpzJztcbmltcG9ydCB7IGdldERldmljZSB9IGZyb20gJy4uL3NoYXJlZC9nZXQtZGV2aWNlLmpzJztcbmltcG9ydCB7IGdldEJyb3dzZXIgfSBmcm9tICcuLi9zaGFyZWQvZ2V0LWJyb3dzZXIuanMnO1xuaW1wb3J0IFJlc2l6ZSBmcm9tICcuL21vZHVsZXMvcmVzaXplL3Jlc2l6ZS5qcyc7XG5pbXBvcnQgT2JzZXJ2ZXIgZnJvbSAnLi9tb2R1bGVzL29ic2VydmVyL29ic2VydmVyLmpzJztcbmltcG9ydCBldmVudHNFbWl0dGVyIGZyb20gJy4vZXZlbnRzLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHVwZGF0ZSBmcm9tICcuL3VwZGF0ZS9pbmRleC5qcyc7XG5pbXBvcnQgdHJhbnNsYXRlIGZyb20gJy4vdHJhbnNsYXRlL2luZGV4LmpzJztcbmltcG9ydCB0cmFuc2l0aW9uIGZyb20gJy4vdHJhbnNpdGlvbi9pbmRleC5qcyc7XG5pbXBvcnQgc2xpZGUgZnJvbSAnLi9zbGlkZS9pbmRleC5qcyc7XG5pbXBvcnQgbG9vcCBmcm9tICcuL2xvb3AvaW5kZXguanMnO1xuaW1wb3J0IGdyYWJDdXJzb3IgZnJvbSAnLi9ncmFiLWN1cnNvci9pbmRleC5qcyc7XG5pbXBvcnQgZXZlbnRzIGZyb20gJy4vZXZlbnRzL2luZGV4LmpzJztcbmltcG9ydCBicmVha3BvaW50cyBmcm9tICcuL2JyZWFrcG9pbnRzL2luZGV4LmpzJztcbmltcG9ydCBjbGFzc2VzIGZyb20gJy4vY2xhc3Nlcy9pbmRleC5qcyc7XG5pbXBvcnQgaW1hZ2VzIGZyb20gJy4vaW1hZ2VzL2luZGV4LmpzJztcbmltcG9ydCBjaGVja092ZXJmbG93IGZyb20gJy4vY2hlY2stb3ZlcmZsb3cvaW5kZXguanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IG1vZHVsZUV4dGVuZFBhcmFtcyBmcm9tICcuL21vZHVsZUV4dGVuZFBhcmFtcy5qcyc7XG5jb25zdCBwcm90b3R5cGVzID0ge1xuICBldmVudHNFbWl0dGVyLFxuICB1cGRhdGUsXG4gIHRyYW5zbGF0ZSxcbiAgdHJhbnNpdGlvbixcbiAgc2xpZGUsXG4gIGxvb3AsXG4gIGdyYWJDdXJzb3IsXG4gIGV2ZW50cyxcbiAgYnJlYWtwb2ludHMsXG4gIGNoZWNrT3ZlcmZsb3csXG4gIGNsYXNzZXMsXG4gIGltYWdlc1xufTtcbmNvbnN0IGV4dGVuZGVkRGVmYXVsdHMgPSB7fTtcblxuY2xhc3MgU3dpcGVyIHtcbiAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgIGxldCBlbDtcbiAgICBsZXQgcGFyYW1zO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIGFyZ3NbMF0uY29uc3RydWN0b3IgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3NbMF0pLnNsaWNlKDgsIC0xKSA9PT0gJ09iamVjdCcpIHtcbiAgICAgIHBhcmFtcyA9IGFyZ3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIFtlbCwgcGFyYW1zXSA9IGFyZ3M7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXMpIHBhcmFtcyA9IHt9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICBpZiAoZWwgJiYgIXBhcmFtcy5lbCkgcGFyYW1zLmVsID0gZWw7XG5cbiAgICBpZiAocGFyYW1zLmVsICYmICQocGFyYW1zLmVsKS5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBzd2lwZXJzID0gW107XG4gICAgICAkKHBhcmFtcy5lbCkuZWFjaChjb250YWluZXJFbCA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1BhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zLCB7XG4gICAgICAgICAgZWw6IGNvbnRhaW5lckVsXG4gICAgICAgI
101H0pO1xuICAgICAgICBzd2lwZXJzLnB1c2gobmV3IFN3aXBlcihuZXdQYXJhbXMpKTtcbiAgICAgIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG5cbiAgICAgIHJldHVybiBzd2lwZXJzO1xuICAgIH0gLy8gU3dpcGVyIEluc3RhbmNlXG5cblxuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgc3dpcGVyLl9fc3dpcGVyX18gPSB0cnVlO1xuICAgIHN3aXBlci5zdXBwb3J0ID0gZ2V0U3VwcG9ydCgpO1xuICAgIHN3aXBlci5kZXZpY2UgPSBnZXREZXZpY2Uoe1xuICAgICAgdXNlckFnZW50OiBwYXJhbXMudXNlckFnZW50XG4gICAgfSk7XG4gICAgc3dpcGVyLmJyb3dzZXIgPSBnZXRCcm93c2VyKCk7XG4gICAgc3dpcGVyLmV2ZW50c0xpc3RlbmVycyA9IHt9O1xuICAgIHN3aXBlci5ldmVudHNBbnlMaXN0ZW5lcnMgPSBbXTtcbiAgICBzd2lwZXIubW9kdWxlcyA9IFsuLi5zd2lwZXIuX19tb2R1bGVzX19dO1xuXG4gICAgaWYgKHBhcmFtcy5tb2R1bGVzICYmIEFycmF5LmlzQXJyYXkocGFyYW1zLm1vZHVsZXMpKSB7XG4gICAgICBzd2lwZXIubW9kdWxlcy5wdXNoKC4uLnBhcmFtcy5tb2R1bGVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxNb2R1bGVzUGFyYW1zID0ge307XG4gICAgc3dpcGVyLm1vZHVsZXMuZm9yRWFjaChtb2QgPT4ge1xuICAgICAgbW9kKHtcbiAgICAgICAgc3dpcGVyLFxuICAgICAgICBleHRlbmRQYXJhbXM6IG1vZHVsZUV4dGVuZFBhcmFtcyhwYXJhbXMsIGFsbE1vZHVsZXNQYXJhbXMpLFxuICAgICAgICBvbjogc3dpcGVyLm9uLmJpbmQoc3dpcGVyKSxcbiAgICAgICAgb25jZTogc3dpcGVyLm9uY2UuYmluZChzd2lwZXIpLFxuICAgICAgICBvZmY6IHN3aXBlci5vZmYuYmluZChzd2lwZXIpLFxuICAgICAgICBlbWl0OiBzd2lwZXIuZW1pdC5iaW5kKHN3aXBlcilcbiAgICAgIH0pO1xuICAgIH0pOyAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBtb2R1bGVzIHBhcmFtc1xuXG4gICAgY29uc3Qgc3dpcGVyUGFyYW1zID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgYWxsTW9kdWxlc1BhcmFtcyk7IC8vIEV4dGVuZCBkZWZhdWx0cyB3aXRoIHBhc3NlZCBwYXJhbXNcblxuICAgIHN3aXBlci5wYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlclBhcmFtcywgZXh0ZW5kZWREZWZhdWx0cywgcGFyYW1zKTtcbiAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlci5wYXJhbXMpO1xuICAgIHN3aXBlci5wYXNzZWRQYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtcyk7IC8vIGFkZCBldmVudCBsaXN0ZW5lcnNcblxuICAgIGlmIChzd2lwZXIucGFyYW1zICYmIHN3aXBlci5wYXJhbXMub24pIHtcbiAgICAgIE9iamVjdC5rZXlzKHN3aXBlci5wYXJhbXMub24pLmZvckVhY2goZXZlbnROYW1lID0+IHtcbiAgICAgICAgc3dpcGVyLm9uKGV2ZW50TmFtZSwgc3dpcGVyLnBhcmFtcy5vbltldmVudE5hbWVdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzd2lwZXIucGFyYW1zICYmIHN3aXBlci5wYXJhbXMub25BbnkpIHtcbiAgICAgIHN3aXBlci5vbkFueShzd2lwZXIucGFyYW1zLm9uQW55KTtcbiAgICB9IC8vIFNhdmUgRG9tIGxpYlxuXG5cbiAgICBzd2lwZXIuJCA9ICQ7IC8vIEV4dGVuZCBTd2lwZXJcblxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgICBlbmFibGVkOiBzd2lwZXIucGFyYW1zLmVuYWJsZWQsXG4gICAgICBlbCxcbiAgICAgIC8vIENsYXNzZXNcbiAgICAgIGNsYXNzTmFtZXM6IFtdLFxuICAgICAgLy8gU2xpZGVzXG4gICAgICBzbGlkZXM6ICQoKSxcbiAgICAgIHNsaWRlc0dyaWQ6IFtdLFxuICAgICAgc25hcEdyaWQ6IFtdLFxuICAgICAgc2xpZGVzU2l6ZXNHcmlkOiBbXSxcblxuICAgICAgLy8gaXNEaXJlY3Rpb25cbiAgICAgIGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICB9LFxuXG4gICAgICBpc1ZlcnRpY2FsKCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgICB9LFxuXG4gICAgICAvLyBJbmRleGVzXG4gICAgICBhY3RpdmVJbmRleDogMCxcbiAgICAgIHJlYWxJbmRleDogMCxcbiAgICAgIC8vXG4gICAgICBpc0JlZ2lubmluZzogdHJ1ZSxcbiAgICAgIGlzRW5kOiBmYWxzZSxcbiAgICAgIC8vIFByb3BzXG4gICAgICB0cmFuc2xhdGU6IDAsXG4gICAgICBwcmV2aW91c1RyYW5zbGF0ZTogMCxcbiAgICAgIHByb2dyZXNzOiAwLFxuICAgICAgdmVsb2NpdHk6IDAsXG4gICAgICBhbmltYXRpbmc6IGZhbHNlLFxuICAgICAgLy8gTG9ja3NcbiAgICAgIGFsbG93U2xpZGVOZXh0OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVOZXh0LFxuICAgICAgYWxsb3dTbGlkZVByZXY6IHN3aXBlci5wYXJhbXMuYWxsb3dTbGlkZVByZXYsXG4gICAgICAvLyBUb3VjaCBFdmVudHNcbiAgICAgIHRvdWNoRXZlbnRzOiBmdW5jdGlvbiB0b3VjaEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgdG91Y2ggPSBbJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJ107XG4gICAgICAgIGNvbnN0IGRlc2t0b3AgPSBbJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCddO1xuICAgICAgICBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCA9IHtcbiAgICAgICAgICBzdGFydDogdG91Y2hbMF0sXG4gICAgICAgICAgbW92ZTogdG91Y2hbMV0sXG4gICAgICAgICAgZW5kOiB0b3VjaFsyXSxcbiAgICAgICAgICBjYW5jZWw6IHRvdWNoWzNdXG4gICAgICAgIH07XG4gICAgICAgIHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3AgPSB7XG4gICAgICAgICAgc3RhcnQ6IGRlc2t0b3BbMF0sXG4gICAgICAgICAgbW92ZTogZGVza3RvcFsxXSxcbiAgICAgICAgICBlbmQ6IGRlc2t0b3BbMl1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN3aXBlci5zdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggPyBzd2lwZXIudG91Y2hFdmVudHNUb3VjaCA6IHN3aXBlci50b3VjaEV2ZW50c0Rlc2t0b3A7XG4gICAgICB9KCksXG4gICAgICB0b3VjaEV2ZW50c0RhdGE6IHtcbiAgICAgICAgaXNUb3VjaGVkOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTW92ZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxsb3dUb3VjaENhbGxiYWNrczogdW5kZWZpbmVkLFxuICAgICAgICB0b3VjaFN0YXJ0VGltZTogdW5kZWZpbmVkLFxuICAgICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgICBjdXJyZW50VHJhbnNsYXRlOiB1bmRlZmluZWQsXG4gICAgICAgI
101HN0YXJ0VHJhbnNsYXRlOiB1bmRlZmluZWQsXG4gICAgICAgIGFsbG93VGhyZXNob2xkTW92ZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyBGb3JtIGVsZW1lbnRzIHRvIG1hdGNoXG4gICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzOiBzd2lwZXIucGFyYW1zLmZvY3VzYWJsZUVsZW1lbnRzLFxuICAgICAgICAvLyBMYXN0IGNsaWNrIHRpbWVcbiAgICAgICAgbGFzdENsaWNrVGltZTogbm93KCksXG4gICAgICAgIGNsaWNrVGltZW91dDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBWZWxvY2l0aWVzXG4gICAgICAgIHZlbG9jaXRpZXM6IFtdLFxuICAgICAgICBhbGxvd01vbWVudHVtQm91bmNlOiB1bmRlZmluZWQsXG4gICAgICAgIGlzVG91Y2hFdmVudDogdW5kZWZpbmVkLFxuICAgICAgICBzdGFydE1vdmluZzogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgLy8gQ2xpY2tzXG4gICAgICBhbGxvd0NsaWNrOiB0cnVlLFxuICAgICAgLy8gVG91Y2hlc1xuICAgICAgYWxsb3dUb3VjaE1vdmU6IHN3aXBlci5wYXJhbXMuYWxsb3dUb3VjaE1vdmUsXG4gICAgICB0b3VjaGVzOiB7XG4gICAgICAgIHN0YXJ0WDogMCxcbiAgICAgICAgc3RhcnRZOiAwLFxuICAgICAgICBjdXJyZW50WDogMCxcbiAgICAgICAgY3VycmVudFk6IDAsXG4gICAgICAgIGRpZmY6IDBcbiAgICAgIH0sXG4gICAgICAvLyBJbWFnZXNcbiAgICAgIGltYWdlc1RvTG9hZDogW10sXG4gICAgICBpbWFnZXNMb2FkZWQ6IDBcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnX3N3aXBlcicpOyAvLyBJbml0XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5pbml0KSB7XG4gICAgICBzd2lwZXIuaW5pdCgpO1xuICAgIH0gLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cblxuXG4gICAgcmV0dXJuIHN3aXBlcjtcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChzd2lwZXIuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHN3aXBlci5lbmFibGVkID0gdHJ1ZTtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2VuYWJsZScpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICBzd2lwZXIuZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgc3dpcGVyLnVuc2V0R3JhYkN1cnNvcigpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdkaXNhYmxlJyk7XG4gIH1cblxuICBzZXRQcm9ncmVzcyhwcm9ncmVzcywgc3BlZWQpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIHByb2dyZXNzID0gTWF0aC5taW4oTWF0aC5tYXgocHJvZ3Jlc3MsIDApLCAxKTtcbiAgICBjb25zdCBtaW4gPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgY29uc3QgbWF4ID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSAobWF4IC0gbWluKSAqIHByb2dyZXNzICsgbWluO1xuICAgIHN3aXBlci50cmFuc2xhdGVUbyhjdXJyZW50LCB0eXBlb2Ygc3BlZWQgPT09ICd1bmRlZmluZWQnID8gMCA6IHNwZWVkKTtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICB9XG5cbiAgZW1pdENvbnRhaW5lckNsYXNzZXMoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuX2VtaXRDbGFzc2VzIHx8ICFzd2lwZXIuZWwpIHJldHVybjtcbiAgICBjb25zdCBjbHMgPSBzd2lwZXIuZWwuY2xhc3NOYW1lLnNwbGl0KCcgJykuZmlsdGVyKGNsYXNzTmFtZSA9PiB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lLmluZGV4T2YoJ3N3aXBlcicpID09PSAwIHx8IGNsYXNzTmFtZS5pbmRleE9mKHN3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzcykgPT09IDA7XG4gICAgfSk7XG4gICAgc3dpcGVyLmVtaXQoJ19jb250YWluZXJDbGFzc2VzJywgY2xzLmpvaW4oJyAnKSk7XG4gIH1cblxuICBnZXRTbGlkZUNsYXNzZXMoc2xpZGVFbCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5kZXN0cm95ZWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gc2xpZGVFbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoY2xhc3NOYW1lID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuaW5kZXhPZignc3dpcGVyLXNsaWRlJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSA9PT0gMDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICBlbWl0U2xpZGVzQ2xhc3NlcygpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5fZW1pdENsYXNzZXMgfHwgIXN3aXBlci5lbCkgcmV0dXJuO1xuICAgIGNvbnN0IHVwZGF0ZXMgPSBbXTtcbiAgICBzd2lwZXIuc2xpZGVzLmVhY2goc2xpZGVFbCA9PiB7XG4gICAgICBjb25zdCBjbGFzc05hbWVzID0gc3dpcGVyLmdldFNsaWRlQ2xhc3NlcyhzbGlkZUVsKTtcbiAgICAgIHVwZGF0ZXMucHVzaCh7XG4gICAgICAgIHNsaWRlRWwsXG4gICAgICAgIGNsYXNzTmFtZXNcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLmVtaXQoJ19zbGlkZUNsYXNzJywgc2xpZGVFbCwgY2xhc3NOYW1lcyk7XG4gICAgfSk7XG4gICAgc3dpcGVyLmVtaXQoJ19zbGlkZUNsYXNzZXMnLCB1cGRhdGVzKTtcbiAgfVxuXG4gIHNsaWRlc1BlclZpZXdEeW5hbWljKHZpZXcgPSAnY3VycmVudCcsIGV4YWN0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIHNsaWRlcyxcbiAgICAgIHNsaWRlc0dyaWQsXG4gICAgICBzbGlkZXNTaXplc0dyaWQsXG4gICAgICBzaXplOiBzd2lwZXJTaXplLFxuICAgICAgYWN0aXZlSW5kZXhcbiAgICB9ID0gc3dpcGVyO1xuICAgIGxldCBzcHYgPSAxO1xuXG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgbGV0IHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgbGV0IGJyZWFrTG9vcDtcblxuICAgICAgZm9yIChsZXQgaSA9IGFjdGl2ZUluZGV4ICsgMTsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldICYmICFicmVha0xvb3ApIHtcbiAgICAgICAgICBzbGlkZVNpemUgKz0gc2xpZGVzW2ldLnN3aXBlclNsaWRlU2l6ZTtcbiAgICAgICAgICBzcHYgKz0gMTtcbiAgICAgICAgICBpZiAoc2xpZGVTaXplID4gc3dpcGVyU2l6ZSkgYnJlYWtMb29wID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGlmICh2aWV3ID09PSAnY3VycmVudCcpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IGFjdGl2ZUluZGV4ICsgMTsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgIGNvbnN0IHNsaWRlSW5WaWV3ID0gZXhhY3QgPyBzbGlkZXNHcmlkW2ldICsgc2xpZGVzU2l6ZXNHcmlkW2ldIC0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gPCBzd2lwZXJTaXplIDogc2xpZGVzR3JpZFtpXSAtIHNsaWRlc0dyaWRbYWN0aXZlSW5kZXhdIDwgc3dpcGVyU2l6ZTtcblxuICAgICAgICAgIGlmIChzbGlkZUluVmlldykge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwcmV2aW91c1xuICAgICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgIGNvbnN0IHNsaWRlSW5WaWV3ID0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gLSBzbGlkZXNHcmlkW2ldIDwgc3dpcGVyU2l6ZTtcblxuICAgICAgICAgIGlmIChzbGlkZUluVmlldykge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwdjtcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBzbmFwR3JpZCxcbiAgICAgIHBhcmFtc1xuICAgIH0gPSBzd2lwZXI7
101IC8vIEJyZWFrcG9pbnRzXG5cbiAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH1cblxuICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG5cbiAgICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGVWYWx1ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlICogLTEgOiBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgY29uc3QgbmV3VHJhbnNsYXRlID0gTWF0aC5taW4oTWF0aC5tYXgodHJhbnNsYXRlVmFsdWUsIHN3aXBlci5tYXhUcmFuc2xhdGUoKSksIHN3aXBlci5taW5UcmFuc2xhdGUoKSk7XG4gICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zbGF0ZWQ7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBzd2lwZXIucGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQpIHtcbiAgICAgIHNldFRyYW5zbGF0ZSgpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgfHwgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zbGF0ZWQgPSBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0cmFuc2xhdGVkKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzbmFwR3JpZCAhPT0gc3dpcGVyLnNuYXBHcmlkKSB7XG4gICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCd1cGRhdGUnKTtcbiAgfVxuXG4gIGNoYW5nZURpcmVjdGlvbihuZXdEaXJlY3Rpb24sIG5lZWRVcGRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBjdXJyZW50RGlyZWN0aW9uID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb247XG5cbiAgICBpZiAoIW5ld0RpcmVjdGlvbikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBuZXdEaXJlY3Rpb24gPSBjdXJyZW50RGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgIH1cblxuICAgIGlmIChuZXdEaXJlY3Rpb24gPT09IGN1cnJlbnREaXJlY3Rpb24gfHwgbmV3RGlyZWN0aW9uICE9PSAnaG9yaXpvbnRhbCcgJiYgbmV3RGlyZWN0aW9uICE9PSAndmVydGljYWwnKSB7XG4gICAgICByZXR1cm4gc3dpcGVyO1xuICAgIH1cblxuICAgIHN3aXBlci4kZWwucmVtb3ZlQ2xhc3MoYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfSR7Y3VycmVudERpcmVjdGlvbn1gKS5hZGRDbGFzcyhgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9JHtuZXdEaXJlY3Rpb259YCk7XG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gICAgc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPSBuZXdEaXJlY3Rpb247XG4gICAgc3dpcGVyLnNsaWRlcy5lYWNoKHNsaWRlRWwgPT4ge1xuICAgICAgaWYgKG5ld0RpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICBzbGlkZUVsLnN0eWxlLndpZHRoID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGlkZUVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHN3aXBlci5lbWl0KCdjaGFuZ2VEaXJlY3Rpb24nKTtcbiAgICBpZiAobmVlZFVwZGF0ZSkgc3dpcGVyLnVwZGF0ZSgpO1xuICAgIHJldHVybiBzd2lwZXI7XG4gIH1cblxuICBjaGFuZ2VMYW5ndWFnZURpcmVjdGlvbihkaXJlY3Rpb24pIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmIChzd2lwZXIucnRsICYmIGRpcmVjdGlvbiA9PT0gJ3J0bCcgfHwgIXN3aXBlci5ydGwgJiYgZGlyZWN0aW9uID09PSAnbHRyJykgcmV0dXJuO1xuICAgIHN3aXBlci5ydGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgIHN3aXBlci5ydGxUcmFuc2xhdGUgPSBzd2lwZXIucGFyYW1zLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHN3aXBlci5ydGw7XG5cbiAgICBpZiAoc3dpcGVyLnJ0bCkge1xuICAgICAgc3dpcGVyLiRlbC5hZGRDbGFzcyhgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9cnRsYCk7XG4gICAgICBzd2lwZXIuZWwuZGlyID0gJ3J0bCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci4kZWwucmVtb3ZlQ2xhc3MoYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfXJ0bGApO1xuICAgICAgc3dpcGVyLmVsLmRpciA9ICdsdHInO1xuICAgIH1cblxuICAgIHN3aXBlci51cGRhdGUoKTtcbiAgfVxuXG4gIG1vdW50KGVsKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLm1vdW50ZWQpIHJldHVybiB0cnVlOyAvLyBGaW5kIGVsXG5cbiAgICBjb25zdCAkZWwgPSAkKGVsIHx8IHN3aXBlci5wYXJhbXMuZWwpO1xuICAgIGVsID0gJGVsWzBdO1xuXG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGVsLnN3aXBlciA9IHN3aXBlcjtcblxuICAgIGNvbnN0IGdldFdyYXBwZXJTZWxlY3RvciA9ICgpID0+IHtcbiAgICAgIHJldHVybi
101BgLiR7KHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzIHx8ICcnKS50cmltKCkuc3BsaXQoJyAnKS5qb2luKCcuJyl9YDtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0V3JhcHBlciA9ICgpID0+IHtcbiAgICAgIGlmIChlbCAmJiBlbC5zaGFkb3dSb290ICYmIGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcikge1xuICAgICAgICBjb25zdCByZXMgPSAkKGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihnZXRXcmFwcGVyU2VsZWN0b3IoKSkpOyAvLyBDaGlsZHJlbiBuZWVkcyB0byByZXR1cm4gc2xvdCBpdGVtc1xuXG4gICAgICAgIHJlcy5jaGlsZHJlbiA9IG9wdGlvbnMgPT4gJGVsLmNoaWxkcmVuKG9wdGlvbnMpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGlmICghJGVsLmNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiAkKCRlbCkuY2hpbGRyZW4oZ2V0V3JhcHBlclNlbGVjdG9yKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJGVsLmNoaWxkcmVuKGdldFdyYXBwZXJTZWxlY3RvcigpKTtcbiAgICB9OyAvLyBGaW5kIFdyYXBwZXJcblxuXG4gICAgbGV0ICR3cmFwcGVyRWwgPSBnZXRXcmFwcGVyKCk7XG5cbiAgICBpZiAoJHdyYXBwZXJFbC5sZW5ndGggPT09IDAgJiYgc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cykge1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgJHdyYXBwZXJFbCA9ICQod3JhcHBlcik7XG4gICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHN3aXBlci5wYXJhbXMud3JhcHBlckNsYXNzO1xuICAgICAgJGVsLmFwcGVuZCh3cmFwcGVyKTtcbiAgICAgICRlbC5jaGlsZHJlbihgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzfWApLmVhY2goc2xpZGVFbCA9PiB7XG4gICAgICAgICR3cmFwcGVyRWwuYXBwZW5kKHNsaWRlRWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICAgICRlbCxcbiAgICAgIGVsLFxuICAgICAgJHdyYXBwZXJFbCxcbiAgICAgIHdyYXBwZXJFbDogJHdyYXBwZXJFbFswXSxcbiAgICAgIG1vdW50ZWQ6IHRydWUsXG4gICAgICAvLyBSVExcbiAgICAgIHJ0bDogZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyxcbiAgICAgIHJ0bFRyYW5zbGF0ZTogc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyAmJiAoZWwuZGlyLnRvTG93ZXJDYXNlKCkgPT09ICdydGwnIHx8ICRlbC5jc3MoJ2RpcmVjdGlvbicpID09PSAncnRsJyksXG4gICAgICB3cm9uZ1JUTDogJHdyYXBwZXJFbC5jc3MoJ2Rpc3BsYXknKSA9PT0gJy13ZWJraXQtYm94J1xuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaW5pdChlbCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5pbml0aWFsaXplZCkgcmV0dXJuIHN3aXBlcjtcbiAgICBjb25zdCBtb3VudGVkID0gc3dpcGVyLm1vdW50KGVsKTtcbiAgICBpZiAobW91bnRlZCA9PT0gZmFsc2UpIHJldHVybiBzd2lwZXI7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZUluaXQnKTsgLy8gU2V0IGJyZWFrcG9pbnRcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH0gLy8gQWRkIENsYXNzZXNcblxuXG4gICAgc3dpcGVyLmFkZENsYXNzZXMoKT
101sgLy8gQ3JlYXRlIGxvb3BcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gICAgfSAvLyBVcGRhdGUgc2l6ZVxuXG5cbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpOyAvLyBVcGRhdGUgc2xpZGVzXG5cbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzKCk7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSB7XG4gICAgICBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIH0gLy8gU2V0IEdyYWIgQ3Vyc29yXG5cblxuICAgIGlmIChzd2lwZXIucGFyYW1zLmdyYWJDdXJzb3IgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMucHJlbG9hZEltYWdlcykge1xuICAgICAgc3dpcGVyLnByZWxvYWRJbWFnZXMoKTtcbiAgICB9IC8vIFNsaWRlIFRvIEluaXRpYWwgU2xpZGVcblxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIubG9vcGVkU2xpZGVzLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIucGFyYW1zLmluaXRpYWxTbGlkZSwgMCwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQsIGZhbHNlLCB0cnVlKTtcbiAgICB9IC8vIEF0dGFjaCBldmVudHNcblxuXG4gICAgc3dpcGVyLmF0dGFjaEV2ZW50cygpOyAvLyBJbml0IEZsYWdcblxuICAgIHN3aXBlci5pbml0aWFsaXplZCA9IHRydWU7IC8vIEVtaXRcblxuICAgI
101HN3aXBlci5lbWl0KCdpbml0Jyk7XG4gICAgc3dpcGVyLmVtaXQoJ2FmdGVySW5pdCcpO1xuICAgIHJldHVybiBzd2lwZXI7XG4gIH1cblxuICBkZXN0cm95KGRlbGV0ZUluc3RhbmNlID0gdHJ1ZSwgY2xlYW5TdHlsZXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCB7XG4gICAgICBwYXJhbXMsXG4gICAgICAkZWwsXG4gICAgICAkd3JhcHBlckVsLFxuICAgICAgc2xpZGVzXG4gICAgfSA9IHN3aXBlcjtcblxuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcyA9PT0gJ3VuZGVmaW5lZCcgfHwgc3dpcGVyLmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZURlc3Ryb3knKTsgLy8gSW5pdCBGbGFnXG5cbiAgICBzd2lwZXIuaW5pdGlhbGl6ZWQgPSBmYWxzZTsgLy8gRGV0YWNoIGV2ZW50c1xuXG4gICAgc3dpcGVyLmRldGFjaEV2ZW50cygpOyAvLyBEZXN0cm95IGxvb3BcblxuICAgIGlmIChwYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgfSAvLyBDbGVhbnVwIHN0eWxlc1xuXG5cbiAgICBpZiAoY2xlYW5TdHlsZXMpIHtcbiAgICAgIHN3aXBlci5yZW1vdmVDbGFzc2VzKCk7XG4gICAgICAkZWwucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgICR3cmFwcGVyRWwucmVtb3ZlQXR0cignc3R5bGUnKTtcblxuICAgICAgaWYgKHNsaWRlcyAmJiBzbGlkZXMubGVuZ3RoKSB7XG4gICAgICAgIHNsaWRlcy5yZW1vdmVDbGFzcyhbcGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzLCBwYXJhbXMuc2xpZGVBY3RpdmVDbGFzcywgcGFyYW1zLnNsaWRlTmV4dENsYXNzLCBwYXJhbXMuc2xpZGVQcmV2Q2xhc3NdLmpvaW4oJyAnKSkucmVtb3ZlQXR0cignc3R5bGUnKS5yZW1vdmVBdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXBlci5lbWl0KCdkZXN0cm95Jyk7IC8vIERldGFjaCBlbWl0dGVyIGV2ZW50c1xuXG4gICAgT2JqZWN0LmtleXMoc3dpcGVyLmV2ZW50c0xpc3RlbmVycykuZm9yRWFjaChldmVudE5hbWUgPT4ge1xuICAgICAgc3dpcGVyLm9mZihldmVudE5hbWUpO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlbGV0ZUluc3RhbmNlICE9PSBmYWxzZSkge1xuICAgICAgc3dpcGVyLiRlbFswXS5zd2lwZXIgPSBudWxsO1xuICAgICAgZGVsZXRlUHJvcHMoc3dpcGVyKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBleHRlbmREZWZhdWx0cyhuZXdEZWZhdWx0cykge1xuICAgIGV4dGVuZChleHRlbmRlZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4dGVuZGVkRGVmYXVsdHMoKSB7XG4gICAgcmV0dXJuIGV4dGVuZGVkRGVmYXVsdHM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRzKCkge1xuICAgIHJldHVybiBkZWZhdWx0cztcbiAgfVxuXG4gIHN0YXRpYyBpbnN0YWxsTW9kdWxlKG1vZCkge1xuICAgIGlmICghU3dpcGVyLnByb3RvdHlwZS5fX21vZHVsZXNfXykgU3dpcGVyLnByb3RvdHlwZS5fX21vZHVsZXNfXyA9IFtdO1xuICAgIGNvbnN0IG1vZHVsZXMgPSBTd2lwZXIucHJvdG90eXBlLl9fbW9kdWxlc19fO1xuXG4gICAgaWYgKHR5cGVvZiBtb2QgPT09ICdmdW5jdGlvbicgJiYgbW9kdWxlcy5pbmRleE9mKG1vZCkgPCAwKSB7XG4gICAgICBtb2R1bGVzLnB1c2gobW9kKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgdXNlKG1vZHVsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZSkpIHtcbiAgICAgIG1vZHVsZS5mb3JFYWNoKG0gPT4gU3dpcGVyLmluc3RhbGxNb2R1bGUobSkpO1xuICAgICAgcmV0dXJuIFN3aXBlcjtcbiAgICB9XG5cbiAgICBTd2lwZXIuaW5zdGFsbE1vZHVsZShtb2R1bGUpO1xuICAgIHJldHVybiBTd2lwZXI7XG4gIH1cblxufVxuXG5PYmplY3Qua2V5cyhwcm90b3R5cGVzKS5mb3JFYWNoKHByb3RvdHlwZUdyb3VwID0+IHtcbiAgT2JqZWN0LmtleXMocHJvdG90eXBlc1twcm90b3R5cGVHcm91cF0pLmZvckVhY2gocHJvdG9NZXRob2QgPT4ge1xuICAgIFN3aXBlci5wcm90b3R5cGVbcHJvdG9NZXRob2RdID0gcHJvdG90eXBlc1twcm90b3R5cGVHcm91cF1bcHJvdG9NZXRob2RdO1xuICB9KTtcbn0pO1xuU3dpcGVyLnVzZShbUmVzaXplLCBPYnNlcnZlcl0pO1xuZXhwb3J0IGRlZmF1bHQgU3dpcGVyOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5leHBvcnQgZGVmYXVsdCB7XG4gIG9uKGV2ZW50cywgaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBzZWxmO1xuICAgIGNvbnN0IG1ldGhvZCA9IHByaW9yaXR5ID8gJ3Vuc2hpZnQnIDogJ3B1c2gnO1xuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdW21ldGhvZF0oaGFuZGxlcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG5cbiAgb25jZShldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcblxuICAgIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKC4uLmFyZ3MpIHtcbiAgICAgIHNlbGYub2ZmKGV2ZW50cywgb25jZUhhbmRsZXIpO1xuXG4gICAgICBpZiAob25jZUhhbmRsZXIuX19lbWl0dGVyUHJveHkpIHtcbiAgICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLl9fZW1pdHRlclByb3h5O1xuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cblxuICAgIG9uY2VIYW5kbGVyLl9fZW1pdHRlclByb3h5ID0gaGFuZGxlcjtcbiAgICByZXR1cm4gc2VsZi5vbihldmVudHMsIG9uY2VIYW5kbGVyLCBwcmlvcml0eSk7XG4gIH0sXG5cbiAgb25BbnkoaGFuZGxlciwgcHJpb3JpdHkpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm4gc2VsZjtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHJldHVybi
101BzZWxmO1xuICAgIGNvbnN0IG1ldGhvZCA9IHByaW9yaXR5ID8gJ3Vuc2hpZnQnIDogJ3B1c2gnO1xuXG4gICAgaWYgKHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmluZGV4T2YoaGFuZGxlcikgPCAwKSB7XG4gICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVyc1ttZXRob2RdKGhhbmRsZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuXG4gIG9mZkFueShoYW5kbGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0FueUxpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgY29uc3QgaW5kZXggPSBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5pbmRleE9mKGhhbmRsZXIpO1xuXG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG5cbiAgb2ZmKGV2ZW50cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgIGV2ZW50cy5zcGxpdCgnICcpLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBoYW5kbGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5mb3JFYWNoKChldmVudEhhbmRsZXIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50SGFuZGxlciA9PT0gaGFuZGxlciB8fCBldmVudEhhbmRsZXIuX19lbWl0dGVyUHJveHkgJiYgZXZlbnRIYW5kbGVyLl9fZW1pdHRlclByb3h5ID09PSBoYW5kbGVyKSB7XG4gICAgICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzZWxmO1xuICB9LFxuXG4gIGVtaXQoLi4uYXJncykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgIGxldCBldmVudHM7XG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IGNvbnRleHQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF07XG4gICAgICBkYXRhID0gYXJncy5zbGljZSgxLCBhcmdzLmxlbmd0aCk7XG4gICAgICBjb250ZXh0ID0gc2VsZjtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzID0gYXJnc1swXS5ldmVudHM7XG4gICAgICBkYXRhID0gYXJnc1swXS5kYXRhO1xuICAgICAgY29udGV4dCA9IGFyZ3NbMF0uY29udGV4dCB8fCBzZWxmO1xuICAgIH1cblxuICAgIGRhdGEudW5zaGlmdChjb250ZXh0KTtcbiAgICBjb25zdCBldmVudHNBcnJheSA9IEFycmF5LmlzQXJyYXkoZXZlbnRzKSA/IGV2ZW50cyA6IGV2ZW50cy5zcGxpdCgnICcpO1xuICAgIGV2ZW50c0FycmF5LmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgaWYgKHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzICYmIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmxlbmd0aCkge1xuICAgICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVycy5mb3JFYWNoKGV2ZW50SGFuZGxlciA9PiB7XG4gICAgICAgICAgZXZlbnRIYW5kbGVyLmFwcGx5KGNvbnRleHQsIFtldmVudCwgLi4uZGF0YV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzICYmIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaChldmVudEhhbmRsZXIgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cblxufTsiLCJpbXBvcnQgdXBkYXRlU2l6ZSBmcm9tICcuL3VwZGF0ZVNpemUuanMnO1xuaW1wb3J0IHVwZGF0ZVNsaWRlcyBmcm9tICcuL3VwZGF0ZVNsaWRlcy5qcyc7XG5pbXBvcnQgdXBkYXRlQXV0b0hlaWdodCBmcm9tICcuL3VwZGF0ZUF1dG9IZWlnaHQuanMnO1xuaW1wb3J0IHVwZGF0ZVNsaWRlc09mZnNldCBmcm9tICcuL3VwZGF0ZVNsaWRlc09mZnNldC5qcyc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzUHJvZ3Jlc3MgZnJvbSAnLi91cGRhdGVTbGlkZXNQcm9ncmVzcy5qcyc7XG5pbXBvcnQgdXBkYXRlUHJvZ3Jlc3MgZnJvbSAnLi91cGRhdGVQcm9ncmVzcy5qcyc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzQ2xhc3NlcyBmcm9tICcuL3VwZGF0ZVNsaWRlc0NsYXNzZXMuanMnO1xuaW1wb3J0IHVwZGF0ZUFjdGl2ZUluZGV4IGZyb20gJy4vdXBkYXRlQWN0aXZlSW5kZXguanMnO1xuaW1wb3J0IHVwZGF0ZUNsaWNrZWRTbGlkZSBmcm9tICcuL3VwZGF0ZUNsaWNrZWRTbGlkZS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIHVwZGF0ZVNpemUsXG4gIHVwZGF0ZVNsaWRlcyxcbiAgdXBkYXRlQXV0b0hlaWdodCxcbiAgdXBkYXRlU2xpZGVzT2Zmc2V0LFxuICB1cGRhdGVTbGlkZXNQcm9ncmVzcyxcbiAgdXBkYXRlUHJvZ3Jlc3MsXG4gIHVwZGF0ZVNsaWRlc0NsYXNzZXMsXG4gIHVwZGF0ZUFjdGl2ZUluZGV4LFxuICB1cGRhdGVDbGlja2VkU2xpZGVcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2l6ZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgbGV0IHdpZHRoO1xuICBsZXQgaGVpZ2h0O1xuICBjb25zdCAkZWwgPSBzd2lwZXIuJGVsO1xuXG4gIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gJ3VuZGVmaW5lZCcgJiYgc3dpcGVyLnBhcmFtcy53aWR0aCAhPT0gbnVsbCkge1xuICAgIHdpZHRoID0gc3dpcGVyLnBhcmFtcy53aWR0aDtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9ICRlbFswXS5jbGllbnRXaWR0aDtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3dpcGVyLnBhcmFtcy5oZWlnaHQgIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSBudWxsKSB7XG4gICAgaGVpZ2h0ID0gc3dpcGVyLnBhcmFtcy5oZWlnaHQ7XG4gIH0gZWxzZSB7XG4gICAgaGVpZ2h0ID0gJGVsWzBdLmNsaWVudE
101hlaWdodDtcbiAgfVxuXG4gIGlmICh3aWR0aCA9PT0gMCAmJiBzd2lwZXIuaXNIb3Jpem9udGFsKCkgfHwgaGVpZ2h0ID09PSAwICYmIHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gU3VidHJhY3QgcGFkZGluZ3NcblxuXG4gIHdpZHRoID0gd2lkdGggLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLWxlZnQnKSB8fCAwLCAxMCkgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXJpZ2h0JykgfHwgMCwgMTApO1xuICBoZWlnaHQgPSBoZWlnaHQgLSBwYXJzZUludCgkZWwuY3NzKCdwYWRkaW5nLXRvcCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KCRlbC5jc3MoJ3BhZGRpbmctYm90dG9tJykgfHwgMCwgMTApO1xuICBpZiAoTnVtYmVyLmlzTmFOKHdpZHRoKSkgd2lkdGggPSAwO1xuICBpZiAoTnVtYmVyLmlzTmFOKGhlaWdodCkpIGhlaWdodCA9IDA7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHNpemU6IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHdpZHRoIDogaGVpZ2h0XG4gIH0pO1xufSIsImltcG9ydCB7IHNldENTU1Byb3BlcnR5IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNsaWRlcygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25MYWJlbChwcm9wZXJ0eSkge1xuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgICB9IC8vIHByZXR0aWVyLWlnbm9yZVxuXG5cbiAgICByZXR1cm4ge1xuICAgICAgJ3dpZHRoJzogJ2hlaWdodCcsXG4gICAgICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tbGVmdCcsXG4gICAgICAnbWFyZ2luLWJvdHRvbSAnOiAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICdtYXJnaW4tbGVmdCc6ICdtYXJnaW4tdG9wJyxcbiAgICAgICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAncGFkZGluZy1sZWZ0JzogJ3BhZGRpbmctdG9wJyxcbiAgICAgICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICdtYXJnaW5SaWdodCc6ICdtYXJnaW5Cb3R0b20nXG4gICAgfVtwcm9wZXJ0eV07XG4gIH1cblxuICBmdW5jdGlvbiBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKG5vZGUsIGxhYmVsKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobm9kZS5nZXRQcm9wZXJ0eVZhbHVlKGdldERpcmVjdGlvbkxhYmVsKGxhYmVsKSkgfHwgMCk7XG4gIH1cblxuICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBjb25zdCB7XG4gICAgJHdyYXBwZXJFbCxcbiAgICBzaXplOiBzd2lwZXJTaXplLFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgIHdyb25nUlRMXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGNvbnN0IHByZXZpb3VzU2xpZGVzTGVuZ3RoID0gaXNWaXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICBjb25zdCBzbGlkZXMgPSAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG4gIGNvbnN0IHNsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzbGlkZXMubGVuZ3RoO1xuICBsZXQgc25hcEdyaWQgPSBbXTtcbiAgY29uc3Qgc2xpZGVzR3JpZCA9IFtdO1xuICBjb25zdCBzbGlkZXNTaXplc0dyaWQgPSBbXTtcbiAgbGV0IG9mZnNldEJlZm9yZSA9IHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmU7XG5cbiAgaWYgKHR5cGVvZiBvZmZzZXRCZWZvcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvZmZzZXRCZWZvcmUgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlLmNhbGwoc3dpcGVyKTtcbiAgfVxuXG4gIGxldCBvZmZzZXRBZnRlciA9IHBhcmFtcy5zbGlkZXNPZmZzZXRBZnRlcjtcblxuICBpZiAodHlwZW9mIG9mZnNldEFmdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICB9XG5cbiAgY29uc3QgcHJldmlvdXNTbmFwR3JpZExlbmd0aCA9IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG4gIGNvbnN0IHByZXZpb3VzU2xpZGVzR3JpZExlbmd0aCA9IHN3aXBlci5zbGlkZXNHcmlkLmxlbmd0aDtcbiAgbGV0IHNwYWNlQmV0d2VlbiA9IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gIGxldCBzbGlkZVBvc2l0aW9uID0gLW9mZnNldEJlZm9yZTtcbiAgbGV0IHByZXZTbGlkZVNpemUgPSAwO1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGlmICh0eXBlb2Ygc3dpcGVyU2l6ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4ucmVwbGFjZSgnJScsICcnKSkgLyAxMDAgKiBzd2lwZXJTaXplO1xuICB9XG5cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gLXNwYWNlQmV0d2VlbjsgLy8gcmVzZXQgbWFyZ2luc1xuXG4gIGlmIChydGwpIHNsaWRlcy5jc3Moe1xuICAgIG1hcmdpbkxlZnQ6ICcnLFxuICAgIG1hcmdpbkJvdHRvbTogJycsXG4gICAgbWFyZ2luVG9wOiAnJ1xuICB9KTtlbHNlIHNsaWRlcy5jc3Moe1xuICAgIG1hcmdpblJpZ2h0OiAnJyxcbiAgICBtYXJnaW5Cb3R0b206ICcnLFxuICAgIG1hcmdpblRvcDogJydcbiAgfSk7IC8vIHJlc2V0IGNzc01vZGUgb2Zmc2V0c1xuXG4gIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmNzc01vZGUpIHtcbiAgICBzZXRDU1NQcm9wZXJ0eShzd2lwZXIud3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWJlZm9yZScsICcnKTtcbiAgICBzZXRDU1NQcm9wZXJ0eShzd2lwZXIud3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWFmdGVyJywgJycpO1xuICB9XG5cbiAgY29uc3QgZ3JpZEVuYWJsZWQgPSBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMSAmJiBzd2lwZXIuZ3JpZDtcblxuICBpZiAoZ3JpZEVuYWJsZWQpIHtcbiAgICBzd2lwZXIuZ3JpZC5pbml0U2xpZGVzKHNsaWRlc0xlbmd0aCk7XG4gIH0gLy8gQ2FsYyBzbGlkZXNcblxuXG4gIGxldCBzbGlkZVNpemU7XG4gIGNvbnN0IHNob3VsZFJlc2V0U2xpZGVTaXplID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiBwYXJhbXMuYnJlYWtwb2ludHMgJiYgT2JqZWN0LmtleXMocGFyYW1zLmJyZWFrcG9pbnRzKS5maWx0ZXIoa2V5ID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHBhcmFtcy5icmVha3BvaW50c1trZXldLnNsaWRlc1BlclZpZXcgIT09ICd1bmRlZmluZWQnO1xuICB9KS
1015sZW5ndGggPiAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZVNpemUgPSAwO1xuICAgIGNvbnN0IHNsaWRlID0gc2xpZGVzLmVxKGkpO1xuXG4gICAgaWYgKGdyaWRFbmFibGVkKSB7XG4gICAgICBzd2lwZXIuZ3JpZC51cGRhdGVTbGlkZShpLCBzbGlkZSwgc2xpZGVzTGVuZ3RoLCBnZXREaXJlY3Rpb25MYWJlbCk7XG4gICAgfVxuXG4gICAgaWYgKHNsaWRlLmNzcygnZGlzcGxheScpID09PSAnbm9uZScpIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJykge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2xpZGVTaXplKSB7XG4gICAgICAgIHNsaWRlc1tpXS5zdHlsZVtnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBgYDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2xpZGVTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHNsaWRlWzBdKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICBjb25zdCBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGVbMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuXG4gICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm0gPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9ICdub25lJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHtcbiAgICAgICAgc2xpZGVTaXplID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGUub3V0ZXJXaWR0aCh0cnVlKSA6IHNsaWRlLm91dGVySGVpZ2h0KHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIGNvbnN0IHdpZHRoID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3dpZHRoJyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ3BhZGRpbmctbGVmdCcpO1xuICAgICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAncGFkZGluZy1yaWdodCcpO1xuICAgICAgICBjb25zdCBtYXJnaW5MZWZ0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ21hcmdpbi1sZWZ0Jyk7XG4gICAgICAgIGNvbnN0IG1hcmdpblJpZ2h0ID0gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShzbGlkZVN0eWxlcywgJ21hcmdpbi1yaWdodCcpO1xuICAgICAgICBjb25zdCBib3hTaXppbmcgPSBzbGlkZVN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3gtc2l6aW5nJyk7XG5cbiAgICAgICAgaWYgKGJveFNpemluZyAmJiBib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICAgICAgb2Zmc2V0V2lkdGhcbiAgICAgICAgICB9ID0gc2xpZGVbMF07XG4gICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCArIChvZmZzZXRXaWR0aCAtIGNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS50cmFuc2Zvcm0gPSBjdXJyZW50VHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudFdlYktpdFRyYW5zZm9ybSkge1xuICAgICAgICBzbGlkZVswXS5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSBjdXJyZW50V2ViS2l0VHJhbnNmb3JtO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtIChwYXJhbXMuc2xpZGVzUGVyVmlldyAtIDEpICogc3BhY2VCZXR3ZWVuKSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTtcblxuICAgICAgaWYgKHNsaWRlc1tpXSkge1xuICAgICAgICBzbGlkZXNbaV0uc3R5bGVbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gYCR7c2xpZGVTaXplfXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2xpZGVzW2ldKSB7XG4gICAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplID0gc2xpZGVTaXplO1xuICAgIH1cblxuICAgIHNsaWRlc1NpemVzR3JpZC5wdXNoKHNsaWRlU2l6ZSk7XG5cbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSAvIDIgKyBwcmV2U2xpZGVTaXplIC8gMiArIHNwYWNlQmV0d2VlbjtcbiAgICAgIGlmIChwcmV2U2xpZGVTaXplID09PSAwICYmIGkgIT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICBpZiAoaSA9PT0gMCkgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gLSBzd2lwZXJTaXplIC8gMiAtIHNwYWNlQmV0d2VlbjtcbiAgICAgIGlmIChNYXRoLmFicyhzbGlkZVBvc2l0aW9uKSA8IDEgLyAxMDAwKSBzbGlkZVBvc2l0aW9uID0gMDtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgIGlmIChpbmRleCAlIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlUG9zaXRpb24gPSBNYXRoLmZsb29yKHNsaWRlUG9zaXRpb24pO1xuICAgICAgaWYgKChpbmRleCAtIE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCkpICUgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMCkgc25hcEdyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlc0dyaWQucHVzaChzbGlkZVBvc2l0aW9uKTtcbiAgICAgIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uICsgc2xpZGVTaXplICsgc3BhY2VCZXR3ZWVuO1xuICAgIH1cblxuICAgI
101HN3aXBlci52aXJ0dWFsU2l6ZSArPSBzbGlkZVNpemUgKyBzcGFjZUJldHdlZW47XG4gICAgcHJldlNsaWRlU2l6ZSA9IHNsaWRlU2l6ZTtcbiAgICBpbmRleCArPSAxO1xuICB9XG5cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5tYXgoc3dpcGVyLnZpcnR1YWxTaXplLCBzd2lwZXJTaXplKSArIG9mZnNldEFmdGVyO1xuXG4gIGlmIChydGwgJiYgd3JvbmdSVEwgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2NvdmVyZmxvdycpKSB7XG4gICAgJHdyYXBwZXJFbC5jc3Moe1xuICAgICAgd2lkdGg6IGAke3N3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW59cHhgXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGFyYW1zLnNldFdyYXBwZXJTaXplKSB7XG4gICAgJHdyYXBwZXJFbC5jc3Moe1xuICAgICAgW2dldERpcmVjdGlvbkxhYmVsKCd3aWR0aCcpXTogYCR7c3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbn1weGBcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChncmlkRW5hYmxlZCkge1xuICAgIHN3aXBlci5ncmlkLnVwZGF0ZVdyYXBwZXJTaXplKHNsaWRlU2l6ZSwgc25hcEdyaWQsIGdldERpcmVjdGlvbkxhYmVsKTtcbiAgfSAvLyBSZW1vdmUgbGFzdCBncmlkIGVsZW1lbnRzIGRlcGVuZGluZyBvbiB3aWR0aFxuXG5cbiAgaWYgKCFwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBjb25zdCBuZXdTbGlkZXNHcmlkID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNuYXBHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBsZXQgc2xpZGVzR3JpZEl0ZW0gPSBzbmFwR3JpZFtpXTtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZXNHcmlkSXRlbSA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZEl0ZW0pO1xuXG4gICAgICBpZiAoc25hcEdyaWRbaV0gPD0gc3dpcGVyLnZpcnR1YWxTaXplIC0gc3dpcGVyU2l6ZSkge1xuICAgICAgICBuZXdTbGlkZXNHcmlkLnB1c2goc2xpZGVzR3JpZEl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcblxuICAgIGlmIChNYXRoLmZsb29yKHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpIC0gTWF0aC5mbG9vcihzbmFwR3JpZFtzbmFwR3JpZC5sZW5ndGggLSAxXSkgPiAxKSB7XG4gICAgICBzbmFwR3JpZC5wdXNoKHN3aXBlci52aXJ0dWFsU2l6ZSAtIHN3aXBlclNpemUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzbmFwR3JpZC5sZW5ndGggPT09IDApIHNuYXBHcmlkID0gWzBdO1xuXG4gIGlmIChwYXJhbXMuc3BhY2VCZXR3ZWVuICE9PSAwKSB7XG4gICAgY29uc3Qga2V5ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHJ0bCA/ICdtYXJnaW5MZWZ0JyA6IGdldERpcmVjdGlvbkxhYmVsKCdtYXJnaW5SaWdodCcpO1xuICAgIHNsaWRlcy5maWx0ZXIoKF8sIHNsaWRlSW5kZXgpID0+IHtcbiAgICAgIGlmICghcGFyYW1zLmNzc01vZGUpIHJldHVybiB0cnVlO1xuXG4gICAgICBpZiAoc2xpZGVJbmRleCA9PT0gc2xpZGVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KS5jc3Moe1xuICAgICAgW2tleV06IGAke3NwYWNlQmV0d2Vlbn1weGBcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzQm91bmRzKSB7XG4gICAgbGV0IGFsbFNsaWRlc1NpemUgPSAwO1xuICAgIHNsaWRlc1NpemVzR3JpZC5mb3JFYWNoKHNsaWRlU2l6ZVZhbHVlID0+IHtcbiAgICAgIGFsbFNsaWRlc1NpemUgKz0gc2xpZGVTaXplVmFsdWUgKyAocGFyYW1zLnNwYWNlQmV0d2VlbiA/IHBhcmFtcy5zcGFjZUJldHdlZW4gOiAwKTtcbiAgICB9KTtcbiAgICBhbGxTbGlkZXNTaXplIC09IHBhcmFtcy5zcGFjZUJldHdlZW47XG4gICAgY29uc3QgbWF4U25hcCA9IGFsbFNsaWRlc1NpemUgLSBzd2lwZXJTaXplO1xuICAgIHNuYXBHcmlkID0gc25hcEdyaWQubWFwKHNuYXAgPT4ge1xuICAgICAgaWYgKHNuYXAgPCAwKSByZXR1cm4gLW9mZnNldEJlZm9yZTtcbiAgICAgIGlmIChzbmFwID4gbWF4U25hcCkgcmV0dXJuIG1heFNuYXAgKyBvZmZzZXRBZnRlcjtcbiAgICAgIHJldHVybiBzbmFwO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXMpIHtcbiAgICBsZXQgYWxsU2xpZGVzU2l6ZSA9IDA7XG4gICAgc2xpZGVzU2l6ZXNHcmlkLmZvckVhY2goc2xpZGVTaXplVmFsdWUgPT4ge1xuICAgICAgYWxsU2xpZGVzU2l6ZSArPSBzbGlkZVNpemVWYWx1ZSArIChwYXJhbXMuc3BhY2VCZXR3ZWVuID8gcGFyYW1zLnNwYWNlQmV0d2VlbiA6IDApO1xuICAgIH0pO1xuICAgIGFsbFNsaWRlc1NpemUgLT0gcGFyYW1zLnNwYWNlQmV0d2VlbjtcblxuICAgIGlmIChhbGxTbGlkZXNTaXplIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgY29uc3QgYWxsU2xpZGVzT2Zmc2V0ID0gKHN3aXBlclNpemUgLSBhbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICBzbmFwR3JpZC5mb3JFYWNoKChzbmFwLCBzbmFwSW5kZXgpID0+IHtcbiAgICAgICAgc25hcEdyaWRbc25hcEluZGV4XSA9IHNuYXAgLSBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaCgoc25hcCwgc25hcEluZGV4KSA9PiB7XG4gICAgICAgIHNsaWRlc0dyaWRbc25hcEluZGV4XSA9IHNuYXAgKyBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIHNsaWRlcyxcbiAgICBzbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIHNsaWRlc1NpemVzR3JpZFxuICB9KTtcblxuICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5jc3NNb2RlICYmICFwYXJhbXMuY2VudGVyZWRTbGlkZXNCb3VuZHMpIHtcbiAgICBzZXRDU1NQcm9wZXJ0eShzd2lwZXIud3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWJlZm9yZScsIGAkey1zbmFwR3JpZFswXX1weGApO1xuICAgIHNldENTU1Byb3BlcnR5KHN3aXBlci53cmFwcGVyRWwsICctLXN3aXBlci1jZW50ZXJlZC1vZmZzZXQtYWZ0ZXInLCBgJHtzd2lwZXIuc2l6ZSAvIDIgLSBzbGlkZXNTaXplc0dyaWRbc2xpZGVzU2l6ZXNHcmlkLmxlbmd0aCAtIDFdIC8gMn1weGApO1xuICAgIGNvbnN0IGFkZFRvU25hcEdyaWQgPSAtc3dpcGVyLnNuYXBHcmlkWzBdO1xuICAgIGNvbnN0IGFkZFRvU2xpZGVzR3JpZCA9IC1zd2lwZXIuc2xpZGVzR3JpZFswXTtcbiAgICBzd2lwZXIuc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQubWFwKHYgPT4gdiArIGFkZFRvU25hcEdyaWQpO1xuICAgIHN3aXBlci5zbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQubWFwKHYgPT4gdiArIGFkZFRvU2xpZGVzR3JpZCk7XG4gIH1cblxuICBpZiAoc2xpZGVzTGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0xlbmd0aCkge1xuICAgIHN3aXBlci5lbWl0KCdzbGlkZXNMZW5ndGhDaGFuZ2UnKTtcbiAgfVxuXG4gIGlmIChzbmFwR3JpZC5sZW5ndGggIT09IHByZXZpb3VzU25hcEdyaWRMZW5ndGgpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93KSBzd2lwZXIuY2hlY2tPdmVyZmxvdygpO1xuICAgIHN3aXBlci5lbWl0KCdzbmFwR3JpZExlbmd0aENoYW5nZScpO1xuICB9XG5cbiAgaWYgKHNsaWRlc0dyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzR3JpZExlbmd0aENoYW5nZScpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICB9XG5cbiAgaWYgKCFpc1ZpcnR1YWwgJiYgIXBhcmFtcy5jc3NNb2RlICYmIChwYXJhbXMuZWZmZWN0ID09PSAnc2xpZGUnIHx8IHBhcmFtcy5lZmZlY3QgPT09ICdmYWRlJykpIHtcbiAgICBjb25zdCBiYWNrRmFjZUhpZGRlbkNsYXNzID0gYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9YmFja2ZhY2UtaGlkZGVuYDtcbiAgICBjb25zdCBoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCA9IHN3aXBlci4kZWwuaGFzQ2xhc3MoYmFja0ZhY2VIaWRkZW5DbGFzcyk7XG5cbiAgICBpZiAoc2xpZGVzTGVuZ3RoIDw9IHBhcmFtcy5tYXhCYWNrZmFjZUhpZGRlblNsaWRlcykge1xuICAgICAgaWYgKCFoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCkgc3dpcGVyLiRlbC5hZGRDbGFzcyhiYWNrRmFjZUhpZGRlbkNsYXNzKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NsYXNzQmFja2ZhY2VDbGFzc0FkZGVkKSB7XG4gICAgICBzd2lwZXIuJGVsLnJlbW92ZUNsYXNzKGJhY2tGYWNlSGlkZGVuQ2xhc3MpO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCAkIGZyb20gJy4uLy4uL3NoYXJlZC9kb20uanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQXV0b0hlaWdodChzcGVlZCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBhY3RpdmVTbGlkZXMgPSBbXTtcbiAgY29uc3QgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGxldCBuZXdIZWlnaHQgPSAwO1xuICBsZXQgaTtcblxuICBpZiAodHlwZW9mIHNwZWVkID09PSAnbnVtYmVyJykge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICB9XG5cbiAgY29uc3QgZ2V0U2xpZGVCeUluZGV4ID0gaW5kZXggPT4ge1xuICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgIHJldHVybi
101Bzd2lwZXIuc2xpZGVzLmZpbHRlcihlbCA9PiBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKSA9PT0gaW5kZXgpWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBzd2lwZXIuc2xpZGVzLmVxKGluZGV4KVswXTtcbiAgfTsgLy8gRmluZCBzbGlkZXMgY3VycmVudGx5IGluIHZpZXdcblxuXG4gIGlmIChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgIT09ICdhdXRvJyAmJiBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIChzd2lwZXIudmlzaWJsZVNsaWRlcyB8fCAkKFtdKSkuZWFjaChzbGlkZSA9PiB7XG4gICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgTWF0aC5jZWlsKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyk7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCArIGk7XG4gICAgICAgIGlmIChpbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoICYmICFpc1ZpcnR1YWwpIGJyZWFrO1xuICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChnZXRTbGlkZUJ5SW5kZXgoaW5kZXgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlU2xpZGVzLnB1c2goZ2V0U2xpZGVCeUluZGV4KHN3aXBlci5hY3RpdmVJbmRleCkpO1xuICB9IC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuXG5cbiAgZm9yIChpID0gMDsgaSA8IGFjdGl2ZVNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0eXBlb2YgYWN0aXZlU2xpZGVzW2ldICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYWN0aXZlU2xpZGVzW2ldLm9mZnNldEhlaWdodDtcbiAgICAgIG5ld0hlaWdodCA9IGhlaWdodCA+IG5ld0hlaWdodCA/IGhlaWdodCA6IG5ld0hlaWdodDtcbiAgICB9XG4gIH0gLy8gVXBkYXRlIEhlaWdodFxuXG5cbiAgaWYgKG5ld0hlaWdodCB8fCBuZXdIZWlnaHQgPT09IDApIHN3aXBlci4kd3JhcHBlckVsLmNzcygnaGVpZ2h0JywgYCR7bmV3SGVpZ2h0fXB4YCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlU2xpZGVzT2Zmc2V0KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBzbGlkZXMgPSBzd2lwZXIuc2xpZGVzO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgc2xpZGVzW2ldLnN3aXBlclNsaWRlT2Zmc2V0ID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVzW2ldLm9mZnNldExlZnQgOiBzbGlkZXNbaV0ub2Zmc2V0VG9wO1xuICB9XG59IiwiaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUgPSB0aGlzICYmIHRoaXMudHJhbnNsYXRlIHx8IDApIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgY29uc3Qge1xuICAgIHNsaWRlcyxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICBzbmFwR3JpZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgbGV0IG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTsgLy8gVmlzaWJsZSBTbGlkZXNcblxuICBzbGlkZXMucmVtb3ZlQ2xhc3MocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzID0gW107XG4gIHN3aXBlci52aXNpYmxlU2xpZGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBzbGlkZSA9IHNsaWRlc1tpXTtcbiAgICBsZXQgc2xpZGVPZmZzZXQgPSBzbGlkZS5zd2lwZXJTbGlkZU9mZnNldDtcblxuICAgIGlmIChwYXJhbXMuY3NzTW9kZSAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHNsaWRlT2Zmc2V0IC09IHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZVByb2dyZXNzID0gKG9mZnNldENlbnRlciArIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIubWluVHJhbnNsYXRlKCkgOiAwKSAtIHNsaWRlT2Zmc2V0KSAvIChzbGlkZS5zd2lwZXJTbGlkZVNpemUgKyBwYXJhbXMuc3BhY2VCZXR3ZWVuKTtcbiAgICBjb25zdCBvcmlnaW5hbFNsaWRlUHJvZ3Jlc3MgPSAob2Zmc2V0Q2VudGVyIC0gc25hcEdyaWRbMF0gKyAocGFyYW1zLmNlbnRlcmVkU2xpZGVzID8gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIDogMCkgLSBzbGlkZU9mZnNldCkgLyAoc2xpZGUuc3dpcGVyU2xpZGVTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbik7XG4gICAgY29uc3Qgc2xpZGVCZWZvcmUgPSAtKG9mZnNldENlbnRlciAtIHNsaWRlT2Zmc2V0KTtcbiAgICBjb25zdCBzbGlkZUFmdGVyID0gc2xpZGVCZWZvcmUgKyBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW2ldO1xuICAgIGNvbnN0IGlzVmlzaWJsZSA9IHNsaWRlQmVmb3JlID49IDAgJiYgc2xpZGVCZWZvcmUgPCBzd2lwZXIuc2l6ZSAtIDEgfHwgc2xpZGVBZnRlciA+IDEgJiYgc2xpZGVBZnRlciA8PSBzd2lwZXIuc2l6ZSB8fCBzbGlkZUJlZm9yZSA8PSAwICYmIHNsaWRlQWZ0ZXIgPj0gc3dpcGVyLnNpemU7XG5cbiAgICBpZiAoaXNWaXNpYmxlKSB7XG4gICAgICBzd2lwZXIudmlzaWJsZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcy5wdXNoKGkpO1xuICAgICAgc2xpZGVzLmVxKGkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcyk7XG4gICAgfVxuXG4gICAgc2xpZGUucHJvZ3Jlc3MgPSBydGwgPyAtc2xpZGVQcm9ncmVzcyA6IHNsaWRlUHJvZ3Jlc3M7XG4gICAgc2xpZGUub3JpZ2luYWxQcm9ncmVzcyA9IHJ0bCA/IC1vcmlnaW5hbFNsaWRlUHJvZ3Jlc3MgOiBvcmlnaW5hbFNsaWRlUHJvZ3Jlc3M7XG4gIH1cblxuICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9ICQoc3dpcGVyLnZpc2libGVTbGlkZXMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgdHJhbnNsYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLTEgOiAxOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgI
101HRyYW5zbGF0ZSA9IHN3aXBlciAmJiBzd2lwZXIudHJhbnNsYXRlICYmIHN3aXBlci50cmFuc2xhdGUgKiBtdWx0aXBsaWVyIHx8IDA7XG4gIH1cblxuICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zO1xuICBjb25zdCB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgbGV0IHtcbiAgICBwcm9ncmVzcyxcbiAgICBpc0JlZ2lubmluZyxcbiAgICBpc0VuZFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCB3YXNCZWdpbm5pbmcgPSBpc0JlZ2lubmluZztcbiAgY29uc3Qgd2FzRW5kID0gaXNFbmQ7XG5cbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgcHJvZ3Jlc3MgPSAwO1xuICAgIGlzQmVnaW5uaW5nID0gdHJ1ZTtcbiAgICBpc0VuZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvIHRyYW5zbGF0ZXNEaWZmO1xuICAgIGlzQmVnaW5uaW5nID0gcHJvZ3Jlc3MgPD0gMDtcbiAgICBpc0VuZCA9IHByb2dyZXNzID49IDE7XG4gIH1cblxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIHByb2dyZXNzLFxuICAgIGlzQmVnaW5uaW5nLFxuICAgIGlzRW5kXG4gIH0pO1xuICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5hdXRvSGVpZ2h0KSBzd2lwZXIudXBkYXRlU2xpZGVzUHJvZ3Jlc3ModHJhbnNsYXRlKTtcblxuICBpZiAoaXNCZWdpbm5pbmcgJiYgIXdhc0JlZ2lubmluZykge1xuICAgIHN3aXBlci5lbWl0KCdyZWFjaEJlZ2lubmluZyB0b0VkZ2UnKTtcbiAgfVxuXG4gIGlmIChpc0VuZCAmJiAhd2FzRW5kKSB7XG4gICAgc3dpcGVyLmVtaXQoJ3JlYWNoRW5kIHRvRWRnZScpO1xuICB9XG5cbiAgaWYgKHdhc0JlZ2lubmluZyAmJiAhaXNCZWdpbm5pbmcgfHwgd2FzRW5kICYmICFpc0VuZCkge1xuICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICB9XG5cbiAgc3dpcGVyLmVtaXQoJ3Byb2dyZXNzJywgcHJvZ3Jlc3MpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc0NsYXNzZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXMsXG4gICAgcGFyYW1zLFxuICAgICR3cmFwcGVyRWwsXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgcmVhbEluZGV4XG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIHNsaWRlcy5yZW1vdmVDbGFzcyhgJHtwYXJhbXMuc2xpZGVBY3RpdmVDbGFzc30gJHtwYXJhbXMuc2xpZGVOZXh0Q2xhc3N9ICR7cGFyYW1zLnNsaWRlUHJldkNsYXNzfSAke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzfSAke3BhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzc30gJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3N9YCk7XG4gIGxldCBhY3RpdmVTbGlkZTtcblxuICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgYWN0aXZlU2xpZGUgPSBzd2lwZXIuJHdyYXBwZXJFbC5maW5kKGAuJHtwYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke2FjdGl2ZUluZGV4fVwiXWApO1xuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlID0gc2xpZGVzLmVxKGFjdGl2ZUluZGV4KTtcbiAgfSAvLyBBY3RpdmUgY2xhc3Nlc1xuXG5cbiAgYWN0aXZlU2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIC8vIER1cGxpY2F0ZSB0byBhbGwgbG9vcGVkIHNsaWRlc1xuICAgIGlmIChhY3RpdmVTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cmVhbEluZGV4fVwiXWApLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUFjdGl2ZUNsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdYCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlQWN0aXZlQ2xhc3MpO1xuICAgIH1cbiAgfSAvLyBOZXh0IFNsaWRlXG5cblxuICBsZXQgbmV4dFNsaWRlID0gYWN0aXZlU2xpZGUubmV4dEFsbChgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3AgJiYgbmV4dFNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgIG5leHRTbGlkZSA9IHNsaWRlcy5lcSgwKTtcbiAgICBuZXh0U2xpZGUuYWRkQ2xhc3MocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgfSAvLyBQcmV2IFNsaWRlXG5cblxuICBsZXQgcHJldlNsaWRlID0gYWN0aXZlU2xpZGUucHJldkFsbChgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCkuZXEoMCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcblxuICBpZiAocGFyYW1zLmxvb3AgJiYgcHJldlNsaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgIHByZXZTbGlkZSA9IHNsaWRlcy5lcSgtMSk7XG4gICAgcHJldlNsaWRlLmFkZENsYXNzKHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gIH1cblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAvLyBEdXBsaWNhdGUgdG8gYWxsIGxvb3BlZCBzbGlkZXNcbiAgICBpZiAobmV4dFNsaWRlLmhhc0NsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSkge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9Om5vdCguJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtuZXh0U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKX1cIl1gKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVOZXh0Q2xhc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke25leHRTbGlkZS5hdHRyKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpfVwiXWApLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZU5leHRDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKHByZXZTbGlkZS5oYXNDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzcykpIHtcbiAgICAgICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cHJldlNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyl9XCJdYCkuYWRkQ2xhc3MocGFyYW1zLnNsaWRlRHVwbGljYXRlUHJldkNsYXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtwcmV2U2xpZGUuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKX1cIl1gKS5hZGRDbGFzcyhwYXJhbXMuc2xpZGVEdXBsaWNhdGVQcmV2Q2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXBlci5lbWl0U2xpZGVzQ2xhc3NlcygpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZUluZGV4KG5ld0FjdGl2ZUluZGV4KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXNHcmlkLFxuICAgIHNuYXBHcmlkLFxuICAgIHBhcmFtcyxcbiAgICBhY3RpdmVJbmRleDogcHJldmlvdXNJbmRleCxcbiAgICByZWFsSW5kZXg6IHByZXZpb3VzUmVhbEluZGV4LFxuICAgIHNuYXBJbmRleDogcHJldmlvdXNTbmFwSW5kZXhcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IGFjdGl2ZUluZGV4ID0gbmV3QWN0aXZlSW5kZXg7XG4gIGxldCBzbmFwSW5kZXg7XG5cbiAgaWYgKHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJi
101B0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSAtIChzbGlkZXNHcmlkW2kgKyAxXSAtIHNsaWRlc0dyaWRbaV0pIC8gMikge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmICh0cmFuc2xhdGUgPj0gc2xpZGVzR3JpZFtpXSAmJiB0cmFuc2xhdGUgPCBzbGlkZXNHcmlkW2kgKyAxXSkge1xuICAgICAgICAgIGFjdGl2ZUluZGV4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0gLy8gTm9ybWFsaXplIHNsaWRlSW5kZXhcblxuXG4gICAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPCAwIHx8IHR5cGVvZiBhY3RpdmVJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIGFjdGl2ZUluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBpZiAoc25hcEdyaWQuaW5kZXhPZih0cmFuc2xhdGUpID49IDApIHtcbiAgICBzbmFwSW5kZXggPSBzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2tpcCA9IE1hdGgubWluKHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIGFjdGl2ZUluZGV4KTtcbiAgICBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoYWN0aXZlSW5kZXggLSBza2lwKSAvIHBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gIH1cblxuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcblxuICBpZiAoYWN0aXZlSW5kZXggPT09IHByZXZpb3VzSW5kZXgpIHtcbiAgICBpZiAoc25hcEluZGV4ICE9PSBwcmV2aW91c1NuYXBJbmRleCkge1xuICAgICAgc3dpcGVyLnNuYXBJbmRleCA9IHNuYXBJbmRleDtcbiAgICAgIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gR2V0IHJlYWwgaW5kZXhcblxuXG4gIGNvbnN0IHJlYWxJbmRleCA9IHBhcnNlSW50KHN3aXBlci5zbGlkZXMuZXEoYWN0aXZlSW5kZXgpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgfHwgYWN0aXZlSW5kZXgsIDEwKTtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICBzbmFwSW5kZXgsXG4gICAgcmVhbEluZGV4LFxuICAgIHByZXZpb3VzSW5kZXgsXG4gICAgYWN0aXZlSW5kZXhcbiAgfSk7XG4gIHN3aXBlci5lbWl0KCdhY3RpdmVJbmRleENoYW5nZScpO1xuICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG5cbiAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhbEluZGV4Q2hhbmdlJyk7XG4gIH1cblxuICBpZiAoc3dpcGVyLmluaXRpYWxpemVkIHx8IHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0KSB7XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlQ2hhbmdlJyk7XG4gIH1cbn0iLCJpbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZUNsaWNrZWRTbGlkZShlKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIGNvbnN0IHNsaWRlID0gJChlKS5jbG9zZXN0KGAuJHtwYXJhbXMuc2xpZGVDbGFzc31gKVswXTtcbiAgbGV0IHNsaWRlRm91bmQgPSBmYWxzZTtcbiAgbGV0IHNsaWRlSW5kZXg7XG5cbiAgaWYgKHNsaWRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpXSA9PT0gc2xpZGUpIHtcbiAgICAgICAgc2xpZGVGb3VuZCA9IHRydWU7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoc2xpZGUgJiYgc2xpZGVGb3VuZCkge1xuICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSBzbGlkZTtcblxuICAgIGlmIChzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHBhcnNlSW50KCQoc2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHNsaWRlSW5kZXg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci5jbGlja2VkU2xpZGUgPSB1bmRlZmluZWQ7XG4gICAgc3dpcGVyLmNsaWNrZWRJbmRleCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGFyYW1zLnNsaWRlVG9DbGlja2VkU2xpZGUgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gdW5kZWZpbmVkICYmIHN3aXBlci5jbGlja2VkSW5kZXggIT09IHN3aXBlci5hY3RpdmVJbmRleCkge1xuICAgIHN3aXBlci5zbGlkZVRvQ2xpY2tlZFNsaWRlKCk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0VHJhbnNsYXRlIGZyb20gJy4vZ2V0VHJhbnNsYXRlLmpzJztcbmltcG9ydCBzZXRUcmFuc2xhdGUgZnJvbSAnLi9zZXRUcmFuc2xhdGUuanMnO1xuaW1wb3J0IG1pblRyYW5zbGF0ZSBmcm9tICcuL21pblRyYW5zbGF0ZS5qcyc7XG5pbXBvcnQgbWF4VHJhbnNsYXRlIGZyb20gJy4vbWF4VHJhbnNsYXRlLmpzJztcbmltcG9ydCB0cmFuc2xhdGVUbyBmcm9tICcuL3RyYW5zbGF0ZVRvLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0VHJhbnNsYXRlLFxuICBzZXRUcmFuc2xhdGUsXG4gIG1pblRyYW5zbGF0ZSxcbiAgbWF4VHJhbnNsYXRlLFxuICB0cmFuc2xhdGVUb1xufTsiLCJpbXBvcnQgeyBnZXRUcmFuc2xhdGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U3dpcGVyVHJhbnNsYXRlKGF4aXMgPSB0aGlzLmlzSG9yaXpvbnRhbCgpID8gJ3gnIDogJ3knKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgcnRsVHJhbnNsYXRlOiBydGwsXG4gICAgdHJhbnNsYXRlLFxuICAgICR3cmFwcGVyRWxcbiAgfSA9IHN3aXBlcjtcblxuICBpZiAocGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICByZXR1cm4gcnRsID8gLXRyYW5zbGF0ZSA6IHRyYW5zbGF0ZTtcbiAgfVxuXG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHJldHVybi
101B0cmFuc2xhdGU7XG4gIH1cblxuICBsZXQgY3VycmVudFRyYW5zbGF0ZSA9IGdldFRyYW5zbGF0ZSgkd3JhcHBlckVsWzBdLCBheGlzKTtcbiAgaWYgKHJ0bCkgY3VycmVudFRyYW5zbGF0ZSA9IC1jdXJyZW50VHJhbnNsYXRlO1xuICByZXR1cm4gY3VycmVudFRyYW5zbGF0ZSB8fCAwO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSh0cmFuc2xhdGUsIGJ5Q29udHJvbGxlcikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcnRsVHJhbnNsYXRlOiBydGwsXG4gICAgcGFyYW1zLFxuICAgICR3cmFwcGVyRWwsXG4gICAgd3JhcHBlckVsLFxuICAgIHByb2dyZXNzXG4gIH0gPSBzd2lwZXI7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBjb25zdCB6ID0gMDtcblxuICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgeCA9IHJ0bCA/IC10cmFuc2xhdGUgOiB0cmFuc2xhdGU7XG4gIH0gZWxzZSB7XG4gICAgeSA9IHRyYW5zbGF0ZTtcbiAgfVxuXG4gIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSB7XG4gICAgeCA9IE1hdGguZmxvb3IoeCk7XG4gICAgeSA9IE1hdGguZmxvb3IoeSk7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICB3cmFwcGVyRWxbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gLXggOiAteTtcbiAgfSBlbHNlIGlmICghcGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICAkd3JhcHBlckVsLnRyYW5zZm9ybShgdHJhbnNsYXRlM2QoJHt4fXB4LCAke3l9cHgsICR7en1weClgKTtcbiAgfVxuXG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG4gIHN3aXBlci50cmFuc2xhdGUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyB4IDogeTsgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcblxuICBsZXQgbmV3UHJvZ3Jlc3M7XG4gIGNvbnN0IHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuXG4gIGlmICh0cmFuc2xhdGVzRGlmZiA9PT0gMCkge1xuICAgIG5ld1Byb2dyZXNzID0gMDtcbiAgfSBlbHNlIHtcbiAgICBuZXdQcm9ncmVzcyA9ICh0cmFuc2xhdGUgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIC8gdHJhbnNsYXRlc0RpZmY7XG4gIH1cblxuICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNsYXRlJywgc3dpcGVyLnRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW5UcmFuc2xhdGUoKSB7XG4gIHJldHVybiAtdGhpcy5zbmFwR3JpZFswXTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXhUcmFuc2xhdGUoKSB7XG4gIHJldHVybiAtdGhpcy5zbmFwR3JpZFt0aGlzLnNuYXBHcmlkLmxlbmd0aCAtIDFdO1xufSIsImltcG9ydCB7IGFuaW1hdGVDU1NNb2RlU2Nyb2xsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvKHRyYW5zbGF0ZSA9IDAsIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIHRyYW5zbGF0ZUJvdW5kcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgd3JhcHBlckVsXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgY29uc3QgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICBsZXQgbmV3VHJhbnNsYXRlO1xuICBpZiAodHJhbnNsYXRlQm91bmRzICYmIHRyYW5zbGF0ZSA+IG1pblRyYW5zbGF0ZSkgbmV3VHJhbnNsYXRlID0gbWluVHJhbnNsYXRlO2Vsc2UgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPCBtYXhUcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1heFRyYW5zbGF0ZTtlbHNlIG5ld1RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTsgLy8gVXBkYXRlIHByb2dyZXNzXG5cbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1RyYW5zbGF0ZSk7XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgY29uc3QgaXNIID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpO1xuXG4gICAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gLW5ld1RyYW5zbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzd2lwZXIuc3VwcG9ydC5zbW9vdGhTY3JvbGwpIHtcbiAgICAgICAgYW5pbWF0ZUNTU01vZGVTY3JvbGwoe1xuICAgICAgICAgIHN3aXBlcixcbiAgICAgICAgICB0YXJnZXRQb3NpdGlvbjogLW5ld1RyYW5zbGF0ZSxcbiAgICAgICAgICBzaWRlOiBpc0ggPyAnbGVmdCcgOiAndG9wJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyh7XG4gICAgICAgIFtpc0ggPyAnbGVmdCcgOiAndG9wJ106IC1uZXdUcmFuc2xhdGUsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uRW5kJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG5cbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uU3RhcnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgICBpZiAoIXN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgc3dpcGVyLiR3cmFwcGVyRWxbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0VHJhbnNpdGlvbkVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICAgI
101HN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICAgIGRlbGV0ZSBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kO1xuXG4gICAgICAgICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgICAgICAgc3dpcGVyLmVtaXQoJ3RyYW5zaXRpb25FbmQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ3dlYmtpdFRyYW5zaXRpb25FbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn0iLCJpbXBvcnQgc2V0VHJhbnNpdGlvbiBmcm9tICcuL3NldFRyYW5zaXRpb24uanMnO1xuaW1wb3J0IHRyYW5zaXRpb25TdGFydCBmcm9tICcuL3RyYW5zaXRpb25TdGFydC5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbkVuZCBmcm9tICcuL3RyYW5zaXRpb25FbmQuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRUcmFuc2l0aW9uLFxuICB0cmFuc2l0aW9uU3RhcnQsXG4gIHRyYW5zaXRpb25FbmRcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VHJhbnNpdGlvbihkdXJhdGlvbiwgYnlDb250cm9sbGVyKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG5cbiAgaWYgKCFzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIuJHdyYXBwZXJFbC50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgfVxuXG4gIHN3aXBlci5lbWl0KCdzZXRUcmFuc2l0aW9uJywgZHVyYXRpb24sIGJ5Q29udHJvbGxlcik7XG59IiwiaW1wb3J0IHRyYW5zaXRpb25FbWl0IGZyb20gJy4vdHJhbnNpdGlvbkVtaXQuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcyA9IHRydWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zXG4gIH0gPSBzd2lwZXI7XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuXG4gIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gIH1cblxuICB0cmFuc2l0aW9uRW1pdCh7XG4gICAgc3dpcGVyLFxuICAgIHJ1bkNhbGxiYWNrcyxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RlcDogJ1N0YXJ0J1xuICB9KTtcbn0iLCJpbXBvcnQgdHJhbnNpdGlvbkVtaXQgZnJvbSAnLi90cmFuc2l0aW9uRW1pdC5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcyA9IHRydWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zXG4gIH0gPSBzd2lwZXI7XG4gIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICB0cmFuc2l0aW9uRW1pdCh7XG4gICAgc3dpcGVyLFxuICAgIHJ1bkNhbGxiYWNrcyxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RlcDogJ0VuZCdcbiAgfSk7XG59IiwiaW1wb3J0IHNsaWRlVG8gZnJvbSAnLi9zbGlkZVRvLmpzJztcbmltcG9ydCBzbGlkZVRvTG9vcCBmcm9tICcuL3NsaWRlVG9Mb29wLmpzJztcbmltcG9ydCBzbGlkZU5leHQgZnJvbSAnLi9zbGlkZU5leHQuanMnO1xuaW1wb3J0IHNsaWRlUHJldiBmcm9tICcuL3NsaWRlUHJldi5qcyc7XG5pbXBvcnQgc2xpZGVSZXNldCBmcm9tICcuL3NsaWRlUmVzZXQuanMnO1xuaW1wb3J0IHNsaWRlVG9DbG9zZXN0IGZyb20gJy4vc2xpZGVUb0Nsb3Nlc3QuanMnO1xuaW1wb3J0IHNsaWRlVG9DbGlja2VkU2xpZGUgZnJvbSAnLi9zbGlkZVRvQ2xpY2tlZFNsaWRlLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2xpZGVUbyxcbiAgc2xpZGVUb0xvb3AsXG4gIHNsaWRlTmV4dCxcbiAgc2xpZGVQcmV2LFxuICBzbGlkZVJlc2V0LFxuICBzbGlkZVRvQ2xvc2VzdCxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZVxufTsiLCJpbXBvcnQgeyBhbmltYXRlQ1NTTW9kZVNjcm9sbCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVRvKGluZGV4ID0gMCwgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwsIGluaXRpYWwpIHtcbiAgaWYgKHR5cGVvZiBpbmRleCAhPT0gJ251bWJlcicgJiYgdHlwZW9mIGluZGV4ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdpbmRleCcgYXJndW1lbnQgY2Fubm90IGhhdmUgdHlwZSBvdGhlciB0aGFuICdudW1iZXInIG9yICdzdHJpbmcnLiBbJHt0eXBlb2YgaW5kZXh9XSBnaXZlbi5gKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgLyoqXG4gICAgICogVGhlIGBpbmRleGAgYXJndW1lbnQgY29udmVydGVkIGZyb20gYHN0cmluZ2AgdG8gYG51bWJlcmAuXG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKi9cbiAgICBjb25zdCBpbmRleEFzTnVtYmVyID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGBpbmRleGAgYXJndW1lbnQgaXMgYSB2YWxpZCBgbnVtYmVyYFxuICAgICAqIGFmdGVyIGJlaW5nIGNvbnZlcnRlZCBmcm9tIHRoZSBgc3RyaW5nYCB0eXBlLlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuXG4gICAgY29uc3QgaXNWYWxpZE51bWJlciA9IGlzRmluaXRlKGluZGV4QXNOdW1iZXIpO1xuXG4gICAgaWYgKCFpc1ZhbGlkTnVtYmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwYXNzZWQtaW4gJ2luZGV4JyAoc3RyaW5nKSBjb3VsZG4ndCBiZSBjb252ZXJ0ZWQgdG8gJ251bWJlcicuIFske2luZGV4fV0gZ2l2ZW4uYCk7XG4gICAgfSAvLyBLbm93aW5nIHRoYXQgdGhlIGNvbnZlcnRlZCBgaW5kZXhgIGlzIGEgdmFsaWQgbnVtYmVyLFxuICAgIC8vIHdlIGNhbiB1cGRhdGUgdGhlIG9yaWdpbmFsIGFyZ3VtZW50J3MgdmFsdWUuXG5cblxuICAgIGluZGV4ID0gaW5kZXhBc051bWJlcjtcbiAgfVxuXG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGxldCBzbGlkZUluZGV4ID0gaW5kZXg7XG4gIGlmIChzbGlkZUluZGV4IDwgMCkgc2xpZGVJbmRleCA9IDA7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgc25hcEdyaWQsXG4gICAgc2xpZGVzR3JpZCxcbiAgICBwcmV2aW91c0luZGV4LFxuICAgIGFjdGl2ZUluZGV4LFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgIHdyYXBwZXJFbCxcbiAgICBlbmFibGVkXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHN3aXBlci5hbmltYXRpbmcgJiYgcGFyYW1zLnByZX
101ZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbiB8fCAhZW5hYmxlZCAmJiAhaW50ZXJuYWwgJiYgIWluaXRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBza2lwID0gTWF0aC5taW4oc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIHNsaWRlSW5kZXgpO1xuICBsZXQgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKHNsaWRlSW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcbiAgY29uc3QgdHJhbnNsYXRlID0gLXNuYXBHcmlkW3NuYXBJbmRleF07IC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG5cbiAgaWYgKHBhcmFtcy5ub3JtYWxpemVTbGlkZUluZGV4KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXNHcmlkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVHJhbnNsYXRlID0gLU1hdGguZmxvb3IodHJhbnNsYXRlICogMTAwKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRHcmlkID0gTWF0aC5mbG9vcihzbGlkZXNHcmlkW2ldICogMTAwKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRHcmlkTmV4dCA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZFtpICsgMV0gKiAxMDApO1xuXG4gICAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR3JpZCAmJiBub3JtYWxpemVkVHJhbnNsYXRlIDwgbm9ybWFsaXplZEdyaWROZXh0IC0gKG5vcm1hbGl6ZWRHcmlkTmV4dCAtIG5vcm1hbGl6ZWRHcmlkKSAvIDIpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPCBub3JtYWxpemVkR3JpZE5leHQpIHtcbiAgICAgICAgICBzbGlkZUluZGV4ID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFRyYW5zbGF0ZSA+PSBub3JtYWxpemVkR3JpZCkge1xuICAgICAgICBzbGlkZUluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gRGlyZWN0aW9ucyBsb2Nrc1xuXG5cbiAgaWYgKHN3aXBlci5pbml0aWFsaXplZCAmJiBzbGlkZUluZGV4ICE9PSBhY3RpdmVJbmRleCkge1xuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHRyYW5zbGF0ZSA8IHN3aXBlci50cmFuc2xhdGUgJiYgdHJhbnNsYXRlIDwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgdHJhbnNsYXRlID4gc3dpcGVyLnRyYW5zbGF0ZSAmJiB0cmFuc2xhdGUgPiBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGlmICgoYWN0aXZlSW5kZXggfHwgMCkgIT09IHNsaWRlSW5kZXgpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAoc2xpZGVJbmRleCAhPT0gKHByZXZpb3VzSW5kZXggfHwgMCkgJiYgcnVuQ2FsbGJhY2tzKSB7XG4gICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVNsaWRlQ2hhbmdlU3RhcnQnKTtcbiAgfSAvLyBVcGRhdGUgcHJvZ3Jlc3NcblxuXG4gIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpO1xuICBsZXQgZGlyZWN0aW9uO1xuICBpZiAoc2xpZGVJbmRleCA+IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAnbmV4dCc7ZWxzZSBpZiAoc2xpZGVJbmRleCA8IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAncHJldic7ZWxzZSBkaXJlY3Rpb24gPSAncmVzZXQnOyAvLyBVcGRhdGUgSW5kZXhcblxuICBpZiAocnRsICYmIC10cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUgfHwgIXJ0bCAmJiB0cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUpIHtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7IC8vIFVwZGF0ZSBIZWlnaHRcblxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICB9XG5cbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuXG4gICAgaWYgKHBhcmFtcy5lZmZlY3QgIT09ICdzbGlkZScpIHtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAncmVzZXQnKSB7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBjb25zdCBpc0ggPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgY29uc3QgdCA9IHJ0bCA/IHRyYW5zbGF0ZSA6IC10cmFuc2xhdGU7XG5cbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuXG4gICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgIHN3aXBlci53cmFwcGVyRWwuc3R5bGUuc2Nyb2xsU25hcFR5cGUgPSAnbm9uZSc7XG4gICAgICAgIHN3aXBlci5faW1tZWRpYXRlVmlydHVhbCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHdyYXBwZXJFbFtpc0ggPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSB0O1xuXG4gICAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICcnO1xuICAgICAgICAgIHN3aXBlci5fc3dpcGVySW1tZWRpYXRlVmlydHVhbCA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFzd2lwZXIuc3VwcG9ydC5zbW9vdGhTY3JvbGwpIHtcbiAgICAgICAgYW5pbWF0ZUNTU01vZGVTY3JvbGwoe1xuICAgICAgICAgI
101HN3aXBlcixcbiAgICAgICAgICB0YXJnZXRQb3NpdGlvbjogdCxcbiAgICAgICAgICBzaWRlOiBpc0ggPyAnbGVmdCcgOiAndG9wJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyh7XG4gICAgICAgIFtpc0ggPyAnbGVmdCcgOiAndG9wJ106IHQsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2lwZXIuc2V0VHJhbnNpdGlvbihzcGVlZCk7XG4gIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KHNsaWRlSW5kZXgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgc3dpcGVyLnRyYW5zaXRpb25TdGFydChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG5cbiAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICB9IGVsc2UgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG5cbiAgICBpZiAoIXN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCkge1xuICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChlKSB7XG4gICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgaWYgKGUudGFyZ2V0ICE9PSB0aGlzKSByZXR1cm47XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gbnVsbDtcbiAgICAgICAgZGVsZXRlIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRUcmFuc2l0aW9uRW5kJywgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlVG9Mb29wKGluZGV4ID0gMCwgc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwpIHtcbiAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3N0cmluZycpIHtcbiAgICAvKipcbiAgICAgKiBUaGUgYGluZGV4YCBhcmd1bWVudCBjb252ZXJ0ZWQgZnJvbSBgc3RyaW5nYCB0byBgbnVtYmVyYC5cbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGNvbnN0IGluZGV4QXNOdW1iZXIgPSBwYXJzZUludChpbmRleCwgMTApO1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYGluZGV4YCBhcmd1bWVudCBpcyBhIHZhbGlkIGBudW1iZXJgXG4gICAgICogYWZ0ZXIgYmVpbmcgY29udmVydGVkIGZyb20gdGhlIGBzdHJpbmdgIHR5cGUuXG4gICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICovXG5cbiAgICBjb25zdCBpc1ZhbGlkTnVtYmVyID0gaXNGaW5pdGUoaW5kZXhBc051bWJlcik7XG5cbiAgICBpZiAoIWlzVmFsaWROdW1iZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHBhc3NlZC1pbiAnaW5kZXgnIChzdHJpbmcpIGNvdWxkbid0IGJlIGNvbnZlcnRlZCB0byAnbnVtYmVyJy4gWyR7aW5kZXh9XSBnaXZlbi5gKTtcbiAgICB9IC8vIEtub3dpbmcgdGhhdCB0aGUgY29udmVydGVkIGBpbmRleGAgaXMgYSB2YWxpZCBudW1iZXIsXG4gICAgLy8gd2UgY2FuIHVwZGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnQncyB2YWx1ZS5cblxuXG4gICAgaW5kZXggPSBpbmRleEFzTnVtYmVyO1xuICB9XG5cbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgbGV0IG5ld0luZGV4ID0gaW5kZXg7XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgIG5ld0luZGV4ICs9IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gIH1cblxuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn0iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlTmV4dChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgYW5pbWF0aW5nLFxuICAgIGVuYWJsZWQsXG4gICAgcGFyYW1zXG4gIH0gPSBzd2lwZXI7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuIHN3aXBlcjtcbiAgbGV0IHBlckdyb3VwID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuXG4gIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMSAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXBBdXRvKSB7XG4gICAgcGVyR3JvdXAgPSBNYXRoLm1heChzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoJ2N1cnJlbnQnLCB0cnVlKSwgMSk7XG4gIH1cblxuICBjb25zdCBpbmNyZW1lbnQgPSBzd2lwZXIuYWN0aXZlSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwID8gMSA6IHBlckdyb3VwO1xuXG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChhbmltYXRpbmcgJiYgcGFyYW1zLmxvb3BQcmV2ZW50c1NsaWRlKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpcGVyLmxvb3BGaXgoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG5cbiAgICBzd2lwZXIuX2NsaWVudExlZnQgPSBzd2lwZXIuJHdyYXBwZXJFbFswXS5jbGllbnRMZWZ0O1xuICB9XG5cbiAgaWYgKHBhcmFtcy5yZXdpbmQgJiYgc3dpcGVyLmlzRW5kKSB7XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKDAsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbiAgfVxuXG4gIHJldHVybi
101Bzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXggKyBpbmNyZW1lbnQsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn0iLCIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlUHJldihzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIGFuaW1hdGluZyxcbiAgICBzbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIHJ0bFRyYW5zbGF0ZSxcbiAgICBlbmFibGVkXG4gIH0gPSBzd2lwZXI7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuIHN3aXBlcjtcblxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBpZiAoYW5pbWF0aW5nICYmIHBhcmFtcy5sb29wUHJldmVudHNTbGlkZSkgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLiR3cmFwcGVyRWxbMF0uY2xpZW50TGVmdDtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcblxuICBmdW5jdGlvbiBub3JtYWxpemUodmFsKSB7XG4gICAgaWYgKHZhbCA8IDApIHJldHVybiAtTWF0aC5mbG9vcihNYXRoLmFicyh2YWwpKTtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWwpO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRyYW5zbGF0ZSA9IG5vcm1hbGl6ZSh0cmFuc2xhdGUpO1xuICBjb25zdCBub3JtYWxpemVkU25hcEdyaWQgPSBzbmFwR3JpZC5tYXAodmFsID0+IG5vcm1hbGl6ZSh2YWwpKTtcbiAgbGV0IHByZXZTbmFwID0gc25hcEdyaWRbbm9ybWFsaXplZFNuYXBHcmlkLmluZGV4T2Yobm9ybWFsaXplZFRyYW5zbGF0ZSkgLSAxXTtcblxuICBpZiAodHlwZW9mIHByZXZTbmFwID09PSAndW5kZWZpbmVkJyAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgIGxldCBwcmV2U25hcEluZGV4O1xuICAgIHNuYXBHcmlkLmZvckVhY2goKHNuYXAsIHNuYXBJbmRleCkgPT4ge1xuICAgICAgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gc25hcCkge1xuICAgICAgICAvLyBwcmV2U25hcCA9IHNuYXA7XG4gICAgICAgIHByZXZTbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIHByZXZTbmFwSW5kZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwcmV2U25hcCA9IHNuYXBHcmlkW3ByZXZTbmFwSW5kZXggPiAwID8gcHJldlNuYXBJbmRleCAtIDEgOiBwcmV2U25hcEluZGV4XTtcbiAgICB9XG4gIH1cblxuICBsZXQgcHJldkluZGV4ID0gMDtcblxuICBpZiAodHlwZW9mIHByZXZTbmFwICE9PSAndW5kZWZpbmVkJykge1xuICAgIHByZXZJbmRleCA9IHNsaWRlc0dyaWQuaW5kZXhPZihwcmV2U25hcCk7XG4gICAgaWYgKHByZXZJbmRleCA8IDApIHByZXZJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCAtIDE7XG5cbiAgICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDEgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwQXV0bykge1xuICAgICAgcHJldkluZGV4ID0gcHJldkluZGV4IC0gc3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCdwcmV2aW91cycsIHRydWUpICsgMTtcbiAgICAgIHByZXZJbmRleCA9IE1hdGgubWF4KHByZXZJbmRleCwgMCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcmFtcy5yZXdpbmQgJiYgc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc3dpcGVyLnBhcmFtcy52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkICYmIHN3aXBlci52aXJ0dWFsID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCAtIDEgOiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDE7XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKGxhc3RJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xuICB9XG5cbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHByZXZJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSIsIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVSZXNldChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59IiwiLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVRvQ2xvc2VzdChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCwgdGhyZXNob2xkID0gMC41KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGxldCBpbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgY29uc3Qgc2tpcCA9IE1hdGgubWluKHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwLCBpbmRleCk7XG4gIGNvbnN0IHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChpbmRleCAtIHNraXApIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCk7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG5cbiAgaWYgKHRyYW5zbGF0ZSA+PSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4XSkge1xuICAgIC8vIFRoZSBjdXJyZW50IHRyYW5zbGF0ZSBpcyBvbiBvciBhZnRlciB0aGUgY3VycmVudCBzbmFwIGluZGV4LCBzbyB0aGUgY2hvaWNlXG4gICAgLy8gaXMgYmV0d2VlbiB0aGUgY3VycmVudCBpbmRleCBhbmQgdGhlIG9uZSBhZnRlciBpdC5cbiAgICBjb25zdCBjdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuICAgIGNvbnN0IG5leHRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleCArIDFdO1xuXG4gICAgaWYgKHRyYW5zbGF0ZSAtIGN1cnJlbnRTbmFwID4gKG5leHRTbmFwIC0gY3VycmVudFNuYXApICogdGhyZXNob2xkKSB7XG4gICAgICBpbmRleCArPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgY3VycmVudCB0cmFuc2xhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGJlZm9yZSBpdC5cbiAgICBjb25zdCBwcmV2U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXggLSAxXTtcbiAgICBjb25zdCBjdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuXG4gICAgaWYgKHRyYW5zbGF0ZSAtIHByZXZTbmFwIDw9IChjdXJyZW50U25hcCAtIHByZXZTbmFwKSAqIHRocmVzaG9sZCkge1xuICAgICAgaW5kZXggLT0gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICB9XG4gI
101H1cblxuICBpbmRleCA9IE1hdGgubWF4KGluZGV4LCAwKTtcbiAgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgc3dpcGVyLnNsaWRlc0dyaWQubGVuZ3RoIC0gMSk7XG4gIHJldHVybiBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSIsImltcG9ydCAkIGZyb20gJy4uLy4uL3NoYXJlZC9kb20uanMnO1xuaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICAkd3JhcHBlckVsXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IHNsaWRlc1BlclZpZXcgPSBwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gc3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiBwYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgbGV0IHNsaWRlVG9JbmRleCA9IHN3aXBlci5jbGlja2VkSW5kZXg7XG4gIGxldCByZWFsSW5kZXg7XG5cbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgaWYgKHN3aXBlci5hbmltYXRpbmcpIHJldHVybjtcbiAgICByZWFsSW5kZXggPSBwYXJzZUludCgkKHN3aXBlci5jbGlja2VkU2xpZGUpLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcblxuICAgIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIGlmIChzbGlkZVRvSW5kZXggPCBzd2lwZXIubG9vcGVkU2xpZGVzIC0gc2xpZGVzUGVyVmlldyAvIDIgfHwgc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICsgc2xpZGVzUGVyVmlldyAvIDIpIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgc2xpZGVUb0luZGV4ID0gJHdyYXBwZXJFbC5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdOm5vdCguJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30pYCkuZXEoMCkuaW5kZXgoKTtcbiAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNsaWRlVG9JbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc2xpZGVzUGVyVmlldykge1xuICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgIHNsaWRlVG9JbmRleCA9ICR3cmFwcGVyRWwuY2hpbGRyZW4oYC4ke3BhcmFtcy5zbGlkZUNsYXNzfVtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7cmVhbEluZGV4fVwiXTpub3QoLiR7cGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3N9KWApLmVxKDApLmluZGV4KCk7XG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgfVxufSIsImltcG9ydCBsb29wQ3JlYXRlIGZyb20gJy4vbG9vcENyZWF0ZS5qcyc7XG5pbXBvcnQgbG9vcEZpeCBmcm9tICcuL2xvb3BGaXguanMnO1xuaW1wb3J0IGxvb3BEZXN0cm95IGZyb20gJy4vbG9vcERlc3Ryb3kuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBsb29wQ3JlYXRlLFxuICBsb29wRml4LFxuICBsb29wRGVzdHJveVxufTsiLCJpbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb29wQ3JlYXRlKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgJHdyYXBwZXJFbFxuICB9ID0gc3dpcGVyOyAvLyBSZW1vdmUgZHVwbGljYXRlZCBzbGlkZXNcblxuICBjb25zdCAkc2VsZWN0b3IgPSAkd3JhcHBlckVsLmNoaWxkcmVuKCkubGVuZ3RoID4gMCA/ICQoJHdyYXBwZXJFbC5jaGlsZHJlbigpWzBdLnBhcmVudE5vZGUpIDogJHdyYXBwZXJFbDtcbiAgJHNlbGVjdG9yLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc31gKS5yZW1vdmUoKTtcbiAgbGV0IHNsaWRlcyA9ICRzZWxlY3Rvci5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG5cbiAgaWYgKHBhcmFtcy5sb29wRmlsbEdyb3VwV2l0aEJsYW5rKSB7XG4gICAgY29uc3QgYmxhbmtTbGlkZXNOdW0gPSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgLSBzbGlkZXMubGVuZ3RoICUgcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuXG4gICAgaWYgKGJsYW5rU2xpZGVzTnVtICE9PSBwYXJhbXMuc2xpZGVzUGVyR3JvdXApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmxhbmtTbGlkZXNOdW07IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBibGFua05vZGUgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKS5hZGRDbGFzcyhgJHtwYXJhbXMuc2xpZGVDbGFzc30gJHtwYXJhbXMuc2xpZGVCbGFua0NsYXNzfWApO1xuICAgICAgICAkc2VsZWN0b3IuYXBwZW5kKGJsYW5rTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIHNsaWRlcyA9ICRzZWxlY3Rvci5jaGlsZHJlbihgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgIXBhcmFtcy5sb29wZWRTbGlkZXMpIHBhcmFtcy5sb29wZWRTbGlkZXMgPSBzbGlkZXMubGVuZ3RoO1xuICBzd2lwZXIubG9vcGVkU2xpZGVzID0gTWF0aC5jZWlsKHBhcnNlRmxvYXQocGFyYW1zLmxvb3BlZFNsaWRlcyB8fCBwYXJhbXMuc2xpZGVzUGVyVmlldywgMTApKTtcbiAgc3dpcGVyLmxvb3BlZFNsaWRlcyArPSBwYXJhbXMubG9vcEFkZGl0aW9uYWxTbGlkZXM7XG5cbiAgaWYgKHN3aXBlci5sb29wZWRTbGlkZXMgPiBzbGlkZXMubGVuZ3RoICYmIHN3aXBlci5wYXJhbXMubG9vcGVkU2xpZGVzTGltaXQpIHtcbiAgICBzd2lwZXIubG9vcGVkU2xpZGVzID0gc2xpZGVzLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IHByZXBlbmRTbGlkZXMgPSBbXTtcbiAgY29uc3QgYXBwZW5kU2xpZGVzID0gW107XG4gIHNsaWRlcy5lYWNoKChlbCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBzbGlkZSA9ICQoZWwpO1xuICAgIHNsaWRlLmF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgaW5kZXgpO1xuICB9KTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN3aXBlci5sb29wZWRTbGlkZXM7IGkgKz
1010gMSkge1xuICAgIGNvbnN0IGluZGV4ID0gaSAtIE1hdGguZmxvb3IoaSAvIHNsaWRlcy5sZW5ndGgpICogc2xpZGVzLmxlbmd0aDtcbiAgICBhcHBlbmRTbGlkZXMucHVzaChzbGlkZXMuZXEoaW5kZXgpWzBdKTtcbiAgICBwcmVwZW5kU2xpZGVzLnVuc2hpZnQoc2xpZGVzLmVxKHNsaWRlcy5sZW5ndGggLSBpbmRleCAtIDEpWzBdKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXBwZW5kU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgJHNlbGVjdG9yLmFwcGVuZCgkKGFwcGVuZFNsaWRlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gcHJlcGVuZFNsaWRlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICRzZWxlY3Rvci5wcmVwZW5kKCQocHJlcGVuZFNsaWRlc1tpXS5jbG9uZU5vZGUodHJ1ZSkpLmFkZENsYXNzKHBhcmFtcy5zbGlkZUR1cGxpY2F0ZUNsYXNzKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb29wRml4KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBzd2lwZXIuZW1pdCgnYmVmb3JlTG9vcEZpeCcpO1xuICBjb25zdCB7XG4gICAgYWN0aXZlSW5kZXgsXG4gICAgc2xpZGVzLFxuICAgIGxvb3BlZFNsaWRlcyxcbiAgICBhbGxvd1NsaWRlUHJldixcbiAgICBhbGxvd1NsaWRlTmV4dCxcbiAgICBzbmFwR3JpZCxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bFxuICB9ID0gc3dpcGVyO1xuICBsZXQgbmV3SW5kZXg7XG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gIGNvbnN0IHNuYXBUcmFuc2xhdGUgPSAtc25hcEdyaWRbYWN0aXZlSW5kZXhdO1xuICBjb25zdCBkaWZmID0gc25hcFRyYW5zbGF0ZSAtIHN3aXBlci5nZXRUcmFuc2xhdGUoKTsgLy8gRml4IEZvciBOZWdhdGl2ZSBPdmVyc2xpZGluZ1xuXG4gIGlmIChhY3RpdmVJbmRleCA8IGxvb3BlZFNsaWRlcykge1xuICAgIG5ld0luZGV4ID0gc2xpZGVzLmxlbmd0aCAtIGxvb3BlZFNsaWRlcyAqIDMgKyBhY3RpdmVJbmRleDtcbiAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG4gICAgY29uc3Qgc2xpZGVDaGFuZ2VkID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcblxuICAgIGlmIChzbGlkZUNoYW5nZWQgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSgocnRsID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKSAtIGRpZmYpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhY3RpdmVJbmRleCA+PSBzbGlkZXMubGVuZ3RoIC0gbG9vcGVkU2xpZGVzKSB7XG4gICAgLy8gRml4IEZvciBQb3NpdGl2ZSBPdmVyc2xpZGluZ1xuICAgIG5ld0luZGV4ID0gLXNsaWRlcy5sZW5ndGggKyBhY3RpdmVJbmRleCArIGxvb3BlZFNsaWRlcztcbiAgICBuZXdJbmRleCArPSBsb29wZWRTbGlkZXM7XG4gICAgY29uc3Qgc2xpZGVDaGFuZ2VkID0gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcblxuICAgIGlmIChzbGlkZUNoYW5nZWQgJiYgZGlmZiAhPT0gMCkge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSgocnRsID8gLXN3aXBlci50cmFuc2xhdGUgOiBzd2lwZXIudHJhbnNsYXRlKSAtIGRpZmYpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IGFsbG93U2xpZGVQcmV2O1xuICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBhbGxvd1NsaWRlTmV4dDtcbiAgc3dpcGVyLmVtaXQoJ2xvb3BGaXgnKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsb29wRGVzdHJveSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgICR3cmFwcGVyRWwsXG4gICAgcGFyYW1zLFxuICAgIHNsaWRlc1xuICB9ID0gc3dpcGVyO1xuICAkd3JhcHBlckVsLmNoaWxkcmVuKGAuJHtwYXJhbXMuc2xpZGVDbGFzc30uJHtwYXJhbXMuc2xpZGVEdXBsaWNhdGVDbGFzc30sLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LiR7cGFyYW1zLnNsaWRlQmxhbmtDbGFzc31gKS5yZW1vdmUoKTtcbiAgc2xpZGVzLnJlbW92ZUF0dHIoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG59IiwiaW1wb3J0IHNldEdyYWJDdXJzb3IgZnJvbSAnLi9zZXRHcmFiQ3Vyc29yLmpzJztcbmltcG9ydCB1bnNldEdyYWJDdXJzb3IgZnJvbSAnLi91bnNldEdyYWJDdXJzb3IuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRHcmFiQ3Vyc29yLFxuICB1bnNldEdyYWJDdXJzb3Jcbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0R3JhYkN1cnNvcihtb3ZpbmcpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgaWYgKHN3aXBlci5zdXBwb3J0LnRvdWNoIHx8ICFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgY29uc3QgZWwgPSBzd2lwZXIucGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnY29udGFpbmVyJyA/IHN3aXBlci5lbCA6IHN3aXBlci53cmFwcGVyRWw7XG4gIGVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcbiAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJ2dyYWJiaW5nJyA6ICdncmFiJztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnNldEdyYWJDdXJzb3IoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG5cbiAgaWYgKHN3aXBlci5zdXBwb3J0LnRvdWNoIHx8IHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpcGVyW3N3aXBlci5wYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICdjb250YWluZXInID8gJ2VsJyA6ICd3cmFwcGVyRWwnXS5zdHlsZS5jdXJzb3IgPSAnJztcbn0iLCJpbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICB0b3VjaGVzLFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIGxldCBlID0gZXZlbnQ7XG4gIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLnN0YXJ0TW92aW5nICYmIGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgIH1cblxuICAgI
101HJldHVybjtcbiAgfVxuXG4gIGlmIChkYXRhLmlzVG91Y2hFdmVudCAmJiBlLnR5cGUgIT09ICd0b3VjaG1vdmUnKSByZXR1cm47XG4gIGNvbnN0IHRhcmdldFRvdWNoID0gZS50eXBlID09PSAndG91Y2htb3ZlJyAmJiBlLnRhcmdldFRvdWNoZXMgJiYgKGUudGFyZ2V0VG91Y2hlc1swXSB8fCBlLmNoYW5nZWRUb3VjaGVzWzBdKTtcbiAgY29uc3QgcGFnZVggPSBlLnR5cGUgPT09ICd0b3VjaG1vdmUnID8gdGFyZ2V0VG91Y2gucGFnZVggOiBlLnBhZ2VYO1xuICBjb25zdCBwYWdlWSA9IGUudHlwZSA9PT0gJ3RvdWNobW92ZScgPyB0YXJnZXRUb3VjaC5wYWdlWSA6IGUucGFnZVk7XG5cbiAgaWYgKGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIpIHtcbiAgICB0b3VjaGVzLnN0YXJ0WCA9IHBhZ2VYO1xuICAgIHRvdWNoZXMuc3RhcnRZID0gcGFnZVk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dUb3VjaE1vdmUpIHtcbiAgICBpZiAoISQoZS50YXJnZXQpLmlzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpKSB7XG4gICAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChkYXRhLmlzVG91Y2hlZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0b3VjaGVzLCB7XG4gICAgICAgIHN0YXJ0WDogcGFnZVgsXG4gICAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICAgIGN1cnJlbnRYOiBwYWdlWCxcbiAgICAgICAgY3VycmVudFk6IHBhZ2VZXG4gICAgICB9KTtcbiAgICAgIGRhdGEudG91Y2hTdGFydFRpbWUgPSBub3coKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGF0YS5pc1RvdWNoRXZlbnQgJiYgcGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMgJiYgIXBhcmFtcy5sb29wKSB7XG4gICAgaWYgKHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIC8vIFZlcnRpY2FsXG4gICAgICBpZiAocGFnZVkgPCB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSB8fCBwYWdlWSA+IHRvdWNoZXMuc3RhcnRZICYmIHN3aXBlci50cmFuc2xhdGUgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwYWdlWCA8IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIHx8IHBhZ2VYID4gdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA+PSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoZGF0YS5pc1RvdWNoRXZlbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgIGlmIChlLnRhcmdldCA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiAkKGUudGFyZ2V0KS5pcyhkYXRhLmZvY3VzYWJsZUVsZW1lbnRzKSkge1xuICAgICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmUnLCBlKTtcbiAgfVxuXG4gIGlmIChlLnRhcmdldFRvdWNoZXMgJiYgZS50YXJnZXRUb3VjaGVzLmxlbmd0aCA+IDEpIHJldHVybjtcbiAgdG91Y2hlcy5jdXJyZW50WCA9IHBhZ2VYO1xuICB0b3VjaGVzLmN1cnJlbnRZID0gcGFnZVk7XG4gIGNvbnN0IGRpZmZYID0gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYO1xuICBjb25zdCBkaWZmWSA9IHRvdWNoZXMuY3VycmVudFkgLSB0b3VjaGVzLnN0YXJ0WTtcbiAgaWYgKHN3aXBlci5wYXJhbXMudGhyZXNob2xkICYmIE1hdGguc3FydChkaWZmWCAqKiAyICsgZGlmZlkgKiogMikgPCBzd2lwZXIucGFyYW1zLnRocmVzaG9sZCkgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgZGF0YS5pc1Njcm9sbGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsZXQgdG91Y2hBbmdsZTtcblxuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgdG91Y2hlcy5jdXJyZW50WSA9PT0gdG91Y2hlcy5zdGFydFkgfHwgc3dpcGVyLmlzVmVydGljYWwoKSAmJi
101B0b3VjaGVzLmN1cnJlbnRYID09PSB0b3VjaGVzLnN0YXJ0WCkge1xuICAgICAgZGF0YS5pc1Njcm9sbGluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGlmIChkaWZmWCAqIGRpZmZYICsgZGlmZlkgKiBkaWZmWSA+PSAyNSkge1xuICAgICAgICB0b3VjaEFuZ2xlID0gTWF0aC5hdGFuMihNYXRoLmFicyhkaWZmWSksIE1hdGguYWJzKGRpZmZYKSkgKiAxODAgLyBNYXRoLlBJO1xuICAgICAgICBkYXRhLmlzU2Nyb2xsaW5nID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hBbmdsZSA+IHBhcmFtcy50b3VjaEFuZ2xlIDogOTAgLSB0b3VjaEFuZ2xlID4gcGFyYW1zLnRvdWNoQW5nbGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlT3Bwb3NpdGUnLCBlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0YS5zdGFydE1vdmluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodG91Y2hlcy5jdXJyZW50WCAhPT0gdG91Y2hlcy5zdGFydFggfHwgdG91Y2hlcy5jdXJyZW50WSAhPT0gdG91Y2hlcy5zdGFydFkpIHtcbiAgICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkYXRhLmlzU2Nyb2xsaW5nKSB7XG4gICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWRhdGEuc3RhcnRNb3ZpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuXG4gIGlmICghcGFyYW1zLmNzc01vZGUgJiYgZS5jYW5jZWxhYmxlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgaWYgKHBhcmFtcy50b3VjaE1vdmVTdG9wUHJvcGFnYXRpb24gJiYgIXBhcmFtcy5uZXN0ZWQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgaWYgKCFkYXRhLmlzTW92ZWQpIHtcbiAgICBpZiAocGFyYW1zLmxvb3AgJiYgIXBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgIH1cblxuICAgIGRhdGEuc3RhcnRUcmFuc2xhdGUgPSBzd2lwZXIuZ2V0VHJhbnNsYXRlKCk7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG5cbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgc3dpcGVyLiR3cmFwcGVyRWwudHJpZ2dlcignd2Via2l0VHJhbnNpdGlvbkVuZCB0cmFuc2l0aW9uZW5kJyk7XG4gICAgfVxuXG4gICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7IC8vIEdyYWIgQ3Vyc29yXG5cbiAgICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICB9XG5cbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVyRmlyc3RNb3ZlJywgZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2xpZGVyTW92ZScsIGUpO1xuICBkYXRhLmlzTW92ZWQgPSB0cnVlO1xuICBsZXQgZGlmZiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IGRpZmZYIDogZGlmZlk7XG4gIHRvdWNoZXMuZGlmZiA9IGRpZmY7XG4gIGRpZmYgKj0gcGFyYW1zLnRvdWNoUmF0aW87XG4gIGlmIChydGwpIGRpZmYgPSAtZGlmZjtcbiAgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID0gZGlmZiA+IDAgPyAncHJldicgOiAnbmV4dCc7XG4gIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRpZmYgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICBsZXQgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gIGxldCByZXNpc3RhbmNlUmF0aW8gPSBwYXJhbXMucmVzaXN0YW5jZVJhdGlvO1xuXG4gIGlmIChwYXJhbXMudG91Y2hSZWxlYXNlT25FZGdlcykge1xuICAgIHJlc2lzdGFuY2VSYXRpbyA9IDA7XG4gIH1cblxuICBpZiAoZGlmZiA+IDAgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgIGlmIChwYXJhbXMucmVzaXN0YW5jZSkgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIC0gMSArICgtc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgZGF0YS5zdGFydFRyYW5zbGF0ZSArIGRpZmYpICoqIHJlc2lzdGFuY2VSYXRpbztcbiAgfSBlbHNlIGlmIChkaWZmIDwgMCAmJiBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gZmFsc2U7XG4gICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgKyAxIC0gKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIGRhdGEuc3RhcnRUcmFuc2xhdGUgLSBkaWZmKSAqKiByZXNpc3RhbmNlUmF0aW87XG4gIH1cblxuICBpZiAoZGlzYWJsZVBhcmVudFN3aXBlcikge1xuICAgIGUucHJldmVudGVkQnlOZXN0ZWRTd2lwZXIgPSB0cnVlO1xuICB9IC8vIERpcmVjdGlvbnMgbG9ja3NcblxuXG4gIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB9XG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicgJiYgZGF0YS5jdXJyZW50VHJhbnNsYXRlID4gZGF0YS5zdGFydFRyYW5zbGF0ZSkge1xuICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gIH1cblxuICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiAhc3dpcGVyLmFsbG93U2xpZGVOZXh0KSB7XG4gICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgfSAvLyBUaHJlc2hvbGRcblxuXG4gIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkge1xuICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IHBhcmFtcy50aHJlc2hvbGQgfHwgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgIGlmICghZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgICAgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSB0cnVlO1xuICAgICAgICB0b3VjaGVzLnN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gICAgICAgI
101HRvdWNoZXMuc3RhcnRZID0gdG91Y2hlcy5jdXJyZW50WTtcbiAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgdG91Y2hlcy5kaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFwYXJhbXMuZm9sbG93RmluZ2VyIHx8IHBhcmFtcy5jc3NNb2RlKSByZXR1cm47IC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG5cbiAgaWYgKHBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBzd2lwZXIuZnJlZU1vZGUgfHwgcGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MpIHtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICB9XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgcGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQgJiYgc3dpcGVyLmZyZWVNb2RlKSB7XG4gICAgc3dpcGVyLmZyZWVNb2RlLm9uVG91Y2hNb3ZlKCk7XG4gIH0gLy8gVXBkYXRlIHByb2dyZXNzXG5cblxuICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTsgLy8gVXBkYXRlIHRyYW5zbGF0ZVxuXG4gIHN3aXBlci5zZXRUcmFuc2xhdGUoZGF0YS5jdXJyZW50VHJhbnNsYXRlKTtcbn0iLCJpbXBvcnQgeyBub3csIG5leHRUaWNrIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgdG91Y2hlcyxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIGxldCBlID0gZXZlbnQ7XG4gIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7XG5cbiAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgIHN3aXBlci5lbWl0KCd0b3VjaEVuZCcsIGUpO1xuICB9XG5cbiAgZGF0YS5hbGxvd1RvdWNoQ2FsbGJhY2tzID0gZmFsc2U7XG5cbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLmlzTW92ZWQgJiYgcGFyYW1zLmdyYWJDdXJzb3IpIHtcbiAgICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgICB9XG5cbiAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9IC8vIFJldHVybiBHcmFiIEN1cnNvclxuXG5cbiAgaWYgKHBhcmFtcy5ncmFiQ3Vyc29yICYmIGRhdGEuaXNNb3ZlZCAmJiBkYXRhLmlzVG91Y2hlZCAmJiAoc3dpcGVyLmFsbG93U2xpZGVOZXh0ID09PSB0cnVlIHx8IHN3aXBlci5hbGxvd1NsaWRlUHJldiA9PT0gdHJ1ZSkpIHtcbiAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcihmYWxzZSk7XG4gIH0gLy8gVGltZSBkaWZmXG5cblxuICBjb25zdCB0b3VjaEVuZFRpbWUgPSBub3coKTtcbiAgY29uc3QgdGltZURpZmYgPSB0b3VjaEVuZFRpbWUgLSBkYXRhLnRvdWNoU3RhcnRUaW1lOyAvLyBUYXAsIGRvdWJsZVRhcCwgQ2xpY2tcblxuICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICBjb25zdCBwYXRoVHJlZSA9IGUucGF0aCB8fCBlLmNvbXBvc2VkUGF0aCAmJiBlLmNvbXBvc2VkUGF0aCgpO1xuICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUocGF0aFRyZWUgJiYgcGF0aFRyZWVbMF0gfHwgZS50YXJnZXQpO1xuICAgIHN3aXBlci5lbWl0KCd0YXAgY2xpY2snLCBlKTtcblxuICAgIGlmICh0aW1lRGlmZiA8IDMwMCAmJiB0b3VjaEVuZFRpbWUgLSBkYXRhLmxhc3RDbGlja1RpbWUgPCAzMDApIHtcbiAgICAgIHN3aXBlci5lbWl0KCdkb3VibGVUYXAgZG91YmxlQ2xpY2snLCBlKTtcbiAgICB9XG4gIH1cblxuICBkYXRhLmxhc3RDbGlja1RpbWUgPSBub3coKTtcbiAgbmV4dFRpY2soKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkgc3dpcGVyLmFsbG93Q2xpY2sgPSB0cnVlO1xuICB9KTtcblxuICBpZiAoIWRhdGEuaXNUb3VjaGVkIHx8ICFkYXRhLmlzTW92ZWQgfHwgIXN3aXBlci5zd2lwZURpcmVjdGlvbiB8fCB0b3VjaGVzLmRpZmYgPT09IDAgfHwgZGF0YS5jdXJyZW50VHJhbnNsYXRlID09PSBkYXRhLnN0YXJ0VHJhbnNsYXRlKSB7XG4gICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgZGF0YS5pc01vdmVkID0gZmFsc2U7XG4gIGRhdGEuc3RhcnRNb3ZpbmcgPSBmYWxzZTtcbiAgbGV0IGN1cnJlbnRQb3M7XG5cbiAgaWYgKHBhcmFtcy5mb2xsb3dGaW5nZXIpIHtcbiAgICBjdXJyZW50UG9zID0gcnRsID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICB9IGVsc2Uge1xuICAgIGN1cnJlbnRQb3MgPSAtZGF0YS5jdXJyZW50VHJhbnNsYXRlO1xuICB9XG5cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgcGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQpIHtcbiAgICBzd2lwZXIuZnJlZU1vZGUub25Ub3VjaEVuZCh7XG4gICAgICBjdXJyZW50UG9zXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9IC8vIEZpbmQgY3VycmVudCBzbGlkZVxuXG5cbiAgbGV0IHN0b3BJbmRleCA9IDA7XG4gIGxldCBncm91cFNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkWzBdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwKSB7XG4gICAgY29uc3QgaW5jcmVtZW50ID0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcblxuICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgaW5jcmVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0gJiYgY3VycmVudFBvcyA8IHNsaWRlc0dyaWRbaSArIGluY3JlbWVudF0pIHtcbiAgICAgICAgc3RvcEluZGV4ID0gaTtcbiAgICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtpICsgaW5jcmVtZW50XSAtIHNsaWRlc0dyaWRbaV07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50UG9zID49IHNsaWRlc0dyaWRbaV0pIHtcbiAgICAgIHN0b3BJbmRleCA9IG
101k7XG4gICAgICBncm91cFNpemUgPSBzbGlkZXNHcmlkW3NsaWRlc0dyaWQubGVuZ3RoIC0gMV0gLSBzbGlkZXNHcmlkW3NsaWRlc0dyaWQubGVuZ3RoIC0gMl07XG4gICAgfVxuICB9XG5cbiAgbGV0IHJld2luZEZpcnN0SW5kZXggPSBudWxsO1xuICBsZXQgcmV3aW5kTGFzdEluZGV4ID0gbnVsbDtcblxuICBpZiAocGFyYW1zLnJld2luZCkge1xuICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgIHJld2luZExhc3RJbmRleCA9IHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggLSAxIDogc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICByZXdpbmRGaXJzdEluZGV4ID0gMDtcbiAgICB9XG4gIH0gLy8gRmluZCBjdXJyZW50IHNsaWRlIHNpemVcblxuXG4gIGNvbnN0IHJhdGlvID0gKGN1cnJlbnRQb3MgLSBzbGlkZXNHcmlkW3N0b3BJbmRleF0pIC8gZ3JvdXBTaXplO1xuICBjb25zdCBpbmNyZW1lbnQgPSBzdG9wSW5kZXggPCBwYXJhbXMuc2xpZGVzUGVyR3JvdXBTa2lwIC0gMSA/IDEgOiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG5cbiAgaWYgKHRpbWVEaWZmID4gcGFyYW1zLmxvbmdTd2lwZXNNcykge1xuICAgIC8vIExvbmcgdG91Y2hlc1xuICAgIGlmICghcGFyYW1zLmxvbmdTd2lwZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICBpZiAocmF0aW8gPj0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykgc3dpcGVyLnNsaWRlVG8ocGFyYW1zLnJld2luZCAmJiBzd2lwZXIuaXNFbmQgPyByZXdpbmRGaXJzdEluZGV4IDogc3RvcEluZGV4ICsgaW5jcmVtZW50KTtlbHNlIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICBpZiAocmF0aW8gPiAxIC0gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChyZXdpbmRMYXN0SW5kZXggIT09IG51bGwgJiYgcmF0aW8gPCAwICYmIE1hdGguYWJzKHJhdGlvKSA+IHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8ocmV3aW5kTGFzdEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNob3J0IHN3aXBlc1xuICAgIGlmICghcGFyYW1zLnNob3J0U3dpcGVzKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmF2QnV0dG9uVGFyZ2V0ID0gc3dpcGVyLm5hdmlnYXRpb24gJiYgKGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCk7XG5cbiAgICBpZiAoIWlzTmF2QnV0dG9uVGFyZ2V0KSB7XG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8ocmV3aW5kRmlyc3RJbmRleCAhPT0gbnVsbCA/IHJld2luZEZpcnN0SW5kZXggOiBzdG9wSW5kZXggKyBpbmNyZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8ocmV3aW5kTGFzdEluZGV4ICE9PSBudWxsID8gcmV3aW5kTGFzdEluZGV4IDogc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCk7XG4gICAgfVxuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25TY3JvbGwoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICB3cmFwcGVyRWwsXG4gICAgcnRsVHJhbnNsYXRlLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIHN3aXBlci5wcmV2aW91c1RyYW5zbGF0ZSA9IHN3aXBlci50cmFuc2xhdGU7XG5cbiAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgIHN3aXBlci50cmFuc2xhdGUgPSAtd3JhcHBlckVsLnNjcm9sbExlZnQ7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsVG9wO1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuXG5cbiAgaWYgKHN3aXBlci50cmFuc2xhdGUgPT09IDApIHN3aXBlci50cmFuc2xhdGUgPSAwO1xuICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgbGV0IG5ld1Byb2dyZXNzO1xuICBjb25zdCB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcblxuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBuZXdQcm9ncmVzcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAoc3dpcGVyLnRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyB0cmFuc2xhdGVzRGlmZjtcbiAgfVxuXG4gIGlmIChuZXdQcm9ncmVzcyAhPT0gc3dpcGVyLnByb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHJ0bFRyYW5zbGF0ZSA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZSk7XG4gIH1cblxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNsYXRlJywgc3dpcGVyLnRyYW5zbGF0ZSwgZmFsc2UpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG5cbiAgaWYgKCFzd2lwZXIuYWxsb3dDbGljaykge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnByZX
101ZlbnRDbGlja3MpIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLnByZXZlbnRDbGlja3NQcm9wYWdhdGlvbiAmJiBzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cbn0iLCJpbXBvcnQgc2V0QnJlYWtwb2ludCBmcm9tICcuL3NldEJyZWFrcG9pbnQuanMnO1xuaW1wb3J0IGdldEJyZWFrcG9pbnQgZnJvbSAnLi9nZXRCcmVha3BvaW50LmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0QnJlYWtwb2ludCxcbiAgZ2V0QnJlYWtwb2ludFxufTsiLCJpbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJyZWFrcG9pbnQoYnJlYWtwb2ludHMsIGJhc2UgPSAnd2luZG93JywgY29udGFpbmVyRWwpIHtcbiAgaWYgKCFicmVha3BvaW50cyB8fCBiYXNlID09PSAnY29udGFpbmVyJyAmJiAhY29udGFpbmVyRWwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGxldCBicmVha3BvaW50ID0gZmFsc2U7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gYmFzZSA9PT0gJ3dpbmRvdycgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiBjb250YWluZXJFbC5jbGllbnRIZWlnaHQ7XG4gIGNvbnN0IHBvaW50cyA9IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5tYXAocG9pbnQgPT4ge1xuICAgIGlmICh0eXBlb2YgcG9pbnQgPT09ICdzdHJpbmcnICYmIHBvaW50LmluZGV4T2YoJ0AnKSA9PT0gMCkge1xuICAgICAgY29uc3QgbWluUmF0aW8gPSBwYXJzZUZsb2F0KHBvaW50LnN1YnN0cigxKSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGN1cnJlbnRIZWlnaHQgKiBtaW5SYXRpbztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBwb2ludFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHBvaW50LFxuICAgICAgcG9pbnRcbiAgICB9O1xuICB9KTtcbiAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEudmFsdWUsIDEwKSAtIHBhcnNlSW50KGIudmFsdWUsIDEwKSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCB7XG4gICAgICBwb2ludCxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBvaW50c1tpXTtcblxuICAgIGlmIChiYXNlID09PSAnd2luZG93Jykge1xuICAgICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKGAobWluLXdpZHRoOiAke3ZhbHVlfXB4KWApLm1hdGNoZXMpIHtcbiAgICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gY29udGFpbmVyRWwuY2xpZW50V2lkdGgpIHtcbiAgICAgIGJyZWFrcG9pbnQgPSBwb2ludDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnJlYWtwb2ludCB8fCAnbWF4Jztcbn0iLCJpbXBvcnQgYWRkQ2xhc3NlcyBmcm9tICcuL2FkZENsYXNzZXMuanMnO1xuaW1wb3J0IHJlbW92ZUNsYXNzZXMgZnJvbSAnLi9yZW1vdmVDbGFzc2VzLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgYWRkQ2xhc3NlcyxcbiAgcmVtb3ZlQ2xhc3Nlc1xufTsiLCJmdW5jdGlvbiBwcmVwYXJlQ2xhc3NlcyhlbnRyaWVzLCBwcmVmaXgpIHtcbiAgY29uc3QgcmVzdWx0Q2xhc3NlcyA9IFtdO1xuICBlbnRyaWVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaChjbGFzc05hbWVzID0+IHtcbiAgICAgICAgaWYgKGl0ZW1bY2xhc3NOYW1lc10pIHtcbiAgICAgICAgICByZXN1bHRDbGFzc2VzLnB1c2gocHJlZml4ICsgY2xhc3NOYW1lcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHRDbGFzc2VzLnB1c2gocHJlZml4ICsgaXRlbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdENsYXNzZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWVzLFxuICAgIHBhcmFtcyxcbiAgICBydGwsXG4gICAgJGVsLFxuICAgIGRldmljZSxcbiAgICBzdXBwb3J0XG4gIH0gPSBzd2lwZXI7IC8vIHByZXR0aWVyLWlnbm9yZVxuXG4gIGNvbnN0IHN1ZmZpeGVzID0gcHJlcGFyZUNsYXNzZXMoWydpbml0aWFsaXplZCcsIHBhcmFtcy5kaXJlY3Rpb24sIHtcbiAgICAncG9pbnRlci1ldmVudHMnOiAhc3VwcG9ydC50b3VjaFxuICB9LCB7XG4gICAgJ2ZyZWUtbW9kZSc6IHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgcGFyYW1zLmZyZWVNb2RlLmVuYWJsZWRcbiAgfSwge1xuICAgICdhdXRvaGVpZ2h0JzogcGFyYW1zLmF1dG9IZWlnaHRcbiAgfSwge1xuICAgICdydGwnOiBydGxcbiAgfSwge1xuICAgICdncmlkJzogcGFyYW1zLmdyaWQgJiYgcGFyYW1zLmdyaWQucm93cyA+IDFcbiAgfSwge1xuICAgICdncmlkLWNvbHVtbic6IHBhcmFtcy5ncmlkICYmIHBhcmFtcy5ncmlkLnJvd3MgPiAxICYmIHBhcmFtcy5ncmlkLmZpbGwgPT09ICdjb2x1bW4nXG4gIH0sIHtcbiAgICAnYW5kcm9pZCc6IGRldmljZS5hbmRyb2lkXG4gIH0sIHtcbiAgICAnaW9zJzogZGV2aWNlLmlvc1xuICB9LCB7XG4gICAgJ2Nzcy1tb2RlJzogcGFyYW1zLmNzc01vZGVcbiAgfSwge1xuICAgICdjZW50ZXJlZCc6IHBhcmFtcy5jc3NNb2RlICYmIHBhcmFtcy5jZW50ZXJlZFNsaWRlc1xuICB9LCB7XG4gICAgJ3dhdGNoLXByb2dyZXNzJzogcGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3NcbiAgfV0sIHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKTtcbiAgY2xhc3NOYW1lcy5wdXNoKC4uLnN1ZmZpeGVzKTtcbiAgJGVsLmFkZENsYXNzKFsuLi5jbGFzc05hbWVzXS5qb2luKCcgJykpO1xuICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgJGVsLFxuICAgIGNsYXNzTmFtZXNcbiAgfSA9IHN3aXBlcjtcbiAgJGVsLnJlbW92ZUNsYXNzKGNsYXNzTmFtZXMuam9pbignICcpKTtcbiAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG59IiwiaW1wb3J0IGxvYWRJbWFnZSBmcm9tICcuL2xvYWRJbWFnZS5qcyc7XG5pbXBvcnQgcHJlbG9hZEltYWdlcyBmcm9tICcuL3ByZWxvYWRJbWFnZXMuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBsb2FkSW1hZ2UsXG4gIHByZWxvYWRJbWFnZXNcbn07IiwiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgJCBmcm9tICcuLi8uLi9zaGFyZWQvZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvYWRJbWFnZShpbWFnZUVsLCBzcmMsIHNyY3NldCwgc2l6ZXMsIGNoZWNrRm9yQ29tcGxldGUsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgaW1hZ2U7XG5cbiAgZnVuY3Rpb24gb25SZWFkeSgpIHtcbiAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gIH1cblxuICBjb25zdCBpc1BpY3R1cmUgPSAkKGltYWdlRWwpLnBhcmVudCgncGljdHVyZScpWzBdO1xuXG4gIGlmICghaXNQaWN0dXJlICYmICghaW1hZ2VFbC5jb21wbGV0ZSB8fCAhY2hlY2tGb3JDb21wbGV0ZSkpIHtcbiAgICBpZiAoc3JjKSB7XG4gICAgICBpbWFnZSA9IG5ldyB3aW5kb3cuSW1hZ2UoKTtcbiAgICAgIGltYWdlLm9ubG9hZCA9IG9uUmVhZHk7XG4gICAgICBpbWFnZS5vbmVycm9yID0gb25SZWFkeTtcblxuICAgICAgaWYgKHNpemVzKSB7XG4gICAgICAgIGltYWdlLnNpemVzID0gc2l6ZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcmNzZXQpIHtcbiAgICAgICAgaW1hZ2Uuc3Jjc2V0ID0gc3Jjc2V0O1xuICAgICAgfVxuXG4gICAgICBpZiAoc3JjKSB7XG4gICAgICAgIGltYWdlLnNyYyA9IHNyYztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25SZWFkeSgpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpbWFnZSBhbHJlYWR5IGxvYWRlZC4uLlxuICAgIG9uUmVhZHkoKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByZWxvYWRJbWFnZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIHN3aXBlci5pbWFnZXNUb0xvYWQgPSBzd2lwZXIuJGVsLmZpbmQoJ2ltZycpO1xuXG4gIGZ1bmN0aW9uIG9uUmVhZHkoKSB7XG4gICAgaWYgKHR5cGVvZiBzd2lwZXIgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlciA9PT0gbnVsbCB8fCAhc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCAhPT0gdW5kZWZpbmVkKSBzd2lwZXIuaW1hZ2VzTG9h
101ZGVkICs9IDE7XG5cbiAgICBpZiAoc3dpcGVyLmltYWdlc0xvYWRlZCA9PT0gc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGgpIHtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLnVwZGF0ZU9uSW1hZ2VzUmVhZHkpIHN3aXBlci51cGRhdGUoKTtcbiAgICAgIHN3aXBlci5lbWl0KCdpbWFnZXNSZWFkeScpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpcGVyLmltYWdlc1RvTG9hZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IGltYWdlRWwgPSBzd2lwZXIuaW1hZ2VzVG9Mb2FkW2ldO1xuICAgIHN3aXBlci5sb2FkSW1hZ2UoaW1hZ2VFbCwgaW1hZ2VFbC5jdXJyZW50U3JjIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzcmMnKSwgaW1hZ2VFbC5zcmNzZXQgfHwgaW1hZ2VFbC5nZXRBdHRyaWJ1dGUoJ3NyY3NldCcpLCBpbWFnZUVsLnNpemVzIHx8IGltYWdlRWwuZ2V0QXR0cmlidXRlKCdzaXplcycpLCB0cnVlLCBvblJlYWR5KTtcbiAgfVxufSIsImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtb2R1bGVFeHRlbmRQYXJhbXMocGFyYW1zLCBhbGxNb2R1bGVzUGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBleHRlbmRQYXJhbXMob2JqID0ge30pIHtcbiAgICBjb25zdCBtb2R1bGVQYXJhbU5hbWUgPSBPYmplY3Qua2V5cyhvYmopWzBdO1xuICAgIGNvbnN0IG1vZHVsZVBhcmFtcyA9IG9ialttb2R1bGVQYXJhbU5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBtb2R1bGVQYXJhbXMgIT09ICdvYmplY3QnIHx8IG1vZHVsZVBhcmFtcyA9PT0gbnVsbCkge1xuICAgICAgZXh0ZW5kKGFsbE1vZHVsZXNQYXJhbXMsIG9iaik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFsnbmF2aWdhdGlvbicsICdwYWdpbmF0aW9uJywgJ3Njcm9sbGJhciddLmluZGV4T2YobW9kdWxlUGFyYW1OYW1lKSA+PSAwICYmIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSB0cnVlKSB7XG4gICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHtcbiAgICAgICAgYXV0bzogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIShtb2R1bGVQYXJhbU5hbWUgaW4gcGFyYW1zICYmICdlbmFibGVkJyBpbiBtb2R1bGVQYXJhbXMpKSB7XG4gICAgICBleHRlbmQoYWxsTW9kdWxlc1BhcmFtcywgb2JqKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09IHRydWUpIHtcbiAgICAgIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgICBlbmFibGVkOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09ICdvYmplY3QnICYmICEoJ2VuYWJsZWQnIGluIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKSkge1xuICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSkgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH07XG4gICAgZXh0ZW5kKGFsbE1vZHVsZXNQYXJhbXMsIG9iaik7XG4gIH07XG59IiwiaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQoc3dpcGVyLCBvcmlnaW5hbFBhcmFtcywgcGFyYW1zLCBjaGVja1Byb3BzKSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICBpZiAoc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cykge1xuICAgIE9iamVjdC5rZXlzKGNoZWNrUHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghcGFyYW1zW2tleV0gJiYgcGFyYW1zLmF1dG8gPT09IHRydWUpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBzd2lwZXIuJGVsLmNoaWxkcmVuKGAuJHtjaGVja1Byb3BzW2tleV19YClbMF07XG5cbiAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gY2hlY2tQcm9wc1trZXldO1xuICAgICAgICAgIHN3aXBlci4kZWwuYXBwZW5kKGVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zW2tleV0gPSBlbGVtZW50O1xuICAgICAgICBvcmlnaW5hbFBhcmFtc1trZXldID0gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbXM7XG59IiwiaW1wb3J0IGNyZWF0ZUVsZW1lbnRJZk5vdERlZmluZWQgZnJvbSAnLi4vLi4vc2hhcmVkL2NyZWF0ZS1lbGVtZW50LWlmLW5vdC1kZWZpbmVkLmpzJztcbmltcG9ydCAkIGZyb20gJy4uLy4uL3NoYXJlZC9kb20uanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTmF2aWdhdGlvbih7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBleHRlbmRQYXJhbXMoe1xuICAgIG5hdmlnYXRpb246IHtcbiAgICAgIG5leHRFbDogbnVsbCxcbiAgICAgIHByZXZFbDogbnVsbCxcbiAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWRpc2FibGVkJyxcbiAgICAgIGhpZGRlbkNsYXNzOiAnc3dpcGVyLWJ1dHRvbi1oaWRkZW4nLFxuICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLWJ1dHRvbi1sb2NrJyxcbiAgICAgIG5hdmlnYXRpb25EaXNhYmxlZENsYXNzOiAnc3dpcGVyLW5hdmlnYXRpb24tZGlzYWJsZWQnXG4gICAgfVxuICB9KTtcbiAgc3dpcGVyLm5hdmlnYXRpb24gPSB7XG4gICAgbmV4dEVsOiBudWxsLFxuICAgICRuZXh0RWw6IG51bGwsXG4gICAgcHJldkVsOiBudWxsLFxuICAgICRwcmV2RWw6IG51bGxcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRFbChlbCkge1xuICAgIGxldCAkZWw7XG5cbiAgICBpZiAoZWwpIHtcbiAgICAgICRlbCA9ICQoZWwpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50cyAmJiB0eXBlb2YgZWwgPT09ICdzdHJpbmcnICYmICRlbC5sZW5ndGggPiAxICYmIHN3aXBlci4kZWwuZmluZChlbCkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICRlbCA9IHN3aXBlci4kZWwuZmluZChlbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICRlbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZUVsKCRlbCwgZGlzYWJsZWQpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG5cbiAgICBpZiAoJGVsICYmICRlbC5sZW5ndGggPiAwKSB7XG4gICAgICAkZWxbZGlzYWJsZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmRpc2FibGVkQ2xhc3MpO1xuICAgICAgaWYgKCRlbFswXSAmJiAkZWxbMF0udGFnTmFtZSA9PT0gJ0JVVFRPTicpICRlbFswXS5kaXNhYmxlZCA9IGRpc2FibGVkO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgICRlbFtzd2lwZXIuaXNMb2NrZWQgPyAnYWRkQ2xhc3MnIDogJ3JlbW92ZUNsYXNzJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIC8vIFVwZGF0ZSBOYXZpZ2F0aW9uIEJ1dHRvbnNcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gICAgY29uc3Qge1xuICAgICAgJG5leHRFbCxcbiAgICAgICRwcmV2RWxcbiAgICB9ID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgdG9nZ2xlRWwoJHByZX
101ZFbCwgc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLnJld2luZCk7XG4gICAgdG9nZ2xlRWwoJG5leHRFbCwgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLnJld2luZCk7XG4gIH1cblxuICBmdW5jdGlvbiBvblByZXZDbGljayhlKSB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiAhc3dpcGVyLnBhcmFtcy5yZXdpbmQpIHJldHVybjtcbiAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgZW1pdCgnbmF2aWdhdGlvblByZXYnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTmV4dENsaWNrKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmICFzd2lwZXIucGFyYW1zLnJld2luZCkgcmV0dXJuO1xuICAgIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICBlbWl0KCduYXZpZ2F0aW9uTmV4dCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uID0gY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZChzd2lwZXIsIHN3aXBlci5vcmlnaW5hbFBhcmFtcy5uYXZpZ2F0aW9uLCBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24sIHtcbiAgICAgIG5leHRFbDogJ3N3aXBlci1idXR0b24tbmV4dCcsXG4gICAgICBwcmV2RWw6ICdzd2lwZXItYnV0dG9uLXByZXYnXG4gICAgfSk7XG4gICAgaWYgKCEocGFyYW1zLm5leHRFbCB8fCBwYXJhbXMucHJldkVsKSkgcmV0dXJuO1xuICAgIGNvbnN0ICRuZXh0RWwgPSBnZXRFbChwYXJhbXMubmV4dEVsKTtcbiAgICBjb25zdCAkcHJldkVsID0gZ2V0RWwocGFyYW1zLnByZXZFbCk7XG5cbiAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgICRuZXh0RWwub24oJ2NsaWNrJywgb25OZXh0Q2xpY2spO1xuICAgIH1cblxuICAgIGlmICgkcHJldkVsICYmICRwcmV2RWwubGVuZ3RoID4gMCkge1xuICAgICAgJHByZXZFbC5vbignY2xpY2snLCBvblByZXZDbGljayk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIubmF2aWdhdGlvbiwge1xuICAgICAgJG5leHRFbCxcbiAgICAgIG5leHRFbDogJG5leHRFbCAmJiAkbmV4dEVsWzBdLFxuICAgICAgJHByZXZFbCxcbiAgICAgIHByZXZFbDogJHByZXZFbCAmJiAkcHJldkVsWzBdXG4gICAgfSk7XG5cbiAgICBpZiAoIXN3aXBlci5lbmFibGVkKSB7XG4gICAgICBpZiAoJG5leHRFbCkgJG5leHRFbC5hZGRDbGFzcyhwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgIGlmICgkcHJldkVsKSAkcHJldkVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgY29uc3Qge1xuICAgICAgJG5leHRFbCxcbiAgICAgICRwcmV2RWxcbiAgICB9ID0gc3dpcGVyLm5hdmlnYXRpb247XG5cbiAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCkge1xuICAgICAgJG5leHRFbC5vZmYoJ2NsaWNrJywgb25OZXh0Q2xpY2spO1xuICAgICAgJG5leHRFbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZGlzYWJsZWRDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGgpIHtcbiAgICAgICRwcmV2RWwub2ZmKCdjbGljaycsIG9uUHJldkNsaWNrKTtcbiAgICAgICRwcmV2RWwucmVtb3ZlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIG9uKCdpbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbml0KCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0pO1xuICBvbigndG9FZGdlIGZyb21FZGdlIGxvY2sgdW5sb2NrJywgKCkgPT4ge1xuICAgIHVwZGF0ZSgpO1xuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgZGVzdHJveSgpO1xuICB9KTtcbiAgb24oJ2VuYWJsZSBkaXNhYmxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICRuZXh0RWwsXG4gICAgICAkcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICRuZXh0RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgfVxuXG4gICAgaWYgKCRwcmV2RWwpIHtcbiAgICAgICRwcmV2RWxbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlQ2xhc3MnIDogJ2FkZENsYXNzJ10oc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmxvY2tDbGFzcyk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2NsaWNrJywgKF9zLCBlKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgJG5leHRFbCxcbiAgICAgICRwcmV2RWxcbiAgICB9ID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgY29uc3QgdGFyZ2V0RWwgPSBlLnRhcmdldDtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24uaGlkZU9uQ2xpY2sgJiYgISQodGFyZ2V0RWwpLmlzKCRwcmV2RWwpICYmICEkKHRhcmdldEVsKS5pcygkbmV4dEVsKSkge1xuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIChzd2lwZXIucGFnaW5hdGlvbi5lbCA9PT0gdGFyZ2V0RWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uZWwuY29udGFpbnModGFyZ2V0RWwpKSkgcmV0dXJuO1xuICAgICAgbGV0IGlzSGlkZGVuO1xuXG4gICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICBpc0hpZGRlbiA9ICRuZXh0RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgIH0gZWxzZSBpZiAoJHByZXZFbCkge1xuICAgICAgICBpc0hpZGRlbiA9ICRwcmV2RWwuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzSGlkZGVuID09PSB0cnVlKSB7XG4gICAgICAgIGVtaXQoJ25hdmlnYXRpb25TaG93Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0KCduYXZpZ2F0aW9uSGlkZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJG5leHRFbCkge1xuICAgICAgICAkbmV4dEVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAgICRwcmV2RWwudG9nZ2xlQ2xhc3Moc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKTtcbiAgICAgIH1cbiAgICB9XG4gI
101H0pO1xuXG4gIGNvbnN0IGVuYWJsZSA9ICgpID0+IHtcbiAgICBzd2lwZXIuJGVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5uYXZpZ2F0aW9uRGlzYWJsZWRDbGFzcyk7XG4gICAgaW5pdCgpO1xuICAgIHVwZGF0ZSgpO1xuICB9O1xuXG4gIGNvbnN0IGRpc2FibGUgPSAoKSA9PiB7XG4gICAgc3dpcGVyLiRlbC5hZGRDbGFzcyhzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24ubmF2aWdhdGlvbkRpc2FibGVkQ2xhc3MpO1xuICAgIGRlc3Ryb3koKTtcbiAgfTtcblxuICBPYmplY3QuYXNzaWduKHN3aXBlci5uYXZpZ2F0aW9uLCB7XG4gICAgZW5hYmxlLFxuICAgIGRpc2FibGUsXG4gICAgdXBkYXRlLFxuICAgIGluaXQsXG4gICAgZGVzdHJveVxuICB9KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGFzc2VzVG9TZWxlY3RvcihjbGFzc2VzID0gJycpIHtcbiAgcmV0dXJuIGAuJHtjbGFzc2VzLnRyaW0oKS5yZXBsYWNlKC8oW1xcLjohXFwvXSkvZywgJ1xcXFwkMScpIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgLnJlcGxhY2UoLyAvZywgJy4nKX1gO1xufSIsImltcG9ydCAkIGZyb20gJy4uLy4uL3NoYXJlZC9kb20uanMnO1xuaW1wb3J0IGNsYXNzZXNUb1NlbGVjdG9yIGZyb20gJy4uLy4uL3NoYXJlZC9jbGFzc2VzLXRvLXNlbGVjdG9yLmpzJztcbmltcG9ydCBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkIGZyb20gJy4uLy4uL3NoYXJlZC9jcmVhdGUtZWxlbWVudC1pZi1ub3QtZGVmaW5lZC5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWdpbmF0aW9uKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uLFxuICBlbWl0XG59KSB7XG4gIGNvbnN0IHBmeCA9ICdzd2lwZXItcGFnaW5hdGlvbic7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBidWxsZXRFbGVtZW50OiAnc3BhbicsXG4gICAgICBjbGlja2FibGU6IGZhbHNlLFxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgcmVuZGVyQnVsbGV0OiBudWxsLFxuICAgICAgcmVuZGVyUHJvZ3Jlc3NiYXI6IG51bGwsXG4gICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgIHJlbmRlckN1c3RvbTogbnVsbCxcbiAgICAgIHByb2dyZXNzYmFyT3Bwb3NpdGU6IGZhbHNlLFxuICAgICAgdHlwZTogJ2J1bGxldHMnLFxuICAgICAgLy8gJ2J1bGxldHMnIG9yICdwcm9ncmVzc2Jhcicgb3IgJ2ZyYWN0aW9uJyBvciAnY3VzdG9tJ1xuICAgICAgZHluYW1pY0J1bGxldHM6IGZhbHNlLFxuICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgZm9ybWF0RnJhY3Rpb25DdXJyZW50OiBudW1iZXIgPT4gbnVtYmVyLFxuICAgICAgZm9ybWF0RnJhY3Rpb25Ub3RhbDogbnVtYmVyID0+IG51bWJlcixcbiAgICAgIGJ1bGxldENsYXNzOiBgJHtwZnh9LWJ1bGxldGAsXG4gICAgICBidWxsZXRBY3RpdmVDbGFzczogYCR7cGZ4fS1idWxsZXQtYWN0aXZlYCxcbiAgICAgIG1vZGlmaWVyQ2xhc3M6IGAke3BmeH0tYCxcbiAgICAgIGN1cnJlbnRDbGFzczogYCR7cGZ4fS1jdXJyZW50YCxcbiAgICAgIHRvdGFsQ2xhc3M6IGAke3BmeH0tdG90YWxgLFxuICAgICAgaGlkZGVuQ2xhc3M6IGAke3BmeH0taGlkZGVuYCxcbiAgICAgIHByb2dyZXNzYmFyRmlsbENsYXNzOiBgJHtwZnh9LXByb2dyZXNzYmFyLWZpbGxgLFxuICAgICAgcHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzOiBgJHtwZnh9LXByb2dyZXNzYmFyLW9wcG9zaXRlYCxcbiAgICAgIGNsaWNrYWJsZUNsYXNzOiBgJHtwZnh9LWNsaWNrYWJsZWAsXG4gICAgICBsb2NrQ2xhc3M6IGAke3BmeH0tbG9ja2AsXG4gICAgICBob3Jpem9udGFsQ2xhc3M6IGAke3BmeH0taG9yaXpvbnRhbGAsXG4gICAgICB2ZXJ0aWNhbENsYXNzOiBgJHtwZnh9LXZlcnRpY2FsYCxcbiAgICAgIHBhZ2luYXRpb25EaXNhYmxlZENsYXNzOiBgJHtwZnh9LWRpc2FibGVkYFxuICAgIH1cbiAgfSk7XG4gIHN3aXBlci5wYWdpbmF0aW9uID0ge1xuICAgIGVsOiBudWxsLFxuICAgICRlbDogbnVsbCxcbiAgICBidWxsZXRzOiBbXVxuICB9O1xuICBsZXQgYnVsbGV0U2l6ZTtcbiAgbGV0IGR5bmFtaWNCdWxsZXRJbmRleCA9IDA7XG5cbiAgZnVuY3Rpb24gaXNQYWdpbmF0aW9uRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuICFzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uZWwgfHwgIXN3aXBlci5wYWdpbmF0aW9uLmVsIHx8ICFzd2lwZXIucGFnaW5hdGlvbi4kZWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNpZGVCdWxsZXRzKCRidWxsZXRFbCwgcG9zaXRpb24pIHtcbiAgICBjb25zdCB7XG4gICAgICBidWxsZXRBY3RpdmVDbGFzc1xuICAgIH0gPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgJGJ1bGxldEVsW3Bvc2l0aW9uXSgpLmFkZENsYXNzKGAke2J1bGxldEFjdGl2ZUNsYXNzfS0ke3Bvc2l0aW9ufWApW3Bvc2l0aW9uXSgpLmFkZENsYXNzKGAke2J1bGxldEFjdGl2ZUNsYXNzfS0ke3Bvc2l0aW9ufS0ke3Bvc2l0aW9ufWApO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIC8vIFJlbmRlciB8fCBVcGRhdGUgUGFnaW5hdGlvbiBidWxsZXRzL2l0ZW1zXG4gICAgY29uc3QgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKGlzUGFnaW5hdGlvbkRpc2FibGVkKCkpIHJldHVybjtcbiAgICBjb25zdCBzbGlkZXNMZW5ndGggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgICBjb25zdCAkZWwgPSBzd2lwZXIucGFnaW5hdGlvbi4kZWw7IC8vIEN1cnJlbnQvVG90YWxcblxuICAgIGxldCBjdXJyZW50O1xuICAgIGNvbnN0IHRvdGFsID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKSA6IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICBjdXJyZW50ID0gTWF0aC5jZWlsKChzd2lwZXIuYWN0aXZlSW5kZXggLSBzd2lwZXIubG9vcGVkU2xpZGVzKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuXG4gICAgICBpZiAoY3VycmVudCA+IHNsaWRlc0xlbmd0aCAtIDEgLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikge1xuICAgICAgICBjdXJyZW50IC09IHNsaWRlc0xlbmd0aCAtIHN3aXBlci5sb29wZWRTbGlkZXMgKiAyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3VycmVudCA+IHRvdGFsIC0gMSkgY3VycmVudCAtPSB0b3RhbDtcbiAgICAgIGlmIChjdXJyZW50IDwgMCAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb25UeXBlICE9PSAnYnVsbGV0cycpIGN1cnJlbnQgPSB0b3RhbCArIGN1cnJlbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3dpcGVyLnNuYXBJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGN1cnJlbnQgPSBzd2lwZXIuc25hcEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50ID0gc3dpcGVyLmFjdGl2ZUluZGV4IHx8IDA7XG4gICAgfSAvLyBUeXBlc1xuXG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYnVsbGV0cyA9IHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHM7XG4gICAgICBsZXQgZmlyc3RJbmRleDtcbiAgICAgIGxldCBsYXN0SW5kZXg7XG4gICAgICBsZXQgbWlkSW5kZXg7XG5cbiAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgYnVsbGV0U2l6ZSA9IGJ1bGxldHMuZXEoMClbc3dpcGVyLmlzSG9yaXpvbn
101RhbCgpID8gJ291dGVyV2lkdGgnIDogJ291dGVySGVpZ2h0J10odHJ1ZSk7XG4gICAgICAgICRlbC5jc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3dpZHRoJyA6ICdoZWlnaHQnLCBgJHtidWxsZXRTaXplICogKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KX1weGApO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzID4gMSAmJiBzd2lwZXIucHJldmlvdXNJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZHluYW1pY0J1bGxldEluZGV4ICs9IGN1cnJlbnQgLSAoc3dpcGVyLnByZXZpb3VzSW5kZXggLSBzd2lwZXIubG9vcGVkU2xpZGVzIHx8IDApO1xuXG4gICAgICAgICAgaWYgKGR5bmFtaWNCdWxsZXRJbmRleCA+IHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgLSAxKSB7XG4gICAgICAgICAgICBkeW5hbWljQnVsbGV0SW5kZXggPSBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNCdWxsZXRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIGR5bmFtaWNCdWxsZXRJbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZmlyc3RJbmRleCA9IE1hdGgubWF4KGN1cnJlbnQgLSBkeW5hbWljQnVsbGV0SW5kZXgsIDApO1xuICAgICAgICBsYXN0SW5kZXggPSBmaXJzdEluZGV4ICsgKE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzKSAtIDEpO1xuICAgICAgICBtaWRJbmRleCA9IChsYXN0SW5kZXggKyBmaXJzdEluZGV4KSAvIDI7XG4gICAgICB9XG5cbiAgICAgIGJ1bGxldHMucmVtb3ZlQ2xhc3MoWycnLCAnLW5leHQnLCAnLW5leHQtbmV4dCcsICctcHJldicsICctcHJldi1wcmV2JywgJy1tYWluJ10ubWFwKHN1ZmZpeCA9PiBgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9JHtzdWZmaXh9YCkuam9pbignICcpKTtcblxuICAgICAgaWYgKCRlbC5sZW5ndGggPiAxKSB7XG4gICAgICAgIGJ1bGxldHMuZWFjaChidWxsZXQgPT4ge1xuICAgICAgICAgIGNvbnN0ICRidWxsZXQgPSAkKGJ1bGxldCk7XG4gICAgICAgICAgY29uc3QgYnVsbGV0SW5kZXggPSAkYnVsbGV0LmluZGV4KCk7XG5cbiAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPT09IGN1cnJlbnQpIHtcbiAgICAgICAgICAgICRidWxsZXQuYWRkQ2xhc3MocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgICAgICBpZiAoYnVsbGV0SW5kZXggPj0gZmlyc3RJbmRleCAmJiBidWxsZXRJbmRleCA8PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LW1haW5gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgIHNldFNpZGVCdWxsZXRzKCRidWxsZXQsICdwcmV2Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgIHNldFNpZGVCdWxsZXRzKCRidWxsZXQsICduZXh0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0ICRidWxsZXQgPSBidWxsZXRzLmVxKGN1cnJlbnQpO1xuICAgICAgICBjb25zdCBidWxsZXRJbmRleCA9ICRidWxsZXQuaW5kZXgoKTtcbiAgICAgICAgJGJ1bGxldC5hZGRDbGFzcyhwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3MpO1xuXG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgICBjb25zdCAkZmlyc3REaXNwbGF5ZWRCdWxsZXQgPSBidWxsZXRzLmVxKGZpcnN0SW5kZXgpO1xuICAgICAgICAgIGNvbnN0ICRsYXN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0cy5lcShsYXN0SW5kZXgpO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IGZpcnN0SW5kZXg7IGkgPD0gbGFzdEluZGV4OyBpICs9IDEpIHtcbiAgICAgICAgICAgIGJ1bGxldHMuZXEoaSkuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1tYWluYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGJ1bGxldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgICAgICAgIGJ1bGxldHMuZXEoYnVsbGV0cy5sZW5ndGggLSBpKS5hZGRDbGFzcyhgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9LW1haW5gKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJ1bGxldHMuZXEoYnVsbGV0cy5sZW5ndGggLSBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMSkuYWRkQ2xhc3MoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1wcmV2YCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZXRTaWRlQnVsbGV0cygkZmlyc3REaXNwbGF5ZWRCdWxsZXQsICdwcmV2Jyk7XG4gICAgICAgICAgICAgIHNldFNpZGVCdWxsZXRzKCRsYXN0RGlzcGxheWVkQnVsbGV0LCAnbmV4dCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRTaWRlQnVsbGV0cygkZmlyc3REaXNwbGF5ZWRCdWxsZXQsICdwcmV2Jyk7XG4gICAgICAgICAgICBzZXRTaWRlQnVsbGV0cygkbGFzdERpc3BsYXllZEJ1bGxldCwgJ25leHQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICBjb25zdCBkeW5hbWljQnVsbGV0c0xlbmd0aCA9IE1hdGgubWluKGJ1bGxldHMubGVuZ3RoLCBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzICsgNCk7XG4gICAgICAgIGNvbnN0IGJ1bGxldHNPZmZzZXQgPSAoYnVsbGV0U2l6ZSAqIGR5bmFtaWNCdWxsZXRzTGVuZ3RoIC0gYnVsbGV0U2l6ZSkgLyAyIC0gbWlkSW5kZXggKiBidWxsZXRTaXplO1xuICAgICAgICBjb25zdCBvZmZzZXRQcm9wID0gcnRsID8gJ3JpZ2h0JyA6ICdsZWZ0JztcbiAgICAgICAgYnVsbGV0cy5jc3Moc3dpcGVyLmlzSG9yaXpvbn
101RhbCgpID8gb2Zmc2V0UHJvcCA6ICd0b3AnLCBgJHtidWxsZXRzT2Zmc2V0fXB4YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnZnJhY3Rpb24nKSB7XG4gICAgICAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuY3VycmVudENsYXNzKSkudGV4dChwYXJhbXMuZm9ybWF0RnJhY3Rpb25DdXJyZW50KGN1cnJlbnQgKyAxKSk7XG4gICAgICAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMudG90YWxDbGFzcykpLnRleHQocGFyYW1zLmZvcm1hdEZyYWN0aW9uVG90YWwodG90YWwpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgIGxldCBwcm9ncmVzc2JhckRpcmVjdGlvbjtcblxuICAgICAgaWYgKHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlKSB7XG4gICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2dyZXNzYmFyRGlyZWN0aW9uID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2hvcml6b250YWwnIDogJ3ZlcnRpY2FsJztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NhbGUgPSAoY3VycmVudCArIDEpIC8gdG90YWw7XG4gICAgICBsZXQgc2NhbGVYID0gMTtcbiAgICAgIGxldCBzY2FsZVkgPSAxO1xuXG4gICAgICBpZiAocHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICBzY2FsZVggPSBzY2FsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjYWxlWSA9IHNjYWxlO1xuICAgICAgfVxuXG4gICAgICAkZWwuZmluZChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpKS50cmFuc2Zvcm0oYHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoJHtzY2FsZVh9KSBzY2FsZVkoJHtzY2FsZVl9KWApLnRyYW5zaXRpb24oc3dpcGVyLnBhcmFtcy5zcGVlZCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnY3VzdG9tJyAmJiBwYXJhbXMucmVuZGVyQ3VzdG9tKSB7XG4gICAgICAkZWwuaHRtbChwYXJhbXMucmVuZGVyQ3VzdG9tKHN3aXBlciwgY3VycmVudCArIDEsIHRvdGFsKSk7XG4gICAgICBlbWl0KCdwYWdpbmF0aW9uUmVuZGVyJywgJGVsWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdCgncGFnaW5hdGlvblVwZGF0ZScsICRlbFswXSk7XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgJGVsW3N3aXBlci5pc0xvY2tlZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgLy8gUmVuZGVyIENvbnRhaW5lclxuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICBpZiAoaXNQYWdpbmF0aW9uRGlzYWJsZWQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIGNvbnN0ICRlbCA9IHN3aXBlci5wYWdpbmF0aW9uLiRlbDtcbiAgICBsZXQgcGFnaW5hdGlvbkhUTUwgPSAnJztcblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnKSB7XG4gICAgICBsZXQgbnVtYmVyT2ZCdWxsZXRzID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSBzd2lwZXIubG9vcGVkU2xpZGVzICogMikgLyBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwKSA6IHN3aXBlci5zbmFwR3JpZC5sZW5ndGg7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmIHN3aXBlci5wYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wICYmIG51bWJlck9mQnVsbGV0cyA+IHNsaWRlc0xlbmd0aCkge1xuICAgICAgICBudW1iZXJPZkJ1bGxldHMgPSBzbGlkZXNMZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZCdWxsZXRzOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5yZW5kZXJCdWxsZXQpIHtcbiAgICAgICAgICBwYWdpbmF0aW9uSFRNTCArPSBwYXJhbXMucmVuZGVyQnVsbGV0LmNhbGwoc3dpcGVyLCBpLCBwYXJhbXMuYnVsbGV0Q2xhc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MICs9IGA8JHtwYXJhbXMuYnVsbGV0RWxlbWVudH0gY2xhc3M9XCIke3BhcmFtcy5idWxsZXRDbGFzc31cIj48LyR7cGFyYW1zLmJ1bGxldEVsZW1lbnR9PmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJGVsLmh0bWwocGFnaW5hdGlvbkhUTUwpO1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyA9ICRlbC5maW5kKGNsYXNzZXNUb1NlbGVjdG9yKHBhcmFtcy5idWxsZXRDbGFzcykpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2ZyYWN0aW9uJykge1xuICAgICAgaWYgKHBhcmFtcy5yZW5kZXJGcmFjdGlvbikge1xuICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IHBhcmFtcy5yZW5kZXJGcmFjdGlvbi5jYWxsKHN3aXBlciwgcGFyYW1zLmN1cnJlbnRDbGFzcywgcGFyYW1zLnRvdGFsQ2xhc3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBgPHNwYW4gY2xhc3M9XCIke3BhcmFtcy5jdXJyZW50Q2xhc3N9XCI+PC9zcGFuPmAgKyAnIC8gJyArIGA8c3BhbiBjbGFzcz1cIiR7cGFyYW1zLnRvdGFsQ2xhc3N9XCI+PC9zcGFuPmA7XG4gICAgICB9XG5cbiAgICAgICRlbC5odG1sKHBhZ2luYXRpb25IVE1MKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIpIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIuY2FsbChzd2lwZXIsIHBhcmFtcy5wcm9ncmVzc2JhckZpbGxDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IGA8c3BhbiBjbGFzcz1cIiR7cGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgICAgfVxuXG4gICAgICAkZWwuaHRtbChwYWdpbmF0aW9uSFRNTCk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlICE9PSAnY3VzdG9tJykge1xuICAgICAgZW1pdCgncGFnaW5hdGlvblJlbmRlcicsIHN3aXBlci5wYWdpbmF0aW9uLiRlbFswXSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24gPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlciwgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLnBhZ2luYXRpb24sIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiwge1xuICAgICAgZWw6ICdzd2lwZXItcGFnaW5hdGlvbidcbiAgICB9KTtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKCFwYXJhbXMuZWwpIHJldHVybjtcbiAgICBsZXQgJGVsID0gJChwYXJhbXMuZWwpO1xuICAgIGlmICgkZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50cyAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJyAmJiAkZWwubGVuZ3RoID4gMSkge1xuICAgICAgJGVsID0gc3dpcGVyLiRlbC5maW5kKHBhcmFtcy5lbCk7IC8vIGNoZWNrIGlmIGl0IGJlbG9uZ3MgdG8gYW5vdGhlciBuZXN0ZWQgU3dpcGVyXG5cbiAgICAgIGlmICgkZWwubGVuZ3RoID4gMSkge1xuICAgICAgICAkZWwgPSAkZWwuZmlsdGVyKGVsID0+IHtcbiAgICAgICAgICBpZiAoJChlbCkucGFyZW50cygnLnN3aXBlcicpWzBdICE9PSBzd2lwZXIuZWwpIHJldHVybi
101BmYWxzZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycgJiYgcGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5jbGlja2FibGVDbGFzcyk7XG4gICAgfVxuXG4gICAgJGVsLmFkZENsYXNzKHBhcmFtcy5tb2RpZmllckNsYXNzICsgcGFyYW1zLnR5cGUpO1xuICAgICRlbC5hZGRDbGFzcyhzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBwYXJhbXMuaG9yaXpvbnRhbENsYXNzIDogcGFyYW1zLnZlcnRpY2FsQ2xhc3MpO1xuXG4gICAgaWYgKHBhcmFtcy50eXBlID09PSAnYnVsbGV0cycgJiYgcGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAkZWwuYWRkQ2xhc3MoYCR7cGFyYW1zLm1vZGlmaWVyQ2xhc3N9JHtwYXJhbXMudHlwZX0tZHluYW1pY2ApO1xuICAgICAgZHluYW1pY0J1bGxldEluZGV4ID0gMDtcblxuICAgICAgaWYgKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgPCAxKSB7XG4gICAgICAgIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgPSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ3Byb2dyZXNzYmFyJyAmJiBwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZSkge1xuICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5wcm9ncmVzc2Jhck9wcG9zaXRlQ2xhc3MpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAkZWwub24oJ2NsaWNrJywgY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmJ1bGxldENsYXNzKSwgZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgbGV0IGluZGV4ID0gJCh0aGlzKS5pbmRleCgpICogc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkgaW5kZXggKz0gc3dpcGVyLmxvb3BlZFNsaWRlcztcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIucGFnaW5hdGlvbiwge1xuICAgICAgJGVsLFxuICAgICAgZWw6ICRlbFswXVxuICAgIH0pO1xuXG4gICAgaWYgKCFzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgJGVsLmFkZENsYXNzKHBhcmFtcy5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmIChpc1BhZ2luYXRpb25EaXNhYmxlZCgpKSByZXR1cm47XG4gICAgY29uc3QgJGVsID0gc3dpcGVyLnBhZ2luYXRpb24uJGVsO1xuICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMuaGlkZGVuQ2xhc3MpO1xuICAgICRlbC5yZW1vdmVDbGFzcyhwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICAkZWwucmVtb3ZlQ2xhc3Moc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gcGFyYW1zLmhvcml6b250YWxDbGFzcyA6IHBhcmFtcy52ZXJ0aWNhbENsYXNzKTtcbiAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLnJlbW92ZUNsYXNzKSBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLnJlbW92ZUNsYXNzKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG5cbiAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgJGVsLm9mZignY2xpY2snLCBjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMuYnVsbGV0Q2xhc3MpKTtcbiAgICB9XG4gIH1cblxuICBvbignaW5pdCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdCgpO1xuICAgICAgcmVuZGVyKCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0pO1xuICBvbignYWN0aXZlSW5kZXhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygc3dpcGVyLnNuYXBJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdzbmFwSW5kZXhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdzbGlkZXNMZW5ndGhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH0pO1xuICBvbignc25hcEdyaWRMZW5ndGhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHJlbmRlcigpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgZGVzdHJveSgpO1xuICB9KTtcbiAgb24oJ2VuYWJsZSBkaXNhYmxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICRlbFxuICAgIH0gPSBzd2lwZXIucGFnaW5hdGlvbjtcblxuICAgIGlmICgkZWwpIHtcbiAgICAgICRlbFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmVDbGFzcycgOiAnYWRkQ2xhc3MnXShzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ubG9ja0NsYXNzKTtcbiAgICB9XG4gIH0pO1xuICBvbignbG9jayB1bmxvY2snLCAoKSA9PiB7XG4gICAgdXBkYXRlKCk7XG4gIH0pO1xuICBvbignY2xpY2snLCAoX3MsIGUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRFbCA9IGUudGFyZ2V0O1xuICAgIGNvbnN0IHtcbiAgICAgICRlbFxuICAgIH0gPSBzd2lwZXIucGFnaW5hdGlvbjtcblxuICAgIGlmIChzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uZWwgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGVPbkNsaWNrICYmICRlbCAmJiAkZWwubGVuZ3RoID4gMCAmJiAhJCh0YXJnZXRFbCkuaGFzQ2xhc3Moc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSkge1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIChzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgJiYgdGFyZ2V0RWwgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCB8fCBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwgJiYgdGFyZ2V0RWwgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCkpIHJldHVybjtcbiAgICAgIGNvbnN0IGlzSGlkZGVuID0gJGVsLmhhc0NsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG5cbiAgICAgIGlmIChpc0hpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICBlbWl0KCdwYWdpbmF0aW9uU2hvdycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdCgncGFnaW5hdGlvbkhpZGUnKTtcbiAgICAgIH1cblxuICAgICAgJGVsLnRvZ2dsZUNsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBlbmFibGUgPSAoKSA9PiB7XG4gICAgc3dpcGVyLiRlbC5yZW1vdmVDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ucGFnaW5hdGlvbkRpc2FibGVkQ2xhc3MpO1xuXG4gICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLiRlbCkge1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLnJlbW92ZUNsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5wYWdpbmF0aW9uRGlzYWJsZWRDbGFzcyk7XG4gICAgfVxuXG4gICAgaW5pdCgpO1xuICAgIHJlbmRlcigpO1xuICAgIHVwZGF0ZSgpO1xuICB9O1xuXG4gIGNvbnN0IGRpc2FibGUgPSAoKSA9PiB7XG4gICAgc3dpcGVyLiRlbC5hZGRDbGFzcyhzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ucGFnaW5hdGlvbkRpc2FibGVkQ2xhc3MpO1xuXG4gICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uLiRlbCkge1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLmFkZENsYXNzKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5wYWdpbmF0aW9uRGlzYWJsZWRDbGFzcyk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLnBhZ2luYXRpb24sIHtcbiAgICBlbmFibGUsXG4gICAgZGlzYWJsZSxcbiAgICByZW5kZXIsXG4gICAgdXBkYXRlLFxuICAgIGluaXQsXG4gICAgZGVzdHJveVxuICB9KTtcbn0iLCJpbXBvcnQgY2xhc3Nlc1RvU2VsZWN0b3IgZnJvbSAnLi4vLi4vc2hhcmVkL2NsYXNzZXMtdG8tc2VsZWN0b3IuanMnO1xuaW1wb3J0ICQgZnJvbSAnLi4vLi4vc2hhcmVkL2RvbS5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBMTF5KHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uXG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgYTExeToge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIG5vdGlmaWNhdGlvbkNsYXNzOiAnc3dpcGVyLW5vdGlmaWNhdGlvbicsXG4gICAgICBwcmV2U2xpZGVNZXNzYWdlOiAnUHJldmlvdXMgc2xpZGUnLFxuICAgICAgbmV4dFNsaWRlTWVzc2FnZTogJ05leHQgc2xpZGUnLFxuICAgICAgZmlyc3RTbGlkZU1lc3NhZ2U6ICdUaGlzIGlzIHRoZSBmaXJzdCBzbGlkZScsXG4gICAgICBsYXN0U2xpZGVNZXNzYWdlOiAnVGhpcyBpcyB0aGUgbGFzdCBzbGlkZScsXG4gICAgICBwYWdpbmF0aW9uQnVsbGV0TWVzc2FnZTogJ0dvIHRvIHNsaWRlIHt7aW5kZX
101h9fScsXG4gICAgICBzbGlkZUxhYmVsTWVzc2FnZTogJ3t7aW5kZXh9fSAvIHt7c2xpZGVzTGVuZ3RofX0nLFxuICAgICAgY29udGFpbmVyTWVzc2FnZTogbnVsbCxcbiAgICAgIGNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2U6IG51bGwsXG4gICAgICBpdGVtUm9sZURlc2NyaXB0aW9uTWVzc2FnZTogbnVsbCxcbiAgICAgIHNsaWRlUm9sZTogJ2dyb3VwJyxcbiAgICAgIGlkOiBudWxsXG4gICAgfVxuICB9KTtcbiAgc3dpcGVyLmExMXkgPSB7XG4gICAgY2xpY2tlZDogZmFsc2VcbiAgfTtcbiAgbGV0IGxpdmVSZWdpb24gPSBudWxsO1xuXG4gIGZ1bmN0aW9uIG5vdGlmeShtZXNzYWdlKSB7XG4gICAgY29uc3Qgbm90aWZpY2F0aW9uID0gbGl2ZVJlZ2lvbjtcbiAgICBpZiAobm90aWZpY2F0aW9uLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIG5vdGlmaWNhdGlvbi5odG1sKCcnKTtcbiAgICBub3RpZmljYXRpb24uaHRtbChtZXNzYWdlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbU51bWJlcihzaXplID0gMTYpIHtcbiAgICBjb25zdCByYW5kb21DaGFyID0gKCkgPT4gTWF0aC5yb3VuZCgxNiAqIE1hdGgucmFuZG9tKCkpLnRvU3RyaW5nKDE2KTtcblxuICAgIHJldHVybiAneCcucmVwZWF0KHNpemUpLnJlcGxhY2UoL3gvZywgcmFuZG9tQ2hhcik7XG4gIH1cblxuICBmdW5jdGlvbiBtYWtlRWxGb2N1c2FibGUoJGVsKSB7XG4gICAgJGVsLmF0dHIoJ3RhYkluZGV4JywgJzAnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1ha2VFbE5vdEZvY3VzYWJsZSgkZWwpIHtcbiAgICAkZWwuYXR0cigndGFiSW5kZXgnLCAnLTEnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsUm9sZSgkZWwsIHJvbGUpIHtcbiAgICAkZWwuYXR0cigncm9sZScsIHJvbGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRWxSb2xlRGVzY3JpcHRpb24oJGVsLCBkZXNjcmlwdGlvbikge1xuICAgICRlbC5hdHRyKCdhcmlhLXJvbGVkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZEVsQ29udHJvbHMoJGVsLCBjb250cm9scykge1xuICAgICRlbC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgY29udHJvbHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkRWxMYWJlbCgkZWwsIGxhYmVsKSB7XG4gICAgJGVsLmF0dHIoJ2FyaWEtbGFiZWwnLCBsYWJlbCk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbElkKCRlbCwgaWQpIHtcbiAgICAkZWwuYXR0cignaWQnLCBpZCk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRFbExpdmUoJGVsLCBsaXZlKSB7XG4gICAgJGVsLmF0dHIoJ2FyaWEtbGl2ZScsIGxpdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlzYWJsZUVsKCRlbCkge1xuICAgICRlbC5hdHRyKCdhcmlhLWRpc2FibGVkJywgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBlbmFibGVFbCgkZWwpIHtcbiAgICAkZWwuYXR0cignYXJpYS1kaXNhYmxlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uRW50ZXJPclNwYWNlS2V5KGUpIHtcbiAgICBpZiAoZS5rZXlDb2RlICE9PSAxMyAmJiBlLmtleUNvZGUgIT09IDMyKSByZXR1cm47XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgIGNvbnN0ICR0YXJnZXRFbCA9ICQoZS50YXJnZXQpO1xuXG4gICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwgJiYgJHRhcmdldEVsLmlzKHN3aXBlci5uYXZpZ2F0aW9uLiRuZXh0RWwpKSB7XG4gICAgICBpZiAoIShzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCkpIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgIG5vdGlmeShwYXJhbXMubGFzdFNsaWRlTWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3RpZnkocGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsICYmICR0YXJnZXRFbC5pcyhzd2lwZXIubmF2aWdhdGlvbi4kcHJldkVsKSkge1xuICAgICAgaWYgKCEoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3ApKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICBub3RpZnkocGFyYW1zLmZpcnN0U2xpZGVNZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vdGlmeShwYXJhbXMucHJldlNsaWRlTWVzc2FnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmICR0YXJnZXRFbC5pcyhjbGFzc2VzVG9TZWxlY3Rvcihzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpKSkge1xuICAgICAgJHRhcmdldEVsWzBdLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbigpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wIHx8IHN3aXBlci5wYXJhbXMucmV3aW5kIHx8ICFzd2lwZXIubmF2aWdhdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgICRuZXh0RWwsXG4gICAgICAkcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuXG4gICAgaWYgKCRwcmV2RWwgJiYgJHByZXZFbC5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgIGRpc2FibGVFbCgkcHJldkVsKTtcbiAgICAgICAgbWFrZUVsTm90Rm9jdXNhYmxlKCRwcmV2RWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlRWwoJHByZXZFbCk7XG4gICAgICAgIG1ha2VFbEZvY3VzYWJsZSgkcHJldkVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJG5leHRFbCAmJiAkbmV4dEVsLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgZGlzYWJsZUVsKCRuZXh0RWwpO1xuICAgICAgICBtYWtlRWxOb3RGb2N1c2FibGUoJG5leHRFbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVFbCgkbmV4dEVsKTtcbiAgICAgICAgbWFrZUVsRm9jdXNhYmxlKCRuZXh0RWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgcmV0dXJuIHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMgJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5sZW5ndGg7XG4gIH1cblxuICBmdW5jdGlvbiBoYXNDbGlja2FibGVQYWdpbmF0aW9uKCkge1xuICAgIHJldHVybi
101BoYXNQYWdpbmF0aW9uKCkgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBhZ2luYXRpb24oKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgIGlmICghaGFzUGFnaW5hdGlvbigpKSByZXR1cm47XG4gICAgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5lYWNoKGJ1bGxldEVsID0+IHtcbiAgICAgIGNvbnN0ICRidWxsZXRFbCA9ICQoYnVsbGV0RWwpO1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSkge1xuICAgICAgICBtYWtlRWxGb2N1c2FibGUoJGJ1bGxldEVsKTtcblxuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5yZW5kZXJCdWxsZXQpIHtcbiAgICAgICAgICBhZGRFbFJvbGUoJGJ1bGxldEVsLCAnYnV0dG9uJyk7XG4gICAgICAgICAgYWRkRWxMYWJlbCgkYnVsbGV0RWwsIHBhcmFtcy5wYWdpbmF0aW9uQnVsbGV0TWVzc2FnZS5yZXBsYWNlKC9cXHtcXHtpbmRleFxcfVxcfS8sICRidWxsZXRFbC5pbmRleCgpICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgkYnVsbGV0RWwuaXMoYC4ke3N3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRBY3RpdmVDbGFzc31gKSkge1xuICAgICAgICAkYnVsbGV0RWwuYXR0cignYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRidWxsZXRFbC5yZW1vdmVBdHRyKCdhcmlhLWN1cnJlbnQnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGluaXROYXZFbCA9ICgkZWwsIHdyYXBwZXJJZCwgbWVzc2FnZSkgPT4ge1xuICAgIG1ha2VFbEZvY3VzYWJsZSgkZWwpO1xuXG4gICAgaWYgKCRlbFswXS50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgYWRkRWxSb2xlKCRlbCwgJ2J1dHRvbicpO1xuICAgICAgJGVsLm9uKCdrZXlkb3duJywgb25FbnRlck9yU3BhY2VLZXkpO1xuICAgIH1cblxuICAgIGFkZEVsTGFiZWwoJGVsLCBtZXNzYWdlKTtcbiAgICBhZGRFbENvbnRyb2xzKCRlbCwgd3JhcHBlcklkKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyRG93biA9ICgpID0+IHtcbiAgICBzd2lwZXIuYTExeS5jbGlja2VkID0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVQb2ludGVyVXAgPSAoKSA9PiB7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmICghc3dpcGVyLmRlc3Ryb3llZCkge1xuICAgICAgICAgIHN3aXBlci5hMTF5LmNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRm9jdXMgPSBlID0+IHtcbiAgICBpZiAoc3dpcGVyLmExMXkuY2xpY2tlZCkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWRlRWwgPSBlLnRhcmdldC5jbG9zZXN0KGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9YCk7XG4gICAgaWYgKCFzbGlkZUVsIHx8ICFzd2lwZXIuc2xpZGVzLmluY2x1ZGVzKHNsaWRlRWwpKSByZXR1cm47XG4gICAgY29uc3QgaXNBY3RpdmUgPSBzd2lwZXIuc2xpZGVzLmluZGV4T2Yoc2xpZGVFbCkgPT09IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBjb25zdCBpc1Zpc2libGUgPSBzd2lwZXIucGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgJiYgc3dpcGVyLnZpc2libGVTbGlkZXMgJiYgc3dpcGVyLnZpc2libGVTbGlkZXMuaW5jbHVkZXMoc2xpZGVFbCk7XG4gICAgaWYgKGlzQWN0aXZlIHx8IGlzVmlzaWJsZSkgcmV0dXJuO1xuICAgIGlmIChlLnNvdXJjZUNhcGFiaWxpdGllcyAmJiBlLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSByZXR1cm47XG5cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBzd2lwZXIuZWwuc2Nyb2xsTGVmdCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5lbC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cblxuICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMuaW5kZXhPZihzbGlkZUVsKSwgMCk7XG4gIH07XG5cbiAgY29uc3QgaW5pdFNsaWRlcyA9ICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG5cbiAgICBpZiAocGFyYW1zLml0ZW1Sb2xlRGVzY3JpcHRpb25NZXNzYWdlKSB7XG4gICAgICBhZGRFbFJvbGVEZXNjcmlwdGlvbigkKHN3aXBlci5zbGlkZXMpLCBwYXJhbXMuaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2xpZGVSb2xlKSB7XG4gICAgICBhZGRFbFJvbGUoJChzd2lwZXIuc2xpZGVzKSwgcGFyYW1zLnNsaWRlUm9sZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xpZGVzTGVuZ3RoID0gc3dpcGVyLnBhcmFtcy5sb29wID8gc3dpcGVyLnNsaWRlcy5maWx0ZXIoZWwgPT4gIWVsLmNsYXNzTGlzdC5jb250YWlucyhzd2lwZXIucGFyYW1zLnNsaWRlRHVwbGljYXRlQ2xhc3MpKS5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcblxuICAgIGlmIChwYXJhbXMuc2xpZGVMYWJlbE1lc3NhZ2UpIHtcbiAgICAgIHN3aXBlci5zbGlkZXMuZWFjaCgoc2xpZGVFbCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgJHNsaWRlRWwgPSAkKHNsaWRlRWwpO1xuICAgICAgICBjb25zdCBzbGlkZUluZGV4ID0gc3dpcGVyLnBhcmFtcy5sb29wID8gcGFyc2VJbnQoJHNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSwgMTApIDogaW5kZXg7XG4gICAgICAgIGNvbnN0IGFyaWFMYWJlbE1lc3NhZ2UgPSBwYXJhbXMuc2xpZGVMYWJlbE1lc3NhZ2UucmVwbGFjZSgvXFx7XFx7aW5kZXhcXH1cXH0vLCBzbGlkZUluZGV4ICsgMSkucmVwbGFjZSgvXFx7XFx7c2xpZGVzTGVuZ3RoXFx9XFx9Lywgc2xpZGVzTGVuZ3RoKTtcbiAgICAgICAgYWRkRWxMYWJlbCgkc2xpZGVFbCwgYXJpYUxhYmVsTWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmExMXk7XG4gICAgc3dpcGVyLiRlbC5hcHBlbmQobGl2ZVJlZ2lvbik7IC8vIENvbnRhaW5lclxuXG4gICAgY29uc3QgJGNvbn
101RhaW5lckVsID0gc3dpcGVyLiRlbDtcblxuICAgIGlmIChwYXJhbXMuY29udGFpbmVyUm9sZURlc2NyaXB0aW9uTWVzc2FnZSkge1xuICAgICAgYWRkRWxSb2xlRGVzY3JpcHRpb24oJGNvbnRhaW5lckVsLCBwYXJhbXMuY29udGFpbmVyUm9sZURlc2NyaXB0aW9uTWVzc2FnZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5jb250YWluZXJNZXNzYWdlKSB7XG4gICAgICBhZGRFbExhYmVsKCRjb250YWluZXJFbCwgcGFyYW1zLmNvbnRhaW5lck1lc3NhZ2UpO1xuICAgIH0gLy8gV3JhcHBlclxuXG5cbiAgICBjb25zdCAkd3JhcHBlckVsID0gc3dpcGVyLiR3cmFwcGVyRWw7XG4gICAgY29uc3Qgd3JhcHBlcklkID0gcGFyYW1zLmlkIHx8ICR3cmFwcGVyRWwuYXR0cignaWQnKSB8fCBgc3dpcGVyLXdyYXBwZXItJHtnZXRSYW5kb21OdW1iZXIoMTYpfWA7XG4gICAgY29uc3QgbGl2ZSA9IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5lbmFibGVkID8gJ29mZicgOiAncG9saXRlJztcbiAgICBhZGRFbElkKCR3cmFwcGVyRWwsIHdyYXBwZXJJZCk7XG4gICAgYWRkRWxMaXZlKCR3cmFwcGVyRWwsIGxpdmUpOyAvLyBTbGlkZVxuXG4gICAgaW5pdFNsaWRlcygpOyAvLyBOYXZpZ2F0aW9uXG5cbiAgICBsZXQgJG5leHRFbDtcbiAgICBsZXQgJHByZXZFbDtcblxuICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAkbmV4dEVsID0gc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbDtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgfVxuXG4gICAgaWYgKCRuZXh0RWwgJiYgJG5leHRFbC5sZW5ndGgpIHtcbiAgICAgIGluaXROYXZFbCgkbmV4dEVsLCB3cmFwcGVySWQsIHBhcmFtcy5uZXh0U2xpZGVNZXNzYWdlKTtcbiAgICB9XG5cbiAgICBpZiAoJHByZXZFbCAmJiAkcHJldkVsLmxlbmd0aCkge1xuICAgICAgaW5pdE5hdkVsKCRwcmV2RWwsIHdyYXBwZXJJZCwgcGFyYW1zLnByZXZTbGlkZU1lc3NhZ2UpO1xuICAgIH0gLy8gUGFnaW5hdGlvblxuXG5cbiAgICBpZiAoaGFzQ2xpY2thYmxlUGFnaW5hdGlvbigpKSB7XG4gICAgICBzd2lwZXIucGFnaW5hdGlvbi4kZWwub24oJ2tleWRvd24nLCBjbGFzc2VzVG9TZWxlY3Rvcihzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpLCBvbkVudGVyT3JTcGFjZUtleSk7XG4gICAgfSAvLyBUYWIgZm9jdXNcblxuXG4gICAgc3dpcGVyLiRlbC5vbignZm9jdXMnLCBoYW5kbGVGb2N1cywgdHJ1ZSk7XG4gICAgc3dpcGVyLiRlbC5vbigncG9pbnRlcmRvd24nLCBoYW5kbGVQb2ludGVyRG93biwgdHJ1ZSk7XG4gICAgc3dpcGVyLiRlbC5vbigncG9pbnRlcnVwJywgaGFuZGxlUG9pbnRlclVwLCB0cnVlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGlmIChsaXZlUmVnaW9uICYmIGxpdmVSZWdpb24ubGVuZ3RoID4gMCkgbGl2ZVJlZ2lvbi5yZW1vdmUoKTtcbiAgICBsZXQgJG5leHRFbDtcbiAgICBsZXQgJHByZXZFbDtcblxuICAgIGlmIChzd2lwZXIubmF2aWdhdGlvbiAmJiBzd2lwZXIubmF2aWdhdGlvbi4kbmV4dEVsKSB7XG4gICAgICAkbmV4dEVsID0gc3dpcGVyLm5hdmlnYXRpb24uJG5leHRFbDtcbiAgICB9XG5cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24uJHByZXZFbCkge1xuICAgICAgJHByZXZFbCA9IHN3aXBlci5uYXZpZ2F0aW9uLiRwcmV2RWw7XG4gICAgfVxuXG4gICAgaWYgKCRuZXh0RWwpIHtcbiAgICAgICRuZXh0RWwub2ZmKCdrZXlkb3duJywgb25FbnRlck9yU3BhY2VLZXkpO1xuICAgIH1cblxuICAgIGlmICgkcHJldkVsKSB7XG4gICAgICAkcHJldkVsLm9mZigna2V5ZG93bicsIG9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICB9IC8vIFBhZ2luYXRpb25cblxuXG4gICAgaWYgKGhhc0NsaWNrYWJsZVBhZ2luYXRpb24oKSkge1xuICAgICAgc3dpcGVyLnBhZ2luYXRpb24uJGVsLm9mZigna2V5ZG93bicsIGNsYXNzZXNUb1NlbGVjdG9yKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5idWxsZXRDbGFzcyksIG9uRW50ZXJPclNwYWNlS2V5KTtcbiAgICB9IC8vIFRhYiBmb2N1c1xuXG5cbiAgICBzd2lwZXIuJGVsLm9mZignZm9jdXMnLCBoYW5kbGVGb2N1cywgdHJ1ZSk7XG4gICAgc3dpcGVyLiRlbC5vZmYoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICAgIHN3aXBlci4kZWwub2ZmKCdwb2ludGVydXAnLCBoYW5kbGVQb2ludGVyVXAsIHRydWUpO1xuICB9XG5cbiAgb24oJ2JlZm9yZUluaXQnLCAoKSA9PiB7XG4gICAgbGl2ZVJlZ2lvbiA9ICQoYDxzcGFuIGNsYXNzPVwiJHtzd2lwZXIucGFyYW1zLmExMXkubm90aWZpY2F0aW9uQ2xhc3N9XCIgYXJpYS1saXZlPVwiYXNzZXJ0aXZlXCIgYXJpYS1hdG9taWM9XCJ0cnVlXCI+PC9zcGFuPmApO1xuICB9KTtcbiAgb24oJ2FmdGVySW5pdCcsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgaW5pdCgpO1xuICB9KTtcbiAgb24oJ3NsaWRlc0xlbmd0aENoYW5nZSBzbmFwR3JpZExlbmd0aENoYW5nZSBzbGlkZXNHcmlkTGVuZ3RoQ2hhbmdlJywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICBpbml0U2xpZGVzKCk7XG4gIH0pO1xuICBvbignZnJvbUVkZ2UgdG9FZGdlIGFmdGVySW5pdCBsb2NrIHVubG9jaycsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgdXBkYXRlTmF2aWdhdGlvbigpO1xuICB9KTtcbiAgb24oJ3BhZ2luYXRpb25VcGRhdGUnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgcmV0dXJuO1xuICAgIHVwZGF0ZVBhZ2luYXRpb24oKTtcbiAgfSk7XG4gIG9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICBkZXN0cm95KCk7XG4gIH0pO1xufSIsIi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogXCJvZmZcIiAqL1xuXG4vKiBlc2xpbnQgbm8tdXNlLWJlZm9yZS1kZWZpbmU6IFwib2ZmXCIgKi9cbmltcG9ydCB7
101IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBdXRvcGxheSh7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBsZXQgdGltZW91dDtcbiAgc3dpcGVyLmF1dG9wbGF5ID0ge1xuICAgIHJ1bm5pbmc6IGZhbHNlLFxuICAgIHBhdXNlZDogZmFsc2VcbiAgfTtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBhdXRvcGxheToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBkZWxheTogMzAwMCxcbiAgICAgIHdhaXRGb3JUcmFuc2l0aW9uOiB0cnVlLFxuICAgICAgZGlzYWJsZU9uSW50ZXJhY3Rpb246IHRydWUsXG4gICAgICBzdG9wT25MYXN0U2xpZGU6IGZhbHNlLFxuICAgICAgcmV2ZXJzZURpcmVjdGlvbjogZmFsc2UsXG4gICAgICBwYXVzZU9uTW91c2VFbnRlcjogZmFsc2VcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICBpZiAoIXN3aXBlci5zaXplKSB7XG4gICAgICBzd2lwZXIuYXV0b3BsYXkucnVubmluZyA9IGZhbHNlO1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0ICRhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlcy5lcShzd2lwZXIuYWN0aXZlSW5kZXgpO1xuICAgIGxldCBkZWxheSA9IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG5cbiAgICBpZiAoJGFjdGl2ZVNsaWRlRWwuYXR0cignZGF0YS1zd2lwZXItYXV0b3BsYXknKSkge1xuICAgICAgZGVsYXkgPSAkYWN0aXZlU2xpZGVFbC5hdHRyKCdkYXRhLXN3aXBlci1hdXRvcGxheScpIHx8IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGVsYXk7XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIHRpbWVvdXQgPSBuZXh0VGljaygoKSA9PiB7XG4gICAgICBsZXQgYXV0b3BsYXlSZXN1bHQ7XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnJldmVyc2VEaXJlY3Rpb24pIHtcbiAgICAgICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVQcmV2KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICAgIGF1dG9wbGF5UmVzdWx0ID0gc3dpcGVyLnNsaWRlUHJldihzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBlbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICAgIGF1dG9wbGF5UmVzdWx0ID0gc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxLCBzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBlbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgYXV0b3BsYXlSZXN1bHQgPSBzd2lwZXIuc2xpZGVOZXh0KHN3aXBlci5wYXJhbXMuc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICBlbWl0KCdhdXRvcGxheScpO1xuICAgICAgfSBlbHNlIGlmICghc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgIGF1dG9wbGF5UmVzdWx0ID0gc3dpcGVyLnNsaWRlTmV4dChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgZW1pdCgnYXV0b3BsYXknKTtcbiAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgIGF1dG9wbGF5UmVzdWx0ID0gc3dpcGVyLnNsaWRlVG8oMCwgc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIGVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUgJiYgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHJ1bigpO2Vsc2UgaWYgKGF1dG9wbGF5UmVzdWx0ID09PSBmYWxzZSkge1xuICAgICAgICBydW4oKTtcbiAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydCgpIHtcbiAgICBpZiAodHlwZW9mIHRpbWVvdXQgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcgPSB0cnVlO1xuICAgIGVtaXQoJ2F1dG9wbGF5U3RhcnQnKTtcbiAgICBydW4oKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgaWYgKCFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgdGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZTtcblxuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gZmFsc2U7XG4gICAgZW1pdCgnYXV0b3BsYXlTdG9wJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZShzcGVlZCkge1xuICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCkgcmV0dXJuO1xuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCA9IHRydWU7XG5cbiAgICBpZiAoc3BlZWQgPT09IDAgfHwgIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkud2Fp
101dEZvclRyYW5zaXRpb24pIHtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcbiAgICAgIHJ1bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBbJ3RyYW5zaXRpb25lbmQnLCAnd2Via2l0VHJhbnNpdGlvbkVuZCddLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBvblRyYW5zaXRpb25FbmQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25WaXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSB7XG4gICAgICBwYXVzZSgpO1xuICAgIH1cblxuICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJyAmJiBzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICBydW4oKTtcbiAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQoZSkge1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci4kd3JhcHBlckVsKSByZXR1cm47XG4gICAgaWYgKGUudGFyZ2V0ICE9PSBzd2lwZXIuJHdyYXBwZXJFbFswXSkgcmV0dXJuO1xuICAgIFsndHJhbnNpdGlvbmVuZCcsICd3ZWJraXRUcmFuc2l0aW9uRW5kJ10uZm9yRWFjaChldmVudCA9PiB7XG4gICAgICBzd2lwZXIuJHdyYXBwZXJFbFswXS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBvblRyYW5zaXRpb25FbmQpO1xuICAgIH0pO1xuICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSBmYWxzZTtcblxuICAgIGlmICghc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgIHN0b3AoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcnVuKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3VzZUVudGVyKCkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICBzdG9wKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVtaXQoJ2F1dG9wbGF5UGF1c2UnKTtcbiAgICAgIHBhdXNlKCk7XG4gICAgfVxuXG4gICAgWyd0cmFuc2l0aW9uZW5kJywgJ3dlYmtpdFRyYW5zaXRpb25FbmQnXS5mb3JFYWNoKGV2ZW50ID0+IHtcbiAgICAgIHN3aXBlci4kd3JhcHBlckVsWzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIG9uVHJhbnNpdGlvbkVuZCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkuZGlzYWJsZU9uSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgZW1pdCgnYXV0b3BsYXlSZXN1bWUnKTtcbiAgICBydW4oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGF0dGFjaE1vdXNlRXZlbnRzKCkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnBhdXNlT25Nb3VzZUVudGVyKSB7XG4gICAgICBzd2lwZXIuJGVsLm9uKCdtb3VzZWVudGVyJywgb25Nb3VzZUVudGVyKTtcbiAgICAgIHN3aXBlci4kZWwub24oJ21vdXNlbGVhdmUnLCBvbk1vdXNlTGVhdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRldGFjaE1vdXNlRXZlbnRzKCkge1xuICAgIHN3aXBlci4kZWwub2ZmKCdtb3VzZWVudGVyJywgb25Nb3VzZUVudGVyKTtcbiAgICBzd2lwZXIuJGVsLm9mZignbW91c2VsZWF2ZScsIG9uTW91c2VMZWF2ZSk7XG4gIH1cblxuICBvbignaW5pdCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5lbmFibGVkKSB7XG4gICAgICBzdGFydCgpO1xuICAgICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gICAgICBhdHRhY2hNb3VzZUV2ZW50cygpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCAoX3MsIHNwZWVkLCBpbnRlcm5hbCkgPT4ge1xuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgaWYgKGludGVybmFsIHx8ICFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZShzcGVlZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgb24oJ3NsaWRlckZpcnN0TW92ZScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICAgIHN0b3AoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdXNlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgb24oJ3RvdWNoRW5kJywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUgJiYgc3dpcGVyLmF1dG9wbGF5LnBhdXNlZCAmJiAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgcnVuKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgZGV0YWNoTW91c2VFdmVudHMoKTtcblxuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgc3RvcCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmlsaXR5Q2hhbmdlKTtcbiAgfSk7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLmF1dG9wbGF5LCB7XG4gICAgcGF1c2UsXG4gICAgcnVuLFxuICAgIHN0YXJ0LFxuICAgIHN0b3BcbiAgfSk7XG59IiwiaW1wb3J0IHsgbm93IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZyZWVNb2RlKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIGVtaXQsXG4gIG9uY2Vcbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBmcmVlTW9kZToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBtb21lbnR1bTogdHJ1ZSxcbiAgICAgIG1vbWVudHVtUmF0aW86IDEsXG4gICAgICBtb21lbnR1bUJvdW5jZTogdHJ1ZSxcbiAgICAgIG1vbWVudHVtQm91bmNlUmF0aW86IDEsXG4gICAgICBtb21lbnR1bVZlbG9jaXR5UmF0aW86IDEsXG4gICAgICBzdGlja3k6IGZhbHNlLFxuICAgICAgbWluaW11bVZlbG9jaXR5OiAwLjAyXG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBvblRvdWNoU3RhcnQoKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICBzd2lwZXIudG91Y2hFdmVudHNEYXRhLnZlbG9jaXRpZXMubGVuZ3RoID0gMDtcbiAgICBzd2lwZXIuZnJlZU1vZGUub25Ub3VjaEVuZCh7XG4gICAgICBjdXJyZW50UG9zOiBzd2lwZXIucnRsID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBvblRvdWNoTW92ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICB0b3VjaEV2ZW50c0RhdGE6IGRhdGEsXG4gICAgICB0b3VjaGVzXG4gICAgfSA9IHN3aXBlcjsgLy8gVmVsb2NpdHlcblxuICAgIGlmIChkYXRhLnZlbG9jaXRpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICAgI
101HBvc2l0aW9uOiB0b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzdGFydFgnIDogJ3N0YXJ0WSddLFxuICAgICAgICB0aW1lOiBkYXRhLnRvdWNoU3RhcnRUaW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICBwb3NpdGlvbjogdG91Y2hlc1tzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnY3VycmVudFgnIDogJ2N1cnJlbnRZJ10sXG4gICAgICB0aW1lOiBub3coKVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Ub3VjaEVuZCh7XG4gICAgY3VycmVudFBvc1xuICB9KSB7XG4gICAgY29uc3Qge1xuICAgICAgcGFyYW1zLFxuICAgICAgJHdyYXBwZXJFbCxcbiAgICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgICAgc25hcEdyaWQsXG4gICAgICB0b3VjaEV2ZW50c0RhdGE6IGRhdGFcbiAgICB9ID0gc3dpcGVyOyAvLyBUaW1lIGRpZmZcblxuICAgIGNvbnN0IHRvdWNoRW5kVGltZSA9IG5vdygpO1xuICAgIGNvbnN0IHRpbWVEaWZmID0gdG91Y2hFbmRUaW1lIC0gZGF0YS50b3VjaFN0YXJ0VGltZTtcblxuICAgIGlmIChjdXJyZW50UG9zIDwgLXN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFBvcyA+IC1zd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzLmxlbmd0aCA8IHNuYXBHcmlkLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbmFwR3JpZC5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmZyZWVNb2RlLm1vbWVudHVtKSB7XG4gICAgICBpZiAoZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdE1vdmVFdmVudCA9IGRhdGEudmVsb2NpdGllcy5wb3AoKTtcbiAgICAgICAgY29uc3QgdmVsb2NpdHlFdmVudCA9IGRhdGEudmVsb2NpdGllcy5wb3AoKTtcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBsYXN0TW92ZUV2ZW50LnBvc2l0aW9uIC0gdmVsb2NpdHlFdmVudC5wb3NpdGlvbjtcbiAgICAgICAgY29uc3QgdGltZSA9IGxhc3RNb3ZlRXZlbnQudGltZSAtIHZlbG9jaXR5RXZlbnQudGltZTtcbiAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gZGlzdGFuY2UgLyB0aW1lO1xuICAgICAgICBzd2lwZXIudmVsb2NpdHkgLz0gMjtcblxuICAgICAgICBpZiAoTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSA8IHBhcmFtcy5mcmVlTW9kZS5taW5pbXVtVmVsb2NpdHkpIHtcbiAgICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSAwO1xuICAgICAgICB9IC8vIHRoaXMgaW1wbGllcyB0aGF0IHRoZSB1c2VyIHN0b3BwZWQgbW92aW5nIGEgZmluZ2VyIHRoZW4gcmVsZWFzZWQuXG4gICAgICAgIC8vIFRoZXJlIHdvdWxkIGJlIG5vIGV2ZW50cyB3aXRoIGRpc3RhbmNlIHplcm8sIHNvIHRoZSBsYXN0IGV2ZW50IGlzIHN0YWxlLlxuXG5cbiAgICAgICAgaWYgKHRpbWUgPiAxNTAgfHwgbm93KCkgLSBsYXN0TW92ZUV2ZW50LnRpbWUgPiAzMDApIHtcbiAgICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSAwO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudmVsb2NpdHkgPSAwO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIudmVsb2NpdHkgKj0gcGFyYW1zLmZyZWVNb2RlLm1vbWVudHVtVmVsb2NpdHlSYXRpbztcbiAgICAgIGRhdGEudmVsb2NpdGllcy5sZW5ndGggPSAwO1xuICAgICAgbGV0IG1vbWVudHVtRHVyYXRpb24gPSAxMDAwICogcGFyYW1zLmZyZWVNb2RlLm1vbWVudHVtUmF0aW87XG4gICAgICBjb25zdCBtb21lbnR1bURpc3RhbmNlID0gc3dpcGVyLnZlbG9jaXR5ICogbW9tZW50dW1EdXJhdGlvbjtcbiAgICAgIGxldCBuZXdQb3NpdGlvbiA9IHN3aXBlci50cmFuc2xhdGUgKyBtb21lbnR1bURpc3RhbmNlO1xuICAgICAgaWYgKHJ0bCkgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247XG4gICAgICBsZXQgZG9Cb3VuY2UgPSBmYWxzZTtcbiAgICAgIGxldCBhZnRlckJvdW5jZVBvc2l0aW9uO1xuICAgICAgY29uc3QgYm91bmNlQW1vdW50ID0gTWF0aC5hYnMoc3dpcGVyLnZlbG9jaXR5KSAqIDIwICogcGFyYW1zLmZyZWVNb2RlLm1vbWVudHVtQm91bmNlUmF0aW87XG4gICAgICBsZXQgbmVlZHNMb29wRml4O1xuXG4gICAgICBpZiAobmV3UG9zaXRpb24gPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZS5tb21lbnR1bUJvdW5jZSkge1xuICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gYm91bmNlQW1vdW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFmdGVyQm91bmNlUG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgICAgZG9Cb3VuY2UgPSB0cnVlO1xuICAgICAgICAgIGRhdGEuYWxsb3dNb21lbnR1bUJvdW5jZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLmxvb3AgJiYgcGFyYW1zLmNlbnRlcmVkU2xpZGVzKSBuZWVkc0xvb3BGaXggPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChuZXdQb3NpdGlvbiA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgICBpZiAocGFyYW1zLmZyZWVNb2RlLm1vbWVudHVtQm91bmNlKSB7XG4gICAgICAgICAgaWYgKG5ld1Bvc2l0aW9uIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpID4gYm91bmNlQW1vdW50KSB7XG4gICAgICAgICAgICBuZXdQb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKSArIGJvdW5jZUFtb3VudDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgIGRvQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy5sb29w
101ICYmIHBhcmFtcy5jZW50ZXJlZFNsaWRlcykgbmVlZHNMb29wRml4ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlLnN0aWNreSkge1xuICAgICAgICBsZXQgbmV4dFNsaWRlO1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc25hcEdyaWQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgICBpZiAoc25hcEdyaWRbal0gPiAtbmV3UG9zaXRpb24pIHtcbiAgICAgICAgICAgIG5leHRTbGlkZSA9IGo7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTWF0aC5hYnMoc25hcEdyaWRbbmV4dFNsaWRlXSAtIG5ld1Bvc2l0aW9uKSA8IE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZSAtIDFdIC0gbmV3UG9zaXRpb24pIHx8IHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSBzbmFwR3JpZFtuZXh0U2xpZGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlIC0gMV07XG4gICAgICAgIH1cblxuICAgICAgICBuZXdQb3NpdGlvbiA9IC1uZXdQb3NpdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZWRzTG9vcEZpeCkge1xuICAgICAgICBvbmNlKCd0cmFuc2l0aW9uRW5kJywgKCkgPT4ge1xuICAgICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSAvLyBGaXggZHVyYXRpb25cblxuXG4gICAgICBpZiAoc3dpcGVyLnZlbG9jaXR5ICE9PSAwKSB7XG4gICAgICAgIGlmIChydGwpIHtcbiAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKC1uZXdQb3NpdGlvbiAtIHN3aXBlci50cmFuc2xhdGUpIC8gc3dpcGVyLnZlbG9jaXR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gTWF0aC5hYnMoKG5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZS5zdGlja3kpIHtcbiAgICAgICAgICAvLyBJZiBmcmVlTW9kZS5zdGlja3kgaXMgYWN0aXZlIGFuZCB0aGUgdXNlciBlbmRzIGEgc3dpcGUgd2l0aCBhIHNsb3ctdmVsb2NpdHlcbiAgICAgICAgICAvLyBldmVudCwgdGhlbiBkdXJhdGlvbnMgY2FuIGJlIDIwKyBzZWNvbmRzIHRvIHNsaWRlIG9uZSAob3IgemVybyEpIHNsaWRlcy5cbiAgICAgICAgICAvLyBJdCdzIGVhc3kgdG8gc2VlIHRoaXMgd2hlbiBzaW11bGF0aW5nIHRvdWNoIHdpdGggbW91c2UgZXZlbnRzLiBUbyBmaXggdGhpcyxcbiAgICAgICAgICAvLyBsaW1pdCBzaW5nbGUtc2xpZGUgc3dpcGVzIHRvIHRoZSBkZWZhdWx0IHNsaWRlIGR1cmF0aW9uLiBUaGlzIGFsc28gaGFzIHRoZVxuICAgICAgICAgIC8vIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgbWF0Y2hpbmcgc2xpZGUgc3BlZWQgaWYgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYmVmb3JlXG4gICAgICAgICAgLy8gbGlmdGluZyBmaW5nZXIgb3IgbW91c2UgdnMuIG1vdmluZyBzbG93bHkgYmVmb3JlIGxpZnRpbmcgdGhlIGZpbmdlci9tb3VzZS5cbiAgICAgICAgICAvLyBGb3IgZmFzdGVyIHN3aXBlcywgYWxzbyBhcHBseSBsaW1pdHMgKGFsYmVpdCBoaWdoZXIgb25lcykuXG4gICAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlID0gTWF0aC5hYnMoKHJ0bCA/IC1uZXdQb3NpdGlvbiA6IG5ld1Bvc2l0aW9uKSAtIHN3aXBlci50cmFuc2xhdGUpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZVNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW3N3aXBlci5hY3RpdmVJbmRleF07XG5cbiAgICAgICAgICBpZiAobW92ZURpc3RhbmNlIDwgY3VycmVudFNsaWRlU2l6ZSkge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1vdmVEaXN0YW5jZSA8IDIgKiBjdXJyZW50U2xpZGVTaXplKSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gcGFyYW1zLnNwZWVkICogMS41O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb21lbnR1bUR1cmF0aW9uID0gcGFyYW1zLnNwZWVkICogMi41O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGUuc3RpY2t5KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGUubW9tZW50dW1Cb3VuY2UgJiYgZG9Cb3VuY2UpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGFmdGVyQm91bmNlUG9zaXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQodHJ1ZSwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uKTtcbiAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhZGF0YS5hbGxvd01vbWVudHVtQm91bmNlKSByZXR1cm47XG4gICAgICAgICAgZW1pdCgnbW9tZW50dW1Cb3VuY2UnKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihwYXJhbXMuc3BlZWQpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShhZnRlckJvdW5jZVBvc2l0aW9uKTtcbiAgICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoc3dpcGVyLnZlbG9jaXR5KSB7XG4gICAgICAgIGVtaXQoJ19mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJyk7XG4gICAgICAgI
101HN3aXBlci51cGRhdGVQcm9ncmVzcyhuZXdQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuXG4gICAgICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICAgIHN3aXBlci5hbmltYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICR3cmFwcGVyRWwudHJhbnNpdGlvbkVuZCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MobmV3UG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGUuc3RpY2t5KSB7XG4gICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZSkge1xuICAgICAgZW1pdCgnX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcmFtcy5mcmVlTW9kZS5tb21lbnR1bSB8fCB0aW1lRGlmZiA+PSBwYXJhbXMubG9uZ1N3aXBlc01zKSB7XG4gICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9XG4gIH1cblxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIGZyZWVNb2RlOiB7XG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICBvblRvdWNoTW92ZSxcbiAgICAgIG9uVG91Y2hFbmRcbiAgICB9XG4gIH0pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVmZmVjdEluaXQocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICBlZmZlY3QsXG4gICAgc3dpcGVyLFxuICAgIG9uLFxuICAgIHNldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2l0aW9uLFxuICAgIG92ZXJ3cml0ZVBhcmFtcyxcbiAgICBwZXJzcGVjdGl2ZSxcbiAgICByZWNyZWF0ZVNoYWRvd3MsXG4gICAgZ2V0RWZmZWN0UGFyYW1zXG4gIH0gPSBwYXJhbXM7XG4gIG9uKCdiZWZvcmVJbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gZWZmZWN0KSByZXR1cm47XG4gICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9JHtlZmZlY3R9YCk7XG5cbiAgICBpZiAocGVyc3BlY3RpdmUgJiYgcGVyc3BlY3RpdmUoKSkge1xuICAgICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9M2RgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVyd3JpdGVQYXJhbXNSZXN1bHQgPSBvdmVyd3JpdGVQYXJhbXMgPyBvdmVyd3JpdGVQYXJhbXMoKSA6IHt9O1xuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLnBhcmFtcywgb3ZlcndyaXRlUGFyYW1zUmVzdWx0KTtcbiAgICBPYmplY3QuYXNzaWduKHN3aXBlci5vcmlnaW5hbFBhcmFtcywgb3ZlcndyaXRlUGFyYW1zUmVzdWx0KTtcbiAgfSk7XG4gIG9uKCdzZXRUcmFuc2xhdGUnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSBlZmZlY3QpIHJldHVybjtcbiAgICBzZXRUcmFuc2xhdGUoKTtcbiAgfSk7XG4gIG9uKCdzZXRUcmFuc2l0aW9uJywgKF9zLCBkdXJhdGlvbikgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gZWZmZWN0KSByZXR1cm47XG4gICAgc2V0VHJhbnNpdGlvbihkdXJhdGlvbik7XG4gIH0pO1xuICBvbigndHJhbnNpdGlvbkVuZCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09IGVmZmVjdCkgcmV0dXJuO1xuXG4gICAgaWYgKHJlY3JlYXRlU2hhZG93cykge1xuICAgICAgaWYgKCFnZXRFZmZlY3RQYXJhbXMgfHwgIWdldEVmZmVjdFBhcmFtcygpLnNsaWRlU2hhZG93cykgcmV0dXJuOyAvLyByZW1vdmUgc2hhZG93c1xuXG4gICAgICBzd2lwZXIuc2xpZGVzLmVhY2goc2xpZGVFbCA9PiB7XG4gICAgICAgIGNvbnN0ICRzbGlkZUVsID0gc3dpcGVyLiQoc2xpZGVFbCk7XG4gICAgICAgICRzbGlkZUVsLmZpbmQoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpLnJlbW92ZSgpO1xuICAgICAgfSk7IC8vIGNyZWF0ZSBuZXcgb25lXG5cbiAgICAgIHJlY3JlYXRlU2hhZG93cygpO1xuICAgIH1cbiAgfSk7XG4gIGxldCByZXF1aXJlVXBkYXRlT25WaXJ0dWFsO1xuICBvbigndmlydHVhbFVwZGF0ZScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09IGVmZmVjdCkgcmV0dXJuO1xuXG4gICAgaWYgKCFzd2lwZXIuc2xpZGVzLmxlbmd0aCkge1xuICAgICAgcmVxdWlyZVVwZGF0ZU9uVmlydHVhbCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGlmIChyZXF1aXJlVXBkYXRlT25WaXJ0dWFsICYmIHN3aXBlci5zbGlkZXMgJiYgc3dpcGVyLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgc2V0VHJhbnNsYXRlKCk7XG4gICAgICAgIHJlcXVpcmVVcGRhdGVPblZpcnR1YWwgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWZmZWN0VGFyZ2V0KGVmZmVjdFBhcmFtcywgJHNsaWRlRWwpIHtcbiAgaWYgKGVmZmVjdFBhcmFtcy50cmFuc2Zvcm1FbCkge1xuICAgIHJldHVybiAkc2xpZGVFbC5maW5kKGVmZmVjdFBhcmFtcy50cmFuc2Zvcm1FbCkuY3NzKHtcbiAgICAgICdiYWNrZmFjZS12aXNpYmlsaXR5JzogJ2hpZGRlbicsXG4gICAgICAnLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5JzogJ2hpZGRlbidcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiAkc2xpZGVFbDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCh7XG4gIHN3aXBlcixcbiAgZHVyYXRpb24sXG4gIHRyYW5zZm9ybUVsLFxuICBhbGxTbGlkZXNcbn0pIHtcbiAgY29uc3Qge1xuICAgIHNsaWRlcyxcbiAgICBhY3RpdmVJbmRleCxcbiAgICAkd3JhcHBlckVsXG4gIH0gPSBzd2lwZXI7XG5cbiAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSAmJiBkdXJhdGlvbiAhPT0gMCkge1xuICAgIGxldCBldmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgIGxldCAkdHJhbnNpdGlvbkVuZFRhcmdldDtcblxuICAgIGlmIChhbGxTbGlkZXMpIHtcbiAgICAgICR0cmFuc2l0aW9uRW5kVGFyZ2V0ID0gdHJhbnNmb3JtRWwgPyBzbGlkZXMuZmluZCh0cmFuc2Zvcm1FbCkgOiBzbGlkZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICR0cmFuc2l0aW9uRW5kVGFyZ2V0ID0gdHJhbnNmb3JtRWwgPyBzbGlkZXMuZXEoYWN0aXZlSW5kZXgpLmZpbmQodHJhbnNmb3JtRWwpIDogc2xpZGVzLmVxKGFjdGl2ZUluZGV4KTtcbiAgICB9XG5cbiAgICAkdHJhbnNpdGlvbkVuZFRhcmdldC50cmFuc2l0aW9uRW5kKCgpID0+IHtcbiAgICAgIGlmIChldmVudFRyaWdnZXJlZCkgcmV0dXJuO1xuICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgZXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgdHJpZ2dlckV2ZW50cyA9IFsnd2Via2l0VHJhbnNpdGlvbkVuZCcsICd0cmFuc2l0aW9uZW5kJ107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHJpZ2dlckV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAkd3JhcHBlckVsLnRyaWdnZXIodHJpZ2dlckV2ZW50c1tpXSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0iLCJpbXBvcnQgZWZmZWN0SW5p
101dCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LWluaXQuanMnO1xuaW1wb3J0IGVmZmVjdFRhcmdldCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LXRhcmdldC5qcyc7XG5pbXBvcnQgZWZmZWN0VmlydHVhbFRyYW5zaXRpb25FbmQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC12aXJ0dWFsLXRyYW5zaXRpb24tZW5kLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVmZmVjdEZhZGUoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb25cbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBmYWRlRWZmZWN0OiB7XG4gICAgICBjcm9zc0ZhZGU6IGZhbHNlLFxuICAgICAgdHJhbnNmb3JtRWw6IG51bGxcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHNldFRyYW5zbGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzbGlkZXNcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuZmFkZUVmZmVjdDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCAkc2xpZGVFbCA9IHN3aXBlci5zbGlkZXMuZXEoaSk7XG4gICAgICBjb25zdCBvZmZzZXQgPSAkc2xpZGVFbFswXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgIGxldCB0eCA9IC1vZmZzZXQ7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkgdHggLT0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgIGxldCB0eSA9IDA7XG5cbiAgICAgIGlmICghc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHR5ID0gdHg7XG4gICAgICAgIHR4ID0gMDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2xpZGVPcGFjaXR5ID0gc3dpcGVyLnBhcmFtcy5mYWRlRWZmZWN0LmNyb3NzRmFkZSA/IE1hdGgubWF4KDEgLSBNYXRoLmFicygkc2xpZGVFbFswXS5wcm9ncmVzcyksIDApIDogMSArIE1hdGgubWluKE1hdGgubWF4KCRzbGlkZUVsWzBdLnByb2dyZXNzLCAtMSksIDApO1xuICAgICAgY29uc3QgJHRhcmdldEVsID0gZWZmZWN0VGFyZ2V0KHBhcmFtcywgJHNsaWRlRWwpO1xuICAgICAgJHRhcmdldEVsLmNzcyh7XG4gICAgICAgIG9wYWNpdHk6IHNsaWRlT3BhY2l0eVxuICAgICAgfSkudHJhbnNmb3JtKGB0cmFuc2xhdGUzZCgke3R4fXB4LCAke3R5fXB4LCAwcHgpYCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHNldFRyYW5zaXRpb24gPSBkdXJhdGlvbiA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdHJhbnNmb3JtRWxcbiAgICB9ID0gc3dpcGVyLnBhcmFtcy5mYWRlRWZmZWN0O1xuICAgIGNvbnN0ICR0cmFuc2l0aW9uRWxlbWVudHMgPSB0cmFuc2Zvcm1FbCA/IHN3aXBlci5zbGlkZXMuZmluZCh0cmFuc2Zvcm1FbCkgOiBzd2lwZXIuc2xpZGVzO1xuICAgICR0cmFuc2l0aW9uRWxlbWVudHMudHJhbnNpdGlvbihkdXJhdGlvbik7XG4gICAgZWZmZWN0VmlydHVhbFRyYW5zaXRpb25FbmQoe1xuICAgICAgc3dpcGVyLFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0cmFuc2Zvcm1FbCxcbiAgICAgIGFsbFNsaWRlczogdHJ1ZVxuICAgIH0pO1xuICB9O1xuXG4gIGVmZmVjdEluaXQoe1xuICAgIGVmZmVjdDogJ2ZhZGUnLFxuICAgIHN3aXBlcixcbiAgICBvbixcbiAgICBzZXRUcmFuc2xhdGUsXG4gICAgc2V0VHJhbnNpdGlvbixcbiAgICBvdmVyd3JpdGVQYXJhbXM6ICgpID0+ICh7XG4gICAgICBzbGlkZXNQZXJWaWV3OiAxLFxuICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgc3BhY2VCZXR3ZWVuOiAwLFxuICAgICAgdmlydHVhbFRyYW5zbGF0ZTogIXN3aXBlci5wYXJhbXMuY3NzTW9kZVxuICAgIH0pXG4gIH0pO1xufSIsImltcG9ydCBjcmVhdGVTaGFkb3cgZnJvbSAnLi4vLi4vc2hhcmVkL2NyZWF0ZS1zaGFkb3cuanMnO1xuaW1wb3J0IGVmZmVjdEluaXQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC1pbml0LmpzJztcbmltcG9ydCBlZmZlY3RUYXJnZXQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC10YXJnZXQuanMnO1xuaW1wb3J0IGVmZmVjdFZpcnR1YWxUcmFuc2l0aW9uRW5kIGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtdmlydHVhbC10cmFuc2l0aW9uLWVuZC5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFZmZlY3RDYXJkcyh7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvblxufSkge1xuICBleHRlbmRQYXJhbXMoe1xuICAgIGNhcmRzRWZmZWN0OiB7XG4gICAgICBzbGlkZVNoYWRvd3M6IHRydWUsXG4gICAgICB0cmFuc2Zvcm1FbDogbnVsbCxcbiAgICAgIHJvdGF0ZTogdHJ1ZSxcbiAgICAgIHBlclNsaWRlUm90YXRlOiAyLFxuICAgICAgcGVyU2xpZGVPZmZzZXQ6IDhcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHNldFRyYW5zbGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzbGlkZXMsXG4gICAgICBhY3RpdmVJbmRleFxuICAgIH0gPSBzd2lwZXI7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5jYXJkc0VmZmVjdDtcbiAgICBjb25zdCB7XG4gICAgICBzdGFydFRyYW5zbGF0ZSxcbiAgICAgIGlzVG91Y2hlZFxuICAgIH0gPSBzd2lwZXIudG91Y2hFdmVudHNEYXRhO1xuICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIudHJhbnNsYXRlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0ICRzbGlkZUVsID0gc2xpZGVzLmVxKGkpO1xuICAgICAgY29uc3Qgc2xpZGVQcm9ncmVzcyA9ICRzbGlkZUVsWzBdLnByb2dyZXNzO1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1pbihNYXRoLm1heChzbGlkZVByb2dyZXNzLCAtNCksIDQpO1xuICAgICAgbGV0IG9mZnNldCA9ICRzbGlkZUVsWzBdLnN3aXBlclNsaWRlT2Zmc2V0O1xuXG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiAhc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci4kd3JhcHBlckVsLnRyYW5zZm9ybShgdHJhbnNsYXRlWCgke3N3aXBlci5taW5UcmFuc2xhdGUoKX1weClgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIG9mZnNldCAtPSBzbGlkZXNbMF0uc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGxldCB0WCA9IHN3aXBlci5wYXJhbXMuY3NzTW9kZSA/IC1vZmZzZXQgLSBzd2lwZXIudHJhbnNsYXRlIDogLW9mZnNldDtcbiAgICAgIGxldCB0WSA9IDA7XG4gICAgICBjb25zdCB0WiA9IC0xMDAgKiBNYXRoLmFicyhwcm9ncmVzcyk7XG4gICAgICBsZXQgc2NhbGUgPSAxO1xuICAgICAgbGV0IHJvdGF0ZSA9IC1wYXJhbXMucGVyU2xpZGVSb3RhdGUgKiBwcm9ncmVzcztcbiAgICAgIGxldCB0WEFkZCA9IHBhcmFtcy5wZXJTbGlkZU9mZnNldCAtIE1hdGguYWJzKHByb2dyZXNzKSAqIDAuNzU7XG4gICAgICBjb25zdCBzbGlkZUluZGV4ID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5mcm9tICsgaSA6IGk7XG4gICAgICBjb25zdCBpc1N3aXBlVG9OZXh0ID0gKHNsaWRlSW5kZXggPT09IGFjdGl2ZUluZGV4IHx8IHNsaWRlSW5kZXggPT09IGFjdGl2ZUluZGV4IC0gMSkgJiYgcHJvZ3Jlc3MgPiAwICYmIHByb2dyZXNzIDwgMSAmJiAoaXNUb3VjaGVkIHx8IHN3aXBlci5wYXJhbXMuY3NzTW9kZSkgJiYgY3VycmVudFRyYW5zbGF0ZSA8IHN0YXJ0VHJhbnNsYXRlO1xuICAgICAgY29uc3QgaXNTd2lwZVRvUHJldiA9IChzbGlkZUluZGV4ID09PSBhY3RpdmVJbmRleCB8fCBzbGlkZUluZGV4ID09PSBhY3RpdmVJbmRleCArIDEpICYmIHByb2dyZXNzIDwgMCAmJiBwcm9ncmVzcyA+IC0xICYmIChpc1RvdWNoZWQgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSAmJiBjdXJyZW50VHJhbnNsYXRlID4gc3RhcnRUcmFuc2xhdGU7XG5cbiAgICAgIGlmIChpc1N3aXBlVG9OZXh0IHx8IGlzU3dpcGVUb1ByZXYpIHtcbiAgICAgICAgY29uc3Qgc3ViUHJvZ3Jlc3MgPSAoMSAtIE1hdGguYWJzKChNYXRoLmFicyhwcm9ncmVzcykgLSAwLjUpIC8gMC41KSkgKiogMC41O1xuICAgICAgICByb3RhdGUgKz0gLTI4ICogcHJvZ3Jlc3MgKiBzdWJQcm9ncmVzcztcbiAgICAgICAgc2NhbGUgKz0gLTAuNSAqIHN1YlByb2dyZXNzO1xuICAgICAgICB0WEFkZCArPSA5NiAqIHN1YlByb2dyZXNzO1xuICAgICAgICB0WSA9IGAkey0yNSAqIHN1YlByb2dyZXNzICogTWF0aC5hYnMocHJvZ3Jlc3MpfSVgO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvZ3Jlc3MgPCAwKSB7XG4gICAgICAgIC8vIG5leHRcbiAgICAgICAgdFggPSBgY2FsYygke3RYfXB4ICsgKCR7dFhBZGQgKiBNYXRoLmFicyhwcm9ncmVzcyl9JSkpYDtcbiAgICAgIH0gZWxzZSBpZiAocHJvZ3Jlc3MgPiAwKSB7XG4gICAgICAgIC8vIHByZXZcbiAgICAgICAgdFggPSBgY2FsYygke3RYfXB4ICsgKC0ke3RYQWRkICogTWF0aC5hYnMocHJvZ3Jlc3MpfSUpKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0WCA9IGAke3RYfXB4YDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgICAgY29uc3QgcHJldlkgPSB0WTtcbiAgICAgICAgdFkgPSB0WDtcbiAgICAgICAgdFggPSBwcmV2WTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NhbGVTdHJpbmcgPSBwcm9ncmVzcyA8IDAgPyBgJHsxICsgKDEgLSBzY2FsZSkgKiBwcm9ncmVzc31gIDogYCR7MSAtICgxIC0gc2NhbGUpICogcHJvZ3Jlc3N9YDtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGBcbiAgICAgICAgdHJhbnNsYXRlM2QoJHt0WH0sICR7dFl9LCAke3RafXB4KVxuICAgICAgICByb3RhdGVaKCR7cGFyYW1zLnJvdGF0ZSA/IHJvdGF0ZSA6IDB9ZGVnKVxuICAgICAgICBzY2FsZSgke3NjYWxlU3RyaW5nfSlcbiAgICAgIGA7XG5cbiAgICAgIGlmIChwYXJhbXMuc2xpZGVTaGFkb3dzKSB7XG4gICAgICAgIC8vIFNldCBzaGFkb3dzXG4gICAgICAgIGxldCAkc2hhZG93RWwgPSAkc2xpZGVFbC5maW5kKCcuc3dpcGVyLXNsaWRlLXNoYWRvdycpO1xuXG4gICAgICAgIGlmICgkc2hhZG93RWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgJHNoYWRvd0VsID0gY3JlYXRlU2hhZG93KHBhcmFtcywgJHNsaWRlRWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRzaGFkb3dFbC5sZW5ndGgpICRzaGFkb3dFbFswXS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5taW4oTWF0aC5tYXgoKE1hdGguYWJzKHByb2dyZXNzKSAtIDAuNSkgLyAwLjUsIDApLCAxKTtcbiAgICAgIH1cblxuICAgICAgJHNsaWRlRWxbMF0uc3R5bGUuekluZGV4ID0gLU1hdGguYWJzKE1hdGgucm91bmQoc2xpZGVQcm9ncmVzcykpICsgc2xpZGVzLmxlbmd0aDtcbiAgICAgIGNvbnN0ICR0YXJnZXRFbCA9IGVmZmVjdFRhcmdldChwYXJhbXMsICRzbGlkZUVsKTtcbiAgICAgICR0YXJnZXRFbC50cmFuc2Zvcm0odHJhbnNmb3JtKTtcbiAgICB9XG4gI
101H07XG5cbiAgY29uc3Qgc2V0VHJhbnNpdGlvbiA9IGR1cmF0aW9uID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFuc2Zvcm1FbFxuICAgIH0gPSBzd2lwZXIucGFyYW1zLmNhcmRzRWZmZWN0O1xuICAgIGNvbnN0ICR0cmFuc2l0aW9uRWxlbWVudHMgPSB0cmFuc2Zvcm1FbCA/IHN3aXBlci5zbGlkZXMuZmluZCh0cmFuc2Zvcm1FbCkgOiBzd2lwZXIuc2xpZGVzO1xuICAgICR0cmFuc2l0aW9uRWxlbWVudHMudHJhbnNpdGlvbihkdXJhdGlvbikuZmluZCgnLnN3aXBlci1zbGlkZS1zaGFkb3cnKS50cmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgICBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCh7XG4gICAgICBzd2lwZXIsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRyYW5zZm9ybUVsXG4gICAgfSk7XG4gIH07XG5cbiAgZWZmZWN0SW5pdCh7XG4gICAgZWZmZWN0OiAnY2FyZHMnLFxuICAgIHN3aXBlcixcbiAgICBvbixcbiAgICBzZXRUcmFuc2xhdGUsXG4gICAgc2V0VHJhbnNpdGlvbixcbiAgICBwZXJzcGVjdGl2ZTogKCkgPT4gdHJ1ZSxcbiAgICBvdmVyd3JpdGVQYXJhbXM6ICgpID0+ICh7XG4gICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgdmlydHVhbFRyYW5zbGF0ZTogIXN3aXBlci5wYXJhbXMuY3NzTW9kZVxuICAgIH0pXG4gIH0pO1xufSIsImltcG9ydCAkIGZyb20gJy4vZG9tLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyhwYXJhbXMsICRzbGlkZUVsLCBzaWRlKSB7XG4gIGNvbnN0IHNoYWRvd0NsYXNzID0gYHN3aXBlci1zbGlkZS1zaGFkb3cke3NpZGUgPyBgLSR7c2lkZX1gIDogJyd9YDtcbiAgY29uc3QgJHNoYWRvd0NvbnRhaW5lciA9IHBhcmFtcy50cmFuc2Zvcm1FbCA/ICRzbGlkZUVsLmZpbmQocGFyYW1zLnRyYW5zZm9ybUVsKSA6ICRzbGlkZUVsO1xuICBsZXQgJHNoYWRvd0VsID0gJHNoYWRvd0NvbnRhaW5lci5jaGlsZHJlbihgLiR7c2hhZG93Q2xhc3N9YCk7XG5cbiAgaWYgKCEkc2hhZG93RWwubGVuZ3RoKSB7XG4gICAgJHNoYWRvd0VsID0gJChgPGRpdiBjbGFzcz1cInN3aXBlci1zbGlkZS1zaGFkb3cke3NpZGUgPyBgLSR7c2lkZX1gIDogJyd9XCI+PC9kaXY+YCk7XG4gICAgJHNoYWRvd0NvbnRhaW5lci5hcHBlbmQoJHNoYWRvd0VsKTtcbiAgfVxuXG4gIHJldHVybiAkc2hhZG93RWw7XG59IiwiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNpemUoe1xuICBzd2lwZXIsXG4gIG9uLFxuICBlbWl0XG59KSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgb2JzZXJ2ZXIgPSBudWxsO1xuICBsZXQgYW5pbWF0aW9uRnJhbWUgPSBudWxsO1xuXG4gIGNvbnN0IHJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgZW1pdCgnYmVmb3JlUmVzaXplJyk7XG4gICAgZW1pdCgncmVzaXplJyk7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlT2JzZXJ2ZXIgPSAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICBhbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0XG4gICAgICAgIH0gPSBzd2lwZXI7XG4gICAgICAgIGxldCBuZXdXaWR0aCA9IHdpZHRoO1xuICAgICAgICBsZXQgbmV3SGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKHtcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZSxcbiAgICAgICAgICBjb250ZW50UmVjdCxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBzd2lwZXIuZWwpIHJldHVybjtcbiAgICAgICAgICBuZXdXaWR0aCA9IGNvbnRlbnRSZWN0ID8gY29udGVudFJlY3Qud2lkdGggOiAoY29udGVudEJveFNpemVbMF0gfHwgY29udGVudEJveFNpemUpLmlubGluZVNpemU7XG4gICAgICAgICAgbmV3SGVpZ2h0ID0gY29udGVudFJlY3QgPyBjb250ZW50UmVjdC5oZWlnaHQgOiAoY29udGVudEJveFNpemVbMF0gfHwgY29udGVudEJveFNpemUpLmJsb2NrU2l6ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG5ld1dpZHRoICE9PSB3aWR0aCB8fCBuZXdIZWlnaHQgIT09IGhlaWdodCkge1xuICAgICAgICAgIHJlc2l6ZUhhbmRsZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShzd2lwZXIuZWwpO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU9ic2VydmVyID0gKCkgPT4ge1xuICAgIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvbkZyYW1lKTtcbiAgICB9XG5cbiAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIudW5vYnNlcnZlICYmIHN3aXBlci5lbCkge1xuICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKHN3aXBlci5lbCk7XG4gICAgICBvYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9yaWVudGF0aW9uQ2hhbmdlSGFuZGxlciA9ICgpID0+IHtcbiAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBlbWl0KCdvcmllbnRhdGlvbmNoYW5nZScpO1xuICB9O1xuXG4gIG9uKCdpbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnJlc2l6ZU9ic2VydmVyICYmIHR5cGVvZiB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjcmVhdGVPYnNlcnZlcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemVIYW5kbGVyKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCBvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIpO1xuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgcmVtb3ZlT2JzZXJ2ZXIoKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplSGFuZGxlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgfSk7XG59IiwiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBPYnNlcnZlcih7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBjb25zdCBvYnNlcnZlcnMgPSBbXTtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgY29uc3QgYXR0YWNoID0gKHRhcmdldCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgY29uc3QgT2JzZXJ2ZXJGdW5jID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYmtpdE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXJGdW5jKG11dGF0aW9ucyA9PiB7XG4gICAgICAvLyBUaGUgb2JzZXJ2ZXJVcGRhdGUgZXZlbnQgc2hvdWxkIG9ubHkgYmUgdHJpZ2dlcmVkXG4gICAgICAvLyBvbmNlIGRlc3BpdGUgdGhlIG51bWJlciBvZiBtdXRhdGlvbnMuICBBZGRpdGlvbmFsXG4gICAgICAvLyB0cmlnZ2VycyBhcmUgcmVkdW5kYW50IGFuZCBhcmUgdmVyeSBjb3N0bHlcbiAgICAgIGlmIChtdXRhdGlvbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVtaXQoJ29ic2VydmVyVXBkYXRlJywgbXV0YXRpb25zWzBdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZlclVwZGF0ZSA9IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICBlbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICB9O1xuXG4gICAgICBpZiAod2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSkge1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKG9ic2VydmVyVXBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgI
101HdpbmRvdy5zZXRUaW1lb3V0KG9ic2VydmVyVXBkYXRlLCAwKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldCwge1xuICAgICAgYXR0cmlidXRlczogdHlwZW9mIG9wdGlvbnMuYXR0cmlidXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5hdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRMaXN0OiB0eXBlb2Ygb3B0aW9ucy5jaGlsZExpc3QgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hpbGRMaXN0LFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHlwZW9mIG9wdGlvbnMuY2hhcmFjdGVyRGF0YSA9PT0gJ3VuZGVmaW5lZCcgPyB0cnVlIDogb3B0aW9ucy5jaGFyYWN0ZXJEYXRhXG4gICAgfSk7XG4gICAgb2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICB9O1xuXG4gIGNvbnN0IGluaXQgPSAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLm9ic2VydmVyKSByZXR1cm47XG5cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5vYnNlcnZlUGFyZW50cykge1xuICAgICAgY29uc3QgY29udGFpbmVyUGFyZW50cyA9IHN3aXBlci4kZWwucGFyZW50cygpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lclBhcmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXR0YWNoKGNvbnRhaW5lclBhcmVudHNbaV0pO1xuICAgICAgfVxuICAgIH0gLy8gT2JzZXJ2ZSBjb250YWluZXJcblxuXG4gICAgYXR0YWNoKHN3aXBlci4kZWxbMF0sIHtcbiAgICAgIGNoaWxkTGlzdDogc3dpcGVyLnBhcmFtcy5vYnNlcnZlU2xpZGVDaGlsZHJlblxuICAgIH0pOyAvLyBPYnNlcnZlIHdyYXBwZXJcblxuICAgIGF0dGFjaChzd2lwZXIuJHdyYXBwZXJFbFswXSwge1xuICAgICAgYXR0cmlidXRlczogZmFsc2VcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIG9ic2VydmVycy5mb3JFYWNoKG9ic2VydmVyID0+IHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9KTtcbiAgICBvYnNlcnZlcnMuc3BsaWNlKDAsIG9ic2VydmVycy5sZW5ndGgpO1xuICB9O1xuXG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgb2JzZXJ2ZXI6IGZhbHNlLFxuICAgIG9ic2VydmVQYXJlbnRzOiBmYWxzZSxcbiAgICBvYnNlcnZlU2xpZGVDaGlsZHJlbjogZmFsc2VcbiAgfSk7XG4gIG9uKCdpbml0JywgaW5pdCk7XG4gIG9uKCdkZXN0cm95JywgZGVzdHJveSk7XG59IiwiaW1wb3J0IFN3aXBlciwgeyBOYXZpZ2F0aW9uLCBQYWdpbmF0aW9uLCBBMTF5IH0gZnJvbSAnc3dpcGVyJ1xuXG5leHBvcnQgY29uc3QgZ2FsbGVyeSA9ICgpID0+IHtcbiAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLnN3aXBlci0tZ2FsbGVyeScpKSB7IHJldHVybiB9XG5cbiAgLy8gZG8gbm90IHNob3cgYSB0cmFuc2l0aW9uIGJldHdlZW4gc2xpZGVzIGlmIHRoZSB1c2VyIGhhcyBvcHQgb3V0IG9mIGFuaW1hdGlvbnNcbiAgY29uc3QgcHJlZmVyc1JlZHVjZWRNb3Rpb24gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKT8ubWF0Y2hlc1xuICBjb25zdCBzcGVlZCA9IHByZWZlcnNSZWR1Y2VkTW90aW9uID8gMCA6IDMwMFxuICBjb25zdCBhbGxTd2lwZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zd2lwZXIuc3dpcGVyLS1nYWxsZXJ5JylcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFsbFN3aXBlckVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3dpcGVySWQgPSBhbGxTd2lwZXJFbGVtZW50c1tpXS5kYXRhc2V0LnN3aXBlcklkXG4gICAgY29uc3QgZ2FsbGVyeUFubm91bmNlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgZ2FsbGVyeUFubm91bmNlbWVudHMtJHtzd2lwZXJJZH1gKVxuICAgIGNvbnN0IG5leHRFbCA9ICcuc3dpcGVyLWJ1dHRvbi1uZXh0LScgKyBzd2lwZXJJZFxuICAgIGNvbnN0IHByZXZFbCA9ICcuc3dpcGVyLWJ1dHRvbi1wcmV2LScgKyBzd2lwZXJJZFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgY29uc3Qgc3dpcGVyID0gbmV3IFN3aXBlcihhbGxTd2lwZXJFbGVtZW50c1tpXSwge1xuICAgICAgbW9kdWxlczogW05hdmlnYXRpb24sIFBhZ2luYXRpb24sIEExMXldLFxuICAgICAgbG9vcDogdHJ1ZSxcbiAgICAgIHNwZWVkLFxuICAgICAgcHJlbG9hZEltYWdlczogZmFsc2UsXG4gICAgICBhMTF5OiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICBwcmV2U2xpZGVNZXNzYWdlOiBnYWxsZXJ5TmV4dCxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6IGdhbGxlcnlQcmV2LFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6IGdhbGxlcnlQYWdpbmF0aW9uQnVsbGV0LFxuICAgICAgfSxcblxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBlbDogJy5zd2lwZXItcGFnaW5hdGlvbicsXG4gICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgIH0sXG5cbiAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgbmV4dEVsLFxuICAgICAgICBwcmV2RWwsXG4gICAgICB9LFxuXG4gICAgICBvbjoge1xuICAgICAgICAvLyBhbm5vdW5jZSBjdXJyZW50IHNpbGRlIGZvciBzY3JlZW5yZWFkZXIgdXNlcnNcbiAgICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U2xpZGUgPSB0aGlzLnJlYWxJbmRleCArIDFcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgIGdhbGxlcnlBbm5vdW5jZW1lbnRzLnRleHRDb250ZW50ID0gZ2FsbGVyeUltYWdlICsgJyAnICsgY3VycmVudFNsaWRlXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvLyBrZWVwIG5hdmlnYXRpb24gYXJyb3dzIGNlbnRlcmVkIHRvIGltYWdlXG4gIGNvbnN0IGNlbnRlck5hdmlnYXRpb25zID0gKCkgPT4ge1xuICAgIGFsbFN3aXBlckVsZW1lbnRzLmZvckVhY2goKHN3aXBlckVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN3aXBlck5hdmlnYXRpb25QcmV2ID0gc3dpcGVyRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgIGNvbnN0IHN3aXBlck5hdmlnYXRpb25OZXh0ID0gc3dpcGVyTmF2aWdhdGlvblByZXYubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICBjb25zdCBzd2lwZXJOYXZpZ2F0aW9uSWRlYWxUb3BWYWx1ZSA9IHN3aXBlckVsZW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiMFwiXSBpbWcnKS5jbGllbnRIZWlnaHQgLyAyICsgJ3B4J1xuXG4gICAgICAvLyBhcHBseSA1MCUgb2YgaW1hZ2UgaGVpZ2h0IHRvIHBvc2l0aW9uIG9mIG5hdmlnYXRpb24gZnJvbSB0b3BcbiAgICAgIHN3aXBlck5hdmlnYXRpb25QcmV2LnN0eWxlLnRvcCA9IHN3aXBlck5hdmlnYXRpb25JZGVhbFRvcFZhbHVlXG4gICAgICBzd2lwZXJOYXZpZ2F0aW9uTmV4dC5zdHlsZS50b3AgPSBzd2lwZXJOYXZpZ2F0aW9uSWRlYWxUb3BWYWx1ZVxuICAgIH0pXG4gIH1cblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGNlbnRlck5hdmlnYXRpb25zKSAvLyBjYWxsIGFmdGVyIGxvYWRcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNlbnRlck5hdmlnYXRpb25zKSAvLyBjYWxsIG9uIHJlc2l6ZVxufVxuIiwiLyoqXG4gKiBBdm9pZCBwYWdlIHNwZWVkIHdhcm5pbmdzIGFuZCB1c2UgcGFzc2l2ZSBldmVudCBsaXN0ZW5lcnMgZm9yIGpxdWVyeVxuICovXG5cbmV4cG9ydCBjb25zdCBpbml0alF1ZXJ5RXZlbnRFeHRlbnNpb25zID0gKCkgPT4ge1xuXG4gIGpRdWVyeS5ldmVudC5zcGVjaWFsLnRvdWNoc3RhcnQgPSB7XG4gICAgc2V0dXA6IGZ1bmN0aW9uIChfLCBucywgaGFuZGxlKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBoYW5kbGUsIHsgcGFzc2l2ZTogIW5zLmluY2x1ZGVzKCdub1ByZXZlbn
101REZWZhdWx0JykgfSlcbiAgICB9LFxuICB9XG4gIGpRdWVyeS5ldmVudC5zcGVjaWFsLnRvdWNobW92ZSA9IHtcbiAgICBzZXR1cDogZnVuY3Rpb24gKF8sIG5zLCBoYW5kbGUpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgaGFuZGxlLCB7IHBhc3NpdmU6ICFucy5pbmNsdWRlcygnbm9QcmV2ZW50RGVmYXVsdCcpIH0pXG4gICAgfSxcbiAgfVxuICBqUXVlcnkuZXZlbnQuc3BlY2lhbC53aGVlbCA9IHtcbiAgICBzZXR1cDogZnVuY3Rpb24gKF8sIG5zLCBoYW5kbGUpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBoYW5kbGUsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgIH0sXG4gIH1cbiAgalF1ZXJ5LmV2ZW50LnNwZWNpYWwubW91c2V3aGVlbCA9IHtcbiAgICBzZXR1cDogZnVuY3Rpb24gKF8sIG5zLCBoYW5kbGUpIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V3aGVlbCcsIGhhbmRsZSwgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgfSxcbiAgfVxufVxuIiwiaW1wb3J0IHsgZmFkZU91dCwgZmFkZUluLCBzbGlkZURvd24sIHNsaWRlVXAgfSBmcm9tICcuLi9VdGlsaXR5L2FuaW1hdGlvbnMnXG5cbi8qKlxuICogTWVudVxuICovXG5leHBvcnQgY29uc3QgZ2xvYmFsU2VhcmNoID0gKCkgPT4ge1xuICBjb25zdCBnbG9iYWxTZWFyY2ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZ2xvYmFsLXNlYXJjaCcpXG5cbiAgLy8gRXhpdCBpZiBubyBnbG9iYWwgc2VhcmNoXG4gIGlmICghZ2xvYmFsU2VhcmNoKSByZXR1cm5cblxuICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjaGVhZGVyJylcbiAgY29uc3QgdG9vbGJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyJylcbiAgY29uc3QgdG9vbGJhclNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyX19zZWFyY2gtYnV0dG9uJylcbiAgY29uc3QgdG9vbGJhck5hdmlnYXRpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9vbGJhcl9fbmF2aWdhdGlvbicpXG4gIGNvbnN0IG1haW5NZW51V3JhcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYWluLW1lbnVfX3dyYXAnKVxuICBjb25zdCBmb2N1c2FibGVFbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZ2xvYmFsLXNlYXJjaCBhW2hyZWZdLCAuZ2xvYmFsLXNlYXJjaCBidXR0b24sIC5nbG9iYWwtc2VhcmNoIGFbaHJlZl0sIC5nbG9iYWwtc2VhcmNoIGJ1dHRvbiwgLmdsb2JhbC1zZWFyY2ggaW5wdXQnKVxuICBjb25zdCBmaXJzdEZvY3VzYWJsZUVsID0gZm9jdXNhYmxlRWxzWzBdXG4gIGNvbnN0IGxhc3RGb2N1c2FibGVFbCA9IGZvY3VzYWJsZUVsc1tmb2N1c2FibGVFbHMubGVuZ3RoIC0gMV1cbiAgY29uc3QgcXVpY2tMaW5rcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5xdWlja2xpbmtzJylcblxuICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZSkgPT4ge1xuICAgIGlmICghZ2xvYmFsU2VhcmNoLmNvbnRhaW5zKGUudGFyZ2V0KSkge1xuICAgICAgY2xvc2VHbG9iYWxTZWFyY2goKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICBjbG9zZUdsb2JhbFNlYXJjaCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBjbG9zZUdsb2JhbFNlYXJjaCgpXG4gICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5ID09PSAnVGFiJykge1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0Rm9jdXNhYmxlRWwpIHtcbiAgICAgICAgbGFzdEZvY3VzYWJsZUVsLmZvY3VzKClcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsYXN0Rm9jdXNhYmxlRWwpIHtcbiAgICAgICAgZmlyc3RGb2N1c2FibGVFbC5mb2N1cygpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG9wZW5HbG9iYWxTZWFyY2ggPSAoKSA9PiB7XG4gICAgZmFkZU91dCh0b29sYmFyTmF2aWdhdGlvbilcbiAgICBmYWRlSW4oZ2xvYmFsU2VhcmNoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHF1aWNrTGlua3MpIHtcbiAgICAgICAgc2xpZGVEb3duKHF1aWNrTGlua3MpXG4gICAgICB9XG4gICAgICBnbG9iYWxTZWFyY2gucXVlcnlTZWxlY3RvcignI2dsb2JhbC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpXG4gICAgICB0b29sYmFyLmNsYXNzTGlzdC5hZGQoJ3Rvb2xiYXItLXNlYXJjaC0tb3BlbicpXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKVxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGNvbnN0IGNsb3NlR2xvYmFsU2VhcmNoID0gKCkgPT4ge1xuICAgIGlmIChxdWlja0xpbmtzKSB7XG4gICAgICBzbGlkZVVwKHF1aWNrTGlua3MpXG4gICAgfVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bilcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZmFkZUluKHRvb2xiYXJOYXZpZ2F0aW9uLCAnZmxleCcpXG4gICAgICBmYWRlT3V0KGdsb2JhbFNlYXJjaClcbiAgICAgIHRvb2xiYXIuY2xhc3NMaXN0LnJlbW92ZSgndG9vbGJhci0tc2VhcmNoLS1vcGVuJylcbiAgICB9LCAxMDApXG4gIH1cblxuICB0b29sYmFyU2VhcmNoQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgb3Blbkdsb2JhbFNlYXJjaCgpXG4gIH0pXG5cbiAgZ2xvYmFsU2VhcmNoLnF1ZXJ5U2VsZWN0b3IoJy5nbG9iYWwt
101c2VhcmNoX19jbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgY2xvc2VHbG9iYWxTZWFyY2goKVxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVJlc3BvbnNpdmUgPSAoKSA9PiB7XG4gICAgaWYgKHdpbmRvdy5tYXRjaE1lZGlhKCcobWluLXdpZHRoOiA5OTNweCknKS5tYXRjaGVzKSB7XG4gICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoZ2xvYmFsU2VhcmNoKVxuICAgICAgZ2xvYmFsU2VhcmNoLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB9IGVsc2Uge1xuICAgICAgbWFpbk1lbnVXcmFwLmFwcGVuZENoaWxkKGdsb2JhbFNlYXJjaClcbiAgICAgIGdsb2JhbFNlYXJjaC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVJlc3BvbnNpdmUoKVxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzcG9uc2l2ZSlcbn1cbiIsImltcG9ydCB7IGZhZGVPdXQsIGZhZGVJbiB9IGZyb20gJy4uL1V0aWxpdHkvYW5pbWF0aW9ucydcblxuLyoqXG4gKiBNZW51XG4gKi9cbmV4cG9ydCBjb25zdCBtZW51ID0gKCkgPT4ge1xuICBjb25zdCBtYWluTWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tYWluLW1lbnUnKVxuXG4gIC8vIEV4aXQgaWYgbm8gbWFpbiBtZW51XG4gIGlmICghbWFpbk1lbnUpIHJldHVyblxuXG4gIGNvbnN0IHRvb2xiYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9vbGJhcicpXG4gIGNvbnN0IHRvb2xiYXJTZWFyY2hCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9vbGJhcl9fc2VhcmNoLWJ1dHRvbicpXG4gIGNvbnN0IG5hdlNlYXJjaEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyX19uYXYtc2VhcmNoLWJ1dHRvbicpXG4gIGNvbnN0IG5hdlNlYXJjaEJ1dHRvblRpdGxlID0gbmF2U2VhcmNoQnV0dG9uLnRpdGxlXG4gIGNvbnN0IG5hdlNlYXJjaEJ1dHRvblRpdGxlQ2xvc2UgPSBuYXZTZWFyY2hCdXR0b24uZ2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlLWNsb3NlJylcbiAgY29uc3QgZG9uYXRlQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRvb2xiYXJfX2RvbmF0ZS1idG4nKVxuICBjb25zdCBtYWluTWVudVdyYXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWFpbi1tZW51X193cmFwJylcbiAgY29uc3QgZm9jdXNhYmxlRWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRvb2xiYXIgYVtocmVmXSwgLnRvb2xiYXIgYnV0dG9uLCAubWFpbi1tZW51X193cmFwIGFbaHJlZl0sIC5tYWluLW1lbnVfX3dyYXAgYnV0dG9uLCAubWFpbi1tZW51X193cmFwIGlucHV0JylcbiAgY29uc3QgZmlyc3RGb2N1c2FibGVFbCA9IGZvY3VzYWJsZUVsc1swXVxuICBjb25zdCBsYXN0Rm9jdXNhYmxlRWwgPSBmb2N1c2FibGVFbHNbZm9jdXNhYmxlRWxzLmxlbmd0aCAtIDFdXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGUpID0+IHtcbiAgICBpZiAoIW1haW5NZW51V3JhcC5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgIGNsb3NlTW9iaWxlTWVudSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgIGNsb3NlTW9iaWxlTWVudSgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBjbG9zZU1vYmlsZU1lbnUoKVxuICAgIH0gZWxzZSBpZiAoZS5zaGlmdEtleSAmJiBlLmtleSA9PT0gJ1RhYicpIHtcbiAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBmaXJzdEZvY3VzYWJsZUVsKSB7XG4gICAgICAgIGxhc3RGb2N1c2FibGVFbC5mb2N1cygpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZS5rZXkgPT09ICdUYWInKSB7XG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGFzdEZvY3VzYWJsZUVsKSB7XG4gICAgICAgIGZpcnN0Rm9jdXNhYmxlRWwuZm9jdXMoKVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBvcGVuTW9iaWxlTWVudSA9ICgpID0+IHtcbiAgICBuYXZTZWFyY2hCdXR0b24uY2xhc3NMaXN0LmFkZCgndG9vbGJhcl9fbmF2LXNlYXJjaC1idXR0b24tLW9wZW4nKVxuICAgIG5hdlNlYXJjaEJ1dHRvbi50aXRsZSA9IG5hdlNlYXJjaEJ1dHRvblRpdGxlQ2xvc2VcbiAgICB0b29sYmFyLmNsYXNzTGlzdC5hZGQoJ3Rvb2xiYXItLW1lbnUtLW9wZW4nKVxuICAgIGlmIChkb25hdGVCdXR0b24pIHsgZmFkZU91dChkb25hdGVCdXR0b24pIH1cbiAgICBtYWluTWVudVdyYXAuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcblxuICAgI
101HNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgbWFpbk1lbnVXcmFwLmNsYXNzTGlzdC5hZGQoJ21haW4tbWVudV9fd3JhcC0tb3BlbicpXG4gICAgfSwgMjApXG5cbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ3ByZXZlbnQtc2Nyb2xsJylcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bilcbiAgfVxuXG4gIGNvbnN0IGNsb3NlTW9iaWxlTWVudSA9ICgpID0+IHtcbiAgICBuYXZTZWFyY2hCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgndG9vbGJhcl9fbmF2LXNlYXJjaC1idXR0b24tLW9wZW4nKVxuICAgIG5hdlNlYXJjaEJ1dHRvbi50aXRsZSA9IG5hdlNlYXJjaEJ1dHRvblRpdGxlXG4gICAgdG9vbGJhci5jbGFzc0xpc3QucmVtb3ZlKCd0b29sYmFyLS1tZW51LS1vcGVuJylcbiAgICBpZiAoZG9uYXRlQnV0dG9uKSB7IGZhZGVJbihkb25hdGVCdXR0b24pIH1cbiAgICBtYWluTWVudVdyYXAuY2xhc3NMaXN0LnJlbW92ZSgnbWFpbi1tZW51X193cmFwLS1vcGVuJylcblxuICAgIG1haW5NZW51V3JhcC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIG1haW5NZW51V3JhcC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgfSwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICB9KVxuXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdwcmV2ZW50LXNjcm9sbCcpXG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSlcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gIH1cblxuICBuYXZTZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBlID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBpZiAobmF2U2VhcmNoQnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygndG9vbGJhcl9fbmF2LXNlYXJjaC1idXR0b24tLW9wZW4nKSkge1xuICAgICAgY2xvc2VNb2JpbGVNZW51KClcbiAgICB9IGVsc2Uge1xuICAgICAgb3Blbk1vYmlsZU1lbnUoKVxuICAgIH1cbiAgfSlcblxuICBjb25zdCBoYW5kbGVSZXNwb25zaXZlID0gKCkgPT4ge1xuICAgIGlmICh3aW5kb3cubWF0Y2hNZWRpYSgnKG1pbi13aWR0aDogOTkzcHgpJykubWF0Y2hlcykge1xuICAgICAgdG9vbGJhclNlYXJjaEJ1dHRvbi5iZWZvcmUobWFpbk1lbnUpXG4gICAgfSBlbHNlIHtcbiAgICAgIG1haW5NZW51V3JhcC5hcHBlbmRDaGlsZChtYWluTWVudSlcbiAgICB9XG4gIH1cblxuICBoYW5kbGVSZXNwb25zaXZlKClcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc3BvbnNpdmUpXG59XG4iLCJpbXBvcnQgeyBnZXRQYXJlbnRzIH0gZnJvbSAnLi4vVXRpbGl0eS9nZXRQYXJlbnRzJ1xuXG4vKipcbiAqIFN1Yk1lbnUgcmVsYXRlZCBmdW5jdGlvbnMgYW5kIGV2ZW50c1xuICovXG5leHBvcnQgY29uc3Qgc3VibWVudSA9ICgpID0+IHtcbiAgLy8gRXhpdCBpZiBubyBzdWJtZW51IGlzIHByZXNlbnQgKGUuZy4gb24gdGhlIHN0YXJ0IHBhZ2UpXG4gIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51X19iYXInKSkgeyByZXR1cm4gfVxuXG4gIGNvbnN0IHRvb2xiYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudG9vbGJhcl9fd3JhcCcpXG4gIGNvbnN0IHRvcGljQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51X190b3BpYy1idXR0b24nKVxuICBjb25zdCBzdWJNZW51TmF2V3JhcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdWItbWVudV9fbmF2LXdyYXAnKVxuICBjb25zdCBzdWJNZW51TmF2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51X19uYXYnKVxuICBjb25zdCBzdWJNZW51QnV0dG9uc05leHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3ViLW1lbnVfX2J1dHRvbi0tbmV4dCcpXG4gIGNvbnN0IHN1Yk1lbnVCdXR0b25zQmFjayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdWItbWVudV9fYnV0dG9uLS1iYWNrJylcbiAgY29uc3Qgc3ViTWVudUZpcnN0TGlzdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdWItbWVudV9fbGlzdC13cmFwID4gLnN1Yi1tZW51X19saXN0JylcbiAgY29uc3Qgc3ViTWVudUN1cnJlbnRMaW5rID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51X19saW5rLS1jdXJyZW50JykgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51X19saW5rLS1hY3RpdmUnKVxuXG4gIGNvbnN0IGdldEN1cnJlbnRGaXJzdEZvY3VzYWJsZUVsZW1lbnRzID0gKCkgPT4ge1xuICAgIGNvbnN0IGZvY3VzYWJsZUVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdWItbWVudV9fbmF2LXdyYXAgYVtocmVmXSwgLnN1Yi1tZW51X19uYXYtd3JhcCBidXR0b24nKVxuICAgIGNvbnN0IG15QXJyYXkgPSBbXS5zbGljZS5jYWxsKGZvY3VzYWJsZUVscylcbiAgICBjb25zdCBlbGVtZW50c09uU2hvdyA9IG15QXJyYXkuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPiAwKVxuICAgIHJldHVybiB7IGZpcnN0Rm9jdXNhYmxlRWw6IGVsZW1lbnRzT25TaG93WzBdLCBsYXN0Rm9jdXNhYmxlRWw6IGVsZW1lbnRzT25TaG93W2VsZW1lbnRzT25TaG93Lmxlbmd0aCAtIDFdIH1cbiAgfVxuXG4gIGNvbnN0IHNob3dDdXJyZW50U3ViTWVudUxpc3QgPSAoY3VycmVudExpc3QpID0+IHtcbiAgICBjdXJyZW50TGlzdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuXG4gICAgY29uc3QgY3VycmVudExpbmtQYXJlbnRzID0gZ2V0UGFyZW50cyhjdXJyZW50TGlzdClcblxuICAgIGN1cnJlbnRMaW5rUGFyZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBpZiAocGFyZW50Lm1hdGNoZXMoJy5zdWItbWVudV9fbGlzdCwgLnN1Yi1tZW51X19pdGVtJykpIHtcbiAgICAgICAgcGFyZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGNsb3Nlc3RMaXN0SXRlbXMgPSBjdXJyZW50TGlzdC5xdWVyeVNlbGVjdG9yQWxsKCc6c2NvcGUgPiAuc3ViLW1lbnVfX2l0ZW0nKVxuXG4gICAgY2xvc2VzdExpc3RJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCd2aXNpYmxlJylcbiAgICAgIGl0ZW0uc3R5bGUuZGlzcGxheSA9ICdibG9jaydcblxuICAgICAgY29uc3QgYnV0dG9uID0gaXRlbS5
101xdWVyeVNlbGVjdG9yKCc6c2NvcGUgPiAuc3ViLW1lbnVfX2J1dHRvbicpXG4gICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmsgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJzpzY29wZSA+IC5zdWItbWVudV9fbGluaycpXG4gICAgICBpZiAobGluaykge1xuICAgICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChnZXRDdXJyZW50Rmlyc3RGb2N1c2FibGVFbGVtZW50cygpLmZpcnN0Rm9jdXNhYmxlRWwpIHtcbiAgICAgIGdldEN1cnJlbnRGaXJzdEZvY3VzYWJsZUVsZW1lbnRzKCkuZmlyc3RGb2N1c2FibGVFbC5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgaWYgKHN1Yk1lbnVDdXJyZW50TGluaykge1xuICAgIHNob3dDdXJyZW50U3ViTWVudUxpc3Qoc3ViTWVudUN1cnJlbnRMaW5rLmNsb3Nlc3QoJy5zdWItbWVudV9fbGlzdCcpKVxuICB9IGVsc2Uge1xuICAgIHNob3dDdXJyZW50U3ViTWVudUxpc3Qoc3ViTWVudUZpcnN0TGlzdClcbiAgfVxuXG4gIGNvbnN0IGhpZGVBbGxTdWJtZW51Tm9kZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qgc3ViTWVudUxpc3RzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN1Yi1tZW51X19saXN0JylcbiAgICBjb25zdCBzdWJNZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3ViLW1lbnVfX2l0ZW0nKVxuICAgIGNvbnN0IHN1Yk1lbnVCdXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN1Yi1tZW51X19idXR0b24nKVxuXG4gICAgc3ViTWVudUxpc3RzLmZvckVhY2gobGlzdCA9PiB7XG4gICAgICBsaXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB9KVxuXG4gICAgc3ViTWVudUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc2libGUnKVxuICAgICAgaXRlbS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgfSlcblxuICAgIHN1Yk1lbnVCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IG9wZW5TdWJNZW51TmF2ID0gKCkgPT4ge1xuICAgIHN1Yk1lbnVOYXZXcmFwLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSdcblxuICAgI
101HRvcGljQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ3N1Yi1tZW51X190b3BpYy1idXR0b24tLW9wZW4nKVxuICAgIHN1Yk1lbnVOYXZXcmFwLmNsYXNzTGlzdC5hZGQoJ3N1Yi1tZW51X19uYXYtd3JhcC0tb3BlbicpXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdwcmV2ZW50LXNjcm9sbCcpXG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gIH1cblxuICBjb25zdCBjbG9zZVN1Yk1lbnVOYXYgPSAoKSA9PiB7XG4gICAgdG9waWNCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgnc3ViLW1lbnVfX3RvcGljLWJ1dHRvbi0tb3BlbicpXG4gICAgc3ViTWVudU5hdldyYXAuY2xhc3NMaXN0LnJlbW92ZSgnc3ViLW1lbnVfX25hdi13cmFwLS1vcGVuJylcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ3ByZXZlbnQtc2Nyb2xsJylcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3ViTWVudU5hdldyYXAuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG4gICAgfSwgNDAwKVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVSZXNpemUpXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGUpID0+IHtcbiAgICBpZiAoIXN1Yk1lbnVOYXYuY29udGFpbnMoZS50YXJnZXQpICYmICF0b3BpY0J1dHRvbi5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgIGNsb3NlU3ViTWVudU5hdigpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUmVzaXplID0gKCkgPT4ge1xuICAgIGNsb3NlU3ViTWVudU5hdigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGUpID0+IHtcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBjbG9zZVN1Yk1lbnVOYXYoKVxuICAgIH1cblxuICAgIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5ID09PSAnVGFiJykge1xuXG4gICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZ2V0Q3VycmVudEZpcnN0Rm9jdXNhYmxlRWxlbWVudHMoKS5maXJzdEZvY3VzYWJsZUVsKSB7XG4gICAgICAgIGdldEN1cnJlbnRGaXJzdEZvY3VzYWJsZUVsZW1lbnRzKCkubGFzdEZvY3VzYWJsZUVsLmZvY3VzKClcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUua2V5ID09PSAnVGFiJykge1xuICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGdldEN1cnJlbnRGaXJzdEZvY3VzYWJsZUVsZW1lbnRzKCkubGFzdEZvY3VzYWJsZUVsKSB7XG4gICAgICAgIGdldEN1cnJlbnRGaXJzdEZvY3VzYWJsZUVsZW1lbnRzKCkuZmlyc3RGb2N1c2FibGVFbC5mb2N1cygpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlLmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnc3ViLW1lbnVfX2J1dHRvbi0tbmV4dCcpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBlLnRhcmdldC5jbGljaygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3N1Yi1tZW51X19idXR0b24tLWJhY2snKSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgZS50YXJnZXQuY2xpY2soKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRvcGljQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZSA9PiB7XG4gICAgaWYgKHRvcGljQnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnc3ViLW1lbnVfX3RvcGljLWJ1dHRvbi0tb3BlbicpKSB7XG4gICAgICBjbG9zZVN1Yk1lbnVOYXYoKVxuICAgIH0gZWxzZSB7XG4gICAgICBvcGVuU3ViTWVudU5hdigpXG4gICAgfVxuICB9KVxuXG4gIGNvbnN0IG9wZW5OZXh0U3ViTWVudSA9IChuZXh0QnV0dG9uKSA9PiB7XG4gICAgaGlkZUFsbFN1Ym1lbnVOb2RlcygpXG4gICAgc2hvd0N1cnJlbnRTdWJNZW51TGlzdChuZXh0QnV0dG9uLm5leHRFbGVtZW50U2libGluZylcbiAgfVxuXG4gIHN1Yk1lbnVCdXR0b25zTmV4dC5mb3JFYWNoKChuZXh0QnV0dG9uKSA9PiB7XG4gICAgbmV4dEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIG9wZW5OZXh0U3ViTWVudSh0aGlzKVxuICAgIH0pXG4gIH0pXG5cbiAgY29uc3QgY2xvc2VDdXJyZW50U3ViTWVudSA9IChiYWNrQnV0dG9uKSA9PiB7XG4gICAgY29uc3QgY3VycmVudExpc3QgPSBiYWNrQnV0dG9uLmNsb3Nlc3QoJy5zdWItbWVudV9fbGlzdCcpXG4gICAgY29uc3QgcHJldmlvdXNMaXN0ID0gY3VycmVudExpc3QucGFyZW50RWxlbWVudC5jbG9zZXN0KCcuc3ViLW1lbnVfX2xpc3QnKVxuICAgIGhpZGVBbGxTdWJtZW51Tm9kZXMoKVxuICAgIHNob3dDdXJyZW50U3ViTWVudUxpc3QocHJldmlvdXNMaXN0KVxuICB9XG5cbiAgc3ViTWVudUJ1dHRvbnNCYWNrLmZvckVhY2goKGJhY2tCdXR0b24pID0+IHtcbiAgICBiYWNrQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2xvc2VDdXJyZW50U3ViTWVudSh0aGlzKVxuICAgIH0pXG4gIH0pXG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0aGUgc2Nyb2xsaW5nIGFuZCBhbmltYXRlIHRoZSBzdWIgbWVudSBhbmQgc2hvdy9oaWRlIHRoZSB0b29sYmFyXG4gICAqIFRoZSB0aW1lb3V0IGlzIHVzZWQgdG8gcHJldmVudCB0aGUgYW5pbWF0aW9uIGZyb20gYmVpbmcgdHJpZ2dlcmVkIG11bHRpcGxlIHRpbWVzXG4gICAqIGFuZCB0byBwcmV2ZW50IGZvY3VzIG9uIHRoZSBo
101aWRkZW4gdG9vbGJhciAoQTExWSkuXG4gICAqL1xuXG4gIC8vIHNhdmUgbGFzdCBzY3JvbGwgcG9zaXRpb25cbiAgbGV0IGxhc3RTY3JvbGxUb3AgPSAwXG5cbiAgLy8gdGltZW91dCB0aGF0J3MgY2xlYXJhYmxlXG4gIGxldCB0aW1lb3V0ID0gbnVsbFxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAvLyBHZXQgY3VycmVudCBzY3JvbGwgcG9zaXRpb25cbiAgICBjb25zdCBzY3JvbGxUb3AgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBsYXN0IHNjcm9sbCBwb3NpdGlvblxuICAgIGlmIChzY3JvbGxUb3AgPiBsYXN0U2Nyb2xsVG9wKSB7XG4gICAgICAvLyBIaWRlIHRvb2xiYXIgd2hlbiBzY3JvbGxpbmcgZG93blxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbi10b29sYmFyJylcblxuICAgICAgLy8gUHJldmVudCB0b29sYmFyIGZvY3VzXG4gICAgICBpZiAoIXRpbWVvdXQpIHtcbiAgICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRvb2xiYXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG4gICAgICAgIH0sIDQwMDApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENsZWFyIHRpbWVvdXQgd2hlbiBzY3JvbGxpbmcgdXBcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgICAgICB0aW1lb3V0ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICAvLyBBbGxvdyB0b29sYmFyIGZvY3VzIGFnYWluXG4gICAgICB0b29sYmFyLnN0eWxlLnZpc2liaWxpdHkgPSBudWxsXG5cbiAgICAgIC8vIFNob3cgdG9vbGJhciB3aGVuIHNjcm9sbGluZyB1cFxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbi10b29sYmFyJylcbiAgICB9XG5cbiAgICAvLyBTYXZlIGxhc3Qgc2Nyb2xsIHBvc2l0aW9uIGZvciBuZXh0IHNjcm9sbCBldmVudFxuICAgIGxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3AgPD0gMCA/IDAgOiBzY3JvbGxUb3BcbiAgfVxuXG4gIC8vIENhbGwgaGFuZGxlU2Nyb2xsIG9uIGxvYWRcbiAgaGFuZGxlU2Nyb2xsKClcblxuICAvLyBDYWxsIGhhbmRsZVNjcm9sbCBvbiBzY3JvbGxcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsICgpID0+IHtcbiAgICBoYW5kbGVTY3JvbGwoKVxuICB9LCBmYWxzZSlcbn1cbiIsIi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFsbCBwYXJlbnRzIG9mIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSBlbGVtIEVsZW1lbnRcbiAqIEByZXR1cm5zIHtBcnJheS48SFRNTEVsZW1lbnQ+fSBQYXJlbnRzXG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFBhcmVudHMgPSAoZWxlbSkgPT4ge1xuICBjb25zdCBwYXJlbnRzID0gW11cbiAgd2hpbGUgKGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLnBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2JvZHknKSB7XG4gICAgZWxlbSA9IGVsZW0ucGFyZW50Tm9kZVxuICAgIHBhcmVudHMucHVzaChlbGVtKVxuICB9XG4gIHJldHVybiBwYXJlbnRzXG59XG4iLCIvKipcbiAqIExhbmd1YWdlIG1lbnVcbiAqL1xuXG5leHBvcnQgY29uc3QgbGFuZ3VhZ2VNZW51ID0gKCkgPT4ge1xuICBjb25zdCBsYW5ndWFnZU1lbnVTZWxlY3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubGFuZ3VhZ2UtbWVudV9fc2VsZWN0JylcblxuICAvLyBFeGl0IGlmIG5vIGxhbmd1YWdlIG1lbnVcbiAgaWYgKCFsYW5ndWFnZU1lbnVTZWxlY3QpIHJldHVyblxuXG4gIGxhbmd1YWdlTWVudVNlbGVjdC5mb3JFYWNoKChzZWxlY3QpID0+IHtcblxuICAgIC8vIE9uIGNoYW5nZSwgcmVkaXJlY3QgdG8gdGhlIHNlbGVjdGVkIHZhbHVlL2xhbmd1YWdlXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgbGFuZ3VhZ2VNZW51ID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5sYW5ndWFnZS1tZW51JylcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gZXZlbnQudGFyZ2V0Lm9wdGlvbnNbZXZlbnQudGFyZ2V0LnNlbGVjdGVkSW5kZXhdXG4gICAgICBjb25zdCBzZWxlY3RlZE9wdGlvblZhbHVlID0gc2VsZWN0ZWRPcHRpb24uZGF0YXNldC5mbGFnXG5cbiAgICAgIC8vIEhpZGUgYWxsIGZsYWdzXG4gICAgICBsYW5ndWFnZU1lbnUucXVlcnlTZWxlY3RvckFsbCgnLmxhbmd1YWdlLW1lbnVfX2ZsYWcnKS5mb3JFYWNoKChmbGFnKSA9PiB7XG4gICAgICAgIGZsYWcuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgfSlcblxuICAgICAgLy8gU2hvdyBmbGFnIG9mIHNlbGVjdGVkIGxhbmd1YWdlXG4gICAgICBsYW5ndWFnZU1lbnUucXVlcnlTZWxlY3RvcihgLmxhbmd1YWdlLW1lbnVfX2ZsYWctLSR7c2VsZWN0ZWRPcHRpb25WYWx1ZX1gKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuXG4gICAgICAvLyBSZWRpcmVjdCB0byBzZWxlY3RlZCBsYW5ndWFnZVxuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBldmVudC50YXJnZXQudmFsdWVcbiAgICB9KVxuICB9KVxufVxuXG4vKipcbiAqIEhhbmRsZSBMYW5ndWFnZSBzdWdnZXN0XG4gKi9cblxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlU3VnZ2VzdCA9ICgpID0+IHtcbiAgY29uc3QgbGFuZ3VhZ2VTdWdnZXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhbmd1YWdlLXN1Z2dlc3QnKVxuXG4gIC8vIEV4aXQgaWYgbm8gbGFuZ3VhZ2Ugc3VnZ2VzdFxuICBpZiAoIWxhbmd1YWdlU3VnZ2VzdCkgcmV0dXJuXG5cbiAgLy8gdXNpbmcgdHdvIGxldHRlciBsYW5ndWFnZSBjb2Rlc1xuICBjb25zdCBodG1sTGFuZ3VhZ2UgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZy5zdWJzdHJpbmcoMCwgMilcbiAgY29uc3QgYnJvd3Nlckxhbmd1YWdlID0gbmF2aWdhdG9yLmxhbmd1YWdlLnN1YnN0cmluZygwLCAyKVxuXG4gIC8vIEV4aXQgaWYgc2FtZSBsYW5ndWFnZVxuICBpZiAoYnJvd3Nlckxhbmd1YWdlID09PSBodG1sTGFuZ3VhZ2UpIHsgcmV0dXJuIH1cblxuICAvLyBFeGl0IGlmIGxhbmd1YWdlIHN1Z2dlc3Qgd2FzIG1hbnVhbGx5IGNsb3NlZCBiZWZvcmVcbiAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2Rya19sYW5ndWFnZS1zdWdnZXN0LWNsb3NlZCcpID09PSAndHJ1ZScpIHsgcmV0dXJuIH1cblxuICAvLyBDaGVjayBpZiBsYW5ndWFnZSBzdWdnZXN0IHdhcyBhbHJlYWR5IHNob3duIGJlZm9yZSAoZm9yIHRoaXMgc2Vzc2lvbilcbiAgaWYgKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2Rya19sYW5ndWFnZS1zdWdnZXN0LWluaXQtdGltZScpICE9PSBudWxsKSB7XG4gICAgY29uc3QgaW5pdFRpbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdkcmtfbGFuZ3VhZ2Utc3VnZ2VzdC1pbml0LXRpbWUnKVxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIGNvbnN0IHRpbWVEaWZmID0gY3VycmVudFRpbWUgLSBpbml0VGltZVxuICAgIGNvbnN0IHRpbWVEaWZmSW5TZWNvbmRzID0gdGltZURpZmYgLyAxMDAwXG5cbiAgICAvLyBFeGl0IGlmIHRpbWUgZGlmZmVyZW5jZSBpcyBtb3JlIHRoYW4gMSBtaW51dGVcbiAgICBpZiAodGltZURpZmZJblNlY29uZHMgPiA2MCkgeyByZXR1cm4gfVxuICB9IGVsc2Uge1xuICAgIC8vIENyZWF0ZSBpbml0IHRpbWUgaWYgaXQgZG9lcyBub3QgZXhpc3RcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IERhdGUubm93KClcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdkcmtfbGFuZ3VhZ2Utc3VnZ2VzdC1pbml0LXRpbWUnLCBjdXJyZW50VGltZS50b1N0cmluZygpKVxuICB9XG5cbiAgLy8gR2V0IGxhbmd1YWdlIHN1Z2dlc3QgZWxlbWVudHNcbiAgY29uc3QgbGFuZ3VhZ2VTdWdnZXN0TWVzc2FnZUN1cnJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGFuZ3VhZ2Utc3VnZ2VzdF9fbWVzc2FnZS0tY3VycmVudCcpXG4gIGNvbnN0IGxhbmd1YWdlU3VnZ2VzdE1lc3NhZ2VTdWdnZXN0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxhbmd1YWdlLXN1Z2dlc3RfX21lc3NhZ2UtLXN1Z2dlc3QnKVxuICBjb25zdCBsYW5ndWFnZVN1Z2dlc3RDbG9zZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sYW5ndWFnZS1zdWdnZXN0X19jbG9zZScpXG5cbiAgLy8gR2V0IHRvcCBzdHlsZSByZWxhdGVkIGVsZW1lbnRzXG4gIGNvbnN0IGJvZHlXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmJvZHlfX3dyYXBwZXInKVxuICBjb25zdCB0b29sYmFyV3JhcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50b29sYmFyX193cmFwJylcbiAgY29uc3QgbWFpbk1lbnVXcmFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1haW4tbWVudV9fd3JhcCcpXG4gIGNvbnN0IHN1Yk1lbnVCYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc3ViLW1lbnVfX2JhcicpXG4gIGNvbnN0IHN1Yk1lbnVOYXZXcmFwID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN1Yi1tZW51X19uYXYtd3JhcCcpXG4gIGNvbnN0IGdsb2JhbFNlYXJjaCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5nbG9iYWwt
101c2VhcmNoJylcblxuICAvLyBTaG93IGxhbmd1YWdlIHN1Z2dlc3RcbiAgbGFuZ3VhZ2VTdWdnZXN0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG5cbiAgLy8gQ2hlY2sgaWYgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlIGFuZCBzaG93IG1lc3NhZ2VzXG4gIGlmIChicm93c2VyTGFuZ3VhZ2UgPT09ICdkZScgfHwgYnJvd3Nlckxhbmd1YWdlID09PSAnZW4nKSB7XG4gICAgbGFuZ3VhZ2VTdWdnZXN0TWVzc2FnZUN1cnJlbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc3VnZ2VzdC1sYW5ndWFnZT1cIiR7aHRtbExhbmd1YWdlfVwiXWApLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgbGFuZ3VhZ2VTdWdnZXN0TWVzc2FnZVN1Z2dlc3QucXVlcnlTZWxlY3RvcihgW2RhdGEtc3VnZ2VzdC1sYW5ndWFnZT1cIiR7YnJvd3Nlckxhbmd1YWdlfVwiXWApLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gICAgbGFuZ3VhZ2VTdWdnZXN0Q2xvc2UucXVlcnlTZWxlY3RvcihgW2RhdGEtc3VnZ2VzdC1sYW5ndWFnZT1cIiR7aHRtbExhbmd1YWdlfVwiXWApLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gIH0gZWxzZSB7XG4gICAgbGFuZ3VhZ2VTdWdnZXN0TWVzc2FnZUN1cnJlbnQucXVlcnlTZWxlY3RvcignW2RhdGEtc3VnZ2VzdC1sYW5ndWFnZT1cImZhbGxiYWNrXCJdJykuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICBsYW5ndWFnZVN1Z2dlc3RNZXNzYWdlU3VnZ2VzdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1zdWdnZXN0LWxhbmd1YWdlPVwiZmFsbGJhY2tcIl0nKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIGxhbmd1YWdlU3VnZ2VzdENsb3NlLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXN1Z2dlc3QtbGFuZ3VhZ2U9XCJmYWxsYmFja1wiXScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snXG4gIH1cblxuICAvLyBTZXQgdG9wIHN0eWxlcyB0byByZXNlcnZlIHNwYWNlIGZvciBsYW5ndWFnZSBzdWdnZXN0XG4gIGNvbnN0IHJlc2VydmVIZWlnaHQgPSAoKSA9PiB7XG4gICAgLy8gR2V0IGFsbCBoZWlnaHQgdmFsdWVzXG4gICAgbGV0IHRvb2xiYXJXcmFwSGVpZ2h0ID0gdG9vbGJhcldyYXAub2Zmc2V0SGVpZ2h0XG4gICAgY29uc3Qgc3ViTWVudUJhckhlaWdodCA9IHN1Yk1lbnVCYXIgPyBzdWJNZW51QmFyLm9mZnNldEhlaWdodCA6IDBcbiAgICBjb25zdCBsYW5ndWFnZVN1Z2dlc3RIZWlnaHQgPSBsYW5ndWFnZVN1Z2dlc3QgPyBsYW5ndWFnZVN1Z2dlc3Qub2Zmc2V0SGVpZ2h0IDogMFxuXG4gICAgYm9keVdyYXBwZXIuc3R5bGUucGFkZGluZ1RvcCA9IGAke2xhbmd1YWdlU3VnZ2VzdEhlaWdodCArIHRvb2xiYXJXcmFwSGVpZ2h0ICsgc3ViTWVudUJhckhlaWdodH1weGBcblxuICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRkZW4tdG9vbGJhcicpKSB7IHRvb2xiYXJXcmFwSGVpZ2h0ID0gMCB9XG5cbiAgICB0b29sYmFyV3JhcC5zdHlsZS50b3AgPSBgJHtsYW5ndWFnZVN1Z2dlc3RIZWlnaHR9cHhgXG4gICAgbWFpbk1lbnVXcmFwLnN0eWxlLnRvcCA9IGAke2xhbmd1YWdlU3VnZ2VzdEhlaWdodCArIHRvb2xiYXJXcmFwSGVpZ2h0fXB4YFxuICAgIG1haW5NZW51V3JhcC5zdHlsZS5oZWlnaHQgPSBgY2FsYygxMDAlIC0gJHtsYW5ndWFnZVN1Z2dlc3RIZWlnaHQgKyB0b29sYmFyV3JhcEhlaWdodH1weClgXG4gICAgaWYgKHN1Yk1lbnVCYXIpIHsgc3ViTWVudUJhci5zdHlsZS50b3AgPSBgJHtsYW5ndWFnZVN1Z2dlc3RIZWlnaHQgKyB0b29sYmFyV3JhcEhlaWdodH1weGAgfVxuICAgIGlmIChzdWJNZW51TmF2V3JhcCkgeyBzdWJNZW51TmF2V3JhcC5zdHlsZS50b3AgPSBgJHtsYW5ndWFnZVN1Z2dlc3RIZWlnaHQgKyB0b29sYmFyV3JhcEhlaWdodCArIHN1Yk1lbnVCYXJIZWlnaHR9cHhgIH1cbiAgICBnbG9iYWxTZWFyY2guc3R5bGUudG9wID0gYCR7MTIgKyBsYW5ndWFnZVN1Z2dlc3RIZWlnaHR9cHhgXG4gIH1cblxuICAvLyBSZXNlcnZlIGhlaWdodCBvbiBsb2FkLCByZXNpemUgYW5kIHNjcm9sbFxuICByZXNlcnZlSGVpZ2h0KClcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHJlc2VydmVIZWlnaHQpXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCByZXNlcnZlSGVpZ2h0KVxuXG4gIC8vIENsb3NlIGxhbmd1YWdlIHN1Z2dlc3QgYW5kIHNldCBzZXNzaW9uIHN0b3JhZ2VcbiAgY29uc3QgY2xvc2VMYW5ndWFnZVN1Z2dlc3QgPSAoKSA9PiB7XG4gICAgbGFuZ3VhZ2VTdWdnZXN0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICBib2R5V3JhcHBlci5zdHlsZS5wYWRkaW5nVG9wID0gbnVsbFxuICAgIHRvb2xiYXJXcmFwLnN0eWxlLnRvcCA9IG51bGxcbiAgICBtYWluTWVudVdyYXAuc3R5bGUudG9wID0gbnVsbFxuICAgIG1haW5NZW51V3JhcC5zdHlsZS5oZWlnaHQgPSBudWxsXG4gICAgc3ViTWVudUJhci5zdHlsZS50b3AgPSBudWxsXG4gICAgc3ViTWVudU5hdldyYXAuc3R5bGUudG9wID0gbnVsbFxuICAgIGdsb2JhbFNlYXJjaC5zdHlsZS50b3AgPSBudWxsXG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzZXJ2ZUhlaWdodClcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgcmVzZXJ2ZUhlaWdodClcblxuICAgIC8vIFNldCBzZXNzaW9uIHN0b3JhZ2UgdGhhdCBsYW5ndWFnZSBzdWdnZXN0IHdhcyBjbG9zZWRcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdkcmtfbGFuZ3VhZ2Utc3VnZ2VzdC1jbG9zZWQnLCAndHJ1ZScpXG4gIH1cblxuICAvLyBDbG9zZSBsYW5ndWFnZSBzdWdnZXN0IG9uIGNsaWNrIG9uIGNsb3NlIGJ1dHRvblxuICBsYW5ndWFnZVN1Z2dlc3RDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNsb3NlTGFuZ3VhZ2VTdWdnZXN0KVxuXG4gIC8vIElmIGxhbmd1YWdlIHNlbGVjdCBpcyBjaGFuZ2VkLCBzZXQgc2Vzc2lvbiBzdG9yYWdlIHRoYXQgbGFuZ3VhZ2Ugc3VnZ2VzdCB3YXMgY2xvc2VkXG4gIGNvbnN0IGxhbmd1YWdlU2VsZWN0ID0gbGFuZ3VhZ2VTdWdnZXN0LnF1ZXJ5U2VsZWN0b3IoJy5sYW5ndWFnZS1tZW51X19zZWxlY3QnKVxuICBsYW5ndWFnZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnZHJrX2xhbmd1YWdlLXN1Z2dlc3QtY2xvc2VkJywgJ3RydWUnKVxuICB9KVxuXG4gIC8vIENsb3NlIGxhbmd1YWdlIHN1Z2dlc3QgYWZ0ZXIgMSBtaW51dGVcbiAgc2V0VGltZW91dChjbG9zZUxhbmd1YWdlU3VnZ2VzdCwgNjAwMDApXG59XG4iLCIvKipcbiAqICBXcmFwIHRhYmxlcyB0byBzZXQgb3ZlcmZsb3cteCBmb3IgcmVzcG9uc2l2ZVxuICovXG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzVGFibGVzID0gKCkgPT4ge1xuXG4gIC8vIHdyYXAgYWxsIGNvbnRlbn
101R0YWJsZXMgd2l0aCBvdmVyZmxvdy13cmFwcGVyIHRvIHVzZSByZXNwb25zaXZlIG92ZXJmbG93LXhcbiAgJCgnLmNvbnRlbnR0YWJsZScpLndyYXAoJzxkaXYgY2xhc3M9XCJjb250ZW50dGFibGVfX3dyYXBcIj48L2Rpdj4nKVxuXG4gIC8vIHJlbW92ZSBzdHlsZSBhdHRyaWJ1dGVzXG4gICQoJy5jZS1tYWluIHRhYmxlW3N0eWxlXSwgLmNlLW1haW4gdGRbc3R5bGVdJykucmVtb3ZlQXR0cignc3R5bGUnKVxufVxuIiwiLyoqXG4gKiAgZm9ybV9mb3JtZnJhbWV3b3JrIGhlbHBlciBmdW5jdGlvbnNcbiAqL1xuXG5leHBvcnQgY29uc3QgaGFuZGxlRm9ybXMgPSAoKSA9PiB7XG5cbiAgY29uc3QgZm9ybVNlbGVjdHMgPSAkKCdzZWxlY3QnKVxuICBjb25zdCBmb3JtVHh0SW5wdXRzID0gJCgnaW5wdXQsIHRleHRhcmVhJylcblxuICAvLyB3cmFwIGZvcm1zIHdpdGggaW5uZXIgY2xhc3NcbiAgJCgnLmZyYW1lLXR5cGUtZm9ybV9mb3JtZnJhbWV3b3JrJykud3JhcElubmVyKCc8ZGl2IGNsYXNzPVwiaW5uZXJcIj48L2Rpdj4nKVxuXG4gIC8vIEluaXQgY3VzdG9tIGZpbGUgaW5wdXRzXG4gICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcbiAgICAkKCdpbnB1dFt0eXBlPVwiZmlsZVwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgJCh0aGlzKS5hZGRDbGFzcygnY3VzdG9tLWZpbGUtaW5wdXQnKVxuICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcygnY3VzdG9tLWZpbGUnKVxuICAgICAgY29uc3QgY3VzdG9tTGFiZWwgPSAnPGxhYmVsIGNsYXNzPVwiY3VzdG9tLWZpbGUtbGFiZWxcIiBmb3I9XCInICsgJCh0aGlzKS5hdHRyKCdpZCcpICsgJ1wiPiZuYnNwOzwvbGFiZWw+J1xuICAgICAgJChjdXN0b21MYWJlbCkuaW5zZXJ0QWZ0ZXIoJCh0aGlzKSlcbiAgICB9KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIGJzQ3VzdG9tRmlsZUlucHV0LmluaXQoKVxuICB9KVxuXG4gIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGFuZCBhZGQgZmlsbGVkIGNsYXNzZXMgZm9yIGFsbCBpbnB1dHNcbiAgZm9ybVR4dElucHV0cy5vbigna2V5ZG93biBrZXlwcmVzcyBrZXl1cCBwYXN0ZSBibHVyIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoJCh0aGlzKS52YWwoKSkge1xuICAgICAgJCh0aGlzKS5hZGRDbGFzcygnZmlsbGVkJylcbiAgICB9IGVsc2Uge1xuICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnZmlsbGVkIGZpbGxlZC0tZm9jdXNvdXQnKVxuICAgIH1cbiAgfSlcblxuICBmb3JtVHh0SW5wdXRzLm9uKCdmb2N1c291dCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoJCh0aGlzKS52YWwoKSkge1xuICAgICAgJCh0aGlzKS5hZGRDbGFzcygnZmlsbGVkLS1mb2N1c291dCcpXG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2ZpbGxlZC0tZm9jdXNvdXQnKVxuICAgIH1cbiAgfSlcblxuICAvLyBzZWxlY3RzXG4gIGZvcm1TZWxlY3RzLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSAkKHRoaXMpLmNoaWxkcmVuKCdvcHRpb246bm90KDpmaXJzdC1jaGlsZCk6c2VsZWN0ZWQnKS52YWwoKVxuXG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAkKHRoaXMpLmFkZENsYXNzKCdmaWxsZWQnKVxuICAgIH0gZWxzZSB7XG4gICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdmaWxsZWQnKVxuICAgIH1cbiAgfSlcblxuICAvLyBjdXN0b20gZG93bmxvYWRzXG4gICQoJ2lucHV0W3R5cGU9ZmlsZV0nKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsZSA9ICQodGhpcykudmFsKClcblxuICAgIGlmIChzZWxlY3RlZEZpbGUpIHtcbiAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2ZpbGxlZCcpXG4gICAgfSBlbHNlIHtcbiAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2ZpbGxlZCcpXG4gICAgfVxuICB9KVxuXG4gIC8vIGFkZGluZyBhZGRpdGlvbmFsIGNsYXNzZXNcblxuICBjb25zdCByYWRpb0J1dHRvbkdyb3VwID0gJCgnLmlucHV0cy1saXN0IC5yYWRpbycpLmNsb3Nlc3QoJy5pbnB1dHMtbGlzdCcpLmNsb3Nlc3QoJy5mb3JtLWdyb3VwJylcbiAgcmFkaW9CdXR0b25Hcm91cC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMpLmFkZENsYXNzKCdmb3JtLWdyb3VwLXJhZGlvJylcbiAgfSlcblxuICBjb25zdCBjaGVja2JveEdyb3VwID0gJCgnLmlucHV0cy1saXN0IC5mb3JtLWNoZWNrJykuY2xvc2VzdCgnLmlucHV0cy1saXN0JykuY2xvc2VzdCgnLmZvcm0tZ3JvdXAnKVxuICBjaGVja2JveEdyb3VwLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICQodGhpcykuYWRkQ2xhc3MoJ2Zvcm0tZ3JvdXAtY2hlY2tib3gnKVxuICB9KVxuXG4gIGNvbnN0IGNoZWNrYm94R3JvdXBMYWJlbCA9ICQoJy5mb3JtLWdyb3VwLWNoZWNrYm94JykuZmluZCgnLmNvbnRyb2wtbGFiZWwnKVxuICBjaGVja2JveEdyb3VwTGFiZWwuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgJCh0aGlzKS5hZGRDbGFzcygnZm9ybS1ncm91cC1sYWJlbCcpXG4gIH0pXG5cbiAgY29uc3QgcmFkaW9Hcm91cExhYmVsID0gJCgnLmZvcm0tZ3JvdXAtcmFkaW8nKS5maW5kKCcuY29udHJvbC1sYWJlbCcpXG4gIHJhZGlvR3JvdXBMYWJlbC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMpLmFkZENsYXNzKCdmb3JtLWdyb3VwLWxhYmVsJylcbiAgfSlcblxuICAvLyBBdXRvIHJlc2l6ZSB0ZXh0IGFyZWFzIG9uIGlucHV0XG4gIGNvbnN0IHRleHRBcmVhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RleHRhcmVhJylcblxuICB0ZXh0QXJlYXMuZm9yRWFjaCgodGV4dEFyZWEpID0+IHtcbiAgICB0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2hlaWdodDonICsgKHRleHRBcmVhLnNjcm9sbEhlaWdodCkgKyAncHg7b3ZlcmZsb3cteTpoaWRkZW47JylcbiAgICB0ZXh0QXJlYS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nXG4gICAgICB0aGlzLnN0eWxlLmhlaWdodCA9ICh0aGlzLnNjcm9sbEhlaWdodCkgKyAncHgnXG4gICAgfSwgZmFsc2UpXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBpbml0alF1ZXJ5RXZlbnRFeHRlbnNpb25zIH0gZnJvbSAnLi9Nb2R1bGVzL2pRdWVyeUV2ZW50RXh0ZW5zaW9ucydcbmltcG9ydCB7
101IHJlc2VydmVIZWFkZXJIZWlnaHQsIHNldFZpZXdXaWR0aCB9IGZyb20gJy4vTW9kdWxlcy91dGlsaXR5J1xuaW1wb3J0IHsgZ2xvYmFsU2VhcmNoIH0gZnJvbSAnLi9Nb2R1bGVzL2dsb2JhbC1zZWFyY2gnXG5pbXBvcnQgeyBtZW51IH0gZnJvbSAnLi9Nb2R1bGVzL21lbnUnXG5pbXBvcnQgeyBzdWJtZW51IH0gZnJvbSAnLi9Nb2R1bGVzL3N1Ym1lbnUnXG5pbXBvcnQgeyBsYW5ndWFnZU1lbnUsIGxhbmd1YWdlU3VnZ2VzdCB9IGZyb20gJy4vTW9kdWxlcy9sYW5ndWFnZS1tZW51J1xuaW1wb3J0IHsgcHJvY2Vzc1RhYmxlcyB9IGZyb20gJy4vTW9kdWxlcy90YWJsZXMnXG5pbXBvcnQgeyBoYW5kbGVGb3JtcyB9IGZyb20gJy4vTW9kdWxlcy9mb3JtcydcbmltcG9ydCB7IERpc2FibGVkQnV0dG9ucyB9IGZyb20gJy4vTW9kdWxlcy9idXR0b25zJ1xuaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICcuL01vZHVsZXMvaW1hZ2UnXG5pbXBvcnQgeyBnYWxsZXJ5IH0gZnJvbSAnLi9Nb2R1bGVzL2dhbGxlcnknXG5pbXBvcnQgeyB0ZWFzZXIgfSBmcm9tICcuL01vZHVsZXMvdGVhc2VyJ1xuaW1wb3J0IHsgbmV3cyB9IGZyb20gJy4vTW9kdWxlcy9uZXdzJ1xuaW1wb3J0IHsgYWNjb3JkaW9uIH0gZnJvbSAnLi9Nb2R1bGVzL2FjY29yZGlvbidcbmltcG9ydCB7IGZvb3RlciB9IGZyb20gJy4vTW9kdWxlcy9mb290ZXInXG5pbXBvcnQgeyBhZGRUZXh0bWVkaWFSZXZlcnNlQ2xhc3MsIHRleHRFeHBhbmRlciB9IGZyb20gJy4vTW9kdWxlcy90ZXh0bWVkaWEnXG5pbXBvcnQgeyBkb25hdGlvbkN0YSB9IGZyb20gJy4vTW9kdWxlcy9kb25hdGlvbkN0YSdcbmltcG9ydCB7IGRvbmF0aW9uSW5mbyB9IGZyb20gJy4vTW9kdWxlcy9kb25hdGlvbkluZm8nXG5pbXBvcnQgeyBkb25hdGlvbkZvcm0gfSBmcm9tICcuL01vZHVsZXMvZG9uYXRpb25Gb3JtJ1xuaW1wb3J0IHsgZG9uYXRpb25DYXJvdXNlbCB9IGZyb20gJy4vTW9kdWxlcy9kb25hdGlvbkNhcm91c2VsJ1xuaW1wb3J0IHsgaGVhZGVyU2xpZGVyIH0gZnJvbSAnLi9Nb2R1bGVzL2hlYWRlclNsaWRlcidcbi8vaW1wb3J0IHsgcG93ZXJtYWlsIH0gZnJvbSAnLi9Nb2R1bGVzL3Bvd2VybWFpbCdcbmltcG9ydCB7IHZpZGVvU3dpcGVyIH0gZnJvbSAnLi9Nb2R1bGVzL3ZpZGVvJ1xuLy9pbXBvcnQgeyBjaGFuZ2VGb3JtQnV0dG9ucyB9IGZyb20gJy4vTW9kdWxlcy9jaGFuZ2VGb3JtQnV0dG9ucydcbmltcG9ydCB7IGRvbmF0aW9uRnJhbWUgfSBmcm9tICcuL01vZHVsZXMvZG9uYXRpb25GcmFtZSdcbmltcG9ydCB7IG1lbWJlcnNoaXBBcHBsaWNhdGlvbiB9IGZyb20gJy4vTW9kdWxlcy9tZW1iZXJzaGlwLWFwcGxpY2F0aW9uJ1xuaW1wb3J0IHsgcGFyc2xleXNldHRpbmdzIH0gZnJvbSAnLi9Nb2R1bGVzL3BhcnNsZXktc2V0dGluZ3MnXG4vL2ltcG9ydCB7IGltYWdlQ29weXJpZ2h0IH0gZnJvbSAnLi9Nb2R1bGVzL2ltYWdlQ29weXJpZ2h0LmpzJ1xuLy9pbXBvcnQgeyBzb2xyU2VhcmNoIH0gZnJvbSAnLi9Nb2R1bGVzL3NvbHJTZWFyY2guanMnXG5pbXBvcnQgeyBpbml0VGVsZXBob25lTGlua3MgfSBmcm9tICcuL01vZHVsZXMvdGVsZXBob25lTGlua3MuanMnXG5pbXBvcnQgeyBwYWdlQ2F0ZWdvcnkgfSBmcm9tICcuL01vZHVsZXMvcGFnZUNhdGVnb3J5LmpzJ1xuXG5pbml0alF1ZXJ5RXZlbnRFeHRlbnNpb25zKClcbnNldFZpZXdXaWR0aCgpXG5nbG9iYWxTZWFyY2goKVxubWVudSgpXG5zdWJtZW51KClcbmxhbmd1YWdlTWVudSgpXG5sYW5ndWFnZVN1Z2dlc3QoKVxucmVzZXJ2ZUhlYWRlckhlaWdodCgpXG5wcm9jZXNzVGFibGVzKClcbmhhbmRsZUZvcm1zKClcbm5ldyBEaXNhYmxlZEJ1dHRvbnMoKS5pbml0KClcbm5ldyBJbWFnZSgpLmluaXQoKVxuZ2FsbGVyeSgpXG50ZWFzZXIoKVxubmV3cygpXG5hY2NvcmRpb24oKVxuZm9vdGVyKClcbnRleHRFeHBhbmRlcigpXG5hZGRUZXh0bWVkaWFSZXZlcnNlQ2xhc3MoKVxuZG9uYXRpb25DdGEoKVxuZG9uYXRpb25JbmZvKClcbmRvbmF0aW9uRm9ybSgpXG5kb25hdGlvbkNhcm91c2VsKClcbmhlYWRlclNsaWRlcigpXG4vL3Bvd2VybWFpbCgpXG52aWRlb1N3aXBlcigpXG4vL2NoYW5nZUZvcm1CdXR0b25zKClcbmRvbmF0aW9uRnJhbWUoKVxubWVtYmVyc2hpcEFwcGxpY2F0aW9uKClcbi8vaW1hZ2VDb3B5cmlnaHQoKVxuLy9zb2xyU2VhcmNoKClcbnBhcnNsZXlzZXR0aW5ncygpXG5pbml0VGVsZXBob25lTGlua3MoKVxucGFnZUNhdGVnb3J5KClcbiIsIi8qKlxuICogIFByZXZlbnQgZGVmYXVsdCBhY3Rpb24gZm9yIGRpc2FibGVkIGJ1dHRvbnMgYXMgJ2EnIHRhZ3NcbiAqL1xuXG5leHBvcnQgY2xhc3MgRGlzYWJsZWRCdXR0b25zIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgY29uc3RydWN0b3IgKCkge31cblxuICBwcmV2ZW50RGlzYWJsZWRCdXR0b25zICgpIHtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhLmJ1dHRvbi0tZGlzYWJsZWQsIGE6ZGlzYWJsZWQnKS5mb3JFYWNoKFxuICAgICAgaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICApXG4gIH1cblxuICBpbml0ICgpIHtcbiAgICB0aGlzLnByZXZlbnREaXNhYmxlZEJ1dHRvbnMoKVxuICB9XG59XG4iLCIvKipcbiAqICBSZW1vdmUgdW51c2VkIGRlc2NyaXB0aW9uIGFuZCBsaW5rIGZyb20gaW1hZ2UgaW4gJ3N0YWdlLWltYWdlJyBhbmQgbGluayBpbiAndGV4dC1tZWRpYSdcbiAqL1xuXG5leHBvcnQgY2xhc3MgSW1hZ2Uge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3RvciAoKSB7fVxuXG4gIHJlbW92ZURlc2NyaXB0aW9uICgpIHtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RhZ2UtaW1hZ2UgLmNlLWdhbGxlcnkgLmltYWdlLWNhcHRpb24nKS5mb3JFYWNoKFxuICAgICAgaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0ucmVtb3ZlKClcbiAgICAgIH0sXG4gICAgKVxuICB9XG5cbiAgcmVtb3ZlTGluayAoKSB7XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN0YWdlLWltYWdlIC5jZS1nYWxsZXJ5IGEsIC50ZXh0bWVkaWEgLmNlLWdhbGxlcnkgYScpLmZvckVhY2goXG4gICAgICBpdGVtID0+IHtcbiAgICAgICAgaXRlbS5yZXBsYWNlV2l0aCguLi5pdGVtLmNoaWxkTm9kZXMpXG4gICAgICB9LFxuICAgIClcbiAgfVxuXG4gIGluaXQgKCkge1xuICAgIHRoaXMucmVtb3ZlRGVzY3JpcHRpb24oKVxuICAgIHRoaXMucmVtb3ZlTGluaygpXG4gIH1cbn1cbiIsImltcG9ydCBTd2lwZXIsIHsgUGFnaW5hdGlvbiwgRnJlZU1vZGUgfSBmcm9tICdzd2lwZXInXG5cbmV4cG9ydCBjb25zdCB0ZWFzZXIgPSAoKSA9PiB7XG4gIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnN3aXBlcl9fdGVhc2VyJykpIHsgcmV0dXJuIH1cblxuICAvLyBkbyBub3Qgc2hvdyBhIHRyYW5zaXRpb24gYmV0d2VlbiBzbGlkZXMgaWYgdGhlIHVzZXIgaGFzIG9wdCBvdXQgb2YgYW5pbWF0aW9uc1xuICBjb25zdCBhbGxTd2lwZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zd2lwZXJfX3RlYXNlcicpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxTd2lwZXJFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHN3aXBlcklkID0gYWxsU3dpcGVyRWxlbWVudHNbaV0uZGF0YXNldC5zd2lwZXJJZFxuICAgIGNvbnN0IHRlYXNlckFubm91bmNlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgdGVhc2VyQW5ub3VuY2VtZW50cy0ke3N3aXBlcklkfWApXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCBzd2lwZXIgPSBuZXcgU3dpcGVyKGFsbFN3aXBlckVsZW1lbnRzW2ldLCB7XG4gICAgICBtb2R1bGVzOiBbUGFnaW5hdGlvbiwgRnJlZU1vZGVdLFxuICAgICAgc2xpZGVzUGVyVmlldzogJ2F1dG8nLFxuICAgICAgZnJlZU1vZGU6IHRydWUsXG4gICAgICBjZW50ZXJlZFNsaWRlczogdHJ1ZSxcbiAgICAgIHNwYWNlQmV0d2VlbjogMTYsXG4gICAgICBncmFiQ3Vyc29yOiB0cnVlLFxuICAgICAgcHJlbG9hZEltYWdlczogZmFsc2UsXG4gICAgICBvbjoge1xuICAgICAgICAvLyBhbm5vdW5jZSBjdXJyZW50IHNpbGRlIGZvciBzY3JlZW5yZWFkZXIgdXNlcnNcbiAgICAgICAgc2xpZGVDaGFuZ2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U2xpZGUgPSB0aGlzLnJlYWxJbmRleCArIDFcblxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgICAgICAgI
101HRlYXNlckFubm91bmNlbWVudHMudGV4dENvbnRlbnQgPSB0ZWFzZXJJbWFnZSArICcgJyArIGN1cnJlbnRTbGlkZVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgU3dpcGVyLCB7IFBhZ2luYXRpb24sIEZyZWVNb2RlIH0gZnJvbSAnc3dpcGVyJ1xuXG5leHBvcnQgY29uc3QgbmV3cyA9ICgpID0+IHtcbiAgaWYgKCFkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubmV3c19fc3dpcGVyJykpIHsgcmV0dXJuIH1cblxuICAvLyBkbyBub3Qgc2hvdyBhIHRyYW5zaXRpb24gYmV0d2VlbiBzbGlkZXMgaWYgdGhlIHVzZXIgaGFzIG9wdCBvdXQgb2YgYW5pbWF0aW9uc1xuICBjb25zdCBhbGxTd2lwZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uZXdzX19zd2lwZXInKVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsU3dpcGVyRWxlbWVudHMubGVuZ3RoOyBpKyspIHtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNvbnN0IHN3aXBlciA9IG5ldyBTd2lwZXIoYWxsU3dpcGVyRWxlbWVudHNbaV0sIHtcbiAgICAgIG1vZHVsZXM6IFtQYWdpbmF0aW9uLCBGcmVlTW9kZV0sXG4gICAgICBzbGlkZXNQZXJWaWV3OiAnYXV0bycsXG4gICAgICBmcmVlTW9kZTogdHJ1ZSxcbiAgICAgIGNlbnRlcmVkU2xpZGVzOiB0cnVlLFxuICAgICAgY2VudGVyZWRTbGlkZXNCb3VuZHM6IHRydWUsXG4gICAgICBzcGFjZUJldHdlZW46IDE2LFxuICAgICAgZ3JhYkN1cnNvcjogdHJ1ZSxcbiAgICAgIHByZWxvYWRJbWFnZXM6IGZhbHNlLFxuICAgICAgb246IHtcbiAgICAgICAgLy8gYW5ub3VuY2UgY3VycmVudCBzaWxkZSBmb3Igc2NyZWVucmVhZGVyIHVzZXJzXG4gICAgICAgIHNsaWRlQ2hhbmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFNsaWRlID0gdGhpcy5yZWFsSW5kZXggKyAxXG5cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICAgICAgICBjb25zdCB0ZWFzZXJJdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRlYXNlcl9faXRlbScpXG4gICAgICAgICAgaWYgKHRlYXNlckl0ZW0gJiYgdHlwZW9mIHRlYXNlckl0ZW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGVhc2VySXRlbVtjdXJyZW50U2xpZGVdXG4gICAgICAgICAgICBjb25zdCBuZXdzSW1hZ2UgPSBpdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKVxuICAgICAgICAgICAgaWYgKG5ld3NJbWFnZSAmJiB0eXBlb2YgbmV3c0ltYWdlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjb25zdCBuZXdzQW5ub3VuY2VtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5uZXdzX19hbm5vdW5jZW1lbnRzJylcbiAgICAgICAgICAgICAgaWYgKG5ld3NBbm5vdW5jZW1lbnRzICYmIHR5cGVvZiBuZXdzQW5ub3VuY2VtZW50cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBuZXdzQW5ub3VuY2VtZW50c1swXS5pbm5lckhUTUwgPSBuZXdzSW1hZ2VbMF0uYWx0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBjb25zdCBuZXdzRnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZnJhbWUtdHlwZS1uZXdzX25ld3NsaXN0c3RpY2t5JylcbiAgY29uc3QgbmV3c0dyZXlDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubmV3c19fY29udGFpbmVyLS1ncmV5JylcblxuICAvLyBmaW5kIGZyYW1lIGZvciBlYWNoIGdyZXkgbmV3cyBjb250YWluZXIgYW5kIGFkZCBncmV5IGJnXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3c0dyZXlDb250YWluZXIubGVuZ3RoOyBpKyspIHtcbiAgICBuZXdzR3JleUNvbnRhaW5lcltpXS5jbGFzc0xpc3QuYWRkKCdiZycsICdiZy0tZ3JleScpXG4gIH1cbn1cbiIsIi8qKlxuICogQ29udGVudCBFbGVtZW50IEFjY29yZGlvbnNcbiAqL1xuXG5leHBvcnQgY29uc3QgYWNjb3JkaW9uID0gKCkgPT4ge1xuICAvLyBjb2xsZWN0IGFsbCBhY2NvcmRpb24gYnV0dG9uc1xuICBjb25zdCBhY2NvcmRpb25UcmlnZ2VyID0gJCgnLmNlLWFjY29fX3RyaWdnZXInKVxuXG4gIC8vIGFzc2lnbiBsaXN0ZW5lcnMgZm9yIGNsaWNrIGV2ZW50cyB0byBlYWNoIGJ1dHRvblxuICBhY2NvcmRpb25UcmlnZ2VyLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgdG9nZ2xlQWNjb3JkaW9uKCQodGhpcykpXG4gICAgfSlcbiAgfSlcblxuICBjb25zdCB0b2dnbGVBY2NvcmRpb24gPSAodHJpZ2dlcikgPT4ge1xuICAgIC8vIHNlbGVjdCBhY2NvcmRpb24gcGFydHNcbiAgICBjb25zdCBleHBhbmRlZCA9IHRyaWdnZXIuYXR0cignYXJpYS1leHBhbmRlZCcpID09PSAndHJ1ZSdcbiAgICBjb25zdCBjb250ZW50ID0gdHJpZ2dlci5wYXJlbnQoKS5uZXh0KClcblxuICAgIC8vIHRvZ2dsZSBhbGwgYXR0cmlidXRlc1xuICAgIHRyaWdnZXIuYXR0cignYXJpYS1leHBhbmRlZCcsICFleHBhbmRlZClcbiAgICBjb250ZW50LmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAoIWV4cGFuZGVkKS50b1N0cmluZygpKVxuICAgIGNvbnRlbnQuYXR0cignYXJpYS1oaWRkZW4nLCBleHBhbmRlZC50b1N0cmluZygpKVxuXG4gICAgLy8gb3BlbiBhbmQgY2xvc2luZyBhbmltYXRpb25cbiAgICAkKGNvbnRlbnQpLnN0b3AoKS5zbGlkZVRvZ2dsZSgzMDApXG4gIH1cbn1cbiIsIi8qKlxuICogRm9vdGVyIEFjY29yZGlvbnNcbiAqL1xuXG5leHBvcnQgY29uc3QgZm9vdGVyID0gKCkgPT4ge1xuICAvLyBjb2xsZWN0IGFsbCBhY2NvcmRpb24gYnV0dG9uc1xuICBjb25zdCBhY2NvcmRpb25UcmlnZ2VyID0gJCgnLmZvb3Rlci1hY2NvX190cmlnZ2VyJylcbiAgY29uc3QgYWNjb3JkaW9uTGFiZWwgPSAkKCcuZm9vdGVyLWFjY29fX2xhYmVsJylcblxuICAvLyBhc3NpZ24gbGlzdGVuZXJzIGZvciBjbGljayBldmVudHMgdG8gZWFjaCBidXR0b25cbiAgYWNjb3JkaW9uVHJpZ2dlci5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAkKHRoaXMpLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRvZ2dsZUFjY29yZGlvbigkKHRoaXMpKVxuICAgIH0pXG4gIH0pXG5cbiAgY29uc3QgdG9nZ2xlQWNjb3JkaW9uID0gKHRyaWdnZXIpID0+IHtcbiAgICAvLyBzZWxlY3QgYWNjb3JkaW9uIHBhcnRzXG4gICAgY29uc3QgZXhwYW5kZWQgPSB0cmlnZ2VyLmF0dHIoJ2FyaWEtZXhwYW5kZWQnKSA9PT0gJ3RydWUnXG4gICAgY29uc3QgY29udGVudCA9IHRyaWdnZXIucGFyZW50KCkubmV4dCgpXG5cbiAgICAvLyB0b2dnbGUgYWxsIGF0dHJpYnV0ZXNcbiAgICB0cmlnZ2VyLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAhZX
101hwYW5kZWQpXG4gICAgY29udGVudC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgKCFleHBhbmRlZCkudG9TdHJpbmcoKSlcbiAgICBjb250ZW50LmF0dHIoJ2FyaWEtaGlkZGVuJywgZXhwYW5kZWQudG9TdHJpbmcoKSlcblxuICAgIC8vIG9wZW4gYW5kIGNsb3NpbmcgYW5pbWF0aW9uXG4gICAgJChjb250ZW50KS5zdG9wKCkuc2xpZGVUb2dnbGUoMzAwKVxuICB9XG5cbiAgY29uc3Qgc3dpdGNoVG9CdXR0b25zID0gKCkgPT4ge1xuICAgIGlmIChtYXRjaE1lZGlhKCcobWluLXdpZHRoOiA1NzdweCknKS5tYXRjaGVzKSB7XG4gICAgICBhY2NvcmRpb25MYWJlbC5zaG93KCkucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4nKVxuICAgICAgYWNjb3JkaW9uVHJpZ2dlci5oaWRlKCkuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFjY29yZGlvbkxhYmVsLmhpZGUoKS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJylcbiAgICAgIGFjY29yZGlvblRyaWdnZXIuc2hvdygpLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuJylcbiAgICB9XG4gIH1cblxuICBzd2l0Y2hUb0J1dHRvbnMoKVxuICAkKHdpbmRvdykucmVzaXplKHN3aXRjaFRvQnV0dG9ucylcbn1cbiIsIi8qKlxuICogRm9sZHMvdW5mb2xkcyBsb25nZXIgY29udGVudCBpbiBUZXh0ICYgTWVkaWEgRWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgdGV4dEV4cGFuZGVyID0gKCkgPT4ge1xuXG4gIGNvbnN0IGV4cGFuZGFibGVUZXh0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXh0bWVkaWFfX2V4cGFuZGFibGUnKVxuICBjb25zdCBleHBhbmRhYmxlVGV4dFRyaWdnZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRleHRtZWRpYV9fdW5mb2xkJylcblxuICBleHBhbmRhYmxlVGV4dHMuZm9yRWFjaChmb2xkVGV4dHMpXG4gIGV4cGFuZGFibGVUZXh0VHJpZ2dlcnMuZm9yRWFjaCh1bmZvbGRUZXh0cylcblxuICBmdW5jdGlvbiBmb2xkVGV4dHMgKGV4cGFuZGFibGVUZXh0KSB7XG4gICAgaWYgKGV4cGFuZGFibGVUZXh0Lm9mZnNldEhlaWdodCA8IGV4cGFuZGFibGVUZXh0LnNjcm9sbEhlaWdodCkge1xuICAgICAgZXhwYW5kYWJsZVRleHQuY2xhc3NMaXN0LmFkZCgndGV4dG1lZGlhX19leHBhbmRhYmxlLS1mb2xkZWQnKVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZm9sZFRleHRzIChleHBhbmRhYmxlVGV4dFRyaWdnZXIpIHtcbiAgICBleHBhbmRhYmxlVGV4dFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBleHBhbmRhYmxlVGV4dCA9IGV4cGFuZGFibGVUZXh0VHJpZ2dlci5jbG9zZXN0KCcudGV4dG1lZGlhX19leHBhbmRhYmxlJylcbiAgICAgIGV4cGFuZGFibGVUZXh0LmNsYXNzTGlzdC5yZW1vdmUoJ3RleHRtZWRpYV9fZXhwYW5kYWJsZS0tZm9sZGVkJylcbiAgICAgIGV4cGFuZGFibGVUZXh0LnN0eWxlLm1heEhlaWdodCA9IGV4cGFuZGFibGVUZXh0LnNjcm9sbEhlaWdodCArICdweCdcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4geyBleHBhbmRhYmxlVGV4dC5zdHlsZS5tYXhIZWlnaHQgPSAndW5zZXQnIH0sIDQwMClcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBhZGRUZXh0bWVkaWFSZXZlcnNlQ2xhc3MgPSAoKSA9PiB7XG5cbiAgLy8gR2V0IGFsbCBiZXNpZGUgdGV4dG1lZGlhIGVsZW1lbnRzIG5laWdoYm9yc1xuICBjb25zdCB0ZXh0TWVkaWFCZXNpZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZnJhbWUtdGV4dG1lZGlhLWJlc2lkZSArIC5mcmFtZS10ZXh0bWVkaWEtYmVzaWRlJylcblxuICAvLyBDaGVjayBhbGwgYmVzaWRlIHRleHRtZWRpYSBlbGVtZW50cyBuZWlnaGJvcnNcbiAgdGV4dE1lZGlhQmVzaWRlLmZvckVhY2godGV4dG1lZGlhQmVzaWRlID0+IHtcbiAgICAvLyBJZiB0aGUgcHJldmlvdXMgZWxlbWVudCBpcyBhIHRleHRtZWRpYSBlbGVtZW50IHRoYXQgaXMgbm90IHJldmVyc2VkIHJldmVyc2UgdGhlIGN1cnJlbnQgZWxlbWVudFxuICAgIGlmICghdGV4dG1lZGlhQmVzaWRlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LmNvbnRhaW5zKCdmcmFtZS10ZXh0bWVkaWEtYmVzaWRlLS1yZXZlcnNlJykpIHtcbiAgICAgIHRleHRtZWRpYUJlc2lkZS5jbGFzc0xpc3QuYWRkKCdmcmFtZS10ZXh0bWVkaWEtYmVzaWRlLS1yZXZlcnNlJylcbiAgICB9XG4gIH0pXG59XG4iLCIvKipcbiAqIFNob3dzIGFuZCBoaWRlcyBkb25hdGlvbiBDVEEgYmFubmVyIG9uIHNjcm9sbFxuICovXG5cbmV4cG9ydCBjb25zdCBkb25hdGlvbkN0YSA9ICgpID0+IHtcbiAgLy8gR2V0IGFsbCBlbGVtZW50c1xuICBjb25zdCBkb25hdGlvbkN0YSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kb25hdGlvbi1jdGEnKVxuICBjb25zdCBmb290ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZm9vdGVyJylcblxuICAvLyBFeGl0IGlmIG5vIGRvbmF0aW9uIENUQVxuICBpZiAoIWRvbmF0aW9uQ3RhKSB7IHJldHVybiB9XG5cbiAgLy8gRXhpdCBvbiBob21lcGFnZVxuICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdWItbWVudV9fYmFyJykpIHsgcmV0dXJuIH1cblxuICBjb25zdCBzaG93RG9uYXRpb25DdGEgPSAoKSA9PiB7XG4gICAgLy8gZXhpdCBpZiBhbmltYXRpb24gaXMgYWxyZWFkeSBydW5uaW5nXG4gICAgaWYgKGRvbmF0aW9uQ3RhLmNsYXNzTGlzdC5jb250YWlucygnZG9uYXRpb24tY3RhLS1hbmltYXRpbmcnKSkgeyByZXR1cm4gfVxuXG4gICAgZG9uYXRpb25DdGEuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJ1xuICAgIGRvbmF0aW9uQ3RhLnN0eWxlLm9wYWNpdHkgPSAxXG4gICAgZG9uYXRpb25DdGEuY2xhc3NMaXN0LnJlbW92ZSgnZG9uYXRpb24tY3RhLS1oaWRkZW4nKVxuXG4gICAgLy8gc2V0IGFuaW1hdGlvbiBjbGFzcyB0byBwcmV2ZW50IG11bHRpcGxlIGFuaW1hdGlvbnNcbiAgICBkb25hdGlvbkN0YS5jbGFzc0xpc3QuYWRkKCdkb25hdGlvbi1jdGEtLWFuaW1hdGluZycpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb25hdGlvbkN0YS5jbGFzc0xpc3QucmVtb3ZlKCdkb25hdGlvbi1jdGEtLWFuaW1hdGluZycpXG4gICAgfSwgNDAwKVxuICB9XG5cbiAgY29uc3QgaGlkZURvbmF0aW9uQ3RhID0gKCkgPT4ge1xuICAgIC8vIGV4aXQgaWYgYW5pbWF0aW9uIGlzIGFscmVhZHkgcnVubmluZ1xuICAgIGlmIChkb25hdGlvbkN0YS5jbGFzc0xpc3QuY29udGFpbnMoJ2RvbmF0aW9uLWN0YS0tYW5pbWF0aW5nJykpIHsgcmV0dXJuIH1cblxuICAgIGRvbmF0aW9uQ3RhLmNsYXNzTGlzdC5hZGQoJ2RvbmF0aW9uLWN0YS0taGlkZGVuJylcbiAgICBzZXRUaW
1011lb3V0KCgpID0+IHtcbiAgICAgIGRvbmF0aW9uQ3RhLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJ1xuICAgICAgZG9uYXRpb25DdGEuc3R5bGUub3BhY2l0eSA9IDBcbiAgICB9LCA0MDApXG5cbiAgICAvLyBzZXQgYW5pbWF0aW9uIGNsYXNzIHRvIHByZXZlbnQgbXVsdGlwbGUgYW5pbWF0aW9uc1xuICAgIGRvbmF0aW9uQ3RhLmNsYXNzTGlzdC5hZGQoJ2RvbmF0aW9uLWN0YS0tYW5pbWF0aW5nJylcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRvbmF0aW9uQ3RhLmNsYXNzTGlzdC5yZW1vdmUoJ2RvbmF0aW9uLWN0YS0tYW5pbWF0aW5nJylcbiAgICB9LCA0MDApXG4gIH1cblxuICAvLyBzYXZlIGxhc3Qgc2Nyb2xsIHBvc2l0aW9uXG4gIGxldCBsYXN0U2Nyb2xsVG9wID0gMFxuXG4gIC8vIHNob3cvaGlkZSBkb25hdGlvbiBDVEEgb24gc2Nyb2xsXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAvLyBnZXQgY3VycmVudCBzY3JvbGwgcG9zaXRpb25cbiAgICBjb25zdCBzY3JvbGxUb3AgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wXG5cbiAgICBpZiAoc2Nyb2xsVG9wID4gbGFzdFNjcm9sbFRvcCkgeyAvLyBzY3JvbGxlZCBkb3duXG5cbiAgICAgIC8vIEhpZGUgZG9uYXRpb24gQ1RBIHdoZW4gYWJvdmUgZm9vdGVyIGFuZCBzaG93IG90aGVyd2lzZVxuICAgICAgY29uc3QgZG9uYXRpb25DdGFQb3NpdGlvbiA9IGRvbmF0aW9uQ3RhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgICAgY29uc3QgZG9uYXRpb25DdGFIZWlnaHQgPSBkb25hdGlvbkN0YS5vZmZzZXRIZWlnaHRcbiAgICAgIGNvbnN0IGZvb3RlclBvc2l0aW9uID0gZm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gZm9vdGVyLm9mZnNldEhlaWdodFxuXG4gICAgICBpZiAoZG9uYXRpb25DdGFQb3NpdGlvbiArIGRvbmF0aW9uQ3RhSGVpZ2h0IDwgZm9vdGVyUG9zaXRpb24pIHtcbiAgICAgICAgc2hvd0RvbmF0aW9uQ3RhKClcbiAgICAgIH0gZWxzZSBpZiAoZG9uYXRpb25DdGFQb3NpdGlvbiA+IGZvb3RlclBvc2l0aW9uICsgZm9vdGVySGVpZ2h0KSB7XG4gICAgICAgIHNob3dEb25hdGlvbkN0YSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaWRlRG9uYXRpb25DdGEoKVxuICAgICAgfVxuXG4gICAgfSBlbHNlIHsgLy8gc2Nyb2xsZWQgdXBcbiAgICAgIGhpZGVEb25hdGlvbkN0YSgpXG4gICAgfVxuXG4gICAgLy8gc2F2ZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBhcyBsYXN0IHNjcm9sbCBwb3NpdGlvblxuICAgIGxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3AgPD0gMCA/IDAgOiBzY3JvbGxUb3BcbiAgfVxuXG4gIGhhbmRsZVNjcm9sbCgpXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB7IGhhbmRsZVNjcm9sbCgpIH0sIGZhbHNlKVxufVxuIiwiaW1wb3J0IFN3aXBlciwge0ZyZWVNb2RlLCBQYWdpbmF0aW9ufSBmcm9tIFwic3dpcGVyXCI7XG5cbmV4cG9ydCBjb25zdCBkb25hdGlvbkluZm8gPSAoKSA9PiB7XG4gIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRvbmF0aW9uLWluZm9fX3N3aXBlcicpKSB7cmV0dXJufVxuXG4gIGNvbnN0IGFsbFN3aXBlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRvbmF0aW9uLWluZm9fX3N3aXBlcicpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxTd2lwZXJFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgY29uc3Qgc3dpcGVyID0gbmV3IFN3aXBlcihhbGxTd2lwZXJFbGVtZW50c1tpXSwge1xuICAgICAgbW9kdWxlczogW1BhZ2luYXRpb24sIEZyZWVNb2RlXSxcbiAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICAgIGdyYWJDdXJzb3I6IHRydWUsXG4gICAgICBjZW50ZXJJbnN1ZmZpY2llbnRTbGlkZXM6IHRydWUsXG4gICAgfSlcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGRvbmF0aW9uRm9ybSA9ICgpID0+IHtcblxuICBjb25zdCBkb25hdGlvbkZvcm0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjY2FyZF90b2tlbi1mb3JtJylcblxuICAvLyBleGl0IGlmIGRvbmF0aW9uIGZvcm0gbm90IGV4aXN0aW5nXG4gIGlmICghZG9uYXRpb25Gb3JtKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkb25hdGlvblR5cGVVc2VyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3VzZXInKVxuICBjb25zdCBkb25hdGlvblR5cGVVc2VyU2VjcmV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3VzZXItc2VjcmV0JylcbiAgY29uc3QgZG9uYXRpb25UeXBlQ29tcGFueSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb21wYW55JylcbiAgY29uc3QgY29tcGFueUFkZHJlc3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZG9uYXRpb24tZm9ybV9fZGF0YS1pdGVtLS1jb21wYW55LnZpc3VhbGx5LWhpZGRlbi5oLWhpZGUnKVxuICBjb25zdCBwZXJzb25hbERhdGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZG9uYXRpb24tZm9ybV9fc2VjdGlvbi0tcGVyc29uYWwtZGF0YScpXG4gIGNvbnN0IHBheW1lbnRGcmVxdWVuY3lPbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Zvcm0tZG9uYXRpb24tbW9kZV8xJylcbiAgY29uc3QgcGF5bWVudEZyZXF1ZW5jaWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRvbmF0aW9uLWZvcm1fX2ZyZXF1ZW5jeS1pdGVtLS1tb250aGx5LCAuZG9uYXRpb24tZm9ybV9fZnJlcXVlbmN5LWl0ZW0tLXF1YXJ0ZXJseSwgLmRvbmF0aW9uLWZvcm1fX2ZyZXF1ZW5jeS1pdGVtLS15ZWFybHknKVxuICBjb25zdCBwYXltZW50QnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5kb25hdGlvbi1mb3JtX19wYXltZW50LWJ1dHRvbicpXG4gIGNvbnN0IHBheW1lbnRTZXBhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2pzUGF5bWVudF9fc2VwYScpXG4gIGNvbnN0IHBheW1lbnRDcmVkaXRDYXJkID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcign
101I2pzUGF5bWVudF9fY3JlZGl0Y2FyZCcpXG5cbiAgLy8gdG9nZ2xlIGFkZHJlc3MgaW5mb3JtYXRpb24gZm9yIGRvbmF0aW9uIHR5cGVcbiAgaWYgKGRvbmF0aW9uVHlwZVVzZXIpIHtcbiAgICBkb25hdGlvblR5cGVVc2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgcGVyc29uYWxEYXRhLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc3VhbGx5LWhpZGRlbicsICdoLWhpZGUnKVxuICAgICAgY29tcGFueUFkZHJlc3MuY2xhc3NMaXN0LmFkZCgndmlzdWFsbHktaGlkZGVuJywgJ2gtaGlkZScpXG5cbiAgICAgIC8vIHJldmVhbCBhbGwgcGF5bWVudCBtZXRob2RzXG4gICAgICBwYXltZW50QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCd2aXN1YWxseS1oaWRkZW4nLCAnaC1oaWRlJylcbiAgICAgIH0pXG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXR1cm4tYXNzaWduXG4gICAgICBwYXltZW50RnJlcXVlbmNpZXMuZm9yRWFjaChtb2RlID0+IG1vZGUuc3R5bGUuZGlzcGxheSA9ICdmbGV4JylcbiAgICB9KVxuICB9XG5cbiAgaWYgKGRvbmF0aW9uVHlwZVVzZXJTZWNyZXQpIHtcbiAgICBkb25hdGlvblR5cGVVc2VyU2VjcmV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgcGVyc29uYWxEYXRhLmNsYXNzTGlzdC5hZGQoJ3Zpc3VhbGx5LWhpZGRlbicsICdoLWhpZGUnKVxuXG4gICAgICAvLyBoaWRlIG90aGVyIG5vbiBhbm9ueW0gcGF5bWVudCBtZXRob2RzXG4gICAgICBwYXltZW50QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgIGlmICghYnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnYW5vbnltJykpIHtcbiAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgndmlzdWFsbHktaGlkZGVuJywgJ2gtaGlkZScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc3VhbGx5LWhpZGRlbicsICdoLWhpZGUnLCAnZG9uYXRpb24tZm9ybV9fcGF5bWVudC1idXR0b24tLWluYWN0aXZlJylcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRvbmF0aW9uLWZvcm1fX2l0ZW0tLXNlcGEnKS5jbGFzc0xpc3QuYWRkKCdoLWhpZGUnKVxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRvbmF0aW9uLWZvcm1fX2l0ZW0tLWNyZWRpdGNhcmQtZ3JvdXAnKS5jbGFzc0xpc3QuYWRkKCdoLWhpZGUnKVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmV0dXJuLWFzc2lnblxuICAgICAgcGF5bWVudEZyZXF1ZW5jaWVzLmZvckVhY2gobW9kZSA9PiBtb2RlLnN0eWxlLmRpc3BsYXkgPSAnbm9uZScpXG5cbiAgICAgIC8vIHZhbGlkYXRlIGZyZXF1ZW5jeSBtb2RlIG9uY2UgaWYgbm90IGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgIGlmICghcGF5bWVudEZyZXF1ZW5jeU9uY2UuY2hlY2tlZCkge1xuICAgICAgICBwYXltZW50RnJlcXVlbmN5T25jZS5jaGVja2VkID0gdHJ1ZVxuICAgICAgICBwYXltZW50RnJlcXVlbmN5T25jZS5uZXh0RWxlbWVudFNpYmxpbmcuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaWYgKGRvbmF0aW9uVHlwZUNvbXBhbnkpIHtcbiAgICBkb25hdGlvblR5cGVDb21wYW55LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgcGVyc29uYWxEYXRhLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc3VhbGx5LWhpZGRlbicsICdoLWhpZGUnKVxuICAgICAgaWYgKGNvbXBhbnlBZGRyZXNzLmNsYXNzTGlzdC5jb250YWlucygndmlzdWFsbHktaGlkZGVuJykgJiYgY29tcGFueUFkZHJlc3MuY2xhc3NMaXN0LmNvbnRhaW5zKCdoLWhpZGUnKSkge1xuICAgICAgICBjb21wYW55QWRkcmVzcy5jbGFzc0xpc3QucmVtb3ZlKCd2aXN1YWxseS1oaWRkZW4nLCAnaC1oaWRlJylcbiAgICAgIH1cblxuICAgICAgLy8gcmV2ZWFsIGFsbCBwYXltZW50IG1ldGhvZHNcbiAgICAgIHBheW1lbnRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ3Zpc3VhbGx5LWhpZGRlbicsICdoLWhpZGUnKVxuICAgICAgfSlcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cbiAgICAgIHBheW1lbnRGcmVxdWVuY2llcy5mb3JFYWNoKG1vZGUgPT4gbW9kZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnKVxuICAgIH0pXG4gIH1cblxuICAvLyB0b2dnbGUgcGF5bWVudCBidXR0b24gYWN0aXZlIHN0YXR1c1xuICBpZiAocGF5bWVudEJ1dHRvbnMpIHtcbiAgICBwYXltZW50QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG5cbiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlQnV0dG9uID0gYnV0dG9uXG5cbiAgICAgICAgYWN0aXZlQnV0dG9uLmNsYXNzTGlzdC5hZGQoJ2RvbmF0aW9uLWZvcm1fX3BheW1lbnQtYnV0dG9uLS1hY3RpdmUnKVxuICAgICAgICBwYXltZW50QnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgaWYgKGJ1dHRvbiAhPT0gYWN0aXZlQnV0dG9uKSB7XG4gICAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZCgnZG9uYXRpb24tZm9ybV9fcGF5bWVudC1idXR0b24tLWluYWN0aXZlJylcbiAgICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdkb25hdGlvbi1mb3JtX19wYXltZW50LWJ1dHRvbi0tYWN0aXZlJylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2RvbmF0aW9uLWZvcm1fX3BheW1lbnQtYnV0dG9uLS1pbmFjdGl2ZScpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLy8gcmV2ZWFsIGFsbCBwYXltZW50IG1ldGhvZHMgaWYgcGF5bWVudCBmcmVxdWVuY3kgY2hhbmdlcyBmcm9tIG9uY2UgdG8gbW9udGhseSwgcXVhcnRlcmx5IG9yIHllYXJseVxuICBpZiAocGF5bWVudEZyZXF1
101ZW5jeU9uY2UpIHtcbiAgICBwYXltZW50RnJlcXVlbmN5T25jZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHBheW1lbnRCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgYnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoJ2gtaGlkZScsICd2aXN1YWxseS1oaWRkZW4nLCAnZG9uYXRpb24tZm9ybV9fcGF5bWVudC1idXR0b24tLWluYWN0aXZlJylcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGlmIChwYXltZW50U2VwYSkge1xuICAgIHBheW1lbnRTZXBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kb25hdGlvbi1mb3JtX19pdGVtLS1zZXBhLmgtaGlkZScpKSB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kb25hdGlvbi1mb3JtX19pdGVtLS1zZXBhJykuY2xhc3NMaXN0LnJlbW92ZSgnaC1oaWRlJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaWYgKHBheW1lbnRDcmVkaXRDYXJkKSB7XG4gICAgcGF5bWVudENyZWRpdENhcmQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRvbmF0aW9uLWZvcm1fX2l0ZW0tLWNyZWRpdGNhcmQtZ3JvdXAuaC1oaWRlJykpIHtcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRvbmF0aW9uLWZvcm1fX2l0ZW0tLWNyZWRpdGNhcmQtZ3JvdXAnKS5jbGFzc0xpc3QucmVtb3ZlKCdoLWhpZGUnKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyByZWR1Y2UgcGFkZGluZ3Mgb2YgZG9uYXRpb24gZmluZSBwcmludCAoYWxsIGdyYXkgZnJhbWVzIHRoYXQgaGF2ZSBkaXJlY3Qgc2libGluZ3MpXG4gIC8vIFRPRE86IGRlbGV0ZSB0aGlzIHdoZW4gdGhlIGNsaWVudCBoYXMgZml4ZWQgdGhhdCBieSB1c2luZyBhIHNpbmdsZSB0ZXh0IGVsZW1lbnRcbiAgY29uc3QgZ3JleUJnRnJhbWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZyYW1lLmJnLS1saWdodGdyZXkuZnJhbWUtdHlwZS10ZXh0bWVkaWEnKVxuICBncmV5QmdGcmFtZXMuZm9yRWFjaCgoZnJhbWUsIGluZGV4KSA9PiB7XG4gICAgaWYgKGZyYW1lLm5leHRFbGVtZW50U2libGluZy5jbGFzc0xpc3QuY29udGFpbnMoJ2ZyYW1lLXR5cGUtdGV4dG1lZGlhJykpIHtcbiAgICAgIGZyYW1lLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAnMCdcbiAgICB9XG4gIH0pXG59XG4iLCJpbXBvcnQgU3dpcGVyLCB7IEF1dG9wbGF5LCBFZmZlY3RGYWRlIH0gZnJvbSAnc3dpcGVyJ1xuXG5leHBvcnQgY29uc3QgaGVhZGVyU2xpZGVyID0gKCkgPT4ge1xuICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oZWFkZXItc2xpZGVyX19zd2lwZXInKSkgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGFsbFN3aXBlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmhlYWRlci1zbGlkZXJfX3N3aXBlcicpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxTd2lwZXJFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgY29uc3Qgc3dpcGVyID0gbmV3IFN3aXBlcihhbGxTd2lwZXJFbGVtZW50c1tpXSwge1xuICAgICAgbW9kdWxlczogW0F1dG9wbGF5LCBFZmZlY3RGYWRlXSxcbiAgICAgIGxvb3A6IHRydWUsXG4gICAgICBzcGVlZDogMjAwMCxcbiAgICAgIGVmZmVjdDogJ2ZhZGUnLFxuICAgICAgZmFkZUVmZmVjdDoge1xuICAgICAgICBjcm9zc0ZhZGU6IHRydWUsXG4gICAgICB9LFxuICAgICAgYXV0b3BsYXk6IHtcbiAgICAgICAgZGVsYXk6IDI1MDAsXG4gICAgICAgIGRpc2FibGVPbkludGVyYWN0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgU3dpcGVyLCB7IE5hdmlnYXRpb24sIEVmZmVjdENhcmRzLCBBdXRvcGxheSB9IGZyb20gJ3N3aXBlcidcblxuZXhwb3J0IGNvbnN0IGRvbmF0aW9uQ2Fyb3VzZWwgPSAoKSA9PiB7XG4gIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRvbmF0aW9uLWNhcm91c2VsX19zd2lwZXInKSkgeyByZXR1cm4gfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBjb25zdCBzd2lwZXIgPSBuZXcgU3dpcGVyKCcuZG9uYXRpb24tY2Fyb3VzZWxfX3N3aXBlcicsIHtcbiAgICBtb2R1bGVzOiBbTmF2aWdhdGlvbiwgRWZmZWN0Q2FyZHMsIEF1dG9wbGF5XSxcbiAgICBuYXZpZ2F0aW9uOiB7XG4gICAgICBuZXh0RWw6ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JyxcbiAgICAgIHByZXZFbDogJy5zd2lwZXItYnV0dG9uLXByZXYnLFxuICAgIH0sXG4gICAgZWZmZWN0OiAnY2FyZHMnLFxuICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICBjZW50ZXJlZFNsaWRlczogdHJ1ZSxcbiAgICBncmFiQ3Vyc29yOiB0cnVlLFxuICAgIGF1dG9wbGF5OiB7XG4gICAgICBkZWxheTogMjUwMCxcbiAgICAgIGRpc2FibGVPbkludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0sXG4gIH0pXG59XG4iLCJpbXBvcnQgU3dpcGVyLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24sIEExMXksIEZyZWVNb2RlIH0gZnJvbSAnc3dpcGVyJ1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cblxuLyoqXG4gKiBWaWRlbyBHYWxsZXJpZXMgd2l0aCBTd2lwZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHZpZGVvU3dpcGVyID0gKCkgPT4ge1xuICAvLyBnZXQgYWxsIHZpZGVvIHN3aXBlciBlbGVtZW50c1xuICBjb25zdCB2aWRlb1N3aXBlckVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZpZGVvX19zd2lwZXInKVxuXG4gIC8vIGV4aXQgaWYgbm8gdmlkZW8gc3dpcGVyIGVsZW1lbnRzIGFyZSBmb3VuZFxuICBpZiAoIXZpZGVvU3dpcGVyRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBjaGVjayBpZiB1c2VyIHByZWZlcnMgcmVkdWNlZCBtb3Rpb25cbiAgY29uc3QgcHJlZmVyc1JlZHVjZWRNb3Rpb24gPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKT8ubWF0Y2hlc1xuXG4gIC8vIHNldCBhbmltYXRpb24gc3BlZWQgdG8gMCBpZiB1c2VyIH
101ByZWZlcnMgcmVkdWNlZCBtb3Rpb25cbiAgY29uc3Qgc3BlZWQgPSBwcmVmZXJzUmVkdWNlZE1vdGlvbiA/IDAgOiAzMDBcblxuICAvLyBpbml0aWFsaXplIHN3aXBlciBmb3IgZWFjaCB2aWRlbyBnYWxsZXJ5XG4gIHZpZGVvU3dpcGVyRWxlbWVudHMuZm9yRWFjaCgodmlkZW9Td2lwZXJFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV4dEVsID0gdmlkZW9Td2lwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItYnV0dG9uLW5leHQnKVxuICAgIGNvbnN0IHByZXZFbCA9IHZpZGVvU3dpcGVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLWJ1dHRvbi1wcmV2JylcbiAgICBjb25zdCBhbm5vdW5jZW1lbnRzID0gdmlkZW9Td2lwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItYW5ub3VuY2VtZW50cycpXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCBzd2lwZXIgPSBuZXcgU3dpcGVyKHZpZGVvU3dpcGVyRWxlbWVudCwge1xuICAgICAgbW9kdWxlczogW05hdmlnYXRpb24sIFBhZ2luYXRpb24sIEExMXksIEZyZWVNb2RlXSxcbiAgICAgIHNsaWRlc1BlclZpZXc6ICdhdXRvJyxcbiAgICAgIHNwYWNlQmV0d2VlbjogMTIsXG4gICAgICBmcmVlTW9kZTogdHJ1ZSxcbiAgICAgIHNwZWVkLFxuICAgICAgcHJlbG9hZEltYWdlczogZmFsc2UsXG4gICAgICBhMTF5OiB7XG4gICAgICAgIHByZXZTbGlkZU1lc3NhZ2U6IHZpZGVvR2FsbGVyeU5leHQsXG4gICAgICAgIG5leHRTbGlkZU1lc3NhZ2U6IHZpZGVvR2FsbGVyeVByZXYsXG4gICAgICAgIHBhZ2luYXRpb25CdWxsZXRNZXNzYWdlOiB2aWRlb0dhbGxlcnlQYWdpbmF0aW9uQnVsbGV0LFxuICAgICAgfSxcblxuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBlbDogJy5zd2lwZXItcGFnaW5hdGlvbicsXG4gICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcbiAgICAgIH0sXG5cbiAgICAgIG5hdmlnYXRpb246IHtcbiAgICAgICAgbmV4dEVsLFxuICAgICAgICBwcmV2RWwsXG4gICAgICB9LFxuXG4gICAgICBicmVha3BvaW50czoge1xuICAgICAgICBbOTYwICsgOTZdOiB7XG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcbiAgICAgICAgICBjZW50ZXJlZFNsaWRlczogdHJ1ZSxcbiAgICAgICAgICBmcmVlTW9kZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBvbjoge1xuICAgICAgICBpbml0ICgpIHtcbiAgICAgICAgICAvLyBwcmV2ZW50IGZvY3VzIG9uIGFsbCBzbGlkZXMgZXhjZXB0IHRoZSBhY3RpdmUgb25lXG4gICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoc2xpZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChzbGlkZSAhPT0gdGhpcy5zbGlkZXNbMF0pIHtcbiAgICAgICAgICAgICAgc2xpZGUucXVlcnlTZWxlY3RvckFsbCgnaWZyYW1lLCB2aWRlbywgYnV0dG9uLCBhJykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgc2xpZGVDaGFuZ2UgKCkge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZSA9IHRoaXMucmVhbEluZGV4ICsgMVxuXG4gICAgICAgICAgLy8gcHJldmVudCBmb2N1cyBvbiBhbGwgc2xpZGVzXG4gICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoc2xpZGUpID0+IHtcbiAgICAgICAgICAgIHNsaWRlLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lmcmFtZSwgdmlkZW8sIGJ1dHRvbiwgYScpLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJylcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIC8vIGVuYWJsZSBmb2N1cyBvbiBhY3RpdmUgc2xpZGVcbiAgICAgICAgICB0aGlzLnNsaWRlc1t0aGlzLmFjdGl2ZUluZGV4XS5xdWVyeVNlbGVjdG9yQWxsKCdpZnJhbWUsIHZpZGVvLCBidXR0b24sIGEnKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICAvLyBhbm5vdW5jZSBjdXJyZW50IHNsaWRlIGZvciBzY3JlZW4gcmVhZGVyc1xuICAgICAgICAgIGFubm91bmNlbWVudHMudGV4dENvbnRlbnQgPSB2aWRlb0dhbGxlcnlWaWRlbyArICcgJyArIGN1cnJlbnRTbGlkZVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICB9KVxufVxuIiwiLy8gZmluZCBkb25hdGlvbiBwbHVnaW5zIGFuZCB3cmFwIGZyYW1lcyBpbiBzcGVjaWZpYyBiZyBjbGFzc1xuZXhwb3J0IGNvbnN0IGRvbmF0aW9uRnJhbWUgPSAoKSA9PiB7XG4gIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmRvbmF0aW9uLWJhcm9tZXRlcicpKSB7IHJldHVybiB9XG5cbiAgY29uc3QgZG9uYXRpb25CYXJvbWV0ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZG9uYXRpb24tYmFyb21ldGVyJylcbiAgY29uc3QgZG9uYXRpb25CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZG9uYXRpb24tYnV0dG9uJylcblxuICAvLyBmaW5kIGRvbmF0aW9uIGJhcm9tZXRlciBhbmQgYWRkIGJnIGNsYXNzIHRvIGZyYW1lXG4gIGlmIChkb25hdGlvbkJhcm9tZXRlci5sZW5ndGgpIHtcbiAgICBkb25hdGlvbkJhcm9tZXRlci5mb3JFYWNoKChkb25hdGlvbkJhcm9tZXRlcikgPT4ge1xuXG4gICAgICBjb25zdCBiYXJvbWV0ZXJXcmFwcGVyID0gZG9uYXRpb25CYXJvbWV0ZXIucGFyZW50Tm9kZVxuXG4gICAgICBiYXJvbWV0ZXJXcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2JnJywgJ2JnLS1saWdodGdyZXknKVxuICAgIH0pXG4gIH1cblxuICAvLyBmaW5kIGRvbmF0aW9uIGJ1dHRvbiBhbmQgYWRkIGJnIGNsYXNzIHRvIGZyYW1lXG4gIGlmIChkb25hdGlvbkJ1dHRvbi5sZW5ndGgpIHtcbiAgICBkb25hdGlvbkJ1dHRvbi5mb3JFYWNoKChkb25hdGlvbkJ1dHRvbikgPT4ge1xuXG4gICAgICBjb25zdCBidXR0b25XcmFwcGVyID0gZG9uYXRpb25CdXR0b24ucGFyZW50Tm9kZVxuXG4gICAgICBidXR0b25XcmFwcGVyLmNsYXNzTGlzdC5hZGQoJ2JnJywgJ2JnLS1yZWQnKVxuICAgIH0pXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtZW1iZXJzaGlwQXBwbGljYXRpb24gPSAoKSA9PiB7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvbnN0IE1lbWJlcnNoaXAgPSB7XG4gICAgJGZvcm06IG51bGwsXG4gICAgJHppcEZpZWxkOiBudWxsLFxuICAgICRtYWlsRmllbGQ6IG51bGwsXG4gICAgJHVybEZpZWxkOiBudWxsLFxuICAgICRjaGFwdGVyTmFtZUZpZWxkOiBudWxsLFxuICAgICRjaGFwdGVyU2VsZWN0RmllbGQ6IG51bGwsXG4gICAgJGNoYXB0ZXJTZWxlY3RDb250YWluZXI6IG51bGwsXG4gICAgJGZpcnN0Q2hhcHRlclNlbGVjdE9wdGlvbjogbnVsbCxcbiAgICAkc3VibWl0QnV0dG9uOiBudWxsLFxuICAgICRpbmZvcm1hdGlvbkZpZWxkOiBudWxsLFxuICAgIGVycm9yQ2xhc3M6ICdwYXJzbGV5LWVycm9yJyxcbiAgICAvLyBTdGFuZGFyZC1Lb25maWd1cmF0aW9uXG4gICAgX3RpbWVvdXQ6IDUwMCxcbiAgICAvKipcbiAgICAgKiBzdGFydCByZWZlcmVuY2luZyBmaWVsZHMgaWYgY29ycmVjdCBmb3JtIGNsYXNzIGlzIGZvdW5kXG4gICAgICovXG4gICAgaW5pdDogZnVuY3Rpb24gKCkge1xuICAgICAgLy8galF1ZXJ5LVJlZmVyZW56IGF1ZiBkYXMgRm9ybXVsYXItRWxlbWVudFxuICAgICAgdGhpcy4kZm9ybSA9ICQoJy5vLWZvcm0tLW1lbWJlcnNoaXBfX2FwcGxpY2F0aW9uJykucGFyZW50KCdmb3JtJylcblxuICAgICAgaWYgKHRoaXMuJGZvcm0ubGVuZ3RoKSB7XG4gICAgICAgI
101HRoaXMuYWRkUGFyc2xleVZhbGlkYXRvcigpXG4gICAgICAgIC8vIGpRdWVyeS1SZWZlcmVueiBhdWYgZGFzIEVpbmdhYmVmZWxkIGbDvHIgZGllIFBvc3RsZWl0emFobFxuICAgICAgICB0aGlzLiR6aXBGaWVsZCA9ICQoJyNwb3dlcm1haWxfZmllbGRfemlwJylcbiAgICAgICAgLy8galF1ZXJ5LVJlZmVyZW56IGF1ZiBkYXMgRWluZ2FiZWZlbGQgZsO8ciBkZW4gS3JlaXN2ZXJiYW5kXG4gICAgICAgIHRoaXMuJGNoYXB0ZXJTZWxlY3RGaWVsZCA9IHRoaXMuJGZvcm0uZmluZCgnI3Bvd2VybWFpbF9maWVsZF9jaGFwdGVyJylcbiAgICAgICAgdGhpcy4kY2hhcHRlclNlbGVjdENvbnRhaW5lciA9IHRoaXMuJGZvcm0uZmluZCgnI3Bvd2VybWFpbF9maWVsZHdyYXBfMTQ1JylcbiAgICAgICAgdGhpcy4kdXJsRmllbGQgPSB0aGlzLiRmb3JtLmZpbmQoJyNwb3dlcm1haWxfZmllbGRfb3JnYW5pc2F0aW9uX3VybCcpXG4gICAgICAgIHRoaXMuJG1haWxGaWVsZCA9IHRoaXMuJGZvcm0uZmluZCgnI3Bvd2VybWFpbF9maWVsZF9vcmdhbmlzYXRpb25fbWFpbCcpXG4gICAgICAgIHRoaXMuJGluZm9ybWF0aW9uRmllbGQgPSB0aGlzLiRmb3JtLmZpbmQoJyNwb3dlcm1haWxfZmllbGR3cmFwXzE0OCcpLmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgICB0aGlzLiRyZXF1aXJlZFRleHQgPSB0aGlzLiRmb3JtLmZpbmQoJyNwb3dlcm1haWxfZmllbGR3cmFwXzE0OScpXG4gICAgICAgIHRoaXMuJGNoYXB0ZXJOYW1lRmllbGQgPSB0aGlzLiRmb3JtLmZpbmQoJyNwb3dlcm1haWxfZmllbGRfa3JlaXN2ZXJiYW5kbmFtZScpXG4gICAgICAgIHRoaXMuJHN1Ym1pdEJ1dHRvbiA9IHRoaXMuJGZvcm0uZmluZCgnLnBvd2VybWFpbF9zdWJtaXQnKVxuICAgICAgICB0aGlzLiRmaXJzdENoYXB0ZXJTZWxlY3RPcHRpb24gPSB0aGlzLiRjaGFwdGVyU2VsZWN0RmllbGQuZmluZCgnb3B0aW9uOmZpcnN0JykuY2xvbmUoKVxuICAgICAgICAvLyBPYmpla3QgbnVyIGluaXRpaWVyZW4sIHdlbm4gYXVjaCBlaW5lIFVSTCBhdXNnZWxlc2VuIHdlcmRlbiBrb25udGVcbiAgICAgICAgdGhpcy4kemlwRmllbGQub24oJ2tleXVwIGNoYW5nZSBpbnB1dCcsICQucHJveHkodGhpcy5faGFuZGxlWmlwSW5wdXQsIHRoaXMpKVxuICAgICAgICAvLyBvbiBwYWdlIHJlbG9hZCBpZiB6aXAgaXMgZmlsbGVkIHN0YXJ0IGNoYXB0ZXIgcmVxdWVzdFxuICAgICAgICBpZiAodGhpcy4kemlwRmllbGQudmFsKCkubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0TG9jYWxDaGFwdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFkZFBhcnNsZXlWYWxpZGF0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdpbmRvdy5QYXJzbGV5XG4gICAgICAgIC5hZGRWYWxpZGF0b3IoJ3ZhbGlkYXRlQ2hhcHRlcicsIHtcbiAgICAgICAgICByZXF1aXJlbWVudFR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgICB2YWxpZGF0ZU51bWJlcjogZnVuY3Rpb24gKHZhbHVlLCByZXF1aXJlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlID4gMFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICAgIGRlOiAnQml0dGUgd8OkaGxlbiBTaWUgZWluZW4gS3JlaXN2ZXJiYW5kIGF1cyEnLFxuICAgICAgICAgICAgZW46ICdQbGVhc2UgY2hvb3NlIGEgbG9jYWwgY2hhcHRlciEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFppZWwtVVJMIGbDvHIgZGllIEFqYXgtQW5mcmFnZW5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0UmVxdWVzdFVybDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHppcEZpZWxkLmF0dHIoJ2RhdGEtemlwc3VnZ2VzdHVybCcpXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEZ1bmt0aW9uIGhhbmRoYWJ0IEVpbmdhYmVuIGltIFBMWi1GZWxkIHVuZCB3YXJ0ZXQgYmlzIGRpZSBFaW5nYWJlXG4gICAgICogdm9sbHN0w6RuZGlnIGlzdCwgYmlzIGVpbmUgQW5mcmFnZSBhdXNnZWzDtnN0IHdpcmRcbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2hhbmRsZVppcElucHV0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy4kemlwRmllbGQudmFsKCkubGVuZ3RoID49IDMpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZClcbiAgICAgICAgdGhpcy5fdGltZW91dElkID0gc2V0VGltZW91dChcbiAgICAgICAgICAkLnByb3h5KHRoaXMuX3JlcXVlc3RMb2NhbENoYXB0ZXJzLCB0aGlzKSxcbiAgICAgICAgICB0aGlzLl90aW1lb3V0LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vXG4gICAgLyoqXG4gICAgICogRnVua3Rpb24gZnJhZ3QgYmVpIGdlZ2ViZW5lciBQTFogZGllIGRhenVnZWjDtnJpZ2VuIEtyZWlzdmVyYsOkbmRlIGJlaW0gU2VydmVyIGFuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZXF1ZXN0TG9jYWxDaGFwdGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgemlwY29kZSA9IHRoaXMuJHppcEZpZWxkLnZhbCgpXG4gICAgICB0aGlzLl9vbGRaaXBjb2RlID0gemlwY29kZVxuICAgICAgdGhpcy4kemlwRmllbGQuYWRkQ2xhc3ModGhpcy5sb2FkaW5nQ2xhc3MpXG4gICAgICAkLmFqYXgoe1xuICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuICAgICAgICB1cmw6IHRoaXMuZ2V0UmVxdWVzdFVybCgpICsgemlwY29kZSxcbiAgICAgICAgc3VjY2VzczogJC5wcm94eSh0aGlzLl9oYW5kbGVSZXNwb25zZSwgdGhpcyksXG4gICAgICAgIGVycm9yOiAkLnByb3h5KHRoaXMuX2hhbmRsZUVycm9yLCB0aGlzLCB0aGlzLmRlZmF1bHRFcnJvciksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGdW5rdGlvbiB3ZXJ0ZXQgZGllIFNlcnZlci1BbnR3b3J0IHVuZCBkaWUgS3JlaXN2ZXJiYW5kc2RhdGVuIGF1cyB1bmQgaGFuZGVsdCBlbnRzcHJlY2hlbmRcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anNvbn0gcmVzcG9uc2VcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9oYW5kbGVSZXNwb25zZTogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICBsZXQgY2hhcHRlcnMsIG9yZ0lkXG4gICAgICB0aGlzLiR6aXBGaWVsZC5yZW1vdmVDbGFzcyh0aGlzLmxvYWRpbmdDbGFzcylcbiAgICAgIGlmIChyZXNwb25zZS5vcmdkYXRhKSB7XG4gICAgICAgIGNoYXB0ZXJzID0gW11cbiAgICAgICAgZm9yIChvcmdJZCBpbiByZXNwb25zZS5vcmdkYXRhKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgIGlmIChyZXNwb25zZS5vcmdkYXRhLmhhc093blByb3BlcnR5KG9yZ0lkKSkge1xuICAgICAgICAgICAgY2hhcHRlcnMucHVzaChyZXNwb25zZS5vcmdkYXRhW29yZ0lkXSlcbiAgICAgICAgICB9XG4gICAgICAgI
101H1cblxuICAgICAgICBpZiAoY2hhcHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuX3JlbmRlckNoYXB0ZXJTZWxlY3Rpb24oY2hhcHRlcnMpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9oYW5kbGVTdWNjZXNzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKHJlc3BvbnNlLndhcm5pbmcpXG4gICAgICAgIHRoaXMuX3Jlc2V0Q2hhcHRlckluZm9ybWF0aW9uKClcbiAgICAgICAgdGhpcy5faGlkZUNoYXB0ZXJTZWxlY3Rpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEZ1bmt0aW9uIGVyemV1Z3QgZWluIEF1c3dhaGxmZWxkLCBmYWxscyBtZWhyZXJlIG3DtmdsaWNoZVxuICAgICAqIEtyZWlzdmVyYsOkbmRlIHp1ciBBdXN3YWhsIHN0ZWhlblxuICAgICAqXG4gICAgICogQHBhcmFtIHthcnJheX0gY2hhcHRlcnNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZW5kZXJDaGFwdGVyU2VsZWN0aW9uOiBmdW5jdGlvbiAoY2hhcHRlcnMpIHtcbiAgICAgIGxldCBvcHRpb25zID0gJyc7IGxldCBpOyBjb25zdCBsZW4gPSBjaGFwdGVycy5sZW5ndGhcbiAgICAgIC8vIGFkZCBcIlBsZWFzZSBjaG9vc2VcIiBvcHRpb24gaWYgbW9yZSB0aGVuIDEgZWxlbWVudFxuICAgICAgaWYgKGxlbiA+IDEpIHtcbiAgICAgICAgb3B0aW9ucyArPSB0aGlzLiRmaXJzdENoYXB0ZXJTZWxlY3RPcHRpb24ucHJvcCgnb3V0ZXJIVE1MJylcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIG9wdGlvbnMgKz1cbiAgICAgICAgICAgICc8b3B0aW9uIGRhdGEtbWFpbD1cIicgKyBjaGFwdGVyc1tpXS5kYXRhLm1haWwgKyAnXCIgJyArXG4gICAgICAgICAgICAnZGF0YS1uYW1lPVwiJyArIGNoYXB0ZXJzW2ldLm5hbWUgKyAnXCInICtcbiAgICAgICAgICAgICdkYXRhLWlkPVwiJyArIGNoYXB0ZXJzW2ldLmRhdGEuaWQgKyAnXCInICtcbiAgICAgICAgICAgICdkYXRhLXVybD1cIicgKyBjaGFwdGVyc1tpXS5kYXRhLnVybCArICdcIiB2YWx1ZT1cIicgK1xuICAgICAgICAgICAgY2hhcHRlcnNbaV0uZGF0YS5pZCArXG4gICAgICAgICAgICAnXCIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPicgK1xuICAgICAgICAgICAgY2hhcHRlcnNbaV0ubmFtZSArXG4gICAgICAgICAgICAnPC9vcHRpb24+J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMgKz1cbiAgICAgICAgICAgICc8b3B0aW9uIGRhdGEtbWFpbD1cIicgKyBjaGFwdGVyc1tpXS5kYXRhLm1haWwgKyAnXCIgJyArXG4gICAgICAgICAgICAnZGF0YS1uYW1lPVwiJyArIGNoYXB0ZXJzW2ldLm5hbWUgKyAnXCInICtcbiAgICAgICAgICAgICdkYXRhLWlkPVwiJyArIGNoYXB0ZXJzW2ldLmRhdGEuaWQgKyAnXCInICtcbiAgICAgICAgICAgICdkYXRhLXVybD1cIicgKyBjaGFwdGVyc1tpXS5kYXRhLnVybCArICdcIiB2YWx1ZT1cIicgK1xuICAgICAgICAgICAgY2hhcHRlcnNbaV0uZGF0YS5pZCArXG4gICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICBjaGFwdGVyc1tpXS5uYW1lICtcbiAgICAgICAgICAgICc8L29wdGlvbj4nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJGNoYXB0ZXJTZWxlY3RGaWVsZC5maW5kKCdvcHRpb24nKS5yZW1vdmUoKVxuICAgICAgdGhpcy4kY2hhcHRlclNlbGVjdEZpZWxkLmFwcGVuZChvcHRpb25zKVxuICAgICAgdGhpcy4kY2hhcHRlclNlbGVjdENvbnRhaW5lci5yZW1vdmVDbGFzcygnaGlkZGVuJylcbiAgICAgIHRoaXMuJGNoYXB0ZXJTZWxlY3RGaWVsZC5vbignY2hhbmdlJyxcbiAgICAgICAgJC5wcm94eSh0aGlzLl9oYW5kbGVTZWxlY3RDaGFuZ2UsIHRoaXMpKVxuXG4gICAgICBpZiAobGVuID09PSAxKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNoYXB0ZXJJbmZvcm1hdGlvbihcbiAgICAgICAgICB0aGlzLiRjaGFwdGVyU2VsZWN0RmllbGQuZmluZCgnb3B0aW9uOmZpcnN0JyksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBGdW5rdGlvbiBuaW1tdCDDhG5kZXJ1bmdlbiBhbSBGb3JtdWxhciB2b3IsIGZhbGxzIGVpbiBGZWhsZXIgdm9ybGllZ3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaGFuZGxlRXJyb3I6IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG5cbiAgICAgIGlmICgkKCcjY2hhcHRlci1lcnJvcicpLmxlbmd0aCA9PT0gMCkge1xuXG4gICAgICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBtZXNzYWdlID0gJ0hpZXIgaGF0IGV0d2FzIG5pY2h0IGZ1bmt0aW9uaWVydCEgJ1xuICAgICAgICAgIG1lc3NhZ2UgKz0gJ01pdCBlaW5lbSBLbGljayBhdWYgdW50ZW4gc3RlaGVuZGVuIEJ1dHRvbiB3ZXJkZW4nXG4gICAgICAgICAgbWVzc2FnZSArPSAnIFNpZSB6dSB1bnNlcmVtIE9ubGluZS1Gb3JtdWxhciB3ZWl0ZXJnZWxlaXRldC4nXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiRlcnJvciA9ICQoJzxwIGlkPVwiY2hhcHRlci1lcnJvclwiIGNsYXNzPVwiby1mb3JtX19ub24tcGFyc2xleS1lcnJvclwiPjwvcD4nKVxuICAgICAgICB0aGlzLiRlcnJvci5odG1sKG1lc3NhZ2UpXG4gICAgICAgIHRoaXMuJHJlcXVpcmVkVGV4dC5iZWZvcmUodGhpcy4kZXJyb3IpXG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMuJHppcEZpZWxkLmFkZENsYXNzKHRoaXMuZXJyb3JDbGFzcyk7XG4gICAgICB0aGlzLiRjaGFwdGVyU2VsZWN0Q29udGFpbmVyLmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgdGhpcy4kaW5mb3JtYXRpb25GaWVsZC5hZGRDbGFzcygnaGlkZGVuJylcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBGdW5rdGlvbiBtYWNodCDDhG5kZXJ1bmdlbiBkZXIgRnVua3Rpb24gX2hhbmRsZUVycm9yIHLDvGNrZ8OkbmdpZ1xuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfaGFuZGxlU3VjY2VzczogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMuJGVycm9yKSB7XG4gICAgICAgIC8vIHRoaXMuJHppcEZpZWxkLnJlbW92ZUNsYXNzKHRoaXMuZXJyb3JDbGFzcyk7XG4gICAgICAgICQoJyNjaGFwdGVyLWVycm9yJywgdGhpcy4kZm9ybSkucmVtb3ZlKClcbiAgICAgIH1cbiAgICAgIC8vIHdyaXRlIGNoYXB0ZXIgaW5mbyB0byBmb3JtXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogRnVua3Rpb24gZsOkbmd0IMOEbmRlcnVuZ2VuIGFuIGRlciBLcmVpc3ZlcmJhbmRzYXVzd2FobCBhYiB1bmRcbiAgICAgKiBsw6Rzc3QgZGllIEtyZWlzdmVyYmFuZHNkYXRlbiBha3R1YWxpc2llcmVuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09
101iamVjdH0gZVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX2hhbmRsZVNlbGVjdENoYW5nZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNoYXB0ZXJJbmZvcm1hdGlvbigkKGUudGFyZ2V0KS5maW5kKCdvcHRpb246c2VsZWN0ZWQnKSlcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBGdW5rdGlvbiBlbnRmZXJudCBkaWUgQXVzd2FobCBmw7xyIEtyZWlzdmVyYsOkbmRlXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9oaWRlQ2hhcHRlclNlbGVjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMuJGNoYXB0ZXJTZWxlY3RGaWVsZCkge1xuICAgICAgICB0aGlzLiRjaGFwdGVyU2VsZWN0Q29udGFpbmVyLmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgICB0aGlzLiRpbmZvcm1hdGlvbkZpZWxkLmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEZ1bmt0aW9uIGFrdHVhbGlzaWVydCBhdWYgQmFzaXMgZGVyIEtyZWlzdmVyYmFuZHNkYXRlbiBkaWVcbiAgICAgKiBkZWZpbmllcnRlbiBGZWxkZXIgaW5uZXJoYWxiIGRlcyBGb3JtdWxhcnNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBzZWxlY3RlZE9wdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VwZGF0ZUNoYXB0ZXJJbmZvcm1hdGlvbjogZnVuY3Rpb24gKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gIT09IHVuZGVmaW5lZCAmJiBzZWxlY3RlZE9wdGlvbi52YWwoKSAhPT0gJy0xJykge1xuICAgICAgICB0aGlzLiRtYWlsRmllbGQudmFsKHNlbGVjdGVkT3B0aW9uLmRhdGEoJ21haWwnKSlcbiAgICAgICAgdGhpcy4kdXJsRmllbGQudmFsKHNlbGVjdGVkT3B0aW9uLmRhdGEoJ3VybCcpKVxuICAgICAgICB0aGlzLiRjaGFwdGVyTmFtZUZpZWxkLnZhbChzZWxlY3RlZE9wdGlvbi5kYXRhKCduYW1lJykpXG4gICAgICAgIHRoaXMuJGluZm9ybWF0aW9uRmllbGQucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZXNldENoYXB0ZXJJbmZvcm1hdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogRnVua3Rpb24gbGVlcnQgdm9yaGVyIGF1c2dlZsO8bGx0ZSBGZWxkZXIgZsO8ciBLcmVpc3ZlcmJhbmRzZGF0ZW5cbiAgICAgKiBpbSBGZWhsZXJmYWxsXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIF9yZXNldENoYXB0ZXJJbmZvcm1hdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy4kbWFpbEZpZWxkLnZhbCgnJylcbiAgICAgIHRoaXMuJHVybEZpZWxkLnZhbCgnJylcbiAgICAgIHRoaXMuJGNoYXB0ZXJOYW1lRmllbGQudmFsKCcnKVxuICAgICAgdGhpcy4kaW5mb3JtYXRpb25GaWVsZC5hZGRDbGFzcygnaGlkZGVuJylcbiAgICB9LFxuICB9XG5cbiAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vLWZvcm0tLW1lbWJlcnNoaXBfX2FwcGxpY2F0aW9uJykpIHtcbiAgICBNZW1iZXJzaGlwLmluaXQoKVxuICB9XG5cbn1cbiIsImV4cG9ydCBjb25zdCBwYXJzbGV5c2V0dGluZ3MgPSAoKSA9PiB7XG5cbiAgcGFyc2xleS5hZGRNZXNzYWdlcygnZGUnLCB7XG4gICAgZGVmYXVsdE1lc3NhZ2U6ICdEaWUgRWluZ2FiZSBzY2hlaW50IG5pY2h0IGtvcnJla3QgenUgc2Vpbi4nLFxuICAgIHR5cGU6IHtcbiAgICAgIGVtYWlsOiAnRGllIEVpbmdhYmUgbXVzcyBlaW5lIGfDvGx0aWdlIEUtTWFpbC1BZHJlc3NlIHNlaW4uJyxcbiAgICAgIHVybDogJ0RpZSBFaW5nYWJlIG11c3MgZWluZSBnw7xsdGlnZSBVUkwgc2Vpbi4nLFxuICAgICAgbnVtYmVyOiAnRGllIEVpbmdhYmUgbXVzcyBlaW5lIFphaGwgc2Vpbi4nLFxuICAgICAgaW50ZWdlcjogJ0RpZSBFaW5nYWJlIG11c3MgZWluZSBaYWhsIHNlaW4uJyxcbiAgICAgIGRpZ2l0czogJ0RpZSBFaW5nYWJlIGRhcmYgbnVyIFppZmZlcm4gZW50aGFsdGVuLicsXG4gICAgICBhbHBoYW51bTogJ0RpZSBFaW5nYWJlIG11c3MgYWxwaGFudW1lcmlzY2ggc2Vpbi4nLFxuICAgICAgdGVsOiAnRGllIEVpbmdhYmUgZGFyZiBudXIgWmlmZmVybiBlbnRoYWx0ZW4uJyxcbiAgICB9LFxuICAgIG5vdGJsYW5rOiAnRGllIEVpbmdhYmUgZGFyZiBuaWNodCBsZWVyIHNlaW4uJyxcbiAgICByZXF1aXJlZDogJ0RpZXMgaXN0IGVpbiBQZmxpY2h0ZmVsZC4nLFxuICAgIHBhdHRlcm46ICdEaWUgRWluZ2FiZSBzY2hlaW50IHVuZ8O8bHRpZyB6dSBzZWluLicsXG4gICAgbWluOiAnRGllIEVpbmdhYmUgbXVzcyBncsO2w59lciBvZGVyIGdsZWljaCAlcyBzZWluLicsXG4gICAgbWF4OiAnRGllIEVpbmdhYmUgbXVzcyBrbGVpbmVyIG9kZXIgZ2xlaWNoICVzIHNlaW4uJyxcbiAgICByYW5nZTogJ0RpZSBFaW5nYWJlIG11c3Mgendpc2NoZW4gJXMgdW5kICVzIGxpZWdlbi4nLFxuICAgIG1pbmxlbmd0aDogJ0RpZSBFaW5nYWJlIGlzdCB6dSBrdXJ6LiBFcyBtw7xzc2VuIG1pbmRlc3RlbnMgJXMgWmVpY2hlbiBlaW5nZWdlYmVuIHdlcmRlbi4nLFxuICAgIG1heGxlbmd0aDogJ0RpZSBFaW5nYWJlIGlzdCB6dSBsYW5nLiBFcyBkw7xyZmVuIGjDtmNoc3RlbnMgJXMgWmVpY2hlbiBlaW5nZWdlYmVuIHdlcmRlbi4nLFxuICAgIGxlbmd0aDogJ0RpZSBMw6RuZ2UgZGVyIEVpbmdhYmUgaXN0IHVuZ8O8bHRpZy4gRXMgbcO8c3NlbiB6d2lzY2hlbiAlcyB1bmQgJXMgWmVpY2hlbiBlaW5nZWdlYmVuIHdlcmRlbi4nLFxuICAgIG1pbmNoZWNrOiAnV8OkaGxlbiBTaWUgbWluZGVzdGVucyAlcyBBbmdhYmVuIGF1cy4nLFxuICAgIG1heGNoZWNrOiAnV8OkaGxlbiBTaWUgbWF4aW1hbCAlcyBBbmdhYmVuIGF1cy4nLFxuICAgIGNoZWNrOiAnV8OkaGxlbiBTaWUgendpc2NoZW4gJXMgdW5kICVzIEFuZ2FiZW4uJyxcbiAgICBlcXVhbHRvOiAnRGllc2VzIEZlbGQgbXVzcyBkZW0gYW5kZXJlbiBlbnRzcHJlY2hlbi4nLFxuICB9KTtcblxuICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPT09ICdkZScgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmxhbmcgPT09ICdkZS1ERScpIHtcbiAgICBwYXJzbGV5LnNldExvY2FsZSgnZGUnKTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzbGV5LnNldExvY2FsZSgnZW4nKTtcbiAgfVxuXG4gIGxldCAgJG1haWxGb3JtO1xuXG4gICRtYWlsRm9ybSA9IGpRdWVyeSgnLm8tZm9ybScpO1xuXG4gIC8vIEV4aXQgaWYgbm8gbWFpbGZvcm0gZm9ybVxuICBpZiAoISRtYWlsRm9ybSkgcmV0dXJuO1xuXG4gIGlmICgkbWFpbEZvcm0ubGVuZ3RoKSB7XG4gICAgJG1haWxGb3JtLnBhcnNsZXkoXG4gICAgICB7XG4gICAgICAgI
101HRyaWdnZXI6ICdjaGFuZ2UnLFxuICAgICAgfVxuICAgICk7XG4gICAgJG1haWxGb3JtLmF0dHIoJ2RhdGEtcGFyc2xleS1leGNsdWRlZCcsICdbZGlzYWJsZWRdJyk7XG4gIH1cbn07XG5cblxuIiwiLyoqXG4gKiBBdXRvIGNyZWF0ZSB0ZWxlcGhvbmUgbGlua3NcbiAqL1xuXG5leHBvcnQgY29uc3QgaW5pdFRlbGVwaG9uZUxpbmtzID0gKCkgPT4ge1xuICBjb25zdCB0YXJnZXROb2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5qcy1jcmVhdGUtdGVsZXBob25lLWxpbmsnKVxuXG4gIHRhcmdldE5vZGVzLmZvckVhY2goKG9yaWdpbmFsTm9kZSkgPT4ge1xuICAgIGNvbnN0IHRlbGVwaG9uZU51bWJlciA9IG9yaWdpbmFsTm9kZS5pbm5lckhUTUxcblxuICAgIC8vIENsZWFuIHVwIHRlbGVwaG9uZSBudW1iZXIgYnkgcmVtb3ZpbmcgXCIoMClcIiBhbmQgYWxsIG5vbi1kaWdpdCBjaGFyYWN0ZXJzIGV4Y2VwdCBcIitcIlxuICAgIGNvbnN0IGNsZWFuZWRUZWxlcGhvbmVOdW1iZXIgPSB0ZWxlcGhvbmVOdW1iZXIucmVwbGFjZSgvXFwoMFxcKS9nLCAnJykucmVwbGFjZSgvW14wLTkrXS9nLCAnJylcblxuICAgIC8vIENyZWF0ZSBuZXcgbGluayB3aXRoIGNsZWFuZWQgdGVsZXBob25lIG51bWJlciBhcyBocmVmIGFuZCBvcmlnaW5hbCBjbGFzc2VzXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgIGxpbmsuaHJlZiA9IGB0ZWw6JHtjbGVhbmVkVGVsZXBob25lTnVtYmVyfWBcbiAgICBsaW5rLmNsYXNzTGlzdC5hZGQoLi4ub3JpZ2luYWxOb2RlLmNsYXNzTGlzdClcbiAgICBsaW5rLmlubmVySFRNTCA9IHRlbGVwaG9uZU51bWJlclxuXG4gICAgLy8gUmVwbGFjZSBvbGQgbm9kZSB3aXRoIG5ldyBsaW5rXG4gICAgb3JpZ2luYWxOb2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGxpbmssIG9yaWdpbmFsTm9kZSlcbiAgfSlcbn1cbiIsImV4cG9ydCBjb25zdCBwYWdlQ2F0ZWdvcnkgPSAoKSA9PiB7XG4gIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBhZ2V0c19fY2F0ZWdvcnknKSkgeyByZXR1cm4gfVxuXG4gIGNvbnN0IGZpcnN0RnJhbWVIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGFnZXRzX19jYXRlZ29yeSAjbWFpbiA+IC5mcmFtZSAuaGVhZGVyJylcbiAgY29uc3QgY2F0ZWdvcnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucGFnZS1jYXRlZ29yeScpXG5cbiAgLy8gYXBwZW5kIGNhdGVnb3J5IHRvIGZpcnN0IGZyYW1lIGhlYWRlclxuXG4gIGlmIChmaXJzdEZyYW1lSGVhZGVyICYmIGNhdGVnb3J5KSB7XG4gICAgZmlyc3RGcmFtZUhlYWRlci5hcHBlbmRDaGlsZChjYXRlZ29yeSlcbiAgICBjYXRlZ29yeS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICB9XG59XG4iXX0= 102(function() { 103 104 'use strict'; 105 106 /** 107 * tabs 108 * 109 * @description The Tabs component. 110 * @param {Object} options The options hash 111 */ 112 var tabs = function(options) { 113 114 var el = document.querySelector(options.el); 115 var tabNavigationLinks = el.querySelectorAll(options.tabNavigationLinks); 116 var tabContentContainers = el.querySelectorAll(options.tabContentContainers); 117 var activeIndex = 0; 118 var initCalled = false; 119 120 /** 121 * init 122 * 123 * @description Initializes the component by removing the no-js class from 124 * the component, and attaching event listeners to each of the nav items. 125 * Returns nothing. 126 */ 127 var init = function() { 128 if (!initCalled) { 129 initCalled = true; 130 el.classList.remove('no-js'); 131 132 for (var i = 0; i < tabNavigationLinks.length; i++) { 133 var link = tabNavigationLinks[i]; 134 handleClick(link, i); 135 } 136 } 137 }; 138 139 /** 140 * handleClick 141 * 142 * @description Handles click event listeners on each of the links in the 143 * tab navigation. Returns nothing. 144 * @param {HTMLElement} link The link to listen for events on 145 * @param {Number} index The index of that link 146 */ 147 var handleClick = function(link, index) { 148 link.addEventListener('click', function(e) { 149 e.preventDefault(); 150 goToTab(index); 151 }); 152 }; 153 154 /** 155 * goToTab 156 * 157 * @description Goes to a specific tab based on index. Returns nothing. 158 * @param {Number} index The index of the tab to go to 159 */ 160 var goToTab = function(index) { 161 if (index !== activeIndex && index >= 0 && index <= tabNavigationLinks.length) { 162 tabNavigationLinks[activeIndex].classList.remove('is-active'); 163 tabNavigationLinks[index].classList.add('is-active'); 164 tabContentContainers[activeIndex].classList.remove('is-active'); 165 tabContentContainers[index].classList.add('is-active'); 166 activeIndex = index; 167 } 168 }; 169 170 /** 171 * Returns init and goToTab 172 */ 173 return { 174 init: init, 175 goToTab: goToTab 176 }; 177 178 }; 179 180 /** 181 * Attach to global namespace 182 */ 183 window.tabs = tabs; 184 185})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.