(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{"./node_modules/bootstrap-datepicker/dist/bootstrap-datepicker.js":function(t,e,i){(function(t){!function(t){var e=function(e,n){if(this.element=t(e),this.format=i.parseFormat(n.format||this.element.data("date-format")||"mm/dd/yyyy"),this.picker=t(i.template).appendTo("body").on({click:t.proxy(this.click,this)}),this.isInput=this.element.is("input"),this.component=!!this.element.is(".date")&&this.element.find(".add-on"),this.isInput?this.element.on({focus:t.proxy(this.show,this),keyup:t.proxy(this.update,this)}):this.component?this.component.on("click",t.proxy(this.show,this)):this.element.on("click",t.proxy(this.show,this)),this.minViewMode=n.minViewMode||this.element.data("date-minviewmode")||0,"string"==typeof this.minViewMode)switch(this.minViewMode){case"months":this.minViewMode=1;break;case"years":this.minViewMode=2;break;default:this.minViewMode=0}if(this.viewMode=n.viewMode||this.element.data("date-viewmode")||0,"string"==typeof this.viewMode)switch(this.viewMode){case"months":this.viewMode=1;break;case"years":this.viewMode=2;break;default:this.viewMode=0}this.startViewMode=this.viewMode,this.weekStart=n.weekStart||this.element.data("date-weekstart")||0,this.weekEnd=0===this.weekStart?6:this.weekStart-1,this.onRender=n.onRender,this.fillDow(),this.fillMonths(),this.update(),this.showMode()};e.prototype={constructor:e,show:function(e){this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.place(),t(window).on("resize",t.proxy(this.place,this)),e&&(e.stopPropagation(),e.preventDefault()),this.isInput;var i=this;t(document).on("mousedown",(function(e){0==t(e.target).closest(".datepicker").length&&i.hide()})),this.element.trigger({type:"show",date:this.date})},hide:function(){this.picker.hide(),t(window).off("resize",this.place),this.viewMode=this.startViewMode,this.showMode(),this.isInput||t(document).off("mousedown",this.hide),this.element.trigger({type:"hide",date:this.date})},set:function(){var t=i.formatDate(this.date,this.format);this.isInput?this.element.prop("value",t):(this.component&&this.element.find("input").prop("value",t),this.element.data("date",t))},setValue:function(t){this.date="string"==typeof t?i.parseDate(t,this.format):new Date(t),this.set(),this.viewDate=new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0,0),this.fill()},place:function(){var t=this.component?this.component.offset():this.element.offset();this.picker.css({top:t.top+this.height,left:t.left})},update:function(t){this.date=i.parseDate("string"==typeof t?t:this.isInput?this.element.prop("value"):this.element.data("date"),this.format),this.viewDate=new Date(this.date.getFullYear(),this.date.getMonth(),1,0,0,0,0),this.fill()},fillDow:function(){for(var t=this.weekStart,e="<tr>";t<this.weekStart+7;)e+='<th class="dow">'+i.dates.daysMin[t++%7]+"</th>";e+="</tr>",this.picker.find(".datepicker-days thead").append(e)},fillMonths:function(){for(var t="",e=0;e<12;)t+='<span class="month">'+i.dates.monthsShort[e++]+"</span>";this.picker.find(".datepicker-months td").append(t)},fill:function(){var t=new Date(this.viewDate),e=t.getFullYear(),n=t.getMonth(),s=this.date.valueOf();this.picker.find(".datepicker-days th:eq(1)").text(i.dates.months[n]+" "+e);var o=new Date(e,n-1,28,0,0,0,0),a=i.getDaysInMonth(o.getFullYear(),o.getMonth());o.setDate(a),o.setDate(a-(o.getDay()-this.weekStart+7)%7);var r=new Date(o);r.setDate(r.getDate()+42),r=r.valueOf();for(var l,h,d,p=[];o.valueOf()<r;)o.getDay()===this.weekStart&&p.push("<tr>"),l=this.onRender(o),h=o.getFullYear(),(d=o.getMonth())<n&&h===e||h<e?l+=" old":(d>n&&h===e||h>e)&&(l+=" new"),o.valueOf()===s&&(l+=" active"),p.push('<td class="day '+l+'">'+o.getDate()+"</td>"),o.getDay()===this.weekEnd&&p.push("</tr>"),o.setDate(o.getDate()+1);this.picker.find(".datepicker-days tbody").empty().append(p.join(""));var c=this.date.getFullYear(),f=this.picker.find(".datepicker-months").find("th:eq(1)").text(e).end().find("span").removeClass("active");c===e&&f.eq(this.date.getMonth()).addClass("active"),p="",e=10*parseInt(e/10,10);var u=this.picker.find(".datepicker-years").find("th:eq(1)").text(e+"-"+(e+9)).end().find("td");e-=1;for(var m=-1;m<11;m++)p+='<span class="year'+(-1===m||10===m?" old":"")+(c===e?" active":"")+'">'+e+"</span>",e+=1;u.html(p)},click:function(e){e.stopPropagation(),e.preventDefault();var n=t(e.target).closest("span, td, th");if(1===n.length)switch(n[0].nodeName.toLowerCase()){case"th":switch(n[0].className){case"switch":this.showMode(1);break;case"prev":case"next":this.viewDate["set"+i.modes[this.viewMode].navFnc].call(this.viewDate,this.viewDate["get"+i.modes[this.viewMode].navFnc].call(this.viewDate)+i.modes[this.viewMode].navStep*("prev"===n[0].className?-1:1)),this.fill(),this.set()}break;case"span":if(n.is(".month")){var s=n.parent().find("span").index(n);this.viewDate.setMonth(s)}else{var o=parseInt(n.text(),10)||0;this.viewDate.setFullYear(o)}0!==this.viewMode&&(this.date=new Date(this.viewDate),this.element.trigger({type:"changeDate",date:this.date,viewMode:i.modes[this.viewMode].clsName})),this.showMode(-1),this.fill(),this.set();break;case"td":if(n.is(".day")&&!n.is(".disabled")){var a=parseInt(n.text(),10)||1;s=this.viewDate.getMonth();n.is(".old")?s-=1:n.is(".new")&&(s+=1);o=this.viewDate.getFullYear();this.date=new Date(o,s,a,0,0,0,0),this.viewDate=new Date(o,s,Math.min(28,a),0,0,0,0),this.fill(),this.set(),this.element.trigger({type:"changeDate",date:this.date,viewMode:i.modes[this.viewMode].clsName})}}},mousedown:function(t){t.stopPropagation(),t.preventDefault()},showMode:function(t){t&&(this.viewMode=Math.max(this.minViewMode,Math.min(2,this.viewMode+t))),this.picker.find(">div").hide().filter(".datepicker-"+i.modes[this.viewMode].clsName).show()}},t.fn.datepicker=function(i,n){return this.each((function(){var s=t(this),o=s.data("datepicker"),a="object"==typeof i&&i;o||s.data("datepicker",o=new e(this,t.extend({},t.fn.datepicker.defaults,a))),"string"==typeof i&&o[i](n)}))},t.fn.datepicker.defaults={onRender:function(t){return""}},t.fn.datepicker.Constructor=e;var i={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],dates:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},isLeapYear:function(t){return t%4==0&&t%100!=0||t%400==0},getDaysInMonth:function(t,e){return[31,i.isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]},parseFormat:function(t){var e=t.match(/[.\/\-\s].*?/),i=t.split(/\W+/);if(!e||!i||0===i.length)throw new Error("Invalid date format.");return{separator:e,parts:i}},parseDate:function(t,e){var i,n=t.split(e.separator);if((t=new Date).setHours(0),t.setMinutes(0),t.setSeconds(0),t.setMilliseconds(0),n.length===e.parts.length){for(var s=t.getFullYear(),o=t.getDate(),a=t.getMonth(),r=0,l=e.parts.length;r<l;r++)switch(i=parseInt(n[r],10)||1,e.parts[r]){case"dd":case"d":o=i,t.setDate(i);break;case"mm":case"m":a=i-1,t.setMonth(i-1);break;case"yy":s=2e3+i,t.setFullYear(2e3+i);break;case"yyyy":s=i,t.setFullYear(i)}t=new Date(s,a,o,0,0,0)}return t},formatDate:function(t,e){var i={d:t.getDate(),m:t.getMonth()+1,yy:t.getFullYear().toString().substring(2),yyyy:t.getFullYear()};i.dd=(i.d<10?"0":"")+i.d,i.mm=(i.m<10?"0":"")+i.m;t=[];for(var n=0,s=e.parts.length;n<s;n++)t.push(i[e.parts[n]]);return t.join(e.separator)},headTemplate:'<thead><tr><th class="prev">‹</th><th colspan="5" class="switch"></th><th class="next">›</th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>'};i.template='<div class="datepicker dropdown-menu"><div class="datepicker-days"><table class="table">'+i.headTemplate+'<tbody></tbody></table></div><div class="datepicker-months"><table class="table">'+i.headTemplate+i.contTemplate+'</table></div><div class="datepicker-years"><table class="table">'+i.headTemplate+i.contTemplate+"</table></div></div>"}(t)}).call(this,i("./node_modules/jquery/dist/jquery.js"))},"./node_modules/bootstrap/dist/js/bootstrap.js":function(t,e,i){(function(t){if(void 0===t)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(t),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var i=!1,n=this;t(this).one("bsTransitionEnd",(function(){i=!0}));return setTimeout((function(){i||t(n).trigger(t.support.transition.end)}),e),this},t((function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})}))}(t),function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.VERSION="3.4.1",i.TRANSITION_DURATION=150,i.prototype.close=function(e){var n=t(this),s=n.attr("data-target");s||(s=(s=n.attr("href"))&&s.replace(/.*(?=#[^\s]*$)/,"")),s="#"===s?[]:s;var o=t(document).find(s);function a(){o.detach().trigger("closed.bs.alert").remove()}e&&e.preventDefault(),o.length||(o=n.closest(".alert")),o.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",a).emulateTransitionEnd(i.TRANSITION_DURATION):a())};var n=t.fn.alert;t.fn.alert=function(e){return this.each((function(){var n=t(this),s=n.data("bs.alert");s||n.data("bs.alert",s=new i(this)),"string"==typeof e&&s[e].call(n)}))},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(t),function(t){"use strict";var e=function(i,n){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,n),this.isLoading=!1};function i(i){return this.each((function(){var n=t(this),s=n.data("bs.button"),o="object"==typeof i&&i;s||n.data("bs.button",s=new e(this,o)),"toggle"==i?s.toggle():i&&s.setState(i)}))}e.VERSION="3.4.1",e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(e){var i="disabled",n=this.$element,s=n.is("input")?"val":"html",o=n.data();e+="Text",null==o.resetText&&n.data("resetText",n[s]()),setTimeout(t.proxy((function(){n[s](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,n.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,n.removeClass(i).removeAttr(i).prop(i,!1))}),this),0)},e.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var n=t.fn.button;t.fn.button=i,t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=n,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(e){var n=t(e.target).closest(".btn");i.call(n,"toggle"),t(e.target).is('input[type="radio"], input[type="checkbox"]')||(e.preventDefault(),n.is("input,button")?n.trigger("focus"):n.find("input:visible,button:visible").first().trigger("focus"))})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))}))}(t),function(t){"use strict";var e=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};function i(i){return this.each((function(){var n=t(this),s=n.data("bs.carousel"),o=t.extend({},e.DEFAULTS,n.data(),"object"==typeof i&&i),a="string"==typeof i?i:o.slide;s||n.data("bs.carousel",s=new e(this,o)),"number"==typeof i?s.to(i):a?s[a]():o.interval&&s.pause().cycle()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=600,e.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},e.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},e.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var n=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(n)},e.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",(function(){e.to(t)})):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){if(!this.sliding)return this.slide("next")},e.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},e.prototype.slide=function(i,n){var s=this.$element.find(".item.active"),o=n||this.getItemForDirection(i,s),a=this.interval,r="next"==i?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var h=o[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(o)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(i),"object"==typeof o&&o.length&&o[0].offsetWidth,s.addClass(r),o.addClass(r),s.one("bsTransitionEnd",(function(){o.removeClass([i,r].join(" ")).addClass("active"),s.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout((function(){l.$element.trigger(c)}),0)})).emulateTransitionEnd(e.TRANSITION_DURATION)):(s.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var n=t.fn.carousel;t.fn.carousel=i,t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=n,this};var s=function(e){var n=t(this),s=n.attr("href");s&&(s=s.replace(/.*(?=#[^\s]+$)/,""));var o=n.attr("data-target")||s,a=t(document).find(o);if(a.hasClass("carousel")){var r=t.extend({},a.data(),n.data()),l=n.attr("data-slide-to");l&&(r.interval=!1),i.call(a,r),l&&a.data("bs.carousel").to(l),e.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",s).on("click.bs.carousel.data-api","[data-slide-to]",s),t(window).on("load",(function(){t('[data-ride="carousel"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}(t),function(t){"use strict";var e=function(i,n){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,n),this.$trigger=t('[data-toggle="collapse"][href="#'+i.id+'"],[data-toggle="collapse"][data-target="#'+i.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function i(e){var i,n=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(document).find(n)}function n(i){return this.each((function(){var n=t(this),s=n.data("bs.collapse"),o=t.extend({},e.DEFAULTS,n.data(),"object"==typeof i&&i);!s&&o.toggle&&/show|hide/.test(i)&&(o.toggle=!1),s||n.data("bs.collapse",s=new e(this,o)),"string"==typeof i&&s[i]()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=350,e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var i,s=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(s&&s.length&&(i=s.data("bs.collapse"))&&i.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){s&&s.length&&(n.call(s,"hide"),i||s.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(e.TRANSITION_DURATION)[a](this.$element[0][l])}}}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var i=t.Event("hide.bs.collapse");if(this.$element.trigger(i),!i.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var s=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return s.call(this);this.$element[n](0).one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(e.TRANSITION_DURATION)}}},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},e.prototype.getParent=function(){return t(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy((function(e,n){var s=t(n);this.addAriaAndCollapsedClass(i(s),s)}),this)).end()},e.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var s=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=s,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(e){var s=t(this);s.attr("data-target")||e.preventDefault();var o=i(s),a=o.data("bs.collapse")?"toggle":s.data();n.call(o,a)}))}(t),function(t){"use strict";var e='[data-toggle="dropdown"]',i=function(e){t(e).on("click.bs.dropdown",this.toggle)};function n(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var n="#"!==i?t(document).find(i):null;return n&&n.length?n:e.parent()}function s(i){i&&3===i.which||(t(".dropdown-backdrop").remove(),t(e).each((function(){var e=t(this),s=n(e),o={relatedTarget:this};s.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(s[0],i.target)||(s.trigger(i=t.Event("hide.bs.dropdown",o)),i.isDefaultPrevented()||(e.attr("aria-expanded","false"),s.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))})))}i.VERSION="3.4.1",i.prototype.toggle=function(e){var i=t(this);if(!i.is(".disabled, :disabled")){var o=n(i),a=o.hasClass("open");if(s(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",s);var r={relatedTarget:this};if(o.trigger(e=t.Event("show.bs.dropdown",r)),e.isDefaultPrevented())return;i.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},i.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var s=t(this);if(i.preventDefault(),i.stopPropagation(),!s.is(".disabled, :disabled")){var o=n(s),a=o.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&o.find(e).trigger("focus"),s.trigger("click");var r=o.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&l<r.length-1&&l++,~l||(l=0),r.eq(l).trigger("focus")}}}};var o=t.fn.dropdown;t.fn.dropdown=function(e){return this.each((function(){var n=t(this),s=n.data("bs.dropdown");s||n.data("bs.dropdown",s=new i(this)),"string"==typeof e&&s[e].call(n)}))},t.fn.dropdown.Constructor=i,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=o,this},t(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})).on("click.bs.dropdown.data-api",e,i.prototype.toggle).on("keydown.bs.dropdown.data-api",e,i.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",i.prototype.keydown)}(t),function(t){"use strict";var e=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy((function(){this.$element.trigger("loaded.bs.modal")}),this))};function i(i,n){return this.each((function(){var s=t(this),o=s.data("bs.modal"),a=t.extend({},e.DEFAULTS,s.data(),"object"==typeof i&&i);o||s.data("bs.modal",o=new e(this,a)),"string"==typeof i?o[i](n):a.show&&o.show(n)}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=300,e.BACKDROP_TRANSITION_DURATION=150,e.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},e.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},e.prototype.show=function(i){var n=this,s=t.Event("show.bs.modal",{relatedTarget:i});this.$element.trigger(s),this.isShown||s.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",(function(){n.$element.one("mouseup.dismiss.bs.modal",(function(e){t(e.target).is(n.$element)&&(n.ignoreBackdropClick=!0)}))})),this.backdrop((function(){var s=t.support.transition&&n.$element.hasClass("fade");n.$element.parent().length||n.$element.appendTo(n.$body),n.$element.show().scrollTop(0),n.adjustDialog(),s&&n.$element[0].offsetWidth,n.$element.addClass("in"),n.enforceFocus();var o=t.Event("shown.bs.modal",{relatedTarget:i});s?n.$dialog.one("bsTransitionEnd",(function(){n.$element.trigger("focus").trigger(o)})).emulateTransitionEnd(e.TRANSITION_DURATION):n.$element.trigger("focus").trigger(o)})))},e.prototype.hide=function(i){i&&i.preventDefault(),i=t.Event("hide.bs.modal"),this.$element.trigger(i),this.isShown&&!i.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(e.TRANSITION_DURATION):this.hideModal())},e.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy((function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")}),this))},e.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy((function(t){27==t.which&&this.hide()}),this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},e.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},e.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop((function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")}))},e.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},e.prototype.backdrop=function(i){var n=this,s=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&s;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+s).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy((function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())}),this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!i)return;o?this.$backdrop.one("bsTransitionEnd",i).emulateTransitionEnd(e.BACKDROP_TRANSITION_DURATION):i()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){n.removeBackdrop(),i&&i()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(e.BACKDROP_TRANSITION_DURATION):a()}else i&&i()},e.prototype.handleUpdate=function(){this.adjustDialog()},e.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},e.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},e.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},e.prototype.setScrollbar=function(){var e=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var i=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",e+i),t(this.fixedContent).each((function(e,n){var s=n.style.paddingRight,o=t(n).css("padding-right");t(n).data("padding-right",s).css("padding-right",parseFloat(o)+i+"px")})))},e.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),t(this.fixedContent).each((function(e,i){var n=t(i).data("padding-right");t(i).removeData("padding-right"),i.style.paddingRight=n||""}))},e.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var n=t.fn.modal;t.fn.modal=i,t.fn.modal.Constructor=e,t.fn.modal.noConflict=function(){return t.fn.modal=n,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(e){var n=t(this),s=n.attr("href"),o=n.attr("data-target")||s&&s.replace(/.*(?=#[^\s]+$)/,""),a=t(document).find(o),r=a.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(s)&&s},a.data(),n.data());n.is("a")&&e.preventDefault(),a.one("show.bs.modal",(function(t){t.isDefaultPrevented()||a.one("hidden.bs.modal",(function(){n.is(":visible")&&n.trigger("focus")}))})),i.call(a,r,this)}))}(t),function(t){"use strict";var e=["sanitize","whiteList","sanitizeFn"],i=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],n={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},s=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,o=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function a(e,n){var a=e.nodeName.toLowerCase();if(-1!==t.inArray(a,n))return-1===t.inArray(a,i)||Boolean(e.nodeValue.match(s)||e.nodeValue.match(o));for(var r=t(n).filter((function(t,e){return e instanceof RegExp})),l=0,h=r.length;l<h;l++)if(a.match(r[l]))return!0;return!1}function r(e,i,n){if(0===e.length)return e;if(n&&"function"==typeof n)return n(e);if(!document.implementation||!document.implementation.createHTMLDocument)return e;var s=document.implementation.createHTMLDocument("sanitization");s.body.innerHTML=e;for(var o=t.map(i,(function(t,e){return e})),r=t(s.body).find("*"),l=0,h=r.length;l<h;l++){var d=r[l],p=d.nodeName.toLowerCase();if(-1!==t.inArray(p,o))for(var c=t.map(d.attributes,(function(t){return t})),f=[].concat(i["*"]||[],i[p]||[]),u=0,m=c.length;u<m;u++)a(c[u],f)||d.removeAttribute(c[u].nodeName);else d.parentNode.removeChild(d)}return s.body.innerHTML}var l=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};l.VERSION="3.4.1",l.TRANSITION_DURATION=150,l.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:n},l.prototype.init=function(e,i,n){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(n),this.$viewport=this.options.viewport&&t(document).find(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var s=this.options.trigger.split(" "),o=s.length;o--;){var a=s[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},l.prototype.getDefaults=function(){return l.DEFAULTS},l.prototype.getOptions=function(i){var n=this.$element.data();for(var s in n)n.hasOwnProperty(s)&&-1!==t.inArray(s,e)&&delete n[s];return(i=t.extend({},this.getDefaults(),n,i)).delay&&"number"==typeof i.delay&&(i.delay={show:i.delay,hide:i.delay}),i.sanitize&&(i.template=r(i.template,i.whiteList,i.sanitizeFn)),i},l.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,(function(t,n){i[t]!=n&&(e[t]=n)})),e},l.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState)i.hoverState="in";else{if(clearTimeout(i.timeout),i.hoverState="in",!i.options.delay||!i.options.delay.show)return i.show();i.timeout=setTimeout((function(){"in"==i.hoverState&&i.show()}),i.options.delay.show)}},l.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},l.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout((function(){"out"==i.hoverState&&i.hide()}),i.options.delay.hide)}},l.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var n=this,s=this.tip(),o=this.getUID(this.type);this.setContent(),s.attr("id",o),this.$element.attr("aria-describedby",o),this.options.animation&&s.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,r=/\s?auto?\s?/i,h=r.test(a);h&&(a=a.replace(r,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?s.appendTo(t(document).find(this.options.container)):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=a,u=this.getPosition(this.$viewport);a="bottom"==a&&d.bottom+c>u.bottom?"top":"top"==a&&d.top-c<u.top?"bottom":"right"==a&&d.right+p>u.width?"left":"left"==a&&d.left-p<u.left?"right":a,s.removeClass(f).addClass(a)}var m=this.getCalculatedOffset(a,d,p,c);this.applyPlacement(m,a);var g=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",g).emulateTransitionEnd(l.TRANSITION_DURATION):g()}},l.prototype.applyPlacement=function(e,i){var n=this.tip(),s=n[0].offsetWidth,o=n[0].offsetHeight,a=parseInt(n.css("margin-top"),10),r=parseInt(n.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top+=a,e.left+=r,t.offset.setOffset(n[0],t.extend({using:function(t){n.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),n.addClass("in");var l=n[0].offsetWidth,h=n[0].offsetHeight;"top"==i&&h!=o&&(e.top=e.top+o-h);var d=this.getViewportAdjustedDelta(i,e,l,h);d.left?e.left+=d.left:e.top+=d.top;var p=/top|bottom/.test(i),c=p?2*d.left-s+l:2*d.top-o+h,f=p?"offsetWidth":"offsetHeight";n.offset(e),this.replaceArrow(c,n[0][f],p)},l.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},l.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=r(e,this.options.whiteList,this.options.sanitizeFn)),t.find(".tooltip-inner").html(e)):t.find(".tooltip-inner").text(e),t.removeClass("fade in top bottom left right")},l.prototype.hide=function(e){var i=this,n=t(this.$tip),s=t.Event("hide.bs."+this.type);function o(){"in"!=i.hoverState&&n.detach(),i.$element&&i.$element.removeAttr("aria-describedby").trigger("hidden.bs."+i.type),e&&e()}if(this.$element.trigger(s),!s.isDefaultPrevented())return n.removeClass("in"),t.support.transition&&n.hasClass("fade")?n.one("bsTransitionEnd",o).emulateTransitionEnd(l.TRANSITION_DURATION):o(),this.hoverState=null,this},l.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},l.prototype.hasContent=function(){return this.getTitle()},l.prototype.getPosition=function(e){var i=(e=e||this.$element)[0],n="BODY"==i.tagName,s=i.getBoundingClientRect();null==s.width&&(s=t.extend({},s,{width:s.right-s.left,height:s.bottom-s.top}));var o=window.SVGElement&&i instanceof window.SVGElement,a=n?{top:0,left:0}:o?null:e.offset(),r={scroll:n?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=n?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},s,r,l,a)},l.prototype.getCalculatedOffset=function(t,e,i,n){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-n,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-n/2,left:e.left-i}:{top:e.top+e.height/2-n/2,left:e.left+e.width}},l.prototype.getViewportAdjustedDelta=function(t,e,i,n){var s={top:0,left:0};if(!this.$viewport)return s;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-o-a.scroll,l=e.top+o-a.scroll+n;r<a.top?s.top=a.top-r:l>a.top+a.height&&(s.top=a.top+a.height-l)}else{var h=e.left-o,d=e.left+o+i;h<a.left?s.left=a.left-h:d>a.right&&(s.left=a.left+a.width-d)}return s},l.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},l.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},l.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},l.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},l.prototype.enable=function(){this.enabled=!0},l.prototype.disable=function(){this.enabled=!1},l.prototype.toggleEnabled=function(){this.enabled=!this.enabled},l.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},l.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide((function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null}))},l.prototype.sanitizeHtml=function(t){return r(t,this.options.whiteList,this.options.sanitizeFn)};var h=t.fn.tooltip;t.fn.tooltip=function(e){return this.each((function(){var i=t(this),n=i.data("bs.tooltip"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||i.data("bs.tooltip",n=new l(this,s)),"string"==typeof e&&n[e]())}))},t.fn.tooltip.Constructor=l,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=h,this}}(t),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.4.1",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),(e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype)).constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var n=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===n&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===n?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=function(i){return this.each((function(){var n=t(this),s=n.data("bs.popover"),o="object"==typeof i&&i;!s&&/destroy|hide/.test(i)||(s||n.data("bs.popover",s=new e(this,o)),"string"==typeof i&&s[i]())}))},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(t),function(t){"use strict";function e(i,n){this.$body=t(document.body),this.$scrollElement=t(i).is(document.body)?t(window):t(i),this.options=t.extend({},e.DEFAULTS,n),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each((function(){var n=t(this),s=n.data("bs.scrollspy"),o="object"==typeof i&&i;s||n.data("bs.scrollspy",s=new e(this,o)),"string"==typeof i&&s[i]()}))}e.VERSION="3.4.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map((function(){var e=t(this),s=e.data("target")||e.attr("href"),o=/^#./.test(s)&&t(s);return o&&o.length&&o.is(":visible")&&[[o[i]().top+n,s]]||null})).sort((function(t,e){return t[0]-e[0]})).each((function(){e.offsets.push(this[0]),e.targets.push(this[1])}))},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),n=this.options.offset+i-this.$scrollElement.height(),s=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=n)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<s[0])return this.activeTarget=null,this.clear();for(t=s.length;t--;)a!=o[t]&&e>=s[t]&&(void 0===s[t+1]||e<s[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',n=t(i).parents("li").addClass("active");n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var n=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=n,this},t(window).on("load.bs.scrollspy.data-api",(function(){t('[data-spy="scroll"]').each((function(){var e=t(this);i.call(e,e.data())}))}))}(t),function(t){"use strict";var e=function(e){this.element=t(e)};function i(i){return this.each((function(){var n=t(this),s=n.data("bs.tab");s||n.data("bs.tab",s=new e(this)),"string"==typeof i&&s[i]()}))}e.VERSION="3.4.1",e.TRANSITION_DURATION=150,e.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),n=e.data("target");if(n||(n=(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var s=i.find(".active:last a"),o=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:s[0]});if(s.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var r=t(document).find(n);this.activate(e.closest("li"),i),this.activate(r,r.parent(),(function(){s.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:s[0]})}))}}},e.prototype.activate=function(i,n,s){var o=n.find("> .active"),a=s&&t.support.transition&&(o.length&&o.hasClass("fade")||!!n.find("> .fade").length);function r(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),i.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(i[0].offsetWidth,i.addClass("in")):i.removeClass("fade"),i.parent(".dropdown-menu").length&&i.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),s&&s()}o.length&&a?o.one("bsTransitionEnd",r).emulateTransitionEnd(e.TRANSITION_DURATION):r(),o.removeClass("in")};var n=t.fn.tab;t.fn.tab=i,t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=n,this};var s=function(e){e.preventDefault(),i.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',s).on("click.bs.tab.data-api",'[data-toggle="pill"]',s)}(t),function(t){"use strict";var e=function(i,n){this.options=t.extend({},e.DEFAULTS,n);var s=this.options.target===e.DEFAULTS.target?t(this.options.target):t(document).find(this.options.target);this.$target=s.on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(i),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(i){return this.each((function(){var n=t(this),s=n.data("bs.affix"),o="object"==typeof i&&i;s||n.data("bs.affix",s=new e(this,o)),"string"==typeof i&&s[i]()}))}e.VERSION="3.4.1",e.RESET="affix affix-top affix-bottom",e.DEFAULTS={offset:0,target:window},e.prototype.getState=function(t,e,i,n){var s=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return s<i&&"top";if("bottom"==this.affixed)return null!=i?!(s+this.unpin<=o.top)&&"bottom":!(s+a<=t-n)&&"bottom";var r=null==this.affixed,l=r?s:o.top;return null!=i&&s<=i?"top":null!=n&&l+(r?a:e)>=t-n&&"bottom"},e.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(e.RESET).addClass("affix");var t=this.$target.scrollTop(),i=this.$element.offset();return this.pinnedOffset=i.top-t},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var i=this.$element.height(),n=this.options.offset,s=n.top,o=n.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof n&&(o=s=n),"function"==typeof s&&(s=n.top(this.$element)),"function"==typeof o&&(o=n.bottom(this.$element));var r=this.getState(a,i,s,o);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(e.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-i-o})}};var n=t.fn.affix;t.fn.affix=i,t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=n,this},t(window).on("load",(function(){t('[data-spy="affix"]').each((function(){var e=t(this),n=e.data();n.offset=n.offset||{},null!=n.offsetBottom&&(n.offset.bottom=n.offsetBottom),null!=n.offsetTop&&(n.offset.top=n.offsetTop),i.call(e,n)}))}))}(t)}).call(this,i("./node_modules/jquery/dist/jquery.js"))},"./node_modules/webpack/buildin/amd-options.js":function(t,e){(function(e){t.exports=e}).call(this,{})},"./node_modules/webpack/buildin/global.js":function(t,e){var i;i=function(){return this}();try{i=i||new Function("return this")()}catch(t){"object"==typeof window&&(i=window)}t.exports=i},"./node_modules/webpack/buildin/module.js":function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwLWRhdGVwaWNrZXIvZGlzdC9ib290c3RyYXAtZGF0ZXBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9hbWQtb3B0aW9ucy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiXSwibmFtZXMiOlsiJCIsIkRhdGVwaWNrZXIiLCJlbGVtZW50Iiwib3B0aW9ucyIsInRoaXMiLCJmb3JtYXQiLCJEUEdsb2JhbCIsInBhcnNlRm9ybWF0IiwiZGF0YSIsInBpY2tlciIsInRlbXBsYXRlIiwiYXBwZW5kVG8iLCJvbiIsImNsaWNrIiwicHJveHkiLCJpc0lucHV0IiwiaXMiLCJjb21wb25lbnQiLCJmaW5kIiwiZm9jdXMiLCJzaG93Iiwia2V5dXAiLCJ1cGRhdGUiLCJtaW5WaWV3TW9kZSIsInZpZXdNb2RlIiwic3RhcnRWaWV3TW9kZSIsIndlZWtTdGFydCIsIndlZWtFbmQiLCJvblJlbmRlciIsImZpbGxEb3ciLCJmaWxsTW9udGhzIiwic2hvd01vZGUiLCJwcm90b3R5cGUiLCJjb25zdHJ1Y3RvciIsImUiLCJoZWlnaHQiLCJvdXRlckhlaWdodCIsInBsYWNlIiwid2luZG93Iiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJ0aGF0IiwiZG9jdW1lbnQiLCJldiIsInRhcmdldCIsImNsb3Nlc3QiLCJsZW5ndGgiLCJoaWRlIiwidHJpZ2dlciIsInR5cGUiLCJkYXRlIiwib2ZmIiwic2V0IiwiZm9ybWF0ZWQiLCJmb3JtYXREYXRlIiwicHJvcCIsInNldFZhbHVlIiwibmV3RGF0ZSIsInBhcnNlRGF0ZSIsIkRhdGUiLCJ2aWV3RGF0ZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJmaWxsIiwib2Zmc2V0IiwiY3NzIiwidG9wIiwibGVmdCIsImRvd0NudCIsImh0bWwiLCJkYXRlcyIsImRheXNNaW4iLCJhcHBlbmQiLCJpIiwibW9udGhzU2hvcnQiLCJkIiwieWVhciIsIm1vbnRoIiwiY3VycmVudERhdGUiLCJ2YWx1ZU9mIiwidGV4dCIsIm1vbnRocyIsInByZXZNb250aCIsImRheSIsImdldERheXNJbk1vbnRoIiwic2V0RGF0ZSIsImdldERheSIsIm5leHRNb250aCIsImdldERhdGUiLCJjbHNOYW1lIiwicHJldlkiLCJwcmV2TSIsInB1c2giLCJlbXB0eSIsImpvaW4iLCJjdXJyZW50WWVhciIsImVuZCIsInJlbW92ZUNsYXNzIiwiZXEiLCJhZGRDbGFzcyIsInBhcnNlSW50IiwieWVhckNvbnQiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiY2xhc3NOYW1lIiwibW9kZXMiLCJuYXZGbmMiLCJjYWxsIiwibmF2U3RlcCIsInBhcmVudCIsImluZGV4Iiwic2V0TW9udGgiLCJzZXRGdWxsWWVhciIsIk1hdGgiLCJtaW4iLCJtb3VzZWRvd24iLCJkaXIiLCJtYXgiLCJmaWx0ZXIiLCJmbiIsImRhdGVwaWNrZXIiLCJvcHRpb24iLCJ2YWwiLCJlYWNoIiwiJHRoaXMiLCJleHRlbmQiLCJkZWZhdWx0cyIsIkNvbnN0cnVjdG9yIiwiZGF5cyIsImRheXNTaG9ydCIsImlzTGVhcFllYXIiLCJzZXBhcmF0b3IiLCJtYXRjaCIsInBhcnRzIiwic3BsaXQiLCJFcnJvciIsInNldEhvdXJzIiwic2V0TWludXRlcyIsInNldFNlY29uZHMiLCJzZXRNaWxsaXNlY29uZHMiLCJjbnQiLCJtIiwieXkiLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsInl5eXkiLCJkZCIsIm1tIiwiaGVhZFRlbXBsYXRlIiwiY29udFRlbXBsYXRlIiwialF1ZXJ5IiwidmVyc2lvbiIsImpxdWVyeSIsImVtdWxhdGVUcmFuc2l0aW9uRW5kIiwiZHVyYXRpb24iLCJjYWxsZWQiLCIkZWwiLCJvbmUiLCJzZXRUaW1lb3V0Iiwic3VwcG9ydCIsInRyYW5zaXRpb24iLCJlbCIsImNyZWF0ZUVsZW1lbnQiLCJ0cmFuc0VuZEV2ZW50TmFtZXMiLCJXZWJraXRUcmFuc2l0aW9uIiwiTW96VHJhbnNpdGlvbiIsIk9UcmFuc2l0aW9uIiwibmFtZSIsInVuZGVmaW5lZCIsInN0eWxlIiwidHJhbnNpdGlvbkVuZCIsImV2ZW50Iiwic3BlY2lhbCIsImJzVHJhbnNpdGlvbkVuZCIsImJpbmRUeXBlIiwiZGVsZWdhdGVUeXBlIiwiaGFuZGxlIiwiaGFuZGxlT2JqIiwiaGFuZGxlciIsImFwcGx5IiwiYXJndW1lbnRzIiwiZGlzbWlzcyIsIkFsZXJ0IiwiY2xvc2UiLCJWRVJTSU9OIiwiVFJBTlNJVElPTl9EVVJBVElPTiIsInNlbGVjdG9yIiwiYXR0ciIsInJlcGxhY2UiLCIkcGFyZW50IiwicmVtb3ZlRWxlbWVudCIsImRldGFjaCIsInJlbW92ZSIsIkV2ZW50IiwiaXNEZWZhdWx0UHJldmVudGVkIiwiaGFzQ2xhc3MiLCJvbGQiLCJhbGVydCIsIm5vQ29uZmxpY3QiLCJCdXR0b24iLCIkZWxlbWVudCIsIkRFRkFVTFRTIiwiaXNMb2FkaW5nIiwiUGx1Z2luIiwidG9nZ2xlIiwic2V0U3RhdGUiLCJsb2FkaW5nVGV4dCIsInN0YXRlIiwicmVzZXRUZXh0IiwicmVtb3ZlQXR0ciIsImNoYW5nZWQiLCIkaW5wdXQiLCJ0b2dnbGVDbGFzcyIsImJ1dHRvbiIsIiRidG4iLCJmaXJzdCIsInRlc3QiLCJDYXJvdXNlbCIsIiRpbmRpY2F0b3JzIiwicGF1c2VkIiwic2xpZGluZyIsImludGVydmFsIiwiJGFjdGl2ZSIsIiRpdGVtcyIsImtleWJvYXJkIiwia2V5ZG93biIsInBhdXNlIiwiZG9jdW1lbnRFbGVtZW50IiwiY3ljbGUiLCJhY3Rpb24iLCJzbGlkZSIsInRvIiwid3JhcCIsInRhZ05hbWUiLCJ3aGljaCIsInByZXYiLCJuZXh0IiwiY2xlYXJJbnRlcnZhbCIsInNldEludGVydmFsIiwiZ2V0SXRlbUluZGV4IiwiaXRlbSIsImNoaWxkcmVuIiwiZ2V0SXRlbUZvckRpcmVjdGlvbiIsImRpcmVjdGlvbiIsImFjdGl2ZSIsImFjdGl2ZUluZGV4IiwiaXRlbUluZGV4IiwicG9zIiwiJG5leHQiLCJpc0N5Y2xpbmciLCJyZWxhdGVkVGFyZ2V0Iiwic2xpZGVFdmVudCIsIiRuZXh0SW5kaWNhdG9yIiwic2xpZEV2ZW50Iiwib2Zmc2V0V2lkdGgiLCJjYXJvdXNlbCIsImNsaWNrSGFuZGxlciIsImhyZWYiLCIkdGFyZ2V0Iiwic2xpZGVJbmRleCIsIiRjYXJvdXNlbCIsIkNvbGxhcHNlIiwiJHRyaWdnZXIiLCJpZCIsInRyYW5zaXRpb25pbmciLCJnZXRQYXJlbnQiLCJhZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MiLCJnZXRUYXJnZXRGcm9tVHJpZ2dlciIsImRpbWVuc2lvbiIsImFjdGl2ZXNEYXRhIiwiYWN0aXZlcyIsInN0YXJ0RXZlbnQiLCJjb21wbGV0ZSIsInNjcm9sbFNpemUiLCJjYW1lbENhc2UiLCJvZmZzZXRIZWlnaHQiLCJpc09wZW4iLCJjb2xsYXBzZSIsIkRyb3Bkb3duIiwiY2xlYXJNZW51cyIsImNvbnRhaW5zIiwiaXNBY3RpdmUiLCJpbnNlcnRBZnRlciIsImRyb3Bkb3duIiwiTW9kYWwiLCIkYm9keSIsImJvZHkiLCIkZGlhbG9nIiwiJGJhY2tkcm9wIiwiaXNTaG93biIsIm9yaWdpbmFsQm9keVBhZCIsInNjcm9sbGJhcldpZHRoIiwiaWdub3JlQmFja2Ryb3BDbGljayIsImZpeGVkQ29udGVudCIsInJlbW90ZSIsImxvYWQiLCJfcmVsYXRlZFRhcmdldCIsIkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04iLCJiYWNrZHJvcCIsImNoZWNrU2Nyb2xsYmFyIiwic2V0U2Nyb2xsYmFyIiwiZXNjYXBlIiwicmVzaXplIiwic2Nyb2xsVG9wIiwiYWRqdXN0RGlhbG9nIiwiZW5mb3JjZUZvY3VzIiwiaGlkZU1vZGFsIiwiaGFzIiwiaGFuZGxlVXBkYXRlIiwicmVzZXRBZGp1c3RtZW50cyIsInJlc2V0U2Nyb2xsYmFyIiwicmVtb3ZlQmFja2Ryb3AiLCJjYWxsYmFjayIsImFuaW1hdGUiLCJkb0FuaW1hdGUiLCJjdXJyZW50VGFyZ2V0IiwiY2FsbGJhY2tSZW1vdmUiLCJtb2RhbElzT3ZlcmZsb3dpbmciLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYWRkaW5nTGVmdCIsImJvZHlJc092ZXJmbG93aW5nIiwicGFkZGluZ1JpZ2h0IiwiZnVsbFdpbmRvd1dpZHRoIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudFJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyaWdodCIsImFicyIsImNsaWVudFdpZHRoIiwibWVhc3VyZVNjcm9sbGJhciIsImJvZHlQYWQiLCJhY3R1YWxQYWRkaW5nIiwiY2FsY3VsYXRlZFBhZGRpbmciLCJwYXJzZUZsb2F0IiwicGFkZGluZyIsInJlbW92ZURhdGEiLCJzY3JvbGxEaXYiLCJyZW1vdmVDaGlsZCIsIm1vZGFsIiwic2hvd0V2ZW50IiwiRElTQUxMT1dFRF9BVFRSSUJVVEVTIiwidXJpQXR0cnMiLCJEZWZhdWx0V2hpdGVsaXN0IiwiYSIsImFyZWEiLCJiIiwiYnIiLCJjb2wiLCJjb2RlIiwiZGl2IiwiZW0iLCJociIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImltZyIsImxpIiwib2wiLCJwIiwicHJlIiwicyIsInNtYWxsIiwic3BhbiIsInN1YiIsInN1cCIsInN0cm9uZyIsInUiLCJ1bCIsIlNBRkVfVVJMX1BBVFRFUk4iLCJEQVRBX1VSTF9QQVRURVJOIiwiYWxsb3dlZEF0dHJpYnV0ZSIsImFsbG93ZWRBdHRyaWJ1dGVMaXN0IiwiYXR0ck5hbWUiLCJpbkFycmF5IiwiQm9vbGVhbiIsIm5vZGVWYWx1ZSIsInJlZ0V4cCIsInZhbHVlIiwiUmVnRXhwIiwibCIsInNhbml0aXplSHRtbCIsInVuc2FmZUh0bWwiLCJ3aGl0ZUxpc3QiLCJzYW5pdGl6ZUZuIiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJjcmVhdGVkRG9jdW1lbnQiLCJpbm5lckhUTUwiLCJ3aGl0ZWxpc3RLZXlzIiwibWFwIiwiZWxlbWVudHMiLCJsZW4iLCJlbE5hbWUiLCJhdHRyaWJ1dGVMaXN0IiwiYXR0cmlidXRlcyIsIndoaXRlbGlzdGVkQXR0cmlidXRlcyIsImNvbmNhdCIsImoiLCJsZW4yIiwicmVtb3ZlQXR0cmlidXRlIiwicGFyZW50Tm9kZSIsIlRvb2x0aXAiLCJlbmFibGVkIiwidGltZW91dCIsImhvdmVyU3RhdGUiLCJpblN0YXRlIiwiaW5pdCIsImFuaW1hdGlvbiIsInBsYWNlbWVudCIsInRpdGxlIiwiZGVsYXkiLCJjb250YWluZXIiLCJ2aWV3cG9ydCIsInNhbml0aXplIiwiZ2V0T3B0aW9ucyIsIiR2aWV3cG9ydCIsImlzRnVuY3Rpb24iLCJob3ZlciIsInRyaWdnZXJzIiwiZXZlbnRJbiIsImV2ZW50T3V0IiwiZW50ZXIiLCJsZWF2ZSIsIl9vcHRpb25zIiwiZml4VGl0bGUiLCJnZXREZWZhdWx0cyIsImRhdGFBdHRyaWJ1dGVzIiwiZGF0YUF0dHIiLCJoYXNPd25Qcm9wZXJ0eSIsImdldERlbGVnYXRlT3B0aW9ucyIsImtleSIsIm9iaiIsInNlbGYiLCJ0aXAiLCJjbGVhclRpbWVvdXQiLCJpc0luU3RhdGVUcnVlIiwiaGFzQ29udGVudCIsImluRG9tIiwib3duZXJEb2N1bWVudCIsIiR0aXAiLCJ0aXBJZCIsImdldFVJRCIsInNldENvbnRlbnQiLCJhdXRvVG9rZW4iLCJhdXRvUGxhY2UiLCJkaXNwbGF5IiwiZ2V0UG9zaXRpb24iLCJhY3R1YWxXaWR0aCIsImFjdHVhbEhlaWdodCIsIm9yZ1BsYWNlbWVudCIsInZpZXdwb3J0RGltIiwiYm90dG9tIiwid2lkdGgiLCJjYWxjdWxhdGVkT2Zmc2V0IiwiZ2V0Q2FsY3VsYXRlZE9mZnNldCIsImFwcGx5UGxhY2VtZW50IiwicHJldkhvdmVyU3RhdGUiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiaXNOYU4iLCJzZXRPZmZzZXQiLCJ1c2luZyIsInByb3BzIiwicm91bmQiLCJkZWx0YSIsImdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YSIsImlzVmVydGljYWwiLCJhcnJvd0RlbHRhIiwiYXJyb3dPZmZzZXRQb3NpdGlvbiIsInJlcGxhY2VBcnJvdyIsImFycm93IiwiZ2V0VGl0bGUiLCIkZSIsImlzQm9keSIsImVsUmVjdCIsImlzU3ZnIiwiU1ZHRWxlbWVudCIsImVsT2Zmc2V0Iiwic2Nyb2xsIiwib3V0ZXJEaW1zIiwidmlld3BvcnRQYWRkaW5nIiwidmlld3BvcnREaW1lbnNpb25zIiwidG9wRWRnZU9mZnNldCIsImJvdHRvbUVkZ2VPZmZzZXQiLCJsZWZ0RWRnZU9mZnNldCIsInJpZ2h0RWRnZU9mZnNldCIsIm8iLCJwcmVmaXgiLCJyYW5kb20iLCJnZXRFbGVtZW50QnlJZCIsIiRhcnJvdyIsImVuYWJsZSIsImRpc2FibGUiLCJ0b2dnbGVFbmFibGVkIiwiZGVzdHJveSIsInRvb2x0aXAiLCJQb3BvdmVyIiwiY29udGVudCIsImdldENvbnRlbnQiLCJ0eXBlQ29udGVudCIsInBvcG92ZXIiLCJTY3JvbGxTcHkiLCIkc2Nyb2xsRWxlbWVudCIsIm9mZnNldHMiLCJ0YXJnZXRzIiwiYWN0aXZlVGFyZ2V0IiwicHJvY2VzcyIsInJlZnJlc2giLCJnZXRTY3JvbGxIZWlnaHQiLCJvZmZzZXRNZXRob2QiLCJvZmZzZXRCYXNlIiwiaXNXaW5kb3ciLCIkaHJlZiIsInNvcnQiLCJtYXhTY3JvbGwiLCJhY3RpdmF0ZSIsImNsZWFyIiwicGFyZW50cyIsInBhcmVudHNVbnRpbCIsInNjcm9sbHNweSIsIiRzcHkiLCJUYWIiLCIkdWwiLCIkcHJldmlvdXMiLCJoaWRlRXZlbnQiLCJ0YWIiLCJBZmZpeCIsImNoZWNrUG9zaXRpb24iLCJjaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCIsImFmZml4ZWQiLCJ1bnBpbiIsInBpbm5lZE9mZnNldCIsIlJFU0VUIiwiZ2V0U3RhdGUiLCJvZmZzZXRUb3AiLCJvZmZzZXRCb3R0b20iLCJwb3NpdGlvbiIsInRhcmdldEhlaWdodCIsImluaXRpYWxpemluZyIsImNvbGxpZGVyVG9wIiwiZ2V0UGlubmVkT2Zmc2V0IiwiYWZmaXgiLCJhZmZpeFR5cGUiLCJtb2R1bGUiLCJleHBvcnRzIiwiX193ZWJwYWNrX2FtZF9vcHRpb25zX18iLCJnIiwiRnVuY3Rpb24iLCJ3ZWJwYWNrUG9seWZpbGwiLCJkZXByZWNhdGUiLCJwYXRocyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCJdLCJtYXBwaW5ncyI6IjZJQUFBLGFBbUJDLFNBQVVBLEdBSVYsSUFBSUMsRUFBYSxTQUFTQyxFQUFTQyxHQTJCbEMsR0ExQkFDLEtBQUtGLFFBQVVGLEVBQUVFLEdBQ2pCRSxLQUFLQyxPQUFTQyxFQUFTQyxZQUFZSixFQUFRRSxRQUFRRCxLQUFLRixRQUFRTSxLQUFLLGdCQUFnQixjQUNyRkosS0FBS0ssT0FBU1QsRUFBRU0sRUFBU0ksVUFDbkJDLFNBQVMsUUFDVEMsR0FBRyxDQUNIQyxNQUFPYixFQUFFYyxNQUFNVixLQUFLUyxNQUFPVCxRQUdqQ0EsS0FBS1csUUFBVVgsS0FBS0YsUUFBUWMsR0FBRyxTQUMvQlosS0FBS2EsWUFBWWIsS0FBS0YsUUFBUWMsR0FBRyxVQUFXWixLQUFLRixRQUFRZ0IsS0FBSyxXQUUxRGQsS0FBS1csUUFDUlgsS0FBS0YsUUFBUVUsR0FBRyxDQUNmTyxNQUFPbkIsRUFBRWMsTUFBTVYsS0FBS2dCLEtBQU1oQixNQUUxQmlCLE1BQU9yQixFQUFFYyxNQUFNVixLQUFLa0IsT0FBUWxCLFFBR3pCQSxLQUFLYSxVQUNSYixLQUFLYSxVQUFVTCxHQUFHLFFBQVNaLEVBQUVjLE1BQU1WLEtBQUtnQixLQUFNaEIsT0FFOUNBLEtBQUtGLFFBQVFVLEdBQUcsUUFBU1osRUFBRWMsTUFBTVYsS0FBS2dCLEtBQU1oQixPQUk5Q0EsS0FBS21CLFlBQWNwQixFQUFRb0IsYUFBYW5CLEtBQUtGLFFBQVFNLEtBQUsscUJBQXFCLEVBQy9DLGlCQUFyQkosS0FBS21CLFlBQ2YsT0FBUW5CLEtBQUttQixh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QUFPbGlCLEtBREosR0FJSixJQUVDa2lCLEVBQUlBLEdBQUssSUFBSUMsU0FBUyxjQUFiLEdBQ1IsTUFBT3JnQixHQUVjLGlCQUFYSSxTQUFxQmdnQixFQUFJaGdCLFFBT3JDNmYsRUFBT0MsUUFBVUUsRyx5RENuQmpCSCxFQUFPQyxRQUFVLFNBQVNELEdBb0J6QixPQW5CS0EsRUFBT0ssa0JBQ1hMLEVBQU9NLFVBQVksYUFDbkJOLEVBQU9PLE1BQVEsR0FFVlAsRUFBT2xULFdBQVVrVCxFQUFPbFQsU0FBVyxJQUN4QzBULE9BQU9DLGVBQWVULEVBQVEsU0FBVSxDQUN2Q1UsWUFBWSxFQUNaQyxJQUFLLFdBQ0osT0FBT1gsRUFBT3BLLEtBR2hCNEssT0FBT0MsZUFBZVQsRUFBUSxLQUFNLENBQ25DVSxZQUFZLEVBQ1pDLElBQUssV0FDSixPQUFPWCxFQUFPMWQsS0FHaEIwZCxFQUFPSyxnQkFBa0IsR0FFbkJMIiwiZmlsZSI6IjQuYnVuZGxlLjYuMjQuMC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gKiBib290c3RyYXAtZGF0ZXBpY2tlci5qcyBcclxuICogaHR0cDovL3d3dy5leWVjb24ucm8vYm9vdHN0cmFwLWRhdGVwaWNrZXJcclxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAqIENvcHlyaWdodCAyMDEyIFN0ZWZhbiBQZXRyZVxyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xyXG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxyXG4gKlxyXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXHJcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxyXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXHJcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cclxuXHJcbiFmdW5jdGlvbiggJCApIHtcclxuXHJcblx0Ly8gUGlja2VyIG9iamVjdFxyXG5cclxuXHR2YXIgRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKGVsZW1lbnQsIG9wdGlvbnMpe1xyXG5cdFx0dGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTtcclxuXHRcdHRoaXMuZm9ybWF0ID0gRFBHbG9iYWwucGFyc2VGb3JtYXQob3B0aW9ucy5mb3JtYXR8fHRoaXMuZWxlbWVudC5kYXRhKCdkYXRlLWZvcm1hdCcpfHwnbW0vZGQveXl5eScpO1xyXG5cdFx0dGhpcy5waWNrZXIgPSAkKERQR2xvYmFsLnRlbXBsYXRlKVxyXG5cdFx0XHRcdFx0XHRcdC5hcHBlbmRUbygnYm9keScpXHJcblx0XHRcdFx0XHRcdFx0Lm9uKHtcclxuXHRcdFx0XHRcdFx0XHRcdGNsaWNrOiAkLnByb3h5KHRoaXMuY2xpY2ssIHRoaXMpLy8sXHJcblx0XHRcdFx0XHRcdFx0XHQvL21vdXNlZG93bjogJC5wcm94eSh0aGlzLm1vdXNlZG93biwgdGhpcylcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdHRoaXMuaXNJbnB1dCA9IHRoaXMuZWxlbWVudC5pcygnaW5wdXQnKTtcclxuXHRcdHRoaXMuY29tcG9uZW50ID0gdGhpcy5lbGVtZW50LmlzKCcuZGF0ZScpID8gdGhpcy5lbGVtZW50LmZpbmQoJy5hZGQtb24nKSA6IGZhbHNlO1xyXG5cclxuXHRcdGlmICh0aGlzLmlzSW5wdXQpIHtcclxuXHRcdFx0dGhpcy5lbGVtZW50Lm9uKHtcclxuXHRcdFx0XHRmb2N1czogJC5wcm94eSh0aGlzLnNob3csIHRoaXMpLFxyXG5cdFx0XHRcdC8vYmx1cjogJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpLFxyXG5cdFx0XHRcdGtleXVwOiAkLnByb3h5KHRoaXMudXBkYXRlLCB0aGlzKVxyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbXBvbmVudCl7XHJcblx0XHRcdFx0dGhpcy5jb21wb25lbnQub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLnNob3csIHRoaXMpKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmVsZW1lbnQub24oJ2NsaWNrJywgJC5wcm94eSh0aGlzLnNob3csIHRoaXMpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubWluVmlld01vZGUgPSBvcHRpb25zLm1pblZpZXdNb2RlfHx0aGlzLmVsZW1lbnQuZGF0YSgnZGF0ZS1taW52aWV3bW9kZScpfHwwO1xyXG5cdFx0aWYgKHR5cGVvZiB0aGlzLm1pblZpZXdNb2RlID09PSAnc3RyaW5nJykge1xyXG5cdFx0XHRzd2l0Y2ggKHRoaXMubWluVmlld01vZGUpIHtcclxuXHRcdFx0XHRjYXNlICdtb250aHMnOlxyXG5cdFx0XHRcdFx0dGhpcy5taW5WaWV3TW9kZSA9IDE7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICd5ZWFycyc6XHJcblx0XHRcdFx0XHR0aGlzLm1pblZpZXdNb2RlID0gMjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHR0aGlzLm1pblZpZXdNb2RlID0gMDtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLnZpZXdNb2RlID0gb3B0aW9ucy52aWV3TW9kZXx8dGhpcy5lbGVtZW50LmRhdGEoJ2RhdGUtdmlld21vZGUnKXx8MDtcclxuXHRcdGlmICh0eXBlb2YgdGhpcy52aWV3TW9kZSA9PT0gJ3N0cmluZycpIHtcclxuXHRcdFx0c3dpdGNoICh0aGlzLnZpZXdNb2RlKSB7XHJcblx0XHRcdFx0Y2FzZSAnbW9udGhzJzpcclxuXHRcdFx0XHRcdHRoaXMudmlld01vZGUgPSAxO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAneWVhcnMnOlxyXG5cdFx0XHRcdFx0dGhpcy52aWV3TW9kZSA9IDI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0dGhpcy52aWV3TW9kZSA9IDA7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5zdGFydFZpZXdNb2RlID0gdGhpcy52aWV3TW9kZTtcclxuXHRcdHRoaXMud2Vla1N0YXJ0ID0gb3B0aW9ucy53ZWVrU3RhcnR8fHRoaXMuZWxlbWVudC5kYXRhKCdkYXRlLXdlZWtzdGFydCcpfHwwO1xyXG5cdFx0dGhpcy53ZWVrRW5kID0gdGhpcy53ZWVrU3RhcnQgPT09IDAgPyA2IDogdGhpcy53ZWVrU3RhcnQgLSAxO1xyXG5cdFx0dGhpcy5vblJlbmRlciA9IG9wdGlvbnMub25SZW5kZXI7XHJcblx0XHR0aGlzLmZpbGxEb3coKTtcclxuXHRcdHRoaXMuZmlsbE1vbnRocygpO1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHRcdHRoaXMuc2hvd01vZGUoKTtcclxuXHR9O1xyXG5cclxuXHREYXRlcGlja2VyLnByb3RvdHlwZSA9IHtcclxuXHRcdGNvbnN0cnVjdG9yOiBEYXRlcGlja2VyLFxyXG5cclxuXHRcdHNob3c6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0dGhpcy5waWNrZXIuc2hvdygpO1xyXG5cdFx0XHR0aGlzLmhlaWdodCA9IHRoaXMuY29tcG9uZW50ID8gdGhpcy5jb21wb25lbnQub3V0ZXJIZWlnaHQoKSA6IHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpO1xyXG5cdFx0XHR0aGlzLnBsYWNlKCk7XHJcblx0XHRcdCQod2luZG93KS5vbigncmVzaXplJywgJC5wcm94eSh0aGlzLnBsYWNlLCB0aGlzKSk7XHJcblx0XHRcdGlmIChlICkge1xyXG5cdFx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICghdGhpcy5pc0lucHV0KSB7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHRoYXQgPSB0aGlzO1xyXG5cdFx0XHQkKGRvY3VtZW50KS5vbignbW91c2Vkb3duJywgZnVuY3Rpb24oZXYpe1xyXG5cdFx0XHRcdGlmICgkKGV2LnRhcmdldCkuY2xvc2VzdCgnLmRhdGVwaWNrZXInKS5sZW5ndGggPT0gMCkge1xyXG5cdFx0XHRcdFx0dGhhdC5oaWRlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoe1xyXG5cdFx0XHRcdHR5cGU6ICdzaG93JyxcclxuXHRcdFx0XHRkYXRlOiB0aGlzLmRhdGVcclxuXHRcdFx0fSk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGhpZGU6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHRoaXMucGlja2VyLmhpZGUoKTtcclxuXHRcdFx0JCh3aW5kb3cpLm9mZigncmVzaXplJywgdGhpcy5wbGFjZSk7XHJcblx0XHRcdHRoaXMudmlld01vZGUgPSB0aGlzLnN0YXJ0Vmlld01vZGU7XHJcblx0XHRcdHRoaXMuc2hvd01vZGUoKTtcclxuXHRcdFx0aWYgKCF0aGlzLmlzSW5wdXQpIHtcclxuXHRcdFx0XHQkKGRvY3VtZW50KS5vZmYoJ21vdXNlZG93bicsIHRoaXMuaGlkZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly90aGlzLnNldCgpO1xyXG5cdFx0XHR0aGlzLmVsZW1lbnQudHJpZ2dlcih7XHJcblx0XHRcdFx0dHlwZTogJ2hpZGUnLFxyXG5cdFx0XHRcdGRhdGU6IHRoaXMuZGF0ZVxyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0c2V0OiBmdW5jdGlvbigpIHtcclxuXHRcdFx0dmFyIGZvcm1hdGVkID0gRFBHbG9iYWwuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsIHRoaXMuZm9ybWF0KTtcclxuXHRcdFx0aWYgKCF0aGlzLmlzSW5wdXQpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5jb21wb25lbnQpe1xyXG5cdFx0XHRcdFx0dGhpcy5lbGVtZW50LmZpbmQoJ2lucHV0JykucHJvcCgndmFsdWUnLCBmb3JtYXRlZCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuZWxlbWVudC5kYXRhKCdkYXRlJywgZm9ybWF0ZWQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZWxlbWVudC5wcm9wKCd2YWx1ZScsIGZvcm1hdGVkKTtcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHRzZXRWYWx1ZTogZnVuY3Rpb24obmV3RGF0ZSkge1xyXG5cdFx0XHRpZiAodHlwZW9mIG5ld0RhdGUgPT09ICdzdHJpbmcnKSB7XHJcblx0XHRcdFx0dGhpcy5kYXRlID0gRFBHbG9iYWwucGFyc2VEYXRlKG5ld0RhdGUsIHRoaXMuZm9ybWF0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLmRhdGUgPSBuZXcgRGF0ZShuZXdEYXRlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnNldCgpO1xyXG5cdFx0XHR0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxuXHRcdFx0dGhpcy5maWxsKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdHBsYWNlOiBmdW5jdGlvbigpe1xyXG5cdFx0XHR2YXIgb2Zmc2V0ID0gdGhpcy5jb21wb25lbnQgPyB0aGlzLmNvbXBvbmVudC5vZmZzZXQoKSA6IHRoaXMuZWxlbWVudC5vZmZzZXQoKTtcclxuXHRcdFx0dGhpcy5waWNrZXIuY3NzKHtcclxuXHRcdFx0XHR0b3A6IG9mZnNldC50b3AgKyB0aGlzLmhlaWdodCxcclxuXHRcdFx0XHRsZWZ0OiBvZmZzZXQubGVmdFxyXG5cdFx0XHR9KTtcclxuXHRcdH0sXHJcblxyXG5cdFx0dXBkYXRlOiBmdW5jdGlvbihuZXdEYXRlKXtcclxuXHRcdFx0dGhpcy5kYXRlID0gRFBHbG9iYWwucGFyc2VEYXRlKFxyXG5cdFx0XHRcdHR5cGVvZiBuZXdEYXRlID09PSAnc3RyaW5nJyA/IG5ld0RhdGUgOiAodGhpcy5pc0lucHV0ID8gdGhpcy5lbGVtZW50LnByb3AoJ3ZhbHVlJykgOiB0aGlzLmVsZW1lbnQuZGF0YSgnZGF0ZScpKSxcclxuXHRcdFx0XHR0aGlzLmZvcm1hdFxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuZGF0ZS5nZXRNb250aCgpLCAxLCAwLCAwLCAwLCAwKTtcclxuXHRcdFx0dGhpcy5maWxsKCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGZpbGxEb3c6IGZ1bmN0aW9uKCl7XHJcblx0XHRcdHZhciBkb3dDbnQgPSB0aGlzLndlZWtTdGFydDtcclxuXHRcdFx0dmFyIGh0bWwgPSAnPHRyPic7XHJcblx0XHRcdHdoaWxlIChkb3dDbnQgPCB0aGlzLndlZWtTdGFydCArIDcpIHtcclxuXHRcdFx0XHRodG1sICs9ICc8dGggY2xhc3M9XCJkb3dcIj4nK0RQR2xvYmFsLmRhdGVzLmRheXNNaW5bKGRvd0NudCsrKSU3XSsnPC90aD4nO1xyXG5cdFx0XHR9XHJcblx0XHRcdGh0bWwgKz0gJzwvdHI+JztcclxuXHRcdFx0dGhpcy5waWNrZXIuZmluZCgnLmRhdGVwaWNrZXItZGF5cyB0aGVhZCcpLmFwcGVuZChodG1sKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0ZmlsbE1vbnRoczogZnVuY3Rpb24oKXtcclxuXHRcdFx0dmFyIGh0bWwgPSAnJztcclxuXHRcdFx0dmFyIGkgPSAwXHJcblx0XHRcdHdoaWxlIChpIDwgMTIpIHtcclxuXHRcdFx0XHRodG1sICs9ICc8c3BhbiBjbGFzcz1cIm1vbnRoXCI+JytEUEdsb2JhbC5kYXRlcy5tb250aHNTaG9ydFtpKytdKyc8L3NwYW4+JztcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnBpY2tlci5maW5kKCcuZGF0ZXBpY2tlci1tb250aHMgdGQnKS5hcHBlbmQoaHRtbCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdGZpbGw6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgZCA9IG5ldyBEYXRlKHRoaXMudmlld0RhdGUpLFxyXG5cdFx0XHRcdHllYXIgPSBkLmdldEZ1bGxZZWFyKCksXHJcblx0XHRcdFx0bW9udGggPSBkLmdldE1vbnRoKCksXHJcblx0XHRcdFx0Y3VycmVudERhdGUgPSB0aGlzLmRhdGUudmFsdWVPZigpO1xyXG5cdFx0XHR0aGlzLnBpY2tlci5maW5kKCcuZGF0ZXBpY2tlci1kYXlzIHRoOmVxKDEpJylcclxuXHRcdFx0XHRcdFx0LnRleHQoRFBHbG9iYWwuZGF0ZXMubW9udGhzW21vbnRoXSsnICcreWVhcik7XHJcblx0XHRcdHZhciBwcmV2TW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aC0xLCAyOCwwLDAsMCwwKSxcclxuXHRcdFx0XHRkYXkgPSBEUEdsb2JhbC5nZXREYXlzSW5Nb250aChwcmV2TW9udGguZ2V0RnVsbFllYXIoKSwgcHJldk1vbnRoLmdldE1vbnRoKCkpO1xyXG5cdFx0XHRwcmV2TW9udGguc2V0RGF0ZShkYXkpO1xyXG5cdFx0XHRwcmV2TW9udGguc2V0RGF0ZShkYXkgLSAocHJldk1vbnRoLmdldERheSgpIC0gdGhpcy53ZWVrU3RhcnQgKyA3KSU3KTtcclxuXHRcdFx0dmFyIG5leHRNb250aCA9IG5ldyBEYXRlKHByZXZNb250aCk7XHJcblx0XHRcdG5leHRNb250aC5zZXREYXRlKG5leHRNb250aC5nZXREYXRlKCkgKyA0Mik7XHJcblx0XHRcdG5leHRNb250aCA9IG5leHRNb250aC52YWx1ZU9mKCk7XHJcblx0XHRcdHZhciBodG1sID0gW107XHJcblx0XHRcdHZhciBjbHNOYW1lLFxyXG5cdFx0XHRcdHByZXZZLFxyXG5cdFx0XHRcdHByZXZNO1xyXG5cdFx0XHR3aGlsZShwcmV2TW9udGgudmFsdWVPZigpIDwgbmV4dE1vbnRoKSB7XHJcblx0XHRcdFx0aWYgKHByZXZNb250aC5nZXREYXkoKSA9PT0gdGhpcy53ZWVrU3RhcnQpIHtcclxuXHRcdFx0XHRcdGh0bWwucHVzaCgnPHRyPicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjbHNOYW1lID0gdGhpcy5vblJlbmRlcihwcmV2TW9udGgpO1xyXG5cdFx0XHRcdHByZXZZID0gcHJldk1vbnRoLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0cHJldk0gPSBwcmV2TW9udGguZ2V0TW9udGgoKTtcclxuXHRcdFx0XHRpZiAoKHByZXZNIDwgbW9udGggJiYgIHByZXZZID09PSB5ZWFyKSB8fCAgcHJldlkgPCB5ZWFyKSB7XHJcblx0XHRcdFx0XHRjbHNOYW1lICs9ICcgb2xkJztcclxuXHRcdFx0XHR9IGVsc2UgaWYgKChwcmV2TSA+IG1vbnRoICYmIHByZXZZID09PSB5ZWFyKSB8fCBwcmV2WSA+IHllYXIpIHtcclxuXHRcdFx0XHRcdGNsc05hbWUgKz0gJyBuZXcnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAocHJldk1vbnRoLnZhbHVlT2YoKSA9PT0gY3VycmVudERhdGUpIHtcclxuXHRcdFx0XHRcdGNsc05hbWUgKz0gJyBhY3RpdmUnO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRodG1sLnB1c2goJzx0ZCBjbGFzcz1cImRheSAnK2Nsc05hbWUrJ1wiPicrcHJldk1vbnRoLmdldERhdGUoKSArICc8L3RkPicpO1xyXG5cdFx0XHRcdGlmIChwcmV2TW9udGguZ2V0RGF5KCkgPT09IHRoaXMud2Vla0VuZCkge1xyXG5cdFx0XHRcdFx0aHRtbC5wdXNoKCc8L3RyPicpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRwcmV2TW9udGguc2V0RGF0ZShwcmV2TW9udGguZ2V0RGF0ZSgpKzEpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucGlja2VyLmZpbmQoJy5kYXRlcGlja2VyLWRheXMgdGJvZHknKS5lbXB0eSgpLmFwcGVuZChodG1sLmpvaW4oJycpKTtcclxuXHRcdFx0dmFyIGN1cnJlbnRZZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XHJcblxyXG5cdFx0XHR2YXIgbW9udGhzID0gdGhpcy5waWNrZXIuZmluZCgnLmRhdGVwaWNrZXItbW9udGhzJylcclxuXHRcdFx0XHRcdFx0LmZpbmQoJ3RoOmVxKDEpJylcclxuXHRcdFx0XHRcdFx0XHQudGV4dCh5ZWFyKVxyXG5cdFx0XHRcdFx0XHRcdC5lbmQoKVxyXG5cdFx0XHRcdFx0XHQuZmluZCgnc3BhbicpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuXHRcdFx0aWYgKGN1cnJlbnRZZWFyID09PSB5ZWFyKSB7XHJcblx0XHRcdFx0bW9udGhzLmVxKHRoaXMuZGF0ZS5nZXRNb250aCgpKS5hZGRDbGFzcygnYWN0aXZlJyk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGh0bWwgPSAnJztcclxuXHRcdFx0eWVhciA9IHBhcnNlSW50KHllYXIvMTAsIDEwKSAqIDEwO1xyXG5cdFx0XHR2YXIgeWVhckNvbnQgPSB0aGlzLnBpY2tlci5maW5kKCcuZGF0ZXBpY2tlci15ZWFycycpXHJcblx0XHRcdFx0XHRcdFx0XHQuZmluZCgndGg6ZXEoMSknKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQudGV4dCh5ZWFyICsgJy0nICsgKHllYXIgKyA5KSlcclxuXHRcdFx0XHRcdFx0XHRcdFx0LmVuZCgpXHJcblx0XHRcdFx0XHRcdFx0XHQuZmluZCgndGQnKTtcclxuXHRcdFx0eWVhciAtPSAxO1xyXG5cdFx0XHRmb3IgKHZhciBpID0gLTE7IGkgPCAxMTsgaSsrKSB7XHJcblx0XHRcdFx0aHRtbCArPSAnPHNwYW4gY2xhc3M9XCJ5ZWFyJysoaSA9PT0gLTEgfHwgaSA9PT0gMTAgPyAnIG9sZCcgOiAnJykrKGN1cnJlbnRZZWFyID09PSB5ZWFyID8gJyBhY3RpdmUnIDogJycpKydcIj4nK3llYXIrJzwvc3Bhbj4nO1xyXG5cdFx0XHRcdHllYXIgKz0gMTtcclxuXHRcdFx0fVxyXG5cdFx0XHR5ZWFyQ29udC5odG1sKGh0bWwpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRjbGljazogZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdHZhciB0YXJnZXQgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCdzcGFuLCB0ZCwgdGgnKTtcclxuXHRcdFx0aWYgKHRhcmdldC5sZW5ndGggPT09IDEpIHtcclxuXHRcdFx0XHRzd2l0Y2godGFyZ2V0WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHtcclxuXHRcdFx0XHRcdGNhc2UgJ3RoJzpcclxuXHRcdFx0XHRcdFx0c3dpdGNoKHRhcmdldFswXS5jbGFzc05hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHRjYXNlICdzd2l0Y2gnOlxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zaG93TW9kZSgxKTtcclxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdGNhc2UgJ3ByZXYnOlxyXG5cdFx0XHRcdFx0XHRcdGNhc2UgJ25leHQnOlxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RGF0ZVsnc2V0JytEUEdsb2JhbC5tb2Rlc1t0aGlzLnZpZXdNb2RlXS5uYXZGbmNdLmNhbGwoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudmlld0RhdGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudmlld0RhdGVbJ2dldCcrRFBHbG9iYWwubW9kZXNbdGhpcy52aWV3TW9kZV0ubmF2Rm5jXS5jYWxsKHRoaXMudmlld0RhdGUpICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0RFBHbG9iYWwubW9kZXNbdGhpcy52aWV3TW9kZV0ubmF2U3RlcCAqICh0YXJnZXRbMF0uY2xhc3NOYW1lID09PSAncHJldicgPyAtMSA6IDEpXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5maWxsKCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnNldCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlICdzcGFuJzpcclxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldC5pcygnLm1vbnRoJykpIHtcclxuXHRcdFx0XHRcdFx0XHR2YXIgbW9udGggPSB0YXJnZXQucGFyZW50KCkuZmluZCgnc3BhbicpLmluZGV4KHRhcmdldCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RGF0ZS5zZXRNb250aChtb250aCk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dmFyIHllYXIgPSBwYXJzZUludCh0YXJnZXQudGV4dCgpLCAxMCl8fDA7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy52aWV3RGF0ZS5zZXRGdWxsWWVhcih5ZWFyKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy52aWV3TW9kZSAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZGF0ZSA9IG5ldyBEYXRlKHRoaXMudmlld0RhdGUpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZWxlbWVudC50cmlnZ2VyKHtcclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6ICdjaGFuZ2VEYXRlJyxcclxuXHRcdFx0XHRcdFx0XHRcdGRhdGU6IHRoaXMuZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHZpZXdNb2RlOiBEUEdsb2JhbC5tb2Rlc1t0aGlzLnZpZXdNb2RlXS5jbHNOYW1lXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dGhpcy5zaG93TW9kZSgtMSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZmlsbCgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldCgpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgJ3RkJzpcclxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldC5pcygnLmRheScpICYmICF0YXJnZXQuaXMoJy5kaXNhYmxlZCcpKXtcclxuXHRcdFx0XHRcdFx0XHR2YXIgZGF5ID0gcGFyc2VJbnQodGFyZ2V0LnRleHQoKSwgMTApfHwxO1xyXG5cdFx0XHRcdFx0XHRcdHZhciBtb250aCA9IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGFyZ2V0LmlzKCcub2xkJykpIHtcclxuXHRcdFx0XHRcdFx0XHRcdG1vbnRoIC09IDE7XHJcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0YXJnZXQuaXMoJy5uZXcnKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0bW9udGggKz0gMTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dmFyIHllYXIgPSB0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwwLDAsMCwwKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIE1hdGgubWluKDI4LCBkYXkpLDAsMCwwLDApO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZmlsbCgpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2V0KCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5lbGVtZW50LnRyaWdnZXIoe1xyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogJ2NoYW5nZURhdGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0ZTogdGhpcy5kYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmlld01vZGU6IERQR2xvYmFsLm1vZGVzW3RoaXMudmlld01vZGVdLmNsc05hbWVcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0sXHJcblxyXG5cdFx0bW91c2Vkb3duOiBmdW5jdGlvbihlKXtcclxuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0fSxcclxuXHJcblx0XHRzaG93TW9kZTogZnVuY3Rpb24oZGlyKSB7XHJcblx0XHRcdGlmIChkaXIpIHtcclxuXHRcdFx0XHR0aGlzLnZpZXdNb2RlID0gTWF0aC5tYXgodGhpcy5taW5WaWV3TW9kZSwgTWF0aC5taW4oMiwgdGhpcy52aWV3TW9kZSArIGRpcikpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMucGlja2VyLmZpbmQoJz5kaXYnKS5oaWRlKCkuZmlsdGVyKCcuZGF0ZXBpY2tlci0nK0RQR2xvYmFsLm1vZGVzW3RoaXMudmlld01vZGVdLmNsc05hbWUpLnNob3coKTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHQkLmZuLmRhdGVwaWNrZXIgPSBmdW5jdGlvbiAoIG9wdGlvbiwgdmFsICkge1xyXG5cdFx0cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHZhciAkdGhpcyA9ICQodGhpcyksXHJcblx0XHRcdFx0ZGF0YSA9ICR0aGlzLmRhdGEoJ2RhdGVwaWNrZXInKSxcclxuXHRcdFx0XHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcgJiYgb3B0aW9uO1xyXG5cdFx0XHRpZiAoIWRhdGEpIHtcclxuXHRcdFx0XHQkdGhpcy5kYXRhKCdkYXRlcGlja2VyJywgKGRhdGEgPSBuZXcgRGF0ZXBpY2tlcih0aGlzLCAkLmV4dGVuZCh7fSwgJC5mbi5kYXRlcGlja2VyLmRlZmF1bHRzLG9wdGlvbnMpKSkpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0eXBlb2Ygb3B0aW9uID09PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKHZhbCk7XHJcblx0XHR9KTtcclxuXHR9O1xyXG5cclxuXHQkLmZuLmRhdGVwaWNrZXIuZGVmYXVsdHMgPSB7XHJcblx0XHRvblJlbmRlcjogZnVuY3Rpb24oZGF0ZSkge1xyXG5cdFx0XHRyZXR1cm4gJyc7XHJcblx0XHR9XHJcblx0fTtcclxuXHQkLmZuLmRhdGVwaWNrZXIuQ29uc3RydWN0b3IgPSBEYXRlcGlja2VyO1xyXG5cclxuXHR2YXIgRFBHbG9iYWwgPSB7XHJcblx0XHRtb2RlczogW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2xzTmFtZTogJ2RheXMnLFxyXG5cdFx0XHRcdG5hdkZuYzogJ01vbnRoJyxcclxuXHRcdFx0XHRuYXZTdGVwOiAxXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbHNOYW1lOiAnbW9udGhzJyxcclxuXHRcdFx0XHRuYXZGbmM6ICdGdWxsWWVhcicsXHJcblx0XHRcdFx0bmF2U3RlcDogMVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2xzTmFtZTogJ3llYXJzJyxcclxuXHRcdFx0XHRuYXZGbmM6ICdGdWxsWWVhcicsXHJcblx0XHRcdFx0bmF2U3RlcDogMTBcclxuXHRcdH1dLFxyXG5cdFx0ZGF0ZXM6e1xyXG5cdFx0XHRkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiLCBcIlN1bmRheVwiXSxcclxuXHRcdFx0ZGF5c1Nob3J0OiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIiwgXCJTdW5cIl0sXHJcblx0XHRcdGRheXNNaW46IFtcIlN1XCIsIFwiTW9cIiwgXCJUdVwiLCBcIldlXCIsIFwiVGhcIiwgXCJGclwiLCBcIlNhXCIsIFwiU3VcIl0sXHJcblx0XHRcdG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXHJcblx0XHRcdG1vbnRoc1Nob3J0OiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cclxuXHRcdH0sXHJcblx0XHRpc0xlYXBZZWFyOiBmdW5jdGlvbiAoeWVhcikge1xyXG5cdFx0XHRyZXR1cm4gKCgoeWVhciAlIDQgPT09IDApICYmICh5ZWFyICUgMTAwICE9PSAwKSkgfHwgKHllYXIgJSA0MDAgPT09IDApKVxyXG5cdFx0fSxcclxuXHRcdGdldERheXNJbk1vbnRoOiBmdW5jdGlvbiAoeWVhciwgbW9udGgpIHtcclxuXHRcdFx0cmV0dXJuIFszMSwgKERQR2xvYmFsLmlzTGVhcFllYXIoeWVhcikgPyAyOSA6IDI4KSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdW21vbnRoXVxyXG5cdFx0fSxcclxuXHRcdHBhcnNlRm9ybWF0OiBmdW5jdGlvbihmb3JtYXQpe1xyXG5cdFx0XHR2YXIgc2VwYXJhdG9yID0gZm9ybWF0Lm1hdGNoKC9bLlxcL1xcLVxcc10uKj8vKSxcclxuXHRcdFx0XHRwYXJ0cyA9IGZvcm1hdC5zcGxpdCgvXFxXKy8pO1xyXG5cdFx0XHRpZiAoIXNlcGFyYXRvciB8fCAhcGFydHMgfHwgcGFydHMubGVuZ3RoID09PSAwKXtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgZm9ybWF0LlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4ge3NlcGFyYXRvcjogc2VwYXJhdG9yLCBwYXJ0czogcGFydHN9O1xyXG5cdFx0fSxcclxuXHRcdHBhcnNlRGF0ZTogZnVuY3Rpb24oZGF0ZSwgZm9ybWF0KSB7XHJcblx0XHRcdHZhciBwYXJ0cyA9IGRhdGUuc3BsaXQoZm9ybWF0LnNlcGFyYXRvciksXHJcblx0XHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKCksXHJcblx0XHRcdFx0dmFsO1xyXG5cdFx0XHRkYXRlLnNldEhvdXJzKDApO1xyXG5cdFx0XHRkYXRlLnNldE1pbnV0ZXMoMCk7XHJcblx0XHRcdGRhdGUuc2V0U2Vjb25kcygwKTtcclxuXHRcdFx0ZGF0ZS5zZXRNaWxsaXNlY29uZHMoMCk7XHJcblx0XHRcdGlmIChwYXJ0cy5sZW5ndGggPT09IGZvcm1hdC5wYXJ0cy5sZW5ndGgpIHtcclxuXHRcdFx0XHR2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF5ID0gZGF0ZS5nZXREYXRlKCksIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xyXG5cdFx0XHRcdGZvciAodmFyIGk9MCwgY250ID0gZm9ybWF0LnBhcnRzLmxlbmd0aDsgaSA8IGNudDsgaSsrKSB7XHJcblx0XHRcdFx0XHR2YWwgPSBwYXJzZUludChwYXJ0c1tpXSwgMTApfHwxO1xyXG5cdFx0XHRcdFx0c3dpdGNoKGZvcm1hdC5wYXJ0c1tpXSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlICdkZCc6XHJcblx0XHRcdFx0XHRcdGNhc2UgJ2QnOlxyXG5cdFx0XHRcdFx0XHRcdGRheSA9IHZhbDtcclxuXHRcdFx0XHRcdFx0XHRkYXRlLnNldERhdGUodmFsKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAnbW0nOlxyXG5cdFx0XHRcdFx0XHRjYXNlICdtJzpcclxuXHRcdFx0XHRcdFx0XHRtb250aCA9IHZhbCAtIDE7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZS5zZXRNb250aCh2YWwgLSAxKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAneXknOlxyXG5cdFx0XHRcdFx0XHRcdHllYXIgPSAyMDAwICsgdmFsO1xyXG5cdFx0XHRcdFx0XHRcdGRhdGUuc2V0RnVsbFllYXIoMjAwMCArIHZhbCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgJ3l5eXknOlxyXG5cdFx0XHRcdFx0XHRcdHllYXIgPSB2YWw7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZS5zZXRGdWxsWWVhcih2YWwpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgMCAsMCAsMCk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIGRhdGU7XHJcblx0XHR9LFxyXG5cdFx0Zm9ybWF0RGF0ZTogZnVuY3Rpb24oZGF0ZSwgZm9ybWF0KXtcclxuXHRcdFx0dmFyIHZhbCA9IHtcclxuXHRcdFx0XHRkOiBkYXRlLmdldERhdGUoKSxcclxuXHRcdFx0XHRtOiBkYXRlLmdldE1vbnRoKCkgKyAxLFxyXG5cdFx0XHRcdHl5OiBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksXHJcblx0XHRcdFx0eXl5eTogZGF0ZS5nZXRGdWxsWWVhcigpXHJcblx0XHRcdH07XHJcblx0XHRcdHZhbC5kZCA9ICh2YWwuZCA8IDEwID8gJzAnIDogJycpICsgdmFsLmQ7XHJcblx0XHRcdHZhbC5tbSA9ICh2YWwubSA8IDEwID8gJzAnIDogJycpICsgdmFsLm07XHJcblx0XHRcdHZhciBkYXRlID0gW107XHJcblx0XHRcdGZvciAodmFyIGk9MCwgY250ID0gZm9ybWF0LnBhcnRzLmxlbmd0aDsgaSA8IGNudDsgaSsrKSB7XHJcblx0XHRcdFx0ZGF0ZS5wdXNoKHZhbFtmb3JtYXQucGFydHNbaV1dKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gZGF0ZS5qb2luKGZvcm1hdC5zZXBhcmF0b3IpO1xyXG5cdFx0fSxcclxuXHRcdGhlYWRUZW1wbGF0ZTogJzx0aGVhZD4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8dHI+JytcclxuXHRcdFx0XHRcdFx0XHRcdCc8dGggY2xhc3M9XCJwcmV2XCI+JmxzYXF1bzs8L3RoPicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPHRoIGNvbHNwYW49XCI1XCIgY2xhc3M9XCJzd2l0Y2hcIj48L3RoPicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPHRoIGNsYXNzPVwibmV4dFwiPiZyc2FxdW87PC90aD4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8L3RyPicrXHJcblx0XHRcdFx0XHRcdCc8L3RoZWFkPicsXHJcblx0XHRjb250VGVtcGxhdGU6ICc8dGJvZHk+PHRyPjx0ZCBjb2xzcGFuPVwiN1wiPjwvdGQ+PC90cj48L3Rib2R5PidcclxuXHR9O1xyXG5cdERQR2xvYmFsLnRlbXBsYXRlID0gJzxkaXYgY2xhc3M9XCJkYXRlcGlja2VyIGRyb3Bkb3duLW1lbnVcIj4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1kYXlzXCI+JytcclxuXHRcdFx0XHRcdFx0XHRcdCc8dGFibGUgY2xhc3M9XCJ0YWJsZVwiPicrXHJcblx0XHRcdFx0XHRcdFx0XHRcdERQR2xvYmFsLmhlYWRUZW1wbGF0ZStcclxuXHRcdFx0XHRcdFx0XHRcdFx0Jzx0Ym9keT48L3Rib2R5PicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPC90YWJsZT4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2Rpdj4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci1tb250aHNcIj4nK1xyXG5cdFx0XHRcdFx0XHRcdFx0Jzx0YWJsZSBjbGFzcz1cInRhYmxlXCI+JytcclxuXHRcdFx0XHRcdFx0XHRcdFx0RFBHbG9iYWwuaGVhZFRlbXBsYXRlK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHREUEdsb2JhbC5jb250VGVtcGxhdGUrXHJcblx0XHRcdFx0XHRcdFx0XHQnPC90YWJsZT4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8L2Rpdj4nK1xyXG5cdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci15ZWFyc1wiPicrXHJcblx0XHRcdFx0XHRcdFx0XHQnPHRhYmxlIGNsYXNzPVwidGFibGVcIj4nK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHREUEdsb2JhbC5oZWFkVGVtcGxhdGUrXHJcblx0XHRcdFx0XHRcdFx0XHRcdERQR2xvYmFsLmNvbnRUZW1wbGF0ZStcclxuXHRcdFx0XHRcdFx0XHRcdCc8L3RhYmxlPicrXHJcblx0XHRcdFx0XHRcdFx0JzwvZGl2PicrXHJcblx0XHRcdFx0XHRcdCc8L2Rpdj4nO1xyXG5cclxufSggd2luZG93LmpRdWVyeSApO1xyXG4iLCIvKiFcbiAqIEJvb3RzdHJhcCB2My40LjEgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICovXG5cbmlmICh0eXBlb2YgalF1ZXJ5ID09PSAndW5kZWZpbmVkJykge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnknKVxufVxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgdmVyc2lvbiA9ICQuZm4uanF1ZXJ5LnNwbGl0KCcgJylbMF0uc3BsaXQoJy4nKVxuICBpZiAoKHZlcnNpb25bMF0gPCAyICYmIHZlcnNpb25bMV0gPCA5KSB8fCAodmVyc2lvblswXSA9PSAxICYmIHZlcnNpb25bMV0gPT0gOSAmJiB2ZXJzaW9uWzJdIDwgMSkgfHwgKHZlcnNpb25bMF0gPiAzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQm9vdHN0cmFwXFwncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeSB2ZXJzaW9uIDEuOS4xIG9yIGhpZ2hlciwgYnV0IGxvd2VyIHRoYW4gdmVyc2lvbiA0JylcbiAgfVxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogdHJhbnNpdGlvbi5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyN0cmFuc2l0aW9uc1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIENTUyBUUkFOU0lUSU9OIFNVUFBPUlQgKFNob3V0b3V0OiBodHRwczovL21vZGVybml6ci5jb20vKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKCkge1xuICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jvb3RzdHJhcCcpXG5cbiAgICB2YXIgdHJhbnNFbmRFdmVudE5hbWVzID0ge1xuICAgICAgV2Via2l0VHJhbnNpdGlvbiA6ICd3ZWJraXRUcmFuc2l0aW9uRW5kJyxcbiAgICAgIE1velRyYW5zaXRpb24gICAgOiAndHJhbnNpdGlvbmVuZCcsXG4gICAgICBPVHJhbnNpdGlvbiAgICAgIDogJ29UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kJyxcbiAgICAgIHRyYW5zaXRpb24gICAgICAgOiAndHJhbnNpdGlvbmVuZCdcbiAgICB9XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHRyYW5zRW5kRXZlbnROYW1lcykge1xuICAgICAgaWYgKGVsLnN0eWxlW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHsgZW5kOiB0cmFuc0VuZEV2ZW50TmFtZXNbbmFtZV0gfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZSAvLyBleHBsaWNpdCBmb3IgaWU4ICggIC5fLilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vYmxvZy5hbGV4bWFjY2F3LmNvbS9jc3MtdHJhbnNpdGlvbnNcbiAgJC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIChkdXJhdGlvbikge1xuICAgIHZhciBjYWxsZWQgPSBmYWxzZVxuICAgIHZhciAkZWwgPSB0aGlzXG4gICAgJCh0aGlzKS5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZSB9KVxuICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHsgaWYgKCFjYWxsZWQpICQoJGVsKS50cmlnZ2VyKCQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCkgfVxuICAgIHNldFRpbWVvdXQoY2FsbGJhY2ssIGR1cmF0aW9uKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAkKGZ1bmN0aW9uICgpIHtcbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiA9IHRyYW5zaXRpb25FbmQoKVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuXG5cbiAgICAkLmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kID0ge1xuICAgICAgYmluZFR5cGU6ICQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxcbiAgICAgIGRlbGVnYXRlVHlwZTogJC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLFxuICAgICAgaGFuZGxlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhpcykpIHJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGFsZXJ0LmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI2FsZXJ0c1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEFMRVJUIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBkaXNtaXNzID0gJ1tkYXRhLWRpc21pc3M9XCJhbGVydFwiXSdcbiAgdmFyIEFsZXJ0ICAgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICAkKGVsKS5vbignY2xpY2snLCBkaXNtaXNzLCB0aGlzLmNsb3NlKVxuICB9XG5cbiAgQWxlcnQuVkVSU0lPTiA9ICczLjQuMSdcblxuICBBbGVydC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgQWxlcnQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgICAgPSAkKHRoaXMpXG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKVxuXG4gICAgaWYgKCFzZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdocmVmJylcbiAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3IgJiYgc2VsZWN0b3IucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLywgJycpIC8vIHN0cmlwIGZvciBpZTdcbiAgICB9XG5cbiAgICBzZWxlY3RvciAgICA9IHNlbGVjdG9yID09PSAnIycgPyBbXSA6IHNlbGVjdG9yXG4gICAgdmFyICRwYXJlbnQgPSAkKGRvY3VtZW50KS5maW5kKHNlbGVjdG9yKVxuXG4gICAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgaWYgKCEkcGFyZW50Lmxlbmd0aCkge1xuICAgICAgJHBhcmVudCA9ICR0aGlzLmNsb3Nlc3QoJy5hbGVydCcpXG4gICAgfVxuXG4gICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdjbG9zZS5icy5hbGVydCcpKVxuXG4gICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgJHBhcmVudC5yZW1vdmVDbGFzcygnaW4nKVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudCgpIHtcbiAgICAgIC8vIGRldGFjaCBmcm9tIHBhcmVudCwgZmlyZSBldmVudCB0aGVuIGNsZWFuIHVwIGRhdGFcbiAgICAgICRwYXJlbnQuZGV0YWNoKCkudHJpZ2dlcignY2xvc2VkLmJzLmFsZXJ0JykucmVtb3ZlKClcbiAgICB9XG5cbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiAkcGFyZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgJHBhcmVudFxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCByZW1vdmVFbGVtZW50KVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQWxlcnQuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgcmVtb3ZlRWxlbWVudCgpXG4gIH1cblxuXG4gIC8vIEFMRVJUIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMuYWxlcnQnKVxuXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmFsZXJ0JywgKGRhdGEgPSBuZXcgQWxlcnQodGhpcykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXS5jYWxsKCR0aGlzKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5hbGVydFxuXG4gICQuZm4uYWxlcnQgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5hbGVydC5Db25zdHJ1Y3RvciA9IEFsZXJ0XG5cblxuICAvLyBBTEVSVCBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uYWxlcnQubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmFsZXJ0ID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQUxFUlQgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT1cblxuICAkKGRvY3VtZW50KS5vbignY2xpY2suYnMuYWxlcnQuZGF0YS1hcGknLCBkaXNtaXNzLCBBbGVydC5wcm90b3R5cGUuY2xvc2UpXG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGJ1dHRvbi5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyNidXR0b25zXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gQlVUVE9OIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBCdXR0b24gPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgID0gJChlbGVtZW50KVxuICAgIHRoaXMub3B0aW9ucyAgID0gJC5leHRlbmQoe30sIEJ1dHRvbi5ERUZBVUxUUywgb3B0aW9ucylcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gIH1cblxuICBCdXR0b24uVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgQnV0dG9uLkRFRkFVTFRTID0ge1xuICAgIGxvYWRpbmdUZXh0OiAnbG9hZGluZy4uLidcbiAgfVxuXG4gIEJ1dHRvbi5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICB2YXIgZCAgICA9ICdkaXNhYmxlZCdcbiAgICB2YXIgJGVsICA9IHRoaXMuJGVsZW1lbnRcbiAgICB2YXIgdmFsICA9ICRlbC5pcygnaW5wdXQnKSA/ICd2YWwnIDogJ2h0bWwnXG4gICAgdmFyIGRhdGEgPSAkZWwuZGF0YSgpXG5cbiAgICBzdGF0ZSArPSAnVGV4dCdcblxuICAgIGlmIChkYXRhLnJlc2V0VGV4dCA9PSBudWxsKSAkZWwuZGF0YSgncmVzZXRUZXh0JywgJGVsW3ZhbF0oKSlcblxuICAgIC8vIHB1c2ggdG8gZXZlbnQgbG9vcCB0byBhbGxvdyBmb3JtcyB0byBzdWJtaXRcbiAgICBzZXRUaW1lb3V0KCQucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgJGVsW3ZhbF0oZGF0YVtzdGF0ZV0gPT0gbnVsbCA/IHRoaXMub3B0aW9uc1tzdGF0ZV0gOiBkYXRhW3N0YXRlXSlcblxuICAgICAgaWYgKHN0YXRlID09ICdsb2FkaW5nVGV4dCcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgICAgICRlbC5hZGRDbGFzcyhkKS5hdHRyKGQsIGQpLnByb3AoZCwgdHJ1ZSlcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0xvYWRpbmcpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAkZWwucmVtb3ZlQ2xhc3MoZCkucmVtb3ZlQXR0cihkKS5wcm9wKGQsIGZhbHNlKVxuICAgICAgfVxuICAgIH0sIHRoaXMpLCAwKVxuICB9XG5cbiAgQnV0dG9uLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGNoYW5nZWQgPSB0cnVlXG4gICAgdmFyICRwYXJlbnQgPSB0aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0nKVxuXG4gICAgaWYgKCRwYXJlbnQubGVuZ3RoKSB7XG4gICAgICB2YXIgJGlucHV0ID0gdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dCcpXG4gICAgICBpZiAoJGlucHV0LnByb3AoJ3R5cGUnKSA9PSAncmFkaW8nKSB7XG4gICAgICAgIGlmICgkaW5wdXQucHJvcCgnY2hlY2tlZCcpKSBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgJHBhcmVudC5maW5kKCcuYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgIHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICB9IGVsc2UgaWYgKCRpbnB1dC5wcm9wKCd0eXBlJykgPT0gJ2NoZWNrYm94Jykge1xuICAgICAgICBpZiAoKCRpbnB1dC5wcm9wKCdjaGVja2VkJykpICE9PSB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhY3RpdmUnKSkgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICB9XG4gICAgICAkaW5wdXQucHJvcCgnY2hlY2tlZCcsIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2FjdGl2ZScpKVxuICAgICAgaWYgKGNoYW5nZWQpICRpbnB1dC50cmlnZ2VyKCdjaGFuZ2UnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtcHJlc3NlZCcsICF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdhY3RpdmUnKSlcbiAgICAgIHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgfVxuICB9XG5cblxuICAvLyBCVVRUT04gUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmJ1dHRvbicpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuYnV0dG9uJywgKGRhdGEgPSBuZXcgQnV0dG9uKHRoaXMsIG9wdGlvbnMpKSlcblxuICAgICAgaWYgKG9wdGlvbiA9PSAndG9nZ2xlJykgZGF0YS50b2dnbGUoKVxuICAgICAgZWxzZSBpZiAob3B0aW9uKSBkYXRhLnNldFN0YXRlKG9wdGlvbilcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uYnV0dG9uXG5cbiAgJC5mbi5idXR0b24gICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5idXR0b24uQ29uc3RydWN0b3IgPSBCdXR0b25cblxuXG4gIC8vIEJVVFRPTiBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmJ1dHRvbi5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4uYnV0dG9uID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQlVUVE9OIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09PVxuXG4gICQoZG9jdW1lbnQpXG4gICAgLm9uKCdjbGljay5icy5idXR0b24uZGF0YS1hcGknLCAnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgJGJ0biA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKVxuICAgICAgUGx1Z2luLmNhbGwoJGJ0biwgJ3RvZ2dsZScpXG4gICAgICBpZiAoISgkKGUudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKSkpIHtcbiAgICAgICAgLy8gUHJldmVudCBkb3VibGUgY2xpY2sgb24gcmFkaW9zLCBhbmQgdGhlIGRvdWJsZSBzZWxlY3Rpb25zIChzbyBjYW5jZWxsYXRpb24pIG9uIGNoZWNrYm94ZXNcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIC8vIFRoZSB0YXJnZXQgY29tcG9uZW50IHN0aWxsIHJlY2VpdmUgdGhlIGZvY3VzXG4gICAgICAgIGlmICgkYnRuLmlzKCdpbnB1dCxidXR0b24nKSkgJGJ0bi50cmlnZ2VyKCdmb2N1cycpXG4gICAgICAgIGVsc2UgJGJ0bi5maW5kKCdpbnB1dDp2aXNpYmxlLGJ1dHRvbjp2aXNpYmxlJykuZmlyc3QoKS50cmlnZ2VyKCdmb2N1cycpXG4gICAgICB9XG4gICAgfSlcbiAgICAub24oJ2ZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5idG4nKS50b2dnbGVDbGFzcygnZm9jdXMnLCAvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpXG4gICAgfSlcblxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogY2Fyb3VzZWwuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jY2Fyb3VzZWxcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBDQVJPVVNFTCBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgICAgPSAkKGVsZW1lbnQpXG4gICAgdGhpcy4kaW5kaWNhdG9ycyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLmNhcm91c2VsLWluZGljYXRvcnMnKVxuICAgIHRoaXMub3B0aW9ucyAgICAgPSBvcHRpb25zXG4gICAgdGhpcy5wYXVzZWQgICAgICA9IG51bGxcbiAgICB0aGlzLnNsaWRpbmcgICAgID0gbnVsbFxuICAgIHRoaXMuaW50ZXJ2YWwgICAgPSBudWxsXG4gICAgdGhpcy4kYWN0aXZlICAgICA9IG51bGxcbiAgICB0aGlzLiRpdGVtcyAgICAgID0gbnVsbFxuXG4gICAgdGhpcy5vcHRpb25zLmtleWJvYXJkICYmIHRoaXMuJGVsZW1lbnQub24oJ2tleWRvd24uYnMuY2Fyb3VzZWwnLCAkLnByb3h5KHRoaXMua2V5ZG93biwgdGhpcykpXG5cbiAgICB0aGlzLm9wdGlvbnMucGF1c2UgPT0gJ2hvdmVyJyAmJiAhKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgJiYgdGhpcy4kZWxlbWVudFxuICAgICAgLm9uKCdtb3VzZWVudGVyLmJzLmNhcm91c2VsJywgJC5wcm94eSh0aGlzLnBhdXNlLCB0aGlzKSlcbiAgICAgIC5vbignbW91c2VsZWF2ZS5icy5jYXJvdXNlbCcsICQucHJveHkodGhpcy5jeWNsZSwgdGhpcykpXG4gIH1cblxuICBDYXJvdXNlbC5WRVJTSU9OICA9ICczLjQuMSdcblxuICBDYXJvdXNlbC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gNjAwXG5cbiAgQ2Fyb3VzZWwuREVGQVVMVFMgPSB7XG4gICAgaW50ZXJ2YWw6IDUwMDAsXG4gICAgcGF1c2U6ICdob3ZlcicsXG4gICAgd3JhcDogdHJ1ZSxcbiAgICBrZXlib2FyZDogdHJ1ZVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLmtleWRvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpKSByZXR1cm5cbiAgICBzd2l0Y2ggKGUud2hpY2gpIHtcbiAgICAgIGNhc2UgMzc6IHRoaXMucHJldigpOyBicmVha1xuICAgICAgY2FzZSAzOTogdGhpcy5uZXh0KCk7IGJyZWFrXG4gICAgICBkZWZhdWx0OiByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5jeWNsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgZSB8fCAodGhpcy5wYXVzZWQgPSBmYWxzZSlcblxuICAgIHRoaXMuaW50ZXJ2YWwgJiYgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKVxuXG4gICAgdGhpcy5vcHRpb25zLmludGVydmFsXG4gICAgICAmJiAhdGhpcy5wYXVzZWRcbiAgICAgICYmICh0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoJC5wcm94eSh0aGlzLm5leHQsIHRoaXMpLCB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtSW5kZXggPSBmdW5jdGlvbiAoaXRlbSkge1xuICAgIHRoaXMuJGl0ZW1zID0gaXRlbS5wYXJlbnQoKS5jaGlsZHJlbignLml0ZW0nKVxuICAgIHJldHVybiB0aGlzLiRpdGVtcy5pbmRleChpdGVtIHx8IHRoaXMuJGFjdGl2ZSlcbiAgfVxuXG4gIENhcm91c2VsLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uID0gZnVuY3Rpb24gKGRpcmVjdGlvbiwgYWN0aXZlKSB7XG4gICAgdmFyIGFjdGl2ZUluZGV4ID0gdGhpcy5nZXRJdGVtSW5kZXgoYWN0aXZlKVxuICAgIHZhciB3aWxsV3JhcCA9IChkaXJlY3Rpb24gPT0gJ3ByZXYnICYmIGFjdGl2ZUluZGV4ID09PSAwKVxuICAgICAgICAgICAgICAgIHx8IChkaXJlY3Rpb24gPT0gJ25leHQnICYmIGFjdGl2ZUluZGV4ID09ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSlcbiAgICBpZiAod2lsbFdyYXAgJiYgIXRoaXMub3B0aW9ucy53cmFwKSByZXR1cm4gYWN0aXZlXG4gICAgdmFyIGRlbHRhID0gZGlyZWN0aW9uID09ICdwcmV2JyA/IC0xIDogMVxuICAgIHZhciBpdGVtSW5kZXggPSAoYWN0aXZlSW5kZXggKyBkZWx0YSkgJSB0aGlzLiRpdGVtcy5sZW5ndGhcbiAgICByZXR1cm4gdGhpcy4kaXRlbXMuZXEoaXRlbUluZGV4KVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKHBvcykge1xuICAgIHZhciB0aGF0ICAgICAgICA9IHRoaXNcbiAgICB2YXIgYWN0aXZlSW5kZXggPSB0aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmUgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpKVxuXG4gICAgaWYgKHBvcyA+ICh0aGlzLiRpdGVtcy5sZW5ndGggLSAxKSB8fCBwb3MgPCAwKSByZXR1cm5cblxuICAgIGlmICh0aGlzLnNsaWRpbmcpICAgICAgIHJldHVybiB0aGlzLiRlbGVtZW50Lm9uZSgnc2xpZC5icy5jYXJvdXNlbCcsIGZ1bmN0aW9uICgpIHsgdGhhdC50byhwb3MpIH0pIC8vIHllcywgXCJzbGlkXCJcbiAgICBpZiAoYWN0aXZlSW5kZXggPT0gcG9zKSByZXR1cm4gdGhpcy5wYXVzZSgpLmN5Y2xlKClcblxuICAgIHJldHVybiB0aGlzLnNsaWRlKHBvcyA+IGFjdGl2ZUluZGV4ID8gJ25leHQnIDogJ3ByZXYnLCB0aGlzLiRpdGVtcy5lcShwb3MpKVxuICB9XG5cbiAgQ2Fyb3VzZWwucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlIHx8ICh0aGlzLnBhdXNlZCA9IHRydWUpXG5cbiAgICBpZiAodGhpcy4kZWxlbWVudC5maW5kKCcubmV4dCwgLnByZXYnKS5sZW5ndGggJiYgJC5zdXBwb3J0LnRyYW5zaXRpb24pIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcigkLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpXG4gICAgICB0aGlzLmN5Y2xlKHRydWUpXG4gICAgfVxuXG4gICAgdGhpcy5pbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy5zbGlkZSgnbmV4dCcpXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5zbGlkaW5nKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy5zbGlkZSgncHJldicpXG4gIH1cblxuICBDYXJvdXNlbC5wcm90b3R5cGUuc2xpZGUgPSBmdW5jdGlvbiAodHlwZSwgbmV4dCkge1xuICAgIHZhciAkYWN0aXZlICAgPSB0aGlzLiRlbGVtZW50LmZpbmQoJy5pdGVtLmFjdGl2ZScpXG4gICAgdmFyICRuZXh0ICAgICA9IG5leHQgfHwgdGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKHR5cGUsICRhY3RpdmUpXG4gICAgdmFyIGlzQ3ljbGluZyA9IHRoaXMuaW50ZXJ2YWxcbiAgICB2YXIgZGlyZWN0aW9uID0gdHlwZSA9PSAnbmV4dCcgPyAnbGVmdCcgOiAncmlnaHQnXG4gICAgdmFyIHRoYXQgICAgICA9IHRoaXNcblxuICAgIGlmICgkbmV4dC5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVybiAodGhpcy5zbGlkaW5nID0gZmFsc2UpXG5cbiAgICB2YXIgcmVsYXRlZFRhcmdldCA9ICRuZXh0WzBdXG4gICAgdmFyIHNsaWRlRXZlbnQgPSAkLkV2ZW50KCdzbGlkZS5icy5jYXJvdXNlbCcsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRUYXJnZXQsXG4gICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgIH0pXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHNsaWRlRXZlbnQpXG4gICAgaWYgKHNsaWRlRXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5zbGlkaW5nID0gdHJ1ZVxuXG4gICAgaXNDeWNsaW5nICYmIHRoaXMucGF1c2UoKVxuXG4gICAgaWYgKHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLiRpbmRpY2F0b3JzLmZpbmQoJy5hY3RpdmUnKS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgIHZhciAkbmV4dEluZGljYXRvciA9ICQodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KCRuZXh0KV0pXG4gICAgICAkbmV4dEluZGljYXRvciAmJiAkbmV4dEluZGljYXRvci5hZGRDbGFzcygnYWN0aXZlJylcbiAgICB9XG5cbiAgICB2YXIgc2xpZEV2ZW50ID0gJC5FdmVudCgnc2xpZC5icy5jYXJvdXNlbCcsIHsgcmVsYXRlZFRhcmdldDogcmVsYXRlZFRhcmdldCwgZGlyZWN0aW9uOiBkaXJlY3Rpb24gfSkgLy8geWVzLCBcInNsaWRcIlxuICAgIGlmICgkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdzbGlkZScpKSB7XG4gICAgICAkbmV4dC5hZGRDbGFzcyh0eXBlKVxuICAgICAgaWYgKHR5cGVvZiAkbmV4dCA9PT0gJ29iamVjdCcgJiYgJG5leHQubGVuZ3RoKSB7XG4gICAgICAgICRuZXh0WzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xuICAgICAgfVxuICAgICAgJGFjdGl2ZS5hZGRDbGFzcyhkaXJlY3Rpb24pXG4gICAgICAkbmV4dC5hZGRDbGFzcyhkaXJlY3Rpb24pXG4gICAgICAkYWN0aXZlXG4gICAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkbmV4dC5yZW1vdmVDbGFzcyhbdHlwZSwgZGlyZWN0aW9uXS5qb2luKCcgJykpLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgICRhY3RpdmUucmVtb3ZlQ2xhc3MoWydhY3RpdmUnLCBkaXJlY3Rpb25dLmpvaW4oJyAnKSlcbiAgICAgICAgICB0aGF0LnNsaWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKHNsaWRFdmVudClcbiAgICAgICAgICB9LCAwKVxuICAgICAgICB9KVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoQ2Fyb3VzZWwuVFJBTlNJVElPTl9EVVJBVElPTilcbiAgICB9IGVsc2Uge1xuICAgICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICRuZXh0LmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgdGhpcy5zbGlkaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzbGlkRXZlbnQpXG4gICAgfVxuXG4gICAgaXNDeWNsaW5nICYmIHRoaXMuY3ljbGUoKVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQ0FST1VTRUwgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnKVxuICAgICAgdmFyIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgQ2Fyb3VzZWwuREVGQVVMVFMsICR0aGlzLmRhdGEoKSwgdHlwZW9mIG9wdGlvbiA9PSAnb2JqZWN0JyAmJiBvcHRpb24pXG4gICAgICB2YXIgYWN0aW9uICA9IHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycgPyBvcHRpb24gOiBvcHRpb25zLnNsaWRlXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuY2Fyb3VzZWwnLCAoZGF0YSA9IG5ldyBDYXJvdXNlbCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnbnVtYmVyJykgZGF0YS50byhvcHRpb24pXG4gICAgICBlbHNlIGlmIChhY3Rpb24pIGRhdGFbYWN0aW9uXSgpXG4gICAgICBlbHNlIGlmIChvcHRpb25zLmludGVydmFsKSBkYXRhLnBhdXNlKCkuY3ljbGUoKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5jYXJvdXNlbFxuXG4gICQuZm4uY2Fyb3VzZWwgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3RvciA9IENhcm91c2VsXG5cblxuICAvLyBDQVJPVVNFTCBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uY2Fyb3VzZWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLmNhcm91c2VsID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG5cbiAgLy8gQ0FST1VTRUwgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICB2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICB2YXIgaHJlZiAgICA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgIGlmIChocmVmKSB7XG4gICAgICBocmVmID0gaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQgID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fCBocmVmXG4gICAgdmFyICR0YXJnZXQgPSAkKGRvY3VtZW50KS5maW5kKHRhcmdldClcblxuICAgIGlmICghJHRhcmdldC5oYXNDbGFzcygnY2Fyb3VzZWwnKSkgcmV0dXJuXG5cbiAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkdGFyZ2V0LmRhdGEoKSwgJHRoaXMuZGF0YSgpKVxuICAgIHZhciBzbGlkZUluZGV4ID0gJHRoaXMuYXR0cignZGF0YS1zbGlkZS10bycpXG4gICAgaWYgKHNsaWRlSW5kZXgpIG9wdGlvbnMuaW50ZXJ2YWwgPSBmYWxzZVxuXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9ucylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICAkdGFyZ2V0LmRhdGEoJ2JzLmNhcm91c2VsJykudG8oc2xpZGVJbmRleClcbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gICQoZG9jdW1lbnQpXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZV0nLCBjbGlja0hhbmRsZXIpXG4gICAgLm9uKCdjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaScsICdbZGF0YS1zbGlkZS10b10nLCBjbGlja0hhbmRsZXIpXG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICQoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRjYXJvdXNlbCA9ICQodGhpcylcbiAgICAgIFBsdWdpbi5jYWxsKCRjYXJvdXNlbCwgJGNhcm91c2VsLmRhdGEoKSlcbiAgICB9KVxuICB9KVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBjb2xsYXBzZS5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyNjb2xsYXBzZVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoganNoaW50IGxhdGVkZWY6IGZhbHNlICovXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gQ09MTEFQU0UgUFVCTElDIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgQ29sbGFwc2UgPSBmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGVsZW1lbnQgICAgICA9ICQoZWxlbWVudClcbiAgICB0aGlzLm9wdGlvbnMgICAgICAgPSAkLmV4dGVuZCh7fSwgQ29sbGFwc2UuREVGQVVMVFMsIG9wdGlvbnMpXG4gICAgdGhpcy4kdHJpZ2dlciAgICAgID0gJCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1baHJlZj1cIiMnICsgZWxlbWVudC5pZCArICdcIl0sJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJyArIGVsZW1lbnQuaWQgKyAnXCJdJylcbiAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSBudWxsXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnBhcmVudCkge1xuICAgICAgdGhpcy4kcGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LCB0aGlzLiR0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudG9nZ2xlKSB0aGlzLnRvZ2dsZSgpXG4gIH1cblxuICBDb2xsYXBzZS5WRVJTSU9OICA9ICczLjQuMSdcblxuICBDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMzUwXG5cbiAgQ29sbGFwc2UuREVGQVVMVFMgPSB7XG4gICAgdG9nZ2xlOiB0cnVlXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuZGltZW5zaW9uID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNXaWR0aCA9IHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ3dpZHRoJylcbiAgICByZXR1cm4gaGFzV2lkdGggPyAnd2lkdGgnIDogJ2hlaWdodCdcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnaW4nKSkgcmV0dXJuXG5cbiAgICB2YXIgYWN0aXZlc0RhdGFcbiAgICB2YXIgYWN0aXZlcyA9IHRoaXMuJHBhcmVudCAmJiB0aGlzLiRwYXJlbnQuY2hpbGRyZW4oJy5wYW5lbCcpLmNoaWxkcmVuKCcuaW4sIC5jb2xsYXBzaW5nJylcblxuICAgIGlmIChhY3RpdmVzICYmIGFjdGl2ZXMubGVuZ3RoKSB7XG4gICAgICBhY3RpdmVzRGF0YSA9IGFjdGl2ZXMuZGF0YSgnYnMuY29sbGFwc2UnKVxuICAgICAgaWYgKGFjdGl2ZXNEYXRhICYmIGFjdGl2ZXNEYXRhLnRyYW5zaXRpb25pbmcpIHJldHVyblxuICAgIH1cblxuICAgIHZhciBzdGFydEV2ZW50ID0gJC5FdmVudCgnc2hvdy5icy5jb2xsYXBzZScpXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKHN0YXJ0RXZlbnQpXG4gICAgaWYgKHN0YXJ0RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgaWYgKGFjdGl2ZXMgJiYgYWN0aXZlcy5sZW5ndGgpIHtcbiAgICAgIFBsdWdpbi5jYWxsKGFjdGl2ZXMsICdoaWRlJylcbiAgICAgIGFjdGl2ZXNEYXRhIHx8IGFjdGl2ZXMuZGF0YSgnYnMuY29sbGFwc2UnLCBudWxsKVxuICAgIH1cblxuICAgIHZhciBkaW1lbnNpb24gPSB0aGlzLmRpbWVuc2lvbigpXG5cbiAgICB0aGlzLiRlbGVtZW50XG4gICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlJylcbiAgICAgIC5hZGRDbGFzcygnY29sbGFwc2luZycpW2RpbWVuc2lvbl0oMClcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgIHRoaXMuJHRyaWdnZXJcbiAgICAgIC5yZW1vdmVDbGFzcygnY29sbGFwc2VkJylcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgIHRoaXMudHJhbnNpdGlvbmluZyA9IDFcblxuICAgIHZhciBjb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzaW5nJylcbiAgICAgICAgLmFkZENsYXNzKCdjb2xsYXBzZSBpbicpW2RpbWVuc2lvbl0oJycpXG4gICAgICB0aGlzLnRyYW5zaXRpb25pbmcgPSAwXG4gICAgICB0aGlzLiRlbGVtZW50XG4gICAgICAgIC50cmlnZ2VyKCdzaG93bi5icy5jb2xsYXBzZScpXG4gICAgfVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuIGNvbXBsZXRlLmNhbGwodGhpcylcblxuICAgIHZhciBzY3JvbGxTaXplID0gJC5jYW1lbENhc2UoWydzY3JvbGwnLCBkaW1lbnNpb25dLmpvaW4oJy0nKSlcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5vbmUoJ2JzVHJhbnNpdGlvbkVuZCcsICQucHJveHkoY29tcGxldGUsIHRoaXMpKVxuICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKENvbGxhcHNlLlRSQU5TSVRJT05fRFVSQVRJT04pW2RpbWVuc2lvbl0odGhpcy4kZWxlbWVudFswXVtzY3JvbGxTaXplXSlcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnRyYW5zaXRpb25pbmcgfHwgIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykpIHJldHVyblxuXG4gICAgdmFyIHN0YXJ0RXZlbnQgPSAkLkV2ZW50KCdoaWRlLmJzLmNvbGxhcHNlJylcbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoc3RhcnRFdmVudClcbiAgICBpZiAoc3RhcnRFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5kaW1lbnNpb24oKVxuXG4gICAgdGhpcy4kZWxlbWVudFtkaW1lbnNpb25dKHRoaXMuJGVsZW1lbnRbZGltZW5zaW9uXSgpKVswXS5vZmZzZXRIZWlnaHRcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIC5hZGRDbGFzcygnY29sbGFwc2luZycpXG4gICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNlIGluJylcbiAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgZmFsc2UpXG5cbiAgICB0aGlzLiR0cmlnZ2VyXG4gICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpXG4gICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxuXG4gICAgdGhpcy50cmFuc2l0aW9uaW5nID0gMVxuXG4gICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy50cmFuc2l0aW9uaW5nID0gMFxuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2NvbGxhcHNpbmcnKVxuICAgICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlJylcbiAgICAgICAgLnRyaWdnZXIoJ2hpZGRlbi5icy5jb2xsYXBzZScpXG4gICAgfVxuXG4gICAgaWYgKCEkLnN1cHBvcnQudHJhbnNpdGlvbikgcmV0dXJuIGNvbXBsZXRlLmNhbGwodGhpcylcblxuICAgIHRoaXMuJGVsZW1lbnRcbiAgICAgIFtkaW1lbnNpb25dKDApXG4gICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KGNvbXBsZXRlLCB0aGlzKSlcbiAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChDb2xsYXBzZS5UUkFOU0lUSU9OX0RVUkFUSU9OKVxuICB9XG5cbiAgQ29sbGFwc2UucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2luJykgPyAnaGlkZScgOiAnc2hvdyddKClcbiAgfVxuXG4gIENvbGxhcHNlLnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICQoZG9jdW1lbnQpLmZpbmQodGhpcy5vcHRpb25zLnBhcmVudClcbiAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtkYXRhLXBhcmVudD1cIicgKyB0aGlzLm9wdGlvbnMucGFyZW50ICsgJ1wiXScpXG4gICAgICAuZWFjaCgkLnByb3h5KGZ1bmN0aW9uIChpLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciAkZWxlbWVudCA9ICQoZWxlbWVudClcbiAgICAgICAgdGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoZ2V0VGFyZ2V0RnJvbVRyaWdnZXIoJGVsZW1lbnQpLCAkZWxlbWVudClcbiAgICAgIH0sIHRoaXMpKVxuICAgICAgLmVuZCgpXG4gIH1cblxuICBDb2xsYXBzZS5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzID0gZnVuY3Rpb24gKCRlbGVtZW50LCAkdHJpZ2dlcikge1xuICAgIHZhciBpc09wZW4gPSAkZWxlbWVudC5oYXNDbGFzcygnaW4nKVxuXG4gICAgJGVsZW1lbnQuYXR0cignYXJpYS1leHBhbmRlZCcsIGlzT3BlbilcbiAgICAkdHJpZ2dlclxuICAgICAgLnRvZ2dsZUNsYXNzKCdjb2xsYXBzZWQnLCAhaXNPcGVuKVxuICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXG4gIH1cblxuICBmdW5jdGlvbiBnZXRUYXJnZXRGcm9tVHJpZ2dlcigkdHJpZ2dlcikge1xuICAgIHZhciBocmVmXG4gICAgdmFyIHRhcmdldCA9ICR0cmlnZ2VyLmF0dHIoJ2RhdGEtdGFyZ2V0JylcbiAgICAgIHx8IChocmVmID0gJHRyaWdnZXIuYXR0cignaHJlZicpKSAmJiBocmVmLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3XG5cbiAgICByZXR1cm4gJChkb2N1bWVudCkuZmluZCh0YXJnZXQpXG4gIH1cblxuXG4gIC8vIENPTExBUFNFIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJylcbiAgICAgIHZhciBvcHRpb25zID0gJC5leHRlbmQoe30sIENvbGxhcHNlLkRFRkFVTFRTLCAkdGhpcy5kYXRhKCksIHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uKVxuXG4gICAgICBpZiAoIWRhdGEgJiYgb3B0aW9ucy50b2dnbGUgJiYgL3Nob3d8aGlkZS8udGVzdChvcHRpb24pKSBvcHRpb25zLnRvZ2dsZSA9IGZhbHNlXG4gICAgICBpZiAoIWRhdGEpICR0aGlzLmRhdGEoJ2JzLmNvbGxhcHNlJywgKGRhdGEgPSBuZXcgQ29sbGFwc2UodGhpcywgb3B0aW9ucykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLmNvbGxhcHNlXG5cbiAgJC5mbi5jb2xsYXBzZSAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yID0gQ29sbGFwc2VcblxuXG4gIC8vIENPTExBUFNFIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT09XG5cbiAgJC5mbi5jb2xsYXBzZS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICQuZm4uY29sbGFwc2UgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBDT0xMQVBTRSBEQVRBLUFQSVxuICAvLyA9PT09PT09PT09PT09PT09PVxuXG4gICQoZG9jdW1lbnQpLm9uKCdjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsIGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG5cbiAgICBpZiAoISR0aGlzLmF0dHIoJ2RhdGEtdGFyZ2V0JykpIGUucHJldmVudERlZmF1bHQoKVxuXG4gICAgdmFyICR0YXJnZXQgPSBnZXRUYXJnZXRGcm9tVHJpZ2dlcigkdGhpcylcbiAgICB2YXIgZGF0YSAgICA9ICR0YXJnZXQuZGF0YSgnYnMuY29sbGFwc2UnKVxuICAgIHZhciBvcHRpb24gID0gZGF0YSA/ICd0b2dnbGUnIDogJHRoaXMuZGF0YSgpXG5cbiAgICBQbHVnaW4uY2FsbCgkdGFyZ2V0LCBvcHRpb24pXG4gIH0pXG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IGRyb3Bkb3duLmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI2Ryb3Bkb3duc1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIERST1BET1dOIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBiYWNrZHJvcCA9ICcuZHJvcGRvd24tYmFja2Ryb3AnXG4gIHZhciB0b2dnbGUgICA9ICdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXSdcbiAgdmFyIERyb3Bkb3duID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAkKGVsZW1lbnQpLm9uKCdjbGljay5icy5kcm9wZG93bicsIHRoaXMudG9nZ2xlKVxuICB9XG5cbiAgRHJvcGRvd24uVkVSU0lPTiA9ICczLjQuMSdcblxuICBmdW5jdGlvbiBnZXRQYXJlbnQoJHRoaXMpIHtcbiAgICB2YXIgc2VsZWN0b3IgPSAkdGhpcy5hdHRyKCdkYXRhLXRhcmdldCcpXG5cbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICBzZWxlY3RvciA9ICR0aGlzLmF0dHIoJ2hyZWYnKVxuICAgICAgc2VsZWN0b3IgPSBzZWxlY3RvciAmJiAvI1tBLVphLXpdLy50ZXN0KHNlbGVjdG9yKSAmJiBzZWxlY3Rvci5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLCAnJykgLy8gc3RyaXAgZm9yIGllN1xuICAgIH1cblxuICAgIHZhciAkcGFyZW50ID0gc2VsZWN0b3IgIT09ICcjJyA/ICQoZG9jdW1lbnQpLmZpbmQoc2VsZWN0b3IpIDogbnVsbFxuXG4gICAgcmV0dXJuICRwYXJlbnQgJiYgJHBhcmVudC5sZW5ndGggPyAkcGFyZW50IDogJHRoaXMucGFyZW50KClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyTWVudXMoZSkge1xuICAgIGlmIChlICYmIGUud2hpY2ggPT09IDMpIHJldHVyblxuICAgICQoYmFja2Ryb3ApLnJlbW92ZSgpXG4gICAgJCh0b2dnbGUpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgICAgICAgPSAkKHRoaXMpXG4gICAgICB2YXIgJHBhcmVudCAgICAgICA9IGdldFBhcmVudCgkdGhpcylcbiAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0geyByZWxhdGVkVGFyZ2V0OiB0aGlzIH1cblxuICAgICAgaWYgKCEkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJykpIHJldHVyblxuXG4gICAgICBpZiAoZSAmJiBlLnR5cGUgPT0gJ2NsaWNrJyAmJiAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpICYmICQuY29udGFpbnMoJHBhcmVudFswXSwgZS50YXJnZXQpKSByZXR1cm5cblxuICAgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdoaWRlLmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpXG5cbiAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgICAgJHRoaXMuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgICAkcGFyZW50LnJlbW92ZUNsYXNzKCdvcGVuJykudHJpZ2dlcigkLkV2ZW50KCdoaWRkZW4uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KSlcbiAgICB9KVxuICB9XG5cbiAgRHJvcGRvd24ucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgdmFyICR0aGlzID0gJCh0aGlzKVxuXG4gICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm5cblxuICAgIHZhciAkcGFyZW50ICA9IGdldFBhcmVudCgkdGhpcylcbiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJylcblxuICAgIGNsZWFyTWVudXMoKVxuXG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAhJHBhcmVudC5jbG9zZXN0KCcubmF2YmFyLW5hdicpLmxlbmd0aCkge1xuICAgICAgICAvLyBpZiBtb2JpbGUgd2UgdXNlIGEgYmFja2Ryb3AgYmVjYXVzZSBjbGljayBldmVudHMgZG9uJ3QgZGVsZWdhdGVcbiAgICAgICAgJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSlcbiAgICAgICAgICAuYWRkQ2xhc3MoJ2Ryb3Bkb3duLWJhY2tkcm9wJylcbiAgICAgICAgICAuaW5zZXJ0QWZ0ZXIoJCh0aGlzKSlcbiAgICAgICAgICAub24oJ2NsaWNrJywgY2xlYXJNZW51cylcbiAgICAgIH1cblxuICAgICAgdmFyIHJlbGF0ZWRUYXJnZXQgPSB7IHJlbGF0ZWRUYXJnZXQ6IHRoaXMgfVxuICAgICAgJHBhcmVudC50cmlnZ2VyKGUgPSAkLkV2ZW50KCdzaG93LmJzLmRyb3Bkb3duJywgcmVsYXRlZFRhcmdldCkpXG5cbiAgICAgIGlmIChlLmlzRGVmYXVsdFByZXZlbnRlZCgpKSByZXR1cm5cblxuICAgICAgJHRoaXNcbiAgICAgICAgLnRyaWdnZXIoJ2ZvY3VzJylcbiAgICAgICAgLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpXG5cbiAgICAgICRwYXJlbnRcbiAgICAgICAgLnRvZ2dsZUNsYXNzKCdvcGVuJylcbiAgICAgICAgLnRyaWdnZXIoJC5FdmVudCgnc2hvd24uYnMuZHJvcGRvd24nLCByZWxhdGVkVGFyZ2V0KSlcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIERyb3Bkb3duLnByb3RvdHlwZS5rZXlkb3duID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIS8oMzh8NDB8Mjd8MzIpLy50ZXN0KGUud2hpY2gpIHx8IC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZS50YXJnZXQudGFnTmFtZSkpIHJldHVyblxuXG4gICAgdmFyICR0aGlzID0gJCh0aGlzKVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuXG4gICAgaWYgKCR0aGlzLmlzKCcuZGlzYWJsZWQsIDpkaXNhYmxlZCcpKSByZXR1cm5cblxuICAgIHZhciAkcGFyZW50ICA9IGdldFBhcmVudCgkdGhpcylcbiAgICB2YXIgaXNBY3RpdmUgPSAkcGFyZW50Lmhhc0NsYXNzKCdvcGVuJylcblxuICAgIGlmICghaXNBY3RpdmUgJiYgZS53aGljaCAhPSAyNyB8fCBpc0FjdGl2ZSAmJiBlLndoaWNoID09IDI3KSB7XG4gICAgICBpZiAoZS53aGljaCA9PSAyNykgJHBhcmVudC5maW5kKHRvZ2dsZSkudHJpZ2dlcignZm9jdXMnKVxuICAgICAgcmV0dXJuICR0aGlzLnRyaWdnZXIoJ2NsaWNrJylcbiAgICB9XG5cbiAgICB2YXIgZGVzYyA9ICcgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhJ1xuICAgIHZhciAkaXRlbXMgPSAkcGFyZW50LmZpbmQoJy5kcm9wZG93bi1tZW51JyArIGRlc2MpXG5cbiAgICBpZiAoISRpdGVtcy5sZW5ndGgpIHJldHVyblxuXG4gICAgdmFyIGluZGV4ID0gJGl0ZW1zLmluZGV4KGUudGFyZ2V0KVxuXG4gICAgaWYgKGUud2hpY2ggPT0gMzggJiYgaW5kZXggPiAwKSAgICAgICAgICAgICAgICAgaW5kZXgtLSAgICAgICAgIC8vIHVwXG4gICAgaWYgKGUud2hpY2ggPT0gNDAgJiYgaW5kZXggPCAkaXRlbXMubGVuZ3RoIC0gMSkgaW5kZXgrKyAgICAgICAgIC8vIGRvd25cbiAgICBpZiAoIX5pbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDBcblxuICAgICRpdGVtcy5lcShpbmRleCkudHJpZ2dlcignZm9jdXMnKVxuICB9XG5cblxuICAvLyBEUk9QRE9XTiBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICA9ICR0aGlzLmRhdGEoJ2JzLmRyb3Bkb3duJylcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5kcm9wZG93bicsIChkYXRhID0gbmV3IERyb3Bkb3duKHRoaXMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0uY2FsbCgkdGhpcylcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uZHJvcGRvd25cblxuICAkLmZuLmRyb3Bkb3duICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4uZHJvcGRvd24uQ29uc3RydWN0b3IgPSBEcm9wZG93blxuXG5cbiAgLy8gRFJPUERPV04gTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5kcm9wZG93biA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIEFQUExZIFRPIFNUQU5EQVJEIERST1BET1dOIEVMRU1FTlRTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudClcbiAgICAub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgY2xlYXJNZW51cylcbiAgICAub24oJ2NsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgJy5kcm9wZG93biBmb3JtJywgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKSB9KVxuICAgIC5vbignY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGknLCB0b2dnbGUsIERyb3Bkb3duLnByb3RvdHlwZS50b2dnbGUpXG4gICAgLm9uKCdrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpJywgdG9nZ2xlLCBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93bilcbiAgICAub24oJ2tleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGknLCAnLmRyb3Bkb3duLW1lbnUnLCBEcm9wZG93bi5wcm90b3R5cGUua2V5ZG93bilcblxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogbW9kYWwuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jbW9kYWxzXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gTU9EQUwgQ0xBU1MgREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09XG5cbiAgdmFyIE1vZGFsID0gZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy4kYm9keSA9ICQoZG9jdW1lbnQuYm9keSlcbiAgICB0aGlzLiRlbGVtZW50ID0gJChlbGVtZW50KVxuICAgIHRoaXMuJGRpYWxvZyA9IHRoaXMuJGVsZW1lbnQuZmluZCgnLm1vZGFsLWRpYWxvZycpXG4gICAgdGhpcy4kYmFja2Ryb3AgPSBudWxsXG4gICAgdGhpcy5pc1Nob3duID0gbnVsbFxuICAgIHRoaXMub3JpZ2luYWxCb2R5UGFkID0gbnVsbFxuICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSAwXG4gICAgdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICB0aGlzLmZpeGVkQ29udGVudCA9ICcubmF2YmFyLWZpeGVkLXRvcCwgLm5hdmJhci1maXhlZC1ib3R0b20nXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbW90ZSkge1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAuZmluZCgnLm1vZGFsLWNvbnRlbnQnKVxuICAgICAgICAubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLCAkLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2xvYWRlZC5icy5tb2RhbCcpXG4gICAgICAgIH0sIHRoaXMpKVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLlZFUlNJT04gPSAnMy40LjEnXG5cbiAgTW9kYWwuVFJBTlNJVElPTl9EVVJBVElPTiA9IDMwMFxuICBNb2RhbC5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgTW9kYWwuREVGQVVMVFMgPSB7XG4gICAgYmFja2Ryb3A6IHRydWUsXG4gICAga2V5Ym9hcmQ6IHRydWUsXG4gICAgc2hvdzogdHJ1ZVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uIChfcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmlzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhfcmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKF9yZWxhdGVkVGFyZ2V0KSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgdmFyIGUgPSAkLkV2ZW50KCdzaG93LmJzLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldCB9KVxuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXG5cbiAgICBpZiAodGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5pc1Nob3duID0gdHJ1ZVxuXG4gICAgdGhpcy5jaGVja1Njcm9sbGJhcigpXG4gICAgdGhpcy5zZXRTY3JvbGxiYXIoKVxuICAgIHRoaXMuJGJvZHkuYWRkQ2xhc3MoJ21vZGFsLW9wZW4nKVxuXG4gICAgdGhpcy5lc2NhcGUoKVxuICAgIHRoaXMucmVzaXplKClcblxuICAgIHRoaXMuJGVsZW1lbnQub24oJ2NsaWNrLmRpc21pc3MuYnMubW9kYWwnLCAnW2RhdGEtZGlzbWlzcz1cIm1vZGFsXCJdJywgJC5wcm94eSh0aGlzLmhpZGUsIHRoaXMpKVxuXG4gICAgdGhpcy4kZGlhbG9nLm9uKCdtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoYXQuJGVsZW1lbnQub25lKCdtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoJChlLnRhcmdldCkuaXModGhhdC4kZWxlbWVudCkpIHRoYXQuaWdub3JlQmFja2Ryb3BDbGljayA9IHRydWVcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRyYW5zaXRpb24gPSAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGF0LiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJylcblxuICAgICAgaWYgKCF0aGF0LiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aCkge1xuICAgICAgICB0aGF0LiRlbGVtZW50LmFwcGVuZFRvKHRoYXQuJGJvZHkpIC8vIGRvbid0IG1vdmUgbW9kYWxzIGRvbSBwb3NpdGlvblxuICAgICAgfVxuXG4gICAgICB0aGF0LiRlbGVtZW50XG4gICAgICAgIC5zaG93KClcbiAgICAgICAgLnNjcm9sbFRvcCgwKVxuXG4gICAgICB0aGF0LmFkanVzdERpYWxvZygpXG5cbiAgICAgIGlmICh0cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoYXQuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGggLy8gZm9yY2UgcmVmbG93XG4gICAgICB9XG5cbiAgICAgIHRoYXQuJGVsZW1lbnQuYWRkQ2xhc3MoJ2luJylcblxuICAgICAgdGhhdC5lbmZvcmNlRm9jdXMoKVxuXG4gICAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3duLmJzLm1vZGFsJywgeyByZWxhdGVkVGFyZ2V0OiBfcmVsYXRlZFRhcmdldCB9KVxuXG4gICAgICB0cmFuc2l0aW9uID9cbiAgICAgICAgdGhhdC4kZGlhbG9nIC8vIHdhaXQgZm9yIG1vZGFsIHRvIHNsaWRlIGluXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdmb2N1cycpLnRyaWdnZXIoZSlcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5lbXVsYXRlVHJhbnNpdGlvbkVuZChNb2RhbC5UUkFOU0lUSU9OX0RVUkFUSU9OKSA6XG4gICAgICAgIHRoYXQuJGVsZW1lbnQudHJpZ2dlcignZm9jdXMnKS50cmlnZ2VyKGUpXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoZSkgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICBlID0gJC5FdmVudCgnaGlkZS5icy5tb2RhbCcpXG5cbiAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcblxuICAgIGlmICghdGhpcy5pc1Nob3duIHx8IGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgdGhpcy5pc1Nob3duID0gZmFsc2VcblxuICAgIHRoaXMuZXNjYXBlKClcbiAgICB0aGlzLnJlc2l6ZSgpXG5cbiAgICAkKGRvY3VtZW50KS5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKVxuXG4gICAgdGhpcy4kZWxlbWVudFxuICAgICAgLnJlbW92ZUNsYXNzKCdpbicpXG4gICAgICAub2ZmKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJylcbiAgICAgIC5vZmYoJ21vdXNldXAuZGlzbWlzcy5icy5tb2RhbCcpXG5cbiAgICB0aGlzLiRkaWFsb2cub2ZmKCdtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbCcpXG5cbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCAkLnByb3h5KHRoaXMuaGlkZU1vZGFsLCB0aGlzKSlcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLlRSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgIHRoaXMuaGlkZU1vZGFsKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5lbmZvcmNlRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgJChkb2N1bWVudClcbiAgICAgIC5vZmYoJ2ZvY3VzaW4uYnMubW9kYWwnKSAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICAgIC5vbignZm9jdXNpbi5icy5tb2RhbCcsICQucHJveHkoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGRvY3VtZW50ICE9PSBlLnRhcmdldCAmJlxuICAgICAgICAgIHRoaXMuJGVsZW1lbnRbMF0gIT09IGUudGFyZ2V0ICYmXG4gICAgICAgICAgIXRoaXMuJGVsZW1lbnQuaGFzKGUudGFyZ2V0KS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoJ2ZvY3VzJylcbiAgICAgICAgfVxuICAgICAgfSwgdGhpcykpXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUuZXNjYXBlID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmtleWJvYXJkKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdrZXlkb3duLmRpc21pc3MuYnMubW9kYWwnLCAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGUud2hpY2ggPT0gMjcgJiYgdGhpcy5oaWRlKClcbiAgICAgIH0sIHRoaXMpKVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNTaG93bikge1xuICAgICAgdGhpcy4kZWxlbWVudC5vZmYoJ2tleWRvd24uZGlzbWlzcy5icy5tb2RhbCcpXG4gICAgfVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5pc1Nob3duKSB7XG4gICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZS5icy5tb2RhbCcsICQucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsIHRoaXMpKVxuICAgIH0gZWxzZSB7XG4gICAgICAkKHdpbmRvdykub2ZmKCdyZXNpemUuYnMubW9kYWwnKVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5oaWRlTW9kYWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgdGhpcy4kZWxlbWVudC5oaWRlKClcbiAgICB0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoYXQuJGJvZHkucmVtb3ZlQ2xhc3MoJ21vZGFsLW9wZW4nKVxuICAgICAgdGhhdC5yZXNldEFkanVzdG1lbnRzKClcbiAgICAgIHRoYXQucmVzZXRTY3JvbGxiYXIoKVxuICAgICAgdGhhdC4kZWxlbWVudC50cmlnZ2VyKCdoaWRkZW4uYnMubW9kYWwnKVxuICAgIH0pXG4gIH1cblxuICBNb2RhbC5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy4kYmFja2Ryb3AgJiYgdGhpcy4kYmFja2Ryb3AucmVtb3ZlKClcbiAgICB0aGlzLiRiYWNrZHJvcCA9IG51bGxcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5iYWNrZHJvcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciBhbmltYXRlID0gdGhpcy4kZWxlbWVudC5oYXNDbGFzcygnZmFkZScpID8gJ2ZhZGUnIDogJydcblxuICAgIGlmICh0aGlzLmlzU2hvd24gJiYgdGhpcy5vcHRpb25zLmJhY2tkcm9wKSB7XG4gICAgICB2YXIgZG9BbmltYXRlID0gJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgYW5pbWF0ZVxuXG4gICAgICB0aGlzLiRiYWNrZHJvcCA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpXG4gICAgICAgIC5hZGRDbGFzcygnbW9kYWwtYmFja2Ryb3AgJyArIGFuaW1hdGUpXG4gICAgICAgIC5hcHBlbmRUbyh0aGlzLiRib2R5KVxuXG4gICAgICB0aGlzLiRlbGVtZW50Lm9uKCdjbGljay5kaXNtaXNzLmJzLm1vZGFsJywgJC5wcm94eShmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrKSB7XG4gICAgICAgICAgdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuXG4gICAgICAgIHRoaXMub3B0aW9ucy5iYWNrZHJvcCA9PSAnc3RhdGljJ1xuICAgICAgICAgID8gdGhpcy4kZWxlbWVudFswXS5mb2N1cygpXG4gICAgICAgICAgOiB0aGlzLmhpZGUoKVxuICAgICAgfSwgdGhpcykpXG5cbiAgICAgIGlmIChkb0FuaW1hdGUpIHRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoIC8vIGZvcmNlIHJlZmxvd1xuXG4gICAgICB0aGlzLiRiYWNrZHJvcC5hZGRDbGFzcygnaW4nKVxuXG4gICAgICBpZiAoIWNhbGxiYWNrKSByZXR1cm5cblxuICAgICAgZG9BbmltYXRlID9cbiAgICAgICAgdGhpcy4kYmFja2Ryb3BcbiAgICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjYWxsYmFjaylcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoTW9kYWwuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgICBjYWxsYmFjaygpXG5cbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2hvd24gJiYgdGhpcy4kYmFja2Ryb3ApIHtcbiAgICAgIHRoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCdpbicpXG5cbiAgICAgIHZhciBjYWxsYmFja1JlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhhdC5yZW1vdmVCYWNrZHJvcCgpXG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgICAgIH1cbiAgICAgICQuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoJ2ZhZGUnKSA/XG4gICAgICAgIHRoaXMuJGJhY2tkcm9wXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY2FsbGJhY2tSZW1vdmUpXG4gICAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKE1vZGFsLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgICAgY2FsbGJhY2tSZW1vdmUoKVxuXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKVxuICAgIH1cbiAgfVxuXG4gIC8vIHRoZXNlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcblxuICBNb2RhbC5wcm90b3R5cGUuaGFuZGxlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5hZGp1c3REaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG1vZGFsSXNPdmVyZmxvd2luZyA9IHRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgdGhpcy4kZWxlbWVudC5jc3Moe1xuICAgICAgcGFkZGluZ0xlZnQ6ICF0aGlzLmJvZHlJc092ZXJmbG93aW5nICYmIG1vZGFsSXNPdmVyZmxvd2luZyA/IHRoaXMuc2Nyb2xsYmFyV2lkdGggOiAnJyxcbiAgICAgIHBhZGRpbmdSaWdodDogdGhpcy5ib2R5SXNPdmVyZmxvd2luZyAmJiAhbW9kYWxJc092ZXJmbG93aW5nID8gdGhpcy5zY3JvbGxiYXJXaWR0aCA6ICcnXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuJGVsZW1lbnQuY3NzKHtcbiAgICAgIHBhZGRpbmdMZWZ0OiAnJyxcbiAgICAgIHBhZGRpbmdSaWdodDogJydcbiAgICB9KVxuICB9XG5cbiAgTW9kYWwucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBmdWxsV2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGlmICghZnVsbFdpbmRvd1dpZHRoKSB7IC8vIHdvcmthcm91bmQgZm9yIG1pc3Npbmcgd2luZG93LmlubmVyV2lkdGggaW4gSUU4XG4gICAgICB2YXIgZG9jdW1lbnRFbGVtZW50UmVjdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgZnVsbFdpbmRvd1dpZHRoID0gZG9jdW1lbnRFbGVtZW50UmVjdC5yaWdodCAtIE1hdGguYWJzKGRvY3VtZW50RWxlbWVudFJlY3QubGVmdClcbiAgICB9XG4gICAgdGhpcy5ib2R5SXNPdmVyZmxvd2luZyA9IGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGggPCBmdWxsV2luZG93V2lkdGhcbiAgICB0aGlzLnNjcm9sbGJhcldpZHRoID0gdGhpcy5tZWFzdXJlU2Nyb2xsYmFyKClcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5zZXRTY3JvbGxiYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJvZHlQYWQgPSBwYXJzZUludCgodGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnKSB8fCAwKSwgMTApXG4gICAgdGhpcy5vcmlnaW5hbEJvZHlQYWQgPSBkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCB8fCAnJ1xuICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuc2Nyb2xsYmFyV2lkdGhcbiAgICBpZiAodGhpcy5ib2R5SXNPdmVyZmxvd2luZykge1xuICAgICAgdGhpcy4kYm9keS5jc3MoJ3BhZGRpbmctcmlnaHQnLCBib2R5UGFkICsgc2Nyb2xsYmFyV2lkdGgpXG4gICAgICAkKHRoaXMuZml4ZWRDb250ZW50KS5lYWNoKGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkge1xuICAgICAgICB2YXIgYWN0dWFsUGFkZGluZyA9IGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0XG4gICAgICAgIHZhciBjYWxjdWxhdGVkUGFkZGluZyA9ICQoZWxlbWVudCkuY3NzKCdwYWRkaW5nLXJpZ2h0JylcbiAgICAgICAgJChlbGVtZW50KVxuICAgICAgICAgIC5kYXRhKCdwYWRkaW5nLXJpZ2h0JywgYWN0dWFsUGFkZGluZylcbiAgICAgICAgICAuY3NzKCdwYWRkaW5nLXJpZ2h0JywgcGFyc2VGbG9hdChjYWxjdWxhdGVkUGFkZGluZykgKyBzY3JvbGxiYXJXaWR0aCArICdweCcpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5yZXNldFNjcm9sbGJhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLiRib2R5LmNzcygncGFkZGluZy1yaWdodCcsIHRoaXMub3JpZ2luYWxCb2R5UGFkKVxuICAgICQodGhpcy5maXhlZENvbnRlbnQpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICB2YXIgcGFkZGluZyA9ICQoZWxlbWVudCkuZGF0YSgncGFkZGluZy1yaWdodCcpXG4gICAgICAkKGVsZW1lbnQpLnJlbW92ZURhdGEoJ3BhZGRpbmctcmlnaHQnKVxuICAgICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSBwYWRkaW5nID8gcGFkZGluZyA6ICcnXG4gICAgfSlcbiAgfVxuXG4gIE1vZGFsLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyID0gZnVuY3Rpb24gKCkgeyAvLyB0aHggd2Fsc2hcbiAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBzY3JvbGxEaXYuY2xhc3NOYW1lID0gJ21vZGFsLXNjcm9sbGJhci1tZWFzdXJlJ1xuICAgIHRoaXMuJGJvZHkuYXBwZW5kKHNjcm9sbERpdilcbiAgICB2YXIgc2Nyb2xsYmFyV2lkdGggPSBzY3JvbGxEaXYub2Zmc2V0V2lkdGggLSBzY3JvbGxEaXYuY2xpZW50V2lkdGhcbiAgICB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKHNjcm9sbERpdilcbiAgICByZXR1cm4gc2Nyb2xsYmFyV2lkdGhcbiAgfVxuXG5cbiAgLy8gTU9EQUwgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uLCBfcmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgPSAkdGhpcy5kYXRhKCdicy5tb2RhbCcpXG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBNb2RhbC5ERUZBVUxUUywgJHRoaXMuZGF0YSgpLCB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvbilcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy5tb2RhbCcsIChkYXRhID0gbmV3IE1vZGFsKHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oX3JlbGF0ZWRUYXJnZXQpXG4gICAgICBlbHNlIGlmIChvcHRpb25zLnNob3cpIGRhdGEuc2hvdyhfcmVsYXRlZFRhcmdldClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4ubW9kYWxcblxuICAkLmZuLm1vZGFsID0gUGx1Z2luXG4gICQuZm4ubW9kYWwuQ29uc3RydWN0b3IgPSBNb2RhbFxuXG5cbiAgLy8gTU9EQUwgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkLmZuLm1vZGFsLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5tb2RhbCA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIE1PREFMIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09XG5cbiAgJChkb2N1bWVudCkub24oJ2NsaWNrLmJzLm1vZGFsLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cIm1vZGFsXCJdJywgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgJHRoaXMgPSAkKHRoaXMpXG4gICAgdmFyIGhyZWYgPSAkdGhpcy5hdHRyKCdocmVmJylcbiAgICB2YXIgdGFyZ2V0ID0gJHRoaXMuYXR0cignZGF0YS10YXJnZXQnKSB8fFxuICAgICAgKGhyZWYgJiYgaHJlZi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLCAnJykpIC8vIHN0cmlwIGZvciBpZTdcblxuICAgIHZhciAkdGFyZ2V0ID0gJChkb2N1bWVudCkuZmluZCh0YXJnZXQpXG4gICAgdmFyIG9wdGlvbiA9ICR0YXJnZXQuZGF0YSgnYnMubW9kYWwnKSA/ICd0b2dnbGUnIDogJC5leHRlbmQoeyByZW1vdGU6ICEvIy8udGVzdChocmVmKSAmJiBocmVmIH0sICR0YXJnZXQuZGF0YSgpLCAkdGhpcy5kYXRhKCkpXG5cbiAgICBpZiAoJHRoaXMuaXMoJ2EnKSkgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAkdGFyZ2V0Lm9uZSgnc2hvdy5icy5tb2RhbCcsIGZ1bmN0aW9uIChzaG93RXZlbnQpIHtcbiAgICAgIGlmIChzaG93RXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVybiAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICAkdGFyZ2V0Lm9uZSgnaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAkdGhpcy5pcygnOnZpc2libGUnKSAmJiAkdGhpcy50cmlnZ2VyKCdmb2N1cycpXG4gICAgICB9KVxuICAgIH0pXG4gICAgUGx1Z2luLmNhbGwoJHRhcmdldCwgb3B0aW9uLCB0aGlzKVxuICB9KVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiB0b29sdGlwLmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI3Rvb2x0aXBcbiAqIEluc3BpcmVkIGJ5IHRoZSBvcmlnaW5hbCBqUXVlcnkudGlwc3kgYnkgSmFzb24gRnJhbWVcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIERJU0FMTE9XRURfQVRUUklCVVRFUyA9IFsnc2FuaXRpemUnLCAnd2hpdGVMaXN0JywgJ3Nhbml0aXplRm4nXVxuXG4gIHZhciB1cmlBdHRycyA9IFtcbiAgICAnYmFja2dyb3VuZCcsXG4gICAgJ2NpdGUnLFxuICAgICdocmVmJyxcbiAgICAnaXRlbXR5cGUnLFxuICAgICdsb25nZGVzYycsXG4gICAgJ3Bvc3RlcicsXG4gICAgJ3NyYycsXG4gICAgJ3hsaW5rOmhyZWYnXG4gIF1cblxuICB2YXIgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiA9IC9eYXJpYS1bXFx3LV0qJC9pXG5cbiAgdmFyIERlZmF1bHRXaGl0ZWxpc3QgPSB7XG4gICAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICAgIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gICAgYXJlYTogW10sXG4gICAgYjogW10sXG4gICAgYnI6IFtdLFxuICAgIGNvbDogW10sXG4gICAgY29kZTogW10sXG4gICAgZGl2OiBbXSxcbiAgICBlbTogW10sXG4gICAgaHI6IFtdLFxuICAgIGgxOiBbXSxcbiAgICBoMjogW10sXG4gICAgaDM6IFtdLFxuICAgIGg0OiBbXSxcbiAgICBoNTogW10sXG4gICAgaDY6IFtdLFxuICAgIGk6IFtdLFxuICAgIGltZzogWydzcmMnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICAgIGxpOiBbXSxcbiAgICBvbDogW10sXG4gICAgcDogW10sXG4gICAgcHJlOiBbXSxcbiAgICBzOiBbXSxcbiAgICBzbWFsbDogW10sXG4gICAgc3BhbjogW10sXG4gICAgc3ViOiBbXSxcbiAgICBzdXA6IFtdLFxuICAgIHN0cm9uZzogW10sXG4gICAgdTogW10sXG4gICAgdWw6IFtdXG4gIH1cblxuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgcmVjb2duaXplcyBhIGNvbW1vbmx5IHVzZWZ1bCBzdWJzZXQgb2YgVVJMcyB0aGF0IGFyZSBzYWZlLlxuICAgKlxuICAgKiBTaG91dG91dCB0byBBbmd1bGFyIDcgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzcuMi40L3BhY2thZ2VzL2NvcmUvc3JjL3Nhbml0aXphdGlvbi91cmxfc2FuaXRpemVyLnRzXG4gICAqL1xuICB2YXIgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGUpOnxbXiY6Lz8jXSooPzpbLz8jXXwkKSkvZ2lcblxuICAvKipcbiAgICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gICAqXG4gICAqIFNob3V0b3V0IHRvIEFuZ3VsYXIgNyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvNy4yLjQvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAgICovXG4gIHZhciBEQVRBX1VSTF9QQVRURVJOID0gL15kYXRhOig/OmltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1xcLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW2EtejAtOSsvXSs9KiQvaVxuXG4gIGZ1bmN0aW9uIGFsbG93ZWRBdHRyaWJ1dGUoYXR0ciwgYWxsb3dlZEF0dHJpYnV0ZUxpc3QpIHtcbiAgICB2YXIgYXR0ck5hbWUgPSBhdHRyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmICgkLmluQXJyYXkoYXR0ck5hbWUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSAhPT0gLTEpIHtcbiAgICAgIGlmICgkLmluQXJyYXkoYXR0ck5hbWUsIHVyaUF0dHJzKSAhPT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXR0ci5ub2RlVmFsdWUubWF0Y2goU0FGRV9VUkxfUEFUVEVSTikgfHwgYXR0ci5ub2RlVmFsdWUubWF0Y2goREFUQV9VUkxfUEFUVEVSTikpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgdmFyIHJlZ0V4cCA9ICQoYWxsb3dlZEF0dHJpYnV0ZUxpc3QpLmZpbHRlcihmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHBcbiAgICB9KVxuXG4gICAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZWdFeHAubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXR0ck5hbWUubWF0Y2gocmVnRXhwW2ldKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIHdoaXRlTGlzdCwgc2FuaXRpemVGbikge1xuICAgIGlmICh1bnNhZmVIdG1sLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgICB9XG5cbiAgICBpZiAoc2FuaXRpemVGbiAmJiB0eXBlb2Ygc2FuaXRpemVGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHNhbml0aXplRm4odW5zYWZlSHRtbClcbiAgICB9XG5cbiAgICAvLyBJRSA4IGFuZCBiZWxvdyBkb24ndCBzdXBwb3J0IGNyZWF0ZUhUTUxEb2N1bWVudFxuICAgIGlmICghZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gfHwgIWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCkge1xuICAgICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZERvY3VtZW50ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCdzYW5pdGl6YXRpb24nKVxuICAgIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTCA9IHVuc2FmZUh0bWxcblxuICAgIHZhciB3aGl0ZWxpc3RLZXlzID0gJC5tYXAod2hpdGVMaXN0LCBmdW5jdGlvbiAoZWwsIGkpIHsgcmV0dXJuIGkgfSlcbiAgICB2YXIgZWxlbWVudHMgPSAkKGNyZWF0ZWREb2N1bWVudC5ib2R5KS5maW5kKCcqJylcblxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGVsID0gZWxlbWVudHNbaV1cbiAgICAgIHZhciBlbE5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIGlmICgkLmluQXJyYXkoZWxOYW1lLCB3aGl0ZWxpc3RLZXlzKSA9PT0gLTEpIHtcbiAgICAgICAgZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbClcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICB2YXIgYXR0cmlidXRlTGlzdCA9ICQubWFwKGVsLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gZWwgfSlcbiAgICAgIHZhciB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQod2hpdGVMaXN0WycqJ10gfHwgW10sIHdoaXRlTGlzdFtlbE5hbWVdIHx8IFtdKVxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgbGVuMiA9IGF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBqIDwgbGVuMjsgaisrKSB7XG4gICAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGVMaXN0W2pdLCB3aGl0ZWxpc3RlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZUxpc3Rbal0ubm9kZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MXG4gIH1cblxuICAvLyBUT09MVElQIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgVG9vbHRpcCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy50eXBlICAgICAgID0gbnVsbFxuICAgIHRoaXMub3B0aW9ucyAgICA9IG51bGxcbiAgICB0aGlzLmVuYWJsZWQgICAgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0ICAgID0gbnVsbFxuICAgIHRoaXMuaG92ZXJTdGF0ZSA9IG51bGxcbiAgICB0aGlzLiRlbGVtZW50ICAgPSBudWxsXG4gICAgdGhpcy5pblN0YXRlICAgID0gbnVsbFxuXG4gICAgdGhpcy5pbml0KCd0b29sdGlwJywgZWxlbWVudCwgb3B0aW9ucylcbiAgfVxuXG4gIFRvb2x0aXAuVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgVG9vbHRpcC5UUkFOU0lUSU9OX0RVUkFUSU9OID0gMTUwXG5cbiAgVG9vbHRpcC5ERUZBVUxUUyA9IHtcbiAgICBhbmltYXRpb246IHRydWUsXG4gICAgcGxhY2VtZW50OiAndG9wJyxcbiAgICBzZWxlY3RvcjogZmFsc2UsXG4gICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj48ZGl2IGNsYXNzPVwidG9vbHRpcC1pbm5lclwiPjwvZGl2PjwvZGl2PicsXG4gICAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJyxcbiAgICB0aXRsZTogJycsXG4gICAgZGVsYXk6IDAsXG4gICAgaHRtbDogZmFsc2UsXG4gICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICB2aWV3cG9ydDoge1xuICAgICAgc2VsZWN0b3I6ICdib2R5JyxcbiAgICAgIHBhZGRpbmc6IDBcbiAgICB9LFxuICAgIHNhbml0aXplIDogdHJ1ZSxcbiAgICBzYW5pdGl6ZUZuIDogbnVsbCxcbiAgICB3aGl0ZUxpc3QgOiBEZWZhdWx0V2hpdGVsaXN0XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKHR5cGUsIGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmVuYWJsZWQgICA9IHRydWVcbiAgICB0aGlzLnR5cGUgICAgICA9IHR5cGVcbiAgICB0aGlzLiRlbGVtZW50ICA9ICQoZWxlbWVudClcbiAgICB0aGlzLm9wdGlvbnMgICA9IHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25zKVxuICAgIHRoaXMuJHZpZXdwb3J0ID0gdGhpcy5vcHRpb25zLnZpZXdwb3J0ICYmICQoZG9jdW1lbnQpLmZpbmQoJC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCkgPyB0aGlzLm9wdGlvbnMudmlld3BvcnQuY2FsbCh0aGlzLCB0aGlzLiRlbGVtZW50KSA6ICh0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3IgfHwgdGhpcy5vcHRpb25zLnZpZXdwb3J0KSlcbiAgICB0aGlzLmluU3RhdGUgICA9IHsgY2xpY2s6IGZhbHNlLCBob3ZlcjogZmFsc2UsIGZvY3VzOiBmYWxzZSB9XG5cbiAgICBpZiAodGhpcy4kZWxlbWVudFswXSBpbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yICYmICF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgJyArIHRoaXMudHlwZSArICcgb24gdGhlIHdpbmRvdy5kb2N1bWVudCBvYmplY3QhJylcbiAgICB9XG5cbiAgICB2YXIgdHJpZ2dlcnMgPSB0aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdCgnICcpXG5cbiAgICBmb3IgKHZhciBpID0gdHJpZ2dlcnMubGVuZ3RoOyBpLS07KSB7XG4gICAgICB2YXIgdHJpZ2dlciA9IHRyaWdnZXJzW2ldXG5cbiAgICAgIGlmICh0cmlnZ2VyID09ICdjbGljaycpIHtcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbignY2xpY2suJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMudG9nZ2xlLCB0aGlzKSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPSAnbWFudWFsJykge1xuICAgICAgICB2YXIgZXZlbnRJbiAgPSB0cmlnZ2VyID09ICdob3ZlcicgPyAnbW91c2VlbnRlcicgOiAnZm9jdXNpbidcbiAgICAgICAgdmFyIGV2ZW50T3V0ID0gdHJpZ2dlciA9PSAnaG92ZXInID8gJ21vdXNlbGVhdmUnIDogJ2ZvY3Vzb3V0J1xuXG4gICAgICAgIHRoaXMuJGVsZW1lbnQub24oZXZlbnRJbiAgKyAnLicgKyB0aGlzLnR5cGUsIHRoaXMub3B0aW9ucy5zZWxlY3RvciwgJC5wcm94eSh0aGlzLmVudGVyLCB0aGlzKSlcbiAgICAgICAgdGhpcy4kZWxlbWVudC5vbihldmVudE91dCArICcuJyArIHRoaXMudHlwZSwgdGhpcy5vcHRpb25zLnNlbGVjdG9yLCAkLnByb3h5KHRoaXMubGVhdmUsIHRoaXMpKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5zZWxlY3RvciA/XG4gICAgICAodGhpcy5fb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIHsgdHJpZ2dlcjogJ21hbnVhbCcsIHNlbGVjdG9yOiAnJyB9KSkgOlxuICAgICAgdGhpcy5maXhUaXRsZSgpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5nZXREZWZhdWx0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gVG9vbHRpcC5ERUZBVUxUU1xuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRhdGFBdHRyaWJ1dGVzID0gdGhpcy4kZWxlbWVudC5kYXRhKClcblxuICAgIGZvciAodmFyIGRhdGFBdHRyIGluIGRhdGFBdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoZGF0YUF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoZGF0YUF0dHIpICYmICQuaW5BcnJheShkYXRhQXR0ciwgRElTQUxMT1dFRF9BVFRSSUJVVEVTKSAhPT0gLTEpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyXVxuICAgICAgfVxuICAgIH1cblxuICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5nZXREZWZhdWx0cygpLCBkYXRhQXR0cmlidXRlcywgb3B0aW9ucylcblxuICAgIGlmIChvcHRpb25zLmRlbGF5ICYmIHR5cGVvZiBvcHRpb25zLmRlbGF5ID09ICdudW1iZXInKSB7XG4gICAgICBvcHRpb25zLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBvcHRpb25zLmRlbGF5LFxuICAgICAgICBoaWRlOiBvcHRpb25zLmRlbGF5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICAgIG9wdGlvbnMudGVtcGxhdGUgPSBzYW5pdGl6ZUh0bWwob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy53aGl0ZUxpc3QsIG9wdGlvbnMuc2FuaXRpemVGbilcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uc1xuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBvcHRpb25zICA9IHt9XG4gICAgdmFyIGRlZmF1bHRzID0gdGhpcy5nZXREZWZhdWx0cygpXG5cbiAgICB0aGlzLl9vcHRpb25zICYmICQuZWFjaCh0aGlzLl9vcHRpb25zLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGRlZmF1bHRzW2tleV0gIT0gdmFsdWUpIG9wdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgfSlcblxuICAgIHJldHVybiBvcHRpb25zXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICB2YXIgc2VsZiA9IG9iaiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IgP1xuICAgICAgb2JqIDogJChvYmouY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSlcblxuICAgIGlmICghc2VsZikge1xuICAgICAgc2VsZiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKG9iai5jdXJyZW50VGFyZ2V0LCB0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKVxuICAgICAgJChvYmouY3VycmVudFRhcmdldCkuZGF0YSgnYnMuJyArIHRoaXMudHlwZSwgc2VsZilcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgJC5FdmVudCkge1xuICAgICAgc2VsZi5pblN0YXRlW29iai50eXBlID09ICdmb2N1c2luJyA/ICdmb2N1cycgOiAnaG92ZXInXSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoc2VsZi50aXAoKS5oYXNDbGFzcygnaW4nKSB8fCBzZWxmLmhvdmVyU3RhdGUgPT0gJ2luJykge1xuICAgICAgc2VsZi5ob3ZlclN0YXRlID0gJ2luJ1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZW91dClcblxuICAgIHNlbGYuaG92ZXJTdGF0ZSA9ICdpbidcblxuICAgIGlmICghc2VsZi5vcHRpb25zLmRlbGF5IHx8ICFzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdykgcmV0dXJuIHNlbGYuc2hvdygpXG5cbiAgICBzZWxmLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChzZWxmLmhvdmVyU3RhdGUgPT0gJ2luJykgc2VsZi5zaG93KClcbiAgICB9LCBzZWxmLm9wdGlvbnMuZGVsYXkuc2hvdylcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmlzSW5TdGF0ZVRydWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuaW5TdGF0ZSkge1xuICAgICAgaWYgKHRoaXMuaW5TdGF0ZVtrZXldKSByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUubGVhdmUgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIHNlbGYgPSBvYmogaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yID9cbiAgICAgIG9iaiA6ICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUpXG5cbiAgICBpZiAoIXNlbGYpIHtcbiAgICAgIHNlbGYgPSBuZXcgdGhpcy5jb25zdHJ1Y3RvcihvYmouY3VycmVudFRhcmdldCwgdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSlcbiAgICAgICQob2JqLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpXG4gICAgfVxuXG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mICQuRXZlbnQpIHtcbiAgICAgIHNlbGYuaW5TdGF0ZVtvYmoudHlwZSA9PSAnZm9jdXNvdXQnID8gJ2ZvY3VzJyA6ICdob3ZlciddID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5pc0luU3RhdGVUcnVlKCkpIHJldHVyblxuXG4gICAgY2xlYXJUaW1lb3V0KHNlbGYudGltZW91dClcblxuICAgIHNlbGYuaG92ZXJTdGF0ZSA9ICdvdXQnXG5cbiAgICBpZiAoIXNlbGYub3B0aW9ucy5kZWxheSB8fCAhc2VsZi5vcHRpb25zLmRlbGF5LmhpZGUpIHJldHVybiBzZWxmLmhpZGUoKVxuXG4gICAgc2VsZi50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoc2VsZi5ob3ZlclN0YXRlID09ICdvdXQnKSBzZWxmLmhpZGUoKVxuICAgIH0sIHNlbGYub3B0aW9ucy5kZWxheS5oaWRlKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuc2hvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZSA9ICQuRXZlbnQoJ3Nob3cuYnMuJyArIHRoaXMudHlwZSlcblxuICAgIGlmICh0aGlzLmhhc0NvbnRlbnQoKSAmJiB0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKVxuXG4gICAgICB2YXIgaW5Eb20gPSAkLmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuJGVsZW1lbnRbMF0pXG4gICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSB8fCAhaW5Eb20pIHJldHVyblxuICAgICAgdmFyIHRoYXQgPSB0aGlzXG5cbiAgICAgIHZhciAkdGlwID0gdGhpcy50aXAoKVxuXG4gICAgICB2YXIgdGlwSWQgPSB0aGlzLmdldFVJRCh0aGlzLnR5cGUpXG5cbiAgICAgIHRoaXMuc2V0Q29udGVudCgpXG4gICAgICAkdGlwLmF0dHIoJ2lkJywgdGlwSWQpXG4gICAgICB0aGlzLiRlbGVtZW50LmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXBJZClcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmltYXRpb24pICR0aXAuYWRkQ2xhc3MoJ2ZhZGUnKVxuXG4gICAgICB2YXIgcGxhY2VtZW50ID0gdHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQgPT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLCAkdGlwWzBdLCB0aGlzLiRlbGVtZW50WzBdKSA6XG4gICAgICAgIHRoaXMub3B0aW9ucy5wbGFjZW1lbnRcblxuICAgICAgdmFyIGF1dG9Ub2tlbiA9IC9cXHM/YXV0bz9cXHM/L2lcbiAgICAgIHZhciBhdXRvUGxhY2UgPSBhdXRvVG9rZW4udGVzdChwbGFjZW1lbnQpXG4gICAgICBpZiAoYXV0b1BsYWNlKSBwbGFjZW1lbnQgPSBwbGFjZW1lbnQucmVwbGFjZShhdXRvVG9rZW4sICcnKSB8fCAndG9wJ1xuXG4gICAgICAkdGlwXG4gICAgICAgIC5kZXRhY2goKVxuICAgICAgICAuY3NzKHsgdG9wOiAwLCBsZWZ0OiAwLCBkaXNwbGF5OiAnYmxvY2snIH0pXG4gICAgICAgIC5hZGRDbGFzcyhwbGFjZW1lbnQpXG4gICAgICAgIC5kYXRhKCdicy4nICsgdGhpcy50eXBlLCB0aGlzKVxuXG4gICAgICB0aGlzLm9wdGlvbnMuY29udGFpbmVyID8gJHRpcC5hcHBlbmRUbygkKGRvY3VtZW50KS5maW5kKHRoaXMub3B0aW9ucy5jb250YWluZXIpKSA6ICR0aXAuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudClcbiAgICAgIHRoaXMuJGVsZW1lbnQudHJpZ2dlcignaW5zZXJ0ZWQuYnMuJyArIHRoaXMudHlwZSlcblxuICAgICAgdmFyIHBvcyAgICAgICAgICA9IHRoaXMuZ2V0UG9zaXRpb24oKVxuICAgICAgdmFyIGFjdHVhbFdpZHRoICA9ICR0aXBbMF0ub2Zmc2V0V2lkdGhcbiAgICAgIHZhciBhY3R1YWxIZWlnaHQgPSAkdGlwWzBdLm9mZnNldEhlaWdodFxuXG4gICAgICBpZiAoYXV0b1BsYWNlKSB7XG4gICAgICAgIHZhciBvcmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRcbiAgICAgICAgdmFyIHZpZXdwb3J0RGltID0gdGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydClcblxuICAgICAgICBwbGFjZW1lbnQgPSBwbGFjZW1lbnQgPT0gJ2JvdHRvbScgJiYgcG9zLmJvdHRvbSArIGFjdHVhbEhlaWdodCA+IHZpZXdwb3J0RGltLmJvdHRvbSA/ICd0b3AnICAgIDpcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50ID09ICd0b3AnICAgICYmIHBvcy50b3AgICAgLSBhY3R1YWxIZWlnaHQgPCB2aWV3cG9ydERpbS50b3AgICAgPyAnYm90dG9tJyA6XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudCA9PSAncmlnaHQnICAmJiBwb3MucmlnaHQgICsgYWN0dWFsV2lkdGggID4gdmlld3BvcnREaW0ud2lkdGggID8gJ2xlZnQnICAgOlxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ2xlZnQnICAgJiYgcG9zLmxlZnQgICAtIGFjdHVhbFdpZHRoICA8IHZpZXdwb3J0RGltLmxlZnQgICA/ICdyaWdodCcgIDpcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50XG5cbiAgICAgICAgJHRpcFxuICAgICAgICAgIC5yZW1vdmVDbGFzcyhvcmdQbGFjZW1lbnQpXG4gICAgICAgICAgLmFkZENsYXNzKHBsYWNlbWVudClcbiAgICAgIH1cblxuICAgICAgdmFyIGNhbGN1bGF0ZWRPZmZzZXQgPSB0aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQocGxhY2VtZW50LCBwb3MsIGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQpXG5cbiAgICAgIHRoaXMuYXBwbHlQbGFjZW1lbnQoY2FsY3VsYXRlZE9mZnNldCwgcGxhY2VtZW50KVxuXG4gICAgICB2YXIgY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2SG92ZXJTdGF0ZSA9IHRoYXQuaG92ZXJTdGF0ZVxuICAgICAgICB0aGF0LiRlbGVtZW50LnRyaWdnZXIoJ3Nob3duLmJzLicgKyB0aGF0LnR5cGUpXG4gICAgICAgIHRoYXQuaG92ZXJTdGF0ZSA9IG51bGxcblxuICAgICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT0gJ291dCcpIHRoYXQubGVhdmUodGhhdClcbiAgICAgIH1cblxuICAgICAgJC5zdXBwb3J0LnRyYW5zaXRpb24gJiYgdGhpcy4kdGlwLmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgICAkdGlwXG4gICAgICAgICAgLm9uZSgnYnNUcmFuc2l0aW9uRW5kJywgY29tcGxldGUpXG4gICAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKFRvb2x0aXAuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgICBjb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuYXBwbHlQbGFjZW1lbnQgPSBmdW5jdGlvbiAob2Zmc2V0LCBwbGFjZW1lbnQpIHtcbiAgICB2YXIgJHRpcCAgID0gdGhpcy50aXAoKVxuICAgIHZhciB3aWR0aCAgPSAkdGlwWzBdLm9mZnNldFdpZHRoXG4gICAgdmFyIGhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0XG5cbiAgICAvLyBtYW51YWxseSByZWFkIG1hcmdpbnMgYmVjYXVzZSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgaW5jbHVkZXMgZGlmZmVyZW5jZVxuICAgIHZhciBtYXJnaW5Ub3AgPSBwYXJzZUludCgkdGlwLmNzcygnbWFyZ2luLXRvcCcpLCAxMClcbiAgICB2YXIgbWFyZ2luTGVmdCA9IHBhcnNlSW50KCR0aXAuY3NzKCdtYXJnaW4tbGVmdCcpLCAxMClcblxuICAgIC8vIHdlIG11c3QgY2hlY2sgZm9yIE5hTiBmb3IgaWUgOC85XG4gICAgaWYgKGlzTmFOKG1hcmdpblRvcCkpICBtYXJnaW5Ub3AgID0gMFxuICAgIGlmIChpc05hTihtYXJnaW5MZWZ0KSkgbWFyZ2luTGVmdCA9IDBcblxuICAgIG9mZnNldC50b3AgICs9IG1hcmdpblRvcFxuICAgIG9mZnNldC5sZWZ0ICs9IG1hcmdpbkxlZnRcblxuICAgIC8vICQuZm4ub2Zmc2V0IGRvZXNuJ3Qgcm91bmQgcGl4ZWwgdmFsdWVzXG4gICAgLy8gc28gd2UgdXNlIHNldE9mZnNldCBkaXJlY3RseSB3aXRoIG91ciBvd24gZnVuY3Rpb24gQi0wXG4gICAgJC5vZmZzZXQuc2V0T2Zmc2V0KCR0aXBbMF0sICQuZXh0ZW5kKHtcbiAgICAgIHVzaW5nOiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICAgICAgJHRpcC5jc3Moe1xuICAgICAgICAgIHRvcDogTWF0aC5yb3VuZChwcm9wcy50b3ApLFxuICAgICAgICAgIGxlZnQ6IE1hdGgucm91bmQocHJvcHMubGVmdClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBvZmZzZXQpLCAwKVxuXG4gICAgJHRpcC5hZGRDbGFzcygnaW4nKVxuXG4gICAgLy8gY2hlY2sgdG8gc2VlIGlmIHBsYWNpbmcgdGlwIGluIG5ldyBvZmZzZXQgY2F1c2VkIHRoZSB0aXAgdG8gcmVzaXplIGl0c2VsZlxuICAgIHZhciBhY3R1YWxXaWR0aCAgPSAkdGlwWzBdLm9mZnNldFdpZHRoXG4gICAgdmFyIGFjdHVhbEhlaWdodCA9ICR0aXBbMF0ub2Zmc2V0SGVpZ2h0XG5cbiAgICBpZiAocGxhY2VtZW50ID09ICd0b3AnICYmIGFjdHVhbEhlaWdodCAhPSBoZWlnaHQpIHtcbiAgICAgIG9mZnNldC50b3AgPSBvZmZzZXQudG9wICsgaGVpZ2h0IC0gYWN0dWFsSGVpZ2h0XG4gICAgfVxuXG4gICAgdmFyIGRlbHRhID0gdGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEocGxhY2VtZW50LCBvZmZzZXQsIGFjdHVhbFdpZHRoLCBhY3R1YWxIZWlnaHQpXG5cbiAgICBpZiAoZGVsdGEubGVmdCkgb2Zmc2V0LmxlZnQgKz0gZGVsdGEubGVmdFxuICAgIGVsc2Ugb2Zmc2V0LnRvcCArPSBkZWx0YS50b3BcblxuICAgIHZhciBpc1ZlcnRpY2FsICAgICAgICAgID0gL3RvcHxib3R0b20vLnRlc3QocGxhY2VtZW50KVxuICAgIHZhciBhcnJvd0RlbHRhICAgICAgICAgID0gaXNWZXJ0aWNhbCA/IGRlbHRhLmxlZnQgKiAyIC0gd2lkdGggKyBhY3R1YWxXaWR0aCA6IGRlbHRhLnRvcCAqIDIgLSBoZWlnaHQgKyBhY3R1YWxIZWlnaHRcbiAgICB2YXIgYXJyb3dPZmZzZXRQb3NpdGlvbiA9IGlzVmVydGljYWwgPyAnb2Zmc2V0V2lkdGgnIDogJ29mZnNldEhlaWdodCdcblxuICAgICR0aXAub2Zmc2V0KG9mZnNldClcbiAgICB0aGlzLnJlcGxhY2VBcnJvdyhhcnJvd0RlbHRhLCAkdGlwWzBdW2Fycm93T2Zmc2V0UG9zaXRpb25dLCBpc1ZlcnRpY2FsKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUucmVwbGFjZUFycm93ID0gZnVuY3Rpb24gKGRlbHRhLCBkaW1lbnNpb24sIGlzVmVydGljYWwpIHtcbiAgICB0aGlzLmFycm93KClcbiAgICAgIC5jc3MoaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnLCA1MCAqICgxIC0gZGVsdGEgLyBkaW1lbnNpb24pICsgJyUnKVxuICAgICAgLmNzcyhpc1ZlcnRpY2FsID8gJ3RvcCcgOiAnbGVmdCcsICcnKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuc2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJHRpcCAgPSB0aGlzLnRpcCgpXG4gICAgdmFyIHRpdGxlID0gdGhpcy5nZXRUaXRsZSgpXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmh0bWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICAgICAgdGl0bGUgPSBzYW5pdGl6ZUh0bWwodGl0bGUsIHRoaXMub3B0aW9ucy53aGl0ZUxpc3QsIHRoaXMub3B0aW9ucy5zYW5pdGl6ZUZuKVxuICAgICAgfVxuXG4gICAgICAkdGlwLmZpbmQoJy50b29sdGlwLWlubmVyJykuaHRtbCh0aXRsZSlcbiAgICB9IGVsc2Uge1xuICAgICAgJHRpcC5maW5kKCcudG9vbHRpcC1pbm5lcicpLnRleHQodGl0bGUpXG4gICAgfVxuXG4gICAgJHRpcC5yZW1vdmVDbGFzcygnZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQnKVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuaGlkZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB0aGF0ID0gdGhpc1xuICAgIHZhciAkdGlwID0gJCh0aGlzLiR0aXApXG4gICAgdmFyIGUgICAgPSAkLkV2ZW50KCdoaWRlLmJzLicgKyB0aGlzLnR5cGUpXG5cbiAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgIGlmICh0aGF0LmhvdmVyU3RhdGUgIT0gJ2luJykgJHRpcC5kZXRhY2goKVxuICAgICAgaWYgKHRoYXQuJGVsZW1lbnQpIHsgLy8gVE9ETzogQ2hlY2sgd2hldGhlciBndWFyZGluZyB0aGlzIGNvZGUgd2l0aCB0aGlzIGBpZmAgaXMgcmVhbGx5IG5lY2Vzc2FyeS5cbiAgICAgICAgdGhhdC4kZWxlbWVudFxuICAgICAgICAgIC5yZW1vdmVBdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgICAgICAgICAudHJpZ2dlcignaGlkZGVuLmJzLicgKyB0aGF0LnR5cGUpXG4gICAgICB9XG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpXG4gICAgfVxuXG4gICAgdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpXG5cbiAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICAkdGlwLnJlbW92ZUNsYXNzKCdpbicpXG5cbiAgICAkLnN1cHBvcnQudHJhbnNpdGlvbiAmJiAkdGlwLmhhc0NsYXNzKCdmYWRlJykgP1xuICAgICAgJHRpcFxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBjb21wbGV0ZSlcbiAgICAgICAgLmVtdWxhdGVUcmFuc2l0aW9uRW5kKFRvb2x0aXAuVFJBTlNJVElPTl9EVVJBVElPTikgOlxuICAgICAgY29tcGxldGUoKVxuXG4gICAgdGhpcy5ob3ZlclN0YXRlID0gbnVsbFxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmZpeFRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciAkZSA9IHRoaXMuJGVsZW1lbnRcbiAgICBpZiAoJGUuYXR0cigndGl0bGUnKSB8fCB0eXBlb2YgJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpICE9ICdzdHJpbmcnKSB7XG4gICAgICAkZS5hdHRyKCdkYXRhLW9yaWdpbmFsLXRpdGxlJywgJGUuYXR0cigndGl0bGUnKSB8fCAnJykuYXR0cigndGl0bGUnLCAnJylcbiAgICB9XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5oYXNDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRpdGxlKClcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKCRlbGVtZW50KSB7XG4gICAgJGVsZW1lbnQgICA9ICRlbGVtZW50IHx8IHRoaXMuJGVsZW1lbnRcblxuICAgIHZhciBlbCAgICAgPSAkZWxlbWVudFswXVxuICAgIHZhciBpc0JvZHkgPSBlbC50YWdOYW1lID09ICdCT0RZJ1xuXG4gICAgdmFyIGVsUmVjdCAgICA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgaWYgKGVsUmVjdC53aWR0aCA9PSBudWxsKSB7XG4gICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBtaXNzaW5nIGluIElFOCwgc28gY29tcHV0ZSB0aGVtIG1hbnVhbGx5OyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8xNDA5M1xuICAgICAgZWxSZWN0ID0gJC5leHRlbmQoe30sIGVsUmVjdCwgeyB3aWR0aDogZWxSZWN0LnJpZ2h0IC0gZWxSZWN0LmxlZnQsIGhlaWdodDogZWxSZWN0LmJvdHRvbSAtIGVsUmVjdC50b3AgfSlcbiAgICB9XG4gICAgdmFyIGlzU3ZnID0gd2luZG93LlNWR0VsZW1lbnQgJiYgZWwgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudFxuICAgIC8vIEF2b2lkIHVzaW5nICQub2Zmc2V0KCkgb24gU1ZHcyBzaW5jZSBpdCBnaXZlcyBpbmNvcnJlY3QgcmVzdWx0cyBpbiBqUXVlcnkgMy5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8yMDI4MFxuICAgIHZhciBlbE9mZnNldCAgPSBpc0JvZHkgPyB7IHRvcDogMCwgbGVmdDogMCB9IDogKGlzU3ZnID8gbnVsbCA6ICRlbGVtZW50Lm9mZnNldCgpKVxuICAgIHZhciBzY3JvbGwgICAgPSB7IHNjcm9sbDogaXNCb2R5ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCB8fCBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCA6ICRlbGVtZW50LnNjcm9sbFRvcCgpIH1cbiAgICB2YXIgb3V0ZXJEaW1zID0gaXNCb2R5ID8geyB3aWR0aDogJCh3aW5kb3cpLndpZHRoKCksIGhlaWdodDogJCh3aW5kb3cpLmhlaWdodCgpIH0gOiBudWxsXG5cbiAgICByZXR1cm4gJC5leHRlbmQoe30sIGVsUmVjdCwgc2Nyb2xsLCBvdXRlckRpbXMsIGVsT2Zmc2V0KVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldCA9IGZ1bmN0aW9uIChwbGFjZW1lbnQsIHBvcywgYWN0dWFsV2lkdGgsIGFjdHVhbEhlaWdodCkge1xuICAgIHJldHVybiBwbGFjZW1lbnQgPT0gJ2JvdHRvbScgPyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQsICAgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggLyAyIC0gYWN0dWFsV2lkdGggLyAyIH0gOlxuICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ3RvcCcgICAgPyB7IHRvcDogcG9zLnRvcCAtIGFjdHVhbEhlaWdodCwgbGVmdDogcG9zLmxlZnQgKyBwb3Mud2lkdGggLyAyIC0gYWN0dWFsV2lkdGggLyAyIH0gOlxuICAgICAgICAgICBwbGFjZW1lbnQgPT0gJ2xlZnQnICAgPyB7IHRvcDogcG9zLnRvcCArIHBvcy5oZWlnaHQgLyAyIC0gYWN0dWFsSGVpZ2h0IC8gMiwgbGVmdDogcG9zLmxlZnQgLSBhY3R1YWxXaWR0aCB9IDpcbiAgICAgICAgLyogcGxhY2VtZW50ID09ICdyaWdodCcgKi8geyB0b3A6IHBvcy50b3AgKyBwb3MuaGVpZ2h0IC8gMiAtIGFjdHVhbEhlaWdodCAvIDIsIGxlZnQ6IHBvcy5sZWZ0ICsgcG9zLndpZHRoIH1cblxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhID0gZnVuY3Rpb24gKHBsYWNlbWVudCwgcG9zLCBhY3R1YWxXaWR0aCwgYWN0dWFsSGVpZ2h0KSB7XG4gICAgdmFyIGRlbHRhID0geyB0b3A6IDAsIGxlZnQ6IDAgfVxuICAgIGlmICghdGhpcy4kdmlld3BvcnQpIHJldHVybiBkZWx0YVxuXG4gICAgdmFyIHZpZXdwb3J0UGFkZGluZyA9IHRoaXMub3B0aW9ucy52aWV3cG9ydCAmJiB0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZyB8fCAwXG4gICAgdmFyIHZpZXdwb3J0RGltZW5zaW9ucyA9IHRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpXG5cbiAgICBpZiAoL3JpZ2h0fGxlZnQvLnRlc3QocGxhY2VtZW50KSkge1xuICAgICAgdmFyIHRvcEVkZ2VPZmZzZXQgICAgPSBwb3MudG9wIC0gdmlld3BvcnRQYWRkaW5nIC0gdmlld3BvcnREaW1lbnNpb25zLnNjcm9sbFxuICAgICAgdmFyIGJvdHRvbUVkZ2VPZmZzZXQgPSBwb3MudG9wICsgdmlld3BvcnRQYWRkaW5nIC0gdmlld3BvcnREaW1lbnNpb25zLnNjcm9sbCArIGFjdHVhbEhlaWdodFxuICAgICAgaWYgKHRvcEVkZ2VPZmZzZXQgPCB2aWV3cG9ydERpbWVuc2lvbnMudG9wKSB7IC8vIHRvcCBvdmVyZmxvd1xuICAgICAgICBkZWx0YS50b3AgPSB2aWV3cG9ydERpbWVuc2lvbnMudG9wIC0gdG9wRWRnZU9mZnNldFxuICAgICAgfSBlbHNlIGlmIChib3R0b21FZGdlT2Zmc2V0ID4gdmlld3BvcnREaW1lbnNpb25zLnRvcCArIHZpZXdwb3J0RGltZW5zaW9ucy5oZWlnaHQpIHsgLy8gYm90dG9tIG92ZXJmbG93XG4gICAgICAgIGRlbHRhLnRvcCA9IHZpZXdwb3J0RGltZW5zaW9ucy50b3AgKyB2aWV3cG9ydERpbWVuc2lvbnMuaGVpZ2h0IC0gYm90dG9tRWRnZU9mZnNldFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbGVmdEVkZ2VPZmZzZXQgID0gcG9zLmxlZnQgLSB2aWV3cG9ydFBhZGRpbmdcbiAgICAgIHZhciByaWdodEVkZ2VPZmZzZXQgPSBwb3MubGVmdCArIHZpZXdwb3J0UGFkZGluZyArIGFjdHVhbFdpZHRoXG4gICAgICBpZiAobGVmdEVkZ2VPZmZzZXQgPCB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCkgeyAvLyBsZWZ0IG92ZXJmbG93XG4gICAgICAgIGRlbHRhLmxlZnQgPSB2aWV3cG9ydERpbWVuc2lvbnMubGVmdCAtIGxlZnRFZGdlT2Zmc2V0XG4gICAgICB9IGVsc2UgaWYgKHJpZ2h0RWRnZU9mZnNldCA+IHZpZXdwb3J0RGltZW5zaW9ucy5yaWdodCkgeyAvLyByaWdodCBvdmVyZmxvd1xuICAgICAgICBkZWx0YS5sZWZ0ID0gdmlld3BvcnREaW1lbnNpb25zLmxlZnQgKyB2aWV3cG9ydERpbWVuc2lvbnMud2lkdGggLSByaWdodEVkZ2VPZmZzZXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsdGFcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmdldFRpdGxlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0aXRsZVxuICAgIHZhciAkZSA9IHRoaXMuJGVsZW1lbnRcbiAgICB2YXIgbyAgPSB0aGlzLm9wdGlvbnNcblxuICAgIHRpdGxlID0gJGUuYXR0cignZGF0YS1vcmlnaW5hbC10aXRsZScpXG4gICAgICB8fCAodHlwZW9mIG8udGl0bGUgPT0gJ2Z1bmN0aW9uJyA/IG8udGl0bGUuY2FsbCgkZVswXSkgOiAgby50aXRsZSlcblxuICAgIHJldHVybiB0aXRsZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZ2V0VUlEID0gZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGRvIHByZWZpeCArPSB+fihNYXRoLnJhbmRvbSgpICogMTAwMDAwMClcbiAgICB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcbiAgICByZXR1cm4gcHJlZml4XG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS50aXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLiR0aXApIHtcbiAgICAgIHRoaXMuJHRpcCA9ICQodGhpcy5vcHRpb25zLnRlbXBsYXRlKVxuICAgICAgaWYgKHRoaXMuJHRpcC5sZW5ndGggIT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlICsgJyBgdGVtcGxhdGVgIG9wdGlvbiBtdXN0IGNvbnNpc3Qgb2YgZXhhY3RseSAxIHRvcC1sZXZlbCBlbGVtZW50IScpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLiR0aXBcbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmFycm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAodGhpcy4kYXJyb3cgPSB0aGlzLiRhcnJvdyB8fCB0aGlzLnRpcCgpLmZpbmQoJy50b29sdGlwLWFycm93JykpXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbmFibGVkID0gdHJ1ZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZVxuICB9XG5cbiAgVG9vbHRpcC5wcm90b3R5cGUudG9nZ2xlRW5hYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmVuYWJsZWQgPSAhdGhpcy5lbmFibGVkXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAoZSkge1xuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIGlmIChlKSB7XG4gICAgICBzZWxmID0gJChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUpXG4gICAgICBpZiAoIXNlbGYpIHtcbiAgICAgICAgc2VsZiA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCwgdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSlcbiAgICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoJ2JzLicgKyB0aGlzLnR5cGUsIHNlbGYpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGUpIHtcbiAgICAgIHNlbGYuaW5TdGF0ZS5jbGljayA9ICFzZWxmLmluU3RhdGUuY2xpY2tcbiAgICAgIGlmIChzZWxmLmlzSW5TdGF0ZVRydWUoKSkgc2VsZi5lbnRlcihzZWxmKVxuICAgICAgZWxzZSBzZWxmLmxlYXZlKHNlbGYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYudGlwKCkuaGFzQ2xhc3MoJ2luJykgPyBzZWxmLmxlYXZlKHNlbGYpIDogc2VsZi5lbnRlcihzZWxmKVxuICAgIH1cbiAgfVxuXG4gIFRvb2x0aXAucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLmhpZGUoZnVuY3Rpb24gKCkge1xuICAgICAgdGhhdC4kZWxlbWVudC5vZmYoJy4nICsgdGhhdC50eXBlKS5yZW1vdmVEYXRhKCdicy4nICsgdGhhdC50eXBlKVxuICAgICAgaWYgKHRoYXQuJHRpcCkge1xuICAgICAgICB0aGF0LiR0aXAuZGV0YWNoKClcbiAgICAgIH1cbiAgICAgIHRoYXQuJHRpcCA9IG51bGxcbiAgICAgIHRoYXQuJGFycm93ID0gbnVsbFxuICAgICAgdGhhdC4kdmlld3BvcnQgPSBudWxsXG4gICAgICB0aGF0LiRlbGVtZW50ID0gbnVsbFxuICAgIH0pXG4gIH1cblxuICBUb29sdGlwLnByb3RvdHlwZS5zYW5pdGl6ZUh0bWwgPSBmdW5jdGlvbiAodW5zYWZlSHRtbCkge1xuICAgIHJldHVybiBzYW5pdGl6ZUh0bWwodW5zYWZlSHRtbCwgdGhpcy5vcHRpb25zLndoaXRlTGlzdCwgdGhpcy5vcHRpb25zLnNhbml0aXplRm4pXG4gIH1cblxuICAvLyBUT09MVElQIFBMVUdJTiBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBQbHVnaW4ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHRoaXMgICA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhICAgID0gJHRoaXMuZGF0YSgnYnMudG9vbHRpcCcpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSAmJiAvZGVzdHJveXxoaWRlLy50ZXN0KG9wdGlvbikpIHJldHVyblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50b29sdGlwJywgKGRhdGEgPSBuZXcgVG9vbHRpcCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4udG9vbHRpcFxuXG4gICQuZm4udG9vbHRpcCAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLnRvb2x0aXAuQ29uc3RydWN0b3IgPSBUb29sdGlwXG5cblxuICAvLyBUT09MVElQIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT1cblxuICAkLmZuLnRvb2x0aXAubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLnRvb2x0aXAgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbn0oalF1ZXJ5KTtcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCb290c3RyYXA6IHBvcG92ZXIuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jcG9wb3ZlcnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBQT1BPVkVSIFBVQkxJQyBDTEFTUyBERUZJTklUSU9OXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICB2YXIgUG9wb3ZlciA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5pbml0KCdwb3BvdmVyJywgZWxlbWVudCwgb3B0aW9ucylcbiAgfVxuXG4gIGlmICghJC5mbi50b29sdGlwKSB0aHJvdyBuZXcgRXJyb3IoJ1BvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qcycpXG5cbiAgUG9wb3Zlci5WRVJTSU9OICA9ICczLjQuMSdcblxuICBQb3BvdmVyLkRFRkFVTFRTID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUywge1xuICAgIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgICB0cmlnZ2VyOiAnY2xpY2snLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48L2gzPjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nXG4gIH0pXG5cblxuICAvLyBOT1RFOiBQT1BPVkVSIEVYVEVORFMgdG9vbHRpcC5qc1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIFBvcG92ZXIucHJvdG90eXBlID0gJC5leHRlbmQoe30sICQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpXG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQb3BvdmVyXG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0RGVmYXVsdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFBvcG92ZXIuREVGQVVMVFNcbiAgfVxuXG4gIFBvcG92ZXIucHJvdG90eXBlLnNldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR0aXAgICAgPSB0aGlzLnRpcCgpXG4gICAgdmFyIHRpdGxlICAgPSB0aGlzLmdldFRpdGxlKClcbiAgICB2YXIgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpXG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmh0bWwpIHtcbiAgICAgIHZhciB0eXBlQ29udGVudCA9IHR5cGVvZiBjb250ZW50XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2FuaXRpemUpIHtcbiAgICAgICAgdGl0bGUgPSB0aGlzLnNhbml0aXplSHRtbCh0aXRsZSlcblxuICAgICAgICBpZiAodHlwZUNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgY29udGVudCA9IHRoaXMuc2FuaXRpemVIdG1sKGNvbnRlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHRpcC5maW5kKCcucG9wb3Zlci10aXRsZScpLmh0bWwodGl0bGUpXG4gICAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLWNvbnRlbnQnKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW1xuICAgICAgICB0eXBlQ29udGVudCA9PT0gJ3N0cmluZycgPyAnaHRtbCcgOiAnYXBwZW5kJ1xuICAgICAgXShjb250ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICAkdGlwLmZpbmQoJy5wb3BvdmVyLXRpdGxlJykudGV4dCh0aXRsZSlcbiAgICAgICR0aXAuZmluZCgnLnBvcG92ZXItY29udGVudCcpLmNoaWxkcmVuKCkuZGV0YWNoKCkuZW5kKCkudGV4dChjb250ZW50KVxuICAgIH1cblxuICAgICR0aXAucmVtb3ZlQ2xhc3MoJ2ZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluJylcblxuICAgIC8vIElFOCBkb2Vzbid0IGFjY2VwdCBoaWRpbmcgdmlhIHRoZSBgOmVtcHR5YCBwc2V1ZG8gc2VsZWN0b3IsIHdlIGhhdmUgdG8gZG9cbiAgICAvLyB0aGlzIG1hbnVhbGx5IGJ5IGNoZWNraW5nIHRoZSBjb250ZW50cy5cbiAgICBpZiAoISR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5odG1sKCkpICR0aXAuZmluZCgnLnBvcG92ZXItdGl0bGUnKS5oaWRlKClcbiAgfVxuXG4gIFBvcG92ZXIucHJvdG90eXBlLmhhc0NvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKSB8fCB0aGlzLmdldENvbnRlbnQoKVxuICB9XG5cbiAgUG9wb3Zlci5wcm90b3R5cGUuZ2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgJGUgPSB0aGlzLiRlbGVtZW50XG4gICAgdmFyIG8gID0gdGhpcy5vcHRpb25zXG5cbiAgICByZXR1cm4gJGUuYXR0cignZGF0YS1jb250ZW50JylcbiAgICAgIHx8ICh0eXBlb2Ygby5jb250ZW50ID09ICdmdW5jdGlvbicgP1xuICAgICAgICBvLmNvbnRlbnQuY2FsbCgkZVswXSkgOlxuICAgICAgICBvLmNvbnRlbnQpXG4gIH1cblxuICBQb3BvdmVyLnByb3RvdHlwZS5hcnJvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKHRoaXMuJGFycm93ID0gdGhpcy4kYXJyb3cgfHwgdGhpcy50aXAoKS5maW5kKCcuYXJyb3cnKSlcbiAgfVxuXG5cbiAgLy8gUE9QT1ZFUiBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnBvcG92ZXInKVxuICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9uID09ICdvYmplY3QnICYmIG9wdGlvblxuXG4gICAgICBpZiAoIWRhdGEgJiYgL2Rlc3Ryb3l8aGlkZS8udGVzdChvcHRpb24pKSByZXR1cm5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMucG9wb3ZlcicsIChkYXRhID0gbmV3IFBvcG92ZXIodGhpcywgb3B0aW9ucykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLnBvcG92ZXJcblxuICAkLmZuLnBvcG92ZXIgICAgICAgICAgICAgPSBQbHVnaW5cbiAgJC5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yID0gUG9wb3ZlclxuXG5cbiAgLy8gUE9QT1ZFUiBOTyBDT05GTElDVFxuICAvLyA9PT09PT09PT09PT09PT09PT09XG5cbiAgJC5mbi5wb3BvdmVyLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5wb3BvdmVyID0gb2xkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBzY3JvbGxzcHkuanMgdjMuNC4xXG4gKiBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy8zLjQvamF2YXNjcmlwdC8jc2Nyb2xsc3B5XG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIENvcHlyaWdodCAyMDExLTIwMTkgVHdpdHRlciwgSW5jLlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5cbitmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gU0NST0xMU1BZIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBmdW5jdGlvbiBTY3JvbGxTcHkoZWxlbWVudCwgb3B0aW9ucykge1xuICAgIHRoaXMuJGJvZHkgICAgICAgICAgPSAkKGRvY3VtZW50LmJvZHkpXG4gICAgdGhpcy4kc2Nyb2xsRWxlbWVudCA9ICQoZWxlbWVudCkuaXMoZG9jdW1lbnQuYm9keSkgPyAkKHdpbmRvdykgOiAkKGVsZW1lbnQpXG4gICAgdGhpcy5vcHRpb25zICAgICAgICA9ICQuZXh0ZW5kKHt9LCBTY3JvbGxTcHkuREVGQVVMVFMsIG9wdGlvbnMpXG4gICAgdGhpcy5zZWxlY3RvciAgICAgICA9ICh0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICcnKSArICcgLm5hdiBsaSA+IGEnXG4gICAgdGhpcy5vZmZzZXRzICAgICAgICA9IFtdXG4gICAgdGhpcy50YXJnZXRzICAgICAgICA9IFtdXG4gICAgdGhpcy5hY3RpdmVUYXJnZXQgICA9IG51bGxcbiAgICB0aGlzLnNjcm9sbEhlaWdodCAgID0gMFxuXG4gICAgdGhpcy4kc2Nyb2xsRWxlbWVudC5vbignc2Nyb2xsLmJzLnNjcm9sbHNweScsICQucHJveHkodGhpcy5wcm9jZXNzLCB0aGlzKSlcbiAgICB0aGlzLnJlZnJlc2goKVxuICAgIHRoaXMucHJvY2VzcygpXG4gIH1cblxuICBTY3JvbGxTcHkuVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgU2Nyb2xsU3B5LkRFRkFVTFRTID0ge1xuICAgIG9mZnNldDogMTBcbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodCB8fCBNYXRoLm1heCh0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodClcbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGhhdCAgICAgICAgICA9IHRoaXNcbiAgICB2YXIgb2Zmc2V0TWV0aG9kICA9ICdvZmZzZXQnXG4gICAgdmFyIG9mZnNldEJhc2UgICAgPSAwXG5cbiAgICB0aGlzLm9mZnNldHMgICAgICA9IFtdXG4gICAgdGhpcy50YXJnZXRzICAgICAgPSBbXVxuICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gdGhpcy5nZXRTY3JvbGxIZWlnaHQoKVxuXG4gICAgaWYgKCEkLmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pKSB7XG4gICAgICBvZmZzZXRNZXRob2QgPSAncG9zaXRpb24nXG4gICAgICBvZmZzZXRCYXNlICAgPSB0aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpXG4gICAgfVxuXG4gICAgdGhpcy4kYm9keVxuICAgICAgLmZpbmQodGhpcy5zZWxlY3RvcilcbiAgICAgIC5tYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgJGVsICAgPSAkKHRoaXMpXG4gICAgICAgIHZhciBocmVmICA9ICRlbC5kYXRhKCd0YXJnZXQnKSB8fCAkZWwuYXR0cignaHJlZicpXG4gICAgICAgIHZhciAkaHJlZiA9IC9eIy4vLnRlc3QoaHJlZikgJiYgJChocmVmKVxuXG4gICAgICAgIHJldHVybiAoJGhyZWZcbiAgICAgICAgICAmJiAkaHJlZi5sZW5ndGhcbiAgICAgICAgICAmJiAkaHJlZi5pcygnOnZpc2libGUnKVxuICAgICAgICAgICYmIFtbJGhyZWZbb2Zmc2V0TWV0aG9kXSgpLnRvcCArIG9mZnNldEJhc2UsIGhyZWZdXSkgfHwgbnVsbFxuICAgICAgfSlcbiAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBhWzBdIC0gYlswXSB9KVxuICAgICAgLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGF0Lm9mZnNldHMucHVzaCh0aGlzWzBdKVxuICAgICAgICB0aGF0LnRhcmdldHMucHVzaCh0aGlzWzFdKVxuICAgICAgfSlcbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUucHJvY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2Nyb2xsVG9wICAgID0gdGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSArIHRoaXMub3B0aW9ucy5vZmZzZXRcbiAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5nZXRTY3JvbGxIZWlnaHQoKVxuICAgIHZhciBtYXhTY3JvbGwgICAgPSB0aGlzLm9wdGlvbnMub2Zmc2V0ICsgc2Nyb2xsSGVpZ2h0IC0gdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKVxuICAgIHZhciBvZmZzZXRzICAgICAgPSB0aGlzLm9mZnNldHNcbiAgICB2YXIgdGFyZ2V0cyAgICAgID0gdGhpcy50YXJnZXRzXG4gICAgdmFyIGFjdGl2ZVRhcmdldCA9IHRoaXMuYWN0aXZlVGFyZ2V0XG4gICAgdmFyIGlcblxuICAgIGlmICh0aGlzLnNjcm9sbEhlaWdodCAhPSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbFRvcCA+PSBtYXhTY3JvbGwpIHtcbiAgICAgIHJldHVybiBhY3RpdmVUYXJnZXQgIT0gKGkgPSB0YXJnZXRzW3RhcmdldHMubGVuZ3RoIC0gMV0pICYmIHRoaXMuYWN0aXZhdGUoaSlcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlVGFyZ2V0ICYmIHNjcm9sbFRvcCA8IG9mZnNldHNbMF0pIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXIoKVxuICAgIH1cblxuICAgIGZvciAoaSA9IG9mZnNldHMubGVuZ3RoOyBpLS07KSB7XG4gICAgICBhY3RpdmVUYXJnZXQgIT0gdGFyZ2V0c1tpXVxuICAgICAgICAmJiBzY3JvbGxUb3AgPj0gb2Zmc2V0c1tpXVxuICAgICAgICAmJiAob2Zmc2V0c1tpICsgMV0gPT09IHVuZGVmaW5lZCB8fCBzY3JvbGxUb3AgPCBvZmZzZXRzW2kgKyAxXSlcbiAgICAgICAgJiYgdGhpcy5hY3RpdmF0ZSh0YXJnZXRzW2ldKVxuICAgIH1cbiAgfVxuXG4gIFNjcm9sbFNweS5wcm90b3R5cGUuYWN0aXZhdGUgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGhpcy5hY3RpdmVUYXJnZXQgPSB0YXJnZXRcblxuICAgIHRoaXMuY2xlYXIoKVxuXG4gICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvciArXG4gICAgICAnW2RhdGEtdGFyZ2V0PVwiJyArIHRhcmdldCArICdcIl0sJyArXG4gICAgICB0aGlzLnNlbGVjdG9yICsgJ1tocmVmPVwiJyArIHRhcmdldCArICdcIl0nXG5cbiAgICB2YXIgYWN0aXZlID0gJChzZWxlY3RvcilcbiAgICAgIC5wYXJlbnRzKCdsaScpXG4gICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG5cbiAgICBpZiAoYWN0aXZlLnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5sZW5ndGgpIHtcbiAgICAgIGFjdGl2ZSA9IGFjdGl2ZVxuICAgICAgICAuY2xvc2VzdCgnbGkuZHJvcGRvd24nKVxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXG4gICAgfVxuXG4gICAgYWN0aXZlLnRyaWdnZXIoJ2FjdGl2YXRlLmJzLnNjcm9sbHNweScpXG4gIH1cblxuICBTY3JvbGxTcHkucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICQodGhpcy5zZWxlY3RvcilcbiAgICAgIC5wYXJlbnRzVW50aWwodGhpcy5vcHRpb25zLnRhcmdldCwgJy5hY3RpdmUnKVxuICAgICAgLnJlbW92ZUNsYXNzKCdhY3RpdmUnKVxuICB9XG5cblxuICAvLyBTQ1JPTExTUFkgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzICAgPSAkKHRoaXMpXG4gICAgICB2YXIgZGF0YSAgICA9ICR0aGlzLmRhdGEoJ2JzLnNjcm9sbHNweScpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuc2Nyb2xsc3B5JywgKGRhdGEgPSBuZXcgU2Nyb2xsU3B5KHRoaXMsIG9wdGlvbnMpKSlcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09ICdzdHJpbmcnKSBkYXRhW29wdGlvbl0oKVxuICAgIH0pXG4gIH1cblxuICB2YXIgb2xkID0gJC5mbi5zY3JvbGxzcHlcblxuICAkLmZuLnNjcm9sbHNweSAgICAgICAgICAgICA9IFBsdWdpblxuICAkLmZuLnNjcm9sbHNweS5Db25zdHJ1Y3RvciA9IFNjcm9sbFNweVxuXG5cbiAgLy8gU0NST0xMU1BZIE5PIENPTkZMSUNUXG4gIC8vID09PT09PT09PT09PT09PT09PT09PVxuXG4gICQuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5zY3JvbGxzcHkgPSBvbGRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cblxuICAvLyBTQ1JPTExTUFkgREFUQS1BUElcbiAgLy8gPT09PT09PT09PT09PT09PT09XG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaScsIGZ1bmN0aW9uICgpIHtcbiAgICAkKCdbZGF0YS1zcHk9XCJzY3JvbGxcIl0nKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkc3B5ID0gJCh0aGlzKVxuICAgICAgUGx1Z2luLmNhbGwoJHNweSwgJHNweS5kYXRhKCkpXG4gICAgfSlcbiAgfSlcblxufShqUXVlcnkpO1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEJvb3RzdHJhcDogdGFiLmpzIHYzLjQuMVxuICogaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvMy40L2phdmFzY3JpcHQvI3RhYnNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ29weXJpZ2h0IDIwMTEtMjAxOSBUd2l0dGVyLCBJbmMuXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cblxuK2Z1bmN0aW9uICgkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICAvLyBUQUIgQ0xBU1MgREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBUYWIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIC8vIGpzY3M6ZGlzYWJsZSByZXF1aXJlRG9sbGFyQmVmb3JlalF1ZXJ5QXNzaWdubWVudFxuICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudClcbiAgICAvLyBqc2NzOmVuYWJsZSByZXF1aXJlRG9sbGFyQmVmb3JlalF1ZXJ5QXNzaWdubWVudFxuICB9XG5cbiAgVGFiLlZFUlNJT04gPSAnMy40LjEnXG5cbiAgVGFiLlRSQU5TSVRJT05fRFVSQVRJT04gPSAxNTBcblxuICBUYWIucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyICR0aGlzICAgID0gdGhpcy5lbGVtZW50XG4gICAgdmFyICR1bCAgICAgID0gJHRoaXMuY2xvc2VzdCgndWw6bm90KC5kcm9wZG93bi1tZW51KScpXG4gICAgdmFyIHNlbGVjdG9yID0gJHRoaXMuZGF0YSgndGFyZ2V0JylcblxuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgIHNlbGVjdG9yID0gJHRoaXMuYXR0cignaHJlZicpXG4gICAgICBzZWxlY3RvciA9IHNlbGVjdG9yICYmIHNlbGVjdG9yLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sICcnKSAvLyBzdHJpcCBmb3IgaWU3XG4gICAgfVxuXG4gICAgaWYgKCR0aGlzLnBhcmVudCgnbGknKS5oYXNDbGFzcygnYWN0aXZlJykpIHJldHVyblxuXG4gICAgdmFyICRwcmV2aW91cyA9ICR1bC5maW5kKCcuYWN0aXZlOmxhc3QgYScpXG4gICAgdmFyIGhpZGVFdmVudCA9ICQuRXZlbnQoJ2hpZGUuYnMudGFiJywge1xuICAgICAgcmVsYXRlZFRhcmdldDogJHRoaXNbMF1cbiAgICB9KVxuICAgIHZhciBzaG93RXZlbnQgPSAkLkV2ZW50KCdzaG93LmJzLnRhYicsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6ICRwcmV2aW91c1swXVxuICAgIH0pXG5cbiAgICAkcHJldmlvdXMudHJpZ2dlcihoaWRlRXZlbnQpXG4gICAgJHRoaXMudHJpZ2dlcihzaG93RXZlbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpIHx8IGhpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgcmV0dXJuXG5cbiAgICB2YXIgJHRhcmdldCA9ICQoZG9jdW1lbnQpLmZpbmQoc2VsZWN0b3IpXG5cbiAgICB0aGlzLmFjdGl2YXRlKCR0aGlzLmNsb3Nlc3QoJ2xpJyksICR1bClcbiAgICB0aGlzLmFjdGl2YXRlKCR0YXJnZXQsICR0YXJnZXQucGFyZW50KCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICRwcmV2aW91cy50cmlnZ2VyKHtcbiAgICAgICAgdHlwZTogJ2hpZGRlbi5icy50YWInLFxuICAgICAgICByZWxhdGVkVGFyZ2V0OiAkdGhpc1swXVxuICAgICAgfSlcbiAgICAgICR0aGlzLnRyaWdnZXIoe1xuICAgICAgICB0eXBlOiAnc2hvd24uYnMudGFiJyxcbiAgICAgICAgcmVsYXRlZFRhcmdldDogJHByZXZpb3VzWzBdXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBUYWIucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICB2YXIgJGFjdGl2ZSAgICA9IGNvbnRhaW5lci5maW5kKCc+IC5hY3RpdmUnKVxuICAgIHZhciB0cmFuc2l0aW9uID0gY2FsbGJhY2tcbiAgICAgICYmICQuc3VwcG9ydC50cmFuc2l0aW9uXG4gICAgICAmJiAoJGFjdGl2ZS5sZW5ndGggJiYgJGFjdGl2ZS5oYXNDbGFzcygnZmFkZScpIHx8ICEhY29udGFpbmVyLmZpbmQoJz4gLmZhZGUnKS5sZW5ndGgpXG5cbiAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgJGFjdGl2ZVxuICAgICAgICAucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpXG4gICAgICAgIC5maW5kKCc+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZScpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmVuZCgpXG4gICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxuICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIGZhbHNlKVxuXG4gICAgICBlbGVtZW50XG4gICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJylcbiAgICAgICAgLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpXG4gICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgICAgaWYgKHRyYW5zaXRpb24pIHtcbiAgICAgICAgZWxlbWVudFswXS5vZmZzZXRXaWR0aCAvLyByZWZsb3cgZm9yIHRyYW5zaXRpb25cbiAgICAgICAgZWxlbWVudC5hZGRDbGFzcygnaW4nKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZmFkZScpXG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50LnBhcmVudCgnLmRyb3Bkb3duLW1lbnUnKS5sZW5ndGgpIHtcbiAgICAgICAgZWxlbWVudFxuICAgICAgICAgIC5jbG9zZXN0KCdsaS5kcm9wZG93bicpXG4gICAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxuICAgICAgICAgIC5lbmQoKVxuICAgICAgICAgIC5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKVxuICAgICAgICAgIC5hdHRyKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcbiAgICAgIH1cblxuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgIH1cblxuICAgICRhY3RpdmUubGVuZ3RoICYmIHRyYW5zaXRpb24gP1xuICAgICAgJGFjdGl2ZVxuICAgICAgICAub25lKCdic1RyYW5zaXRpb25FbmQnLCBuZXh0KVxuICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVGFiLlRSQU5TSVRJT05fRFVSQVRJT04pIDpcbiAgICAgIG5leHQoKVxuXG4gICAgJGFjdGl2ZS5yZW1vdmVDbGFzcygnaW4nKVxuICB9XG5cblxuICAvLyBUQUIgUExVR0lOIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09XG5cbiAgZnVuY3Rpb24gUGx1Z2luKG9wdGlvbikge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgID0gJHRoaXMuZGF0YSgnYnMudGFiJylcblxuICAgICAgaWYgKCFkYXRhKSAkdGhpcy5kYXRhKCdicy50YWInLCAoZGF0YSA9IG5ldyBUYWIodGhpcykpKVxuICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT0gJ3N0cmluZycpIGRhdGFbb3B0aW9uXSgpXG4gICAgfSlcbiAgfVxuXG4gIHZhciBvbGQgPSAkLmZuLnRhYlxuXG4gICQuZm4udGFiICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4udGFiLkNvbnN0cnVjdG9yID0gVGFiXG5cblxuICAvLyBUQUIgTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09XG5cbiAgJC5mbi50YWIubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAkLmZuLnRhYiA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIFRBQiBEQVRBLUFQSVxuICAvLyA9PT09PT09PT09PT1cblxuICB2YXIgY2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBQbHVnaW4uY2FsbCgkKHRoaXMpLCAnc2hvdycpXG4gIH1cblxuICAkKGRvY3VtZW50KVxuICAgIC5vbignY2xpY2suYnMudGFiLmRhdGEtYXBpJywgJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScsIGNsaWNrSGFuZGxlcilcbiAgICAub24oJ2NsaWNrLmJzLnRhYi5kYXRhLWFwaScsICdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJywgY2xpY2tIYW5kbGVyKVxuXG59KGpRdWVyeSk7XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQm9vdHN0cmFwOiBhZmZpeC5qcyB2My40LjFcbiAqIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzMuNC9qYXZhc2NyaXB0LyNhZmZpeFxuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBDb3B5cmlnaHQgMjAxMS0yMDE5IFR3aXR0ZXIsIEluYy5cbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuXG4rZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEFGRklYIENMQVNTIERFRklOSVRJT05cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHZhciBBZmZpeCA9IGZ1bmN0aW9uIChlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIEFmZml4LkRFRkFVTFRTLCBvcHRpb25zKVxuXG4gICAgdmFyIHRhcmdldCA9IHRoaXMub3B0aW9ucy50YXJnZXQgPT09IEFmZml4LkRFRkFVTFRTLnRhcmdldCA/ICQodGhpcy5vcHRpb25zLnRhcmdldCkgOiAkKGRvY3VtZW50KS5maW5kKHRoaXMub3B0aW9ucy50YXJnZXQpXG5cbiAgICB0aGlzLiR0YXJnZXQgPSB0YXJnZXRcbiAgICAgIC5vbignc2Nyb2xsLmJzLmFmZml4LmRhdGEtYXBpJywgJC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sIHRoaXMpKVxuICAgICAgLm9uKCdjbGljay5icy5hZmZpeC5kYXRhLWFwaScsICAkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AsIHRoaXMpKVxuXG4gICAgdGhpcy4kZWxlbWVudCAgICAgPSAkKGVsZW1lbnQpXG4gICAgdGhpcy5hZmZpeGVkICAgICAgPSBudWxsXG4gICAgdGhpcy51bnBpbiAgICAgICAgPSBudWxsXG4gICAgdGhpcy5waW5uZWRPZmZzZXQgPSBudWxsXG5cbiAgICB0aGlzLmNoZWNrUG9zaXRpb24oKVxuICB9XG5cbiAgQWZmaXguVkVSU0lPTiAgPSAnMy40LjEnXG5cbiAgQWZmaXguUkVTRVQgICAgPSAnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSdcblxuICBBZmZpeC5ERUZBVUxUUyA9IHtcbiAgICBvZmZzZXQ6IDAsXG4gICAgdGFyZ2V0OiB3aW5kb3dcbiAgfVxuXG4gIEFmZml4LnByb3RvdHlwZS5nZXRTdGF0ZSA9IGZ1bmN0aW9uIChzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pIHtcbiAgICB2YXIgc2Nyb2xsVG9wICAgID0gdGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpXG4gICAgdmFyIHBvc2l0aW9uICAgICA9IHRoaXMuJGVsZW1lbnQub2Zmc2V0KClcbiAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gdGhpcy4kdGFyZ2V0LmhlaWdodCgpXG5cbiAgICBpZiAob2Zmc2V0VG9wICE9IG51bGwgJiYgdGhpcy5hZmZpeGVkID09ICd0b3AnKSByZXR1cm4gc2Nyb2xsVG9wIDwgb2Zmc2V0VG9wID8gJ3RvcCcgOiBmYWxzZVxuXG4gICAgaWYgKHRoaXMuYWZmaXhlZCA9PSAnYm90dG9tJykge1xuICAgICAgaWYgKG9mZnNldFRvcCAhPSBudWxsKSByZXR1cm4gKHNjcm9sbFRvcCArIHRoaXMudW5waW4gPD0gcG9zaXRpb24udG9wKSA/IGZhbHNlIDogJ2JvdHRvbSdcbiAgICAgIHJldHVybiAoc2Nyb2xsVG9wICsgdGFyZ2V0SGVpZ2h0IDw9IHNjcm9sbEhlaWdodCAtIG9mZnNldEJvdHRvbSkgPyBmYWxzZSA6ICdib3R0b20nXG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxpemluZyAgID0gdGhpcy5hZmZpeGVkID09IG51bGxcbiAgICB2YXIgY29sbGlkZXJUb3AgICAgPSBpbml0aWFsaXppbmcgPyBzY3JvbGxUb3AgOiBwb3NpdGlvbi50b3BcbiAgICB2YXIgY29sbGlkZXJIZWlnaHQgPSBpbml0aWFsaXppbmcgPyB0YXJnZXRIZWlnaHQgOiBoZWlnaHRcblxuICAgIGlmIChvZmZzZXRUb3AgIT0gbnVsbCAmJiBzY3JvbGxUb3AgPD0gb2Zmc2V0VG9wKSByZXR1cm4gJ3RvcCdcbiAgICBpZiAob2Zmc2V0Qm90dG9tICE9IG51bGwgJiYgKGNvbGxpZGVyVG9wICsgY29sbGlkZXJIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gb2Zmc2V0Qm90dG9tKSkgcmV0dXJuICdib3R0b20nXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIEFmZml4LnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMucGlubmVkT2Zmc2V0KSByZXR1cm4gdGhpcy5waW5uZWRPZmZzZXRcbiAgICB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKEFmZml4LlJFU0VUKS5hZGRDbGFzcygnYWZmaXgnKVxuICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKClcbiAgICB2YXIgcG9zaXRpb24gID0gdGhpcy4kZWxlbWVudC5vZmZzZXQoKVxuICAgIHJldHVybiAodGhpcy5waW5uZWRPZmZzZXQgPSBwb3NpdGlvbi50b3AgLSBzY3JvbGxUb3ApXG4gIH1cblxuICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dCgkLnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbiwgdGhpcyksIDEpXG4gIH1cblxuICBBZmZpeC5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuJGVsZW1lbnQuaXMoJzp2aXNpYmxlJykpIHJldHVyblxuXG4gICAgdmFyIGhlaWdodCAgICAgICA9IHRoaXMuJGVsZW1lbnQuaGVpZ2h0KClcbiAgICB2YXIgb2Zmc2V0ICAgICAgID0gdGhpcy5vcHRpb25zLm9mZnNldFxuICAgIHZhciBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wXG4gICAgdmFyIG9mZnNldEJvdHRvbSA9IG9mZnNldC5ib3R0b21cbiAgICB2YXIgc2Nyb2xsSGVpZ2h0ID0gTWF0aC5tYXgoJChkb2N1bWVudCkuaGVpZ2h0KCksICQoZG9jdW1lbnQuYm9keSkuaGVpZ2h0KCkpXG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCAhPSAnb2JqZWN0JykgICAgICAgICBvZmZzZXRCb3R0b20gPSBvZmZzZXRUb3AgPSBvZmZzZXRcbiAgICBpZiAodHlwZW9mIG9mZnNldFRvcCA9PSAnZnVuY3Rpb24nKSAgICBvZmZzZXRUb3AgICAgPSBvZmZzZXQudG9wKHRoaXMuJGVsZW1lbnQpXG4gICAgaWYgKHR5cGVvZiBvZmZzZXRCb3R0b20gPT0gJ2Z1bmN0aW9uJykgb2Zmc2V0Qm90dG9tID0gb2Zmc2V0LmJvdHRvbSh0aGlzLiRlbGVtZW50KVxuXG4gICAgdmFyIGFmZml4ID0gdGhpcy5nZXRTdGF0ZShzY3JvbGxIZWlnaHQsIGhlaWdodCwgb2Zmc2V0VG9wLCBvZmZzZXRCb3R0b20pXG5cbiAgICBpZiAodGhpcy5hZmZpeGVkICE9IGFmZml4KSB7XG4gICAgICBpZiAodGhpcy51bnBpbiAhPSBudWxsKSB0aGlzLiRlbGVtZW50LmNzcygndG9wJywgJycpXG5cbiAgICAgIHZhciBhZmZpeFR5cGUgPSAnYWZmaXgnICsgKGFmZml4ID8gJy0nICsgYWZmaXggOiAnJylcbiAgICAgIHZhciBlICAgICAgICAgPSAkLkV2ZW50KGFmZml4VHlwZSArICcuYnMuYWZmaXgnKVxuXG4gICAgICB0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSlcblxuICAgICAgaWYgKGUuaXNEZWZhdWx0UHJldmVudGVkKCkpIHJldHVyblxuXG4gICAgICB0aGlzLmFmZml4ZWQgPSBhZmZpeFxuICAgICAgdGhpcy51bnBpbiA9IGFmZml4ID09ICdib3R0b20nID8gdGhpcy5nZXRQaW5uZWRPZmZzZXQoKSA6IG51bGxcblxuICAgICAgdGhpcy4kZWxlbWVudFxuICAgICAgICAucmVtb3ZlQ2xhc3MoQWZmaXguUkVTRVQpXG4gICAgICAgIC5hZGRDbGFzcyhhZmZpeFR5cGUpXG4gICAgICAgIC50cmlnZ2VyKGFmZml4VHlwZS5yZXBsYWNlKCdhZmZpeCcsICdhZmZpeGVkJykgKyAnLmJzLmFmZml4JylcbiAgICB9XG5cbiAgICBpZiAoYWZmaXggPT0gJ2JvdHRvbScpIHtcbiAgICAgIHRoaXMuJGVsZW1lbnQub2Zmc2V0KHtcbiAgICAgICAgdG9wOiBzY3JvbGxIZWlnaHQgLSBoZWlnaHQgLSBvZmZzZXRCb3R0b21cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cblxuICAvLyBBRkZJWCBQTFVHSU4gREVGSU5JVElPTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGZ1bmN0aW9uIFBsdWdpbihvcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkdGhpcyAgID0gJCh0aGlzKVxuICAgICAgdmFyIGRhdGEgICAgPSAkdGhpcy5kYXRhKCdicy5hZmZpeCcpXG4gICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBvcHRpb24gPT0gJ29iamVjdCcgJiYgb3B0aW9uXG5cbiAgICAgIGlmICghZGF0YSkgJHRoaXMuZGF0YSgnYnMuYWZmaXgnLCAoZGF0YSA9IG5ldyBBZmZpeCh0aGlzLCBvcHRpb25zKSkpXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PSAnc3RyaW5nJykgZGF0YVtvcHRpb25dKClcbiAgICB9KVxuICB9XG5cbiAgdmFyIG9sZCA9ICQuZm4uYWZmaXhcblxuICAkLmZuLmFmZml4ICAgICAgICAgICAgID0gUGx1Z2luXG4gICQuZm4uYWZmaXguQ29uc3RydWN0b3IgPSBBZmZpeFxuXG5cbiAgLy8gQUZGSVggTk8gQ09ORkxJQ1RcbiAgLy8gPT09PT09PT09PT09PT09PT1cblxuICAkLmZuLmFmZml4Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgJC5mbi5hZmZpeCA9IG9sZFxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuXG4gIC8vIEFGRklYIERBVEEtQVBJXG4gIC8vID09PT09PT09PT09PT09XG5cbiAgJCh3aW5kb3cpLm9uKCdsb2FkJywgZnVuY3Rpb24gKCkge1xuICAgICQoJ1tkYXRhLXNweT1cImFmZml4XCJdJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHNweSA9ICQodGhpcylcbiAgICAgIHZhciBkYXRhID0gJHNweS5kYXRhKClcblxuICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLm9mZnNldCB8fCB7fVxuXG4gICAgICBpZiAoZGF0YS5vZmZzZXRCb3R0b20gIT0gbnVsbCkgZGF0YS5vZmZzZXQuYm90dG9tID0gZGF0YS5vZmZzZXRCb3R0b21cbiAgICAgIGlmIChkYXRhLm9mZnNldFRvcCAgICAhPSBudWxsKSBkYXRhLm9mZnNldC50b3AgICAgPSBkYXRhLm9mZnNldFRvcFxuXG4gICAgICBQbHVnaW4uY2FsbCgkc3B5LCBkYXRhKVxuICAgIH0pXG4gIH0pXG5cbn0oalF1ZXJ5KTtcbiIsIi8qIGdsb2JhbHMgX193ZWJwYWNrX2FtZF9vcHRpb25zX18gKi9cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iXSwic291cmNlUm9vdCI6IiJ9