@vacayou/tripfusion-js-sdk 1.65.0 → 1.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +2 -2
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{var e={365(e,n,t){"use strict";t.d(n,{A:()=>s});var r=t(354),i=t.n(r),o=t(314),a=t.n(o)()(i());a.push([e.id,"@import url(https://use.typekit.net/sag8ceb.css);"]),a.push([e.id,'#tripfusion-loader {\n color: white;\n margin-right: -50%;\n position: absolute;\n top: 50%;\n left: 50%;\n font-family: futura-lt-w01-book, futura-lt-w05-book, Arial, Helvetica, sans-serif;\n transform: translate(-50%, -50%);\n}\n\n#tripfusion-loader span {\n font-weight: bold;\n font-size: 1.3rem;\n}\n\n#tripfusion-resume-panel {\n max-width: 250px;\n position: fixed;\n overflow: hidden;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding: 12px 24px;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25), 0px 4px 4px rgba(0, 0, 0, 0.1);\n right: 30px;\n z-index: 100000000000;\n bottom: 40px;\n border: none;\n transform: translateX(400px);\n border-radius: 16px;\n color: white;\n font-size: 1rem;\n font-family: sweet-sans-pro, sans-serif;\n}\n\n.tripfusion-resume-panel__header {\n display: flex;\n justify-content: space-between;\n gap: 2em;\n align-items: center;\n}\n\n.tripfusion-resume-panel__header svg {\n width: 18px;\n height: 18px;\n fill: white;\n flex-shrink: 0;\n}\n\n.tripfusion-resume-panel__header span,\n.tripfusion-resume-panel__subheader {\n font-weight: 700;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tripfusion-resume-panel__footer {\n font-family: Roboto, Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n font-weight: 400;\n}\n\n#tripfusion-widget-wrapper {\n background: rgba(0, 0, 0, 0);\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n transition: background 0.5s ease-out;\n}\n\n#tripfusion-widget {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n right: 0px;\n}\n\n#tripfusion-widget-inner-wrapper {\n position: fixed;\n display: flex;\n flex-direction: column;\n min-width: 320px;\n width: 100%;\n height: 100%;\n right: 0px;\n bottom: 0px;\n background: white;\n border-radius: 0;\n box-shadow: none;\n font-family: "Roboto", "Helvetica", "Arial", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.5;\n letter-spacing: 0.00938em;\n}\n\n#tripfusion-widget-header {\n height: 60px;\n border-bottom: 1px solid #f1f1f1;\n padding: 0 16px 0 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: white;\n}\n\n#tripfusion-widget-iframe {\n height: 100%;\n border: none;\n}\n\n#tripfusion-widget-header-title {\n font-family: sweet-sans-pro, sans-serif;\n line-height: 1.2;\n font-weight: 700;\n font-size: 1rem;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n}\n\n#tripfusion-widget-close-button {\n overflow: hidden;\n position: relative;\n border: none;\n padding: 0;\n width: 2em;\n height: 2em;\n border-radius: 50%;\n background: transparent;\n font: inherit;\n text-indent: 100%;\n cursor: pointer;\n\n &:focus {\n outline: solid 0 transparent;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:before,\n &:after {\n position: absolute;\n top: 25%;\n left: calc(50% - 0.0625em);\n width: 0.125em;\n height: 50%;\n border-radius: 0.125em;\n transform: rotate(45deg);\n background: currentcolor;\n color: white;\n content: "";\n }\n\n &:after {\n transform: rotate(-45deg);\n }\n}\n\n.tripfusion-resume-panel--slide-in {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(0) !important;\n}\n\n.tripfusion-resume-panel--slide-out {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(400px) !important;\n}\n\n.tripfusion-resume-panel--resize-in {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: 30px !important;\n}\n\n.tripfusion-resume-panel--resize-in:hover {\n width: 217px !important;\n height: 46px !important;\n transition: all 300ms linear;\n cursor: pointer;\n}\n\n.tripfusion-resume-panel--resize-out {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: -100px !important;\n}\n\n.slide-in {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-up 0.8s forwards !important;\n -webkit-animation: slide-up 0.8s forwards !important;\n z-index: 1000000000000;\n}\n\n.slide-out {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-down 0.5s forwards !important;\n -webkit-animation: slide-down 0.5s forwards !important;\n z-index: -1000000000000;\n}\n\n@keyframes slide-up {\n 100% {\n transform: translateY(0%);\n }\n}\n\n@-webkit-keyframes slide-up {\n 100% {\n -webkit-transform: translateY(0%);\n }\n}\n\n@keyframes slide-down {\n 0% {\n transform: translateY(0%);\n }\n\n 100% {\n transform: translateY(100%);\n }\n}\n\n@-webkit-keyframes slide-down {\n 0% {\n -webkit-transform: translateY(0%);\n }\n\n 100% {\n -webkit-transform: translateY(100%);\n }\n}\n',"",{version:3,sources:["webpack://./src/styles.css"],names:[],mappings:"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",sourcesContent:['@import url("https://use.typekit.net/sag8ceb.css");\n\n#tripfusion-loader {\n color: white;\n margin-right: -50%;\n position: absolute;\n top: 50%;\n left: 50%;\n font-family: futura-lt-w01-book, futura-lt-w05-book, Arial, Helvetica, sans-serif;\n transform: translate(-50%, -50%);\n}\n\n#tripfusion-loader span {\n font-weight: bold;\n font-size: 1.3rem;\n}\n\n#tripfusion-resume-panel {\n max-width: 250px;\n position: fixed;\n overflow: hidden;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding: 12px 24px;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25), 0px 4px 4px rgba(0, 0, 0, 0.1);\n right: 30px;\n z-index: 100000000000;\n bottom: 40px;\n border: none;\n transform: translateX(400px);\n border-radius: 16px;\n color: white;\n font-size: 1rem;\n font-family: sweet-sans-pro, sans-serif;\n}\n\n.tripfusion-resume-panel__header {\n display: flex;\n justify-content: space-between;\n gap: 2em;\n align-items: center;\n}\n\n.tripfusion-resume-panel__header svg {\n width: 18px;\n height: 18px;\n fill: white;\n flex-shrink: 0;\n}\n\n.tripfusion-resume-panel__header span,\n.tripfusion-resume-panel__subheader {\n font-weight: 700;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tripfusion-resume-panel__footer {\n font-family: Roboto, Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n font-weight: 400;\n}\n\n#tripfusion-widget-wrapper {\n background: rgba(0, 0, 0, 0);\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n transition: background 0.5s ease-out;\n}\n\n#tripfusion-widget {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n right: 0px;\n}\n\n#tripfusion-widget-inner-wrapper {\n position: fixed;\n display: flex;\n flex-direction: column;\n min-width: 320px;\n width: 100%;\n height: 100%;\n right: 0px;\n bottom: 0px;\n background: white;\n border-radius: 0;\n box-shadow: none;\n font-family: "Roboto", "Helvetica", "Arial", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.5;\n letter-spacing: 0.00938em;\n}\n\n#tripfusion-widget-header {\n height: 60px;\n border-bottom: 1px solid #f1f1f1;\n padding: 0 16px 0 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: white;\n}\n\n#tripfusion-widget-iframe {\n height: 100%;\n border: none;\n}\n\n#tripfusion-widget-header-title {\n font-family: sweet-sans-pro, sans-serif;\n line-height: 1.2;\n font-weight: 700;\n font-size: 1rem;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n}\n\n#tripfusion-widget-close-button {\n overflow: hidden;\n position: relative;\n border: none;\n padding: 0;\n width: 2em;\n height: 2em;\n border-radius: 50%;\n background: transparent;\n font: inherit;\n text-indent: 100%;\n cursor: pointer;\n\n &:focus {\n outline: solid 0 transparent;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:before,\n &:after {\n position: absolute;\n top: 25%;\n left: calc(50% - 0.0625em);\n width: 0.125em;\n height: 50%;\n border-radius: 0.125em;\n transform: rotate(45deg);\n background: currentcolor;\n color: white;\n content: "";\n }\n\n &:after {\n transform: rotate(-45deg);\n }\n}\n\n.tripfusion-resume-panel--slide-in {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(0) !important;\n}\n\n.tripfusion-resume-panel--slide-out {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(400px) !important;\n}\n\n.tripfusion-resume-panel--resize-in {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: 30px !important;\n}\n\n.tripfusion-resume-panel--resize-in:hover {\n width: 217px !important;\n height: 46px !important;\n transition: all 300ms linear;\n cursor: pointer;\n}\n\n.tripfusion-resume-panel--resize-out {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: -100px !important;\n}\n\n.slide-in {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-up 0.8s forwards !important;\n -webkit-animation: slide-up 0.8s forwards !important;\n z-index: 1000000000000;\n}\n\n.slide-out {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-down 0.5s forwards !important;\n -webkit-animation: slide-down 0.5s forwards !important;\n z-index: -1000000000000;\n}\n\n@keyframes slide-up {\n 100% {\n transform: translateY(0%);\n }\n}\n\n@-webkit-keyframes slide-up {\n 100% {\n -webkit-transform: translateY(0%);\n }\n}\n\n@keyframes slide-down {\n 0% {\n transform: translateY(0%);\n }\n\n 100% {\n transform: translateY(100%);\n }\n}\n\n@-webkit-keyframes slide-down {\n 0% {\n -webkit-transform: translateY(0%);\n }\n\n 100% {\n -webkit-transform: translateY(100%);\n }\n}\n'],sourceRoot:""}]);const s=a},314(e){"use strict";e.exports=function(e){var n=[];return n.toString=function(){return this.map(function(n){var t="",r=void 0!==n[5];return n[4]&&(t+="@supports (".concat(n[4],") {")),n[2]&&(t+="@media ".concat(n[2]," {")),r&&(t+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),t+=e(n),r&&(t+="}"),n[2]&&(t+="}"),n[4]&&(t+="}"),t}).join("")},n.i=function(e,t,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var s=0;s<this.length;s++){var u=this[s][0];null!=u&&(a[u]=!0)}for(var l=0;l<e.length;l++){var c=[].concat(e[l]);r&&a[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),t&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=t):c[2]=t),i&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=i):c[4]="".concat(i)),n.push(c))}},n}},354(e){"use strict";e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(i," */");return[n].concat([o]).join("\n")}return[n].join("\n")}},353(e){e.exports=function(){"use strict";var e=6e4,n=36e5,t="millisecond",r="second",i="minute",o="hour",a="day",s="week",u="month",l="quarter",c="year",d="date",p="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,A=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var n=["th","st","nd","rd"],t=e%100;return"["+e+(n[(t-20)%10]||n[t]||n[0])+"]"}},h=function(e,n,t){var r=String(e);return!r||r.length>=n?e:""+Array(n+1-r.length).join(t)+e},m={s:h,z:function(e){var n=-e.utcOffset(),t=Math.abs(n),r=Math.floor(t/60),i=t%60;return(n<=0?"+":"-")+h(r,2,"0")+":"+h(i,2,"0")},m:function e(n,t){if(n.date()<t.date())return-e(t,n);var r=12*(t.year()-n.year())+(t.month()-n.month()),i=n.clone().add(r,u),o=t-i<0,a=n.clone().add(r+(o?-1:1),u);return+(-(r+(t-i)/(o?i-a:a-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:c,w:s,d:a,D:d,h:o,m:i,s:r,ms:t,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},y="en",v={};v[y]=g;var I="$isDayjsObject",b=function(e){return e instanceof k||!(!e||!e[I])},C=function e(n,t,r){var i;if(!n)return y;if("string"==typeof n){var o=n.toLowerCase();v[o]&&(i=o),t&&(v[o]=t,i=o);var a=n.split("-");if(!i&&a.length>1)return e(a[0])}else{var s=n.name;v[s]=n,i=s}return!r&&i&&(y=i),i||!r&&y},B=function(e,n){if(b(e))return e.clone();var t="object"==typeof n?n:{};return t.date=e,t.args=arguments,new k(t)},w=m;w.l=C,w.i=b,w.w=function(e,n){return B(e,{locale:n.$L,utc:n.$u,x:n.$x,$offset:n.$offset})};var k=function(){function g(e){this.$L=C(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[I]=!0}var h=g.prototype;return h.parse=function(e){this.$d=function(e){var n=e.date,t=e.utc;if(null===n)return new Date(NaN);if(w.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(f);if(r){var i=r[2]-1||0,o=(r[7]||"0").substring(0,3);return t?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(n)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return w},h.isValid=function(){return!(this.$d.toString()===p)},h.isSame=function(e,n){var t=B(e);return this.startOf(n)<=t&&t<=this.endOf(n)},h.isAfter=function(e,n){return B(e)<this.startOf(n)},h.isBefore=function(e,n){return this.endOf(n)<B(e)},h.$g=function(e,n,t){return w.u(e)?this[n]:this.set(t,e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,n){var t=this,l=!!w.u(n)||n,p=w.p(e),f=function(e,n){var r=w.w(t.$u?Date.UTC(t.$y,n,e):new Date(t.$y,n,e),t);return l?r:r.endOf(a)},A=function(e,n){return w.w(t.toDate()[e].apply(t.toDate("s"),(l?[0,0,0,0]:[23,59,59,999]).slice(n)),t)},g=this.$W,h=this.$M,m=this.$D,y="set"+(this.$u?"UTC":"");switch(p){case c:return l?f(1,0):f(31,11);case u:return l?f(1,h):f(0,h+1);case s:var v=this.$locale().weekStart||0,I=(g<v?g+7:g)-v;return f(l?m-I:m+(6-I),h);case a:case d:return A(y+"Hours",0);case o:return A(y+"Minutes",1);case i:return A(y+"Seconds",2);case r:return A(y+"Milliseconds",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(e,n){var s,l=w.p(e),p="set"+(this.$u?"UTC":""),f=(s={},s[a]=p+"Date",s[d]=p+"Date",s[u]=p+"Month",s[c]=p+"FullYear",s[o]=p+"Hours",s[i]=p+"Minutes",s[r]=p+"Seconds",s[t]=p+"Milliseconds",s)[l],A=l===a?this.$D+(n-this.$W):n;if(l===u||l===c){var g=this.clone().set(d,1);g.$d[f](A),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](A);return this.init(),this},h.set=function(e,n){return this.clone().$set(e,n)},h.get=function(e){return this[w.p(e)]()},h.add=function(t,l){var d,p=this;t=Number(t);var f=w.p(l),A=function(e){var n=B(p);return w.w(n.date(n.date()+Math.round(e*t)),p)};if(f===u)return this.set(u,this.$M+t);if(f===c)return this.set(c,this.$y+t);if(f===a)return A(1);if(f===s)return A(7);var g=(d={},d[i]=e,d[o]=n,d[r]=1e3,d)[f]||1,h=this.$d.getTime()+t*g;return w.w(h,this)},h.subtract=function(e,n){return this.add(-1*e,n)},h.format=function(e){var n=this,t=this.$locale();if(!this.isValid())return t.invalidDate||p;var r=e||"YYYY-MM-DDTHH:mm:ssZ",i=w.z(this),o=this.$H,a=this.$m,s=this.$M,u=t.weekdays,l=t.months,c=t.meridiem,d=function(e,t,i,o){return e&&(e[t]||e(n,r))||i[t].slice(0,o)},f=function(e){return w.s(o%12||12,e,"0")},g=c||function(e,n,t){var r=e<12?"AM":"PM";return t?r.toLowerCase():r};return r.replace(A,function(e,r){return r||function(e){switch(e){case"YY":return String(n.$y).slice(-2);case"YYYY":return w.s(n.$y,4,"0");case"M":return s+1;case"MM":return w.s(s+1,2,"0");case"MMM":return d(t.monthsShort,s,l,3);case"MMMM":return d(l,s);case"D":return n.$D;case"DD":return w.s(n.$D,2,"0");case"d":return String(n.$W);case"dd":return d(t.weekdaysMin,n.$W,u,2);case"ddd":return d(t.weekdaysShort,n.$W,u,3);case"dddd":return u[n.$W];case"H":return String(o);case"HH":return w.s(o,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return g(o,a,!0);case"A":return g(o,a,!1);case"m":return String(a);case"mm":return w.s(a,2,"0");case"s":return String(n.$s);case"ss":return w.s(n.$s,2,"0");case"SSS":return w.s(n.$ms,3,"0");case"Z":return i}return null}(e)||i.replace(":","")})},h.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},h.diff=function(t,d,p){var f,A=this,g=w.p(d),h=B(t),m=(h.utcOffset()-this.utcOffset())*e,y=this-h,v=function(){return w.m(A,h)};switch(g){case c:f=v()/12;break;case u:f=v();break;case l:f=v()/3;break;case s:f=(y-m)/6048e5;break;case a:f=(y-m)/864e5;break;case o:f=y/n;break;case i:f=y/e;break;case r:f=y/1e3;break;default:f=y}return p?f:w.a(f)},h.daysInMonth=function(){return this.endOf(u).$D},h.$locale=function(){return v[this.$L]},h.locale=function(e,n){if(!e)return this.$L;var t=this.clone(),r=C(e,n,!0);return r&&(t.$L=r),t},h.clone=function(){return w.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},g}(),x=k.prototype;return B.prototype=x,[["$ms",t],["$s",r],["$m",i],["$H",o],["$W",a],["$M",u],["$y",c],["$D",d]].forEach(function(e){x[e[1]]=function(n){return this.$g(n,e[0],e[1])}}),B.extend=function(e,n){return e.$i||(e(n,k,B),e.$i=!0),B},B.locale=C,B.isDayjs=b,B.unix=function(e){return B(1e3*e)},B.en=v[y],B.Ls=v,B.p={},B}()},72(e){"use strict";var n=[];function t(e){for(var t=-1,r=0;r<n.length;r++)if(n[r].identifier===e){t=r;break}return t}function r(e,r){for(var o={},a=[],s=0;s<e.length;s++){var u=e[s],l=r.base?u[0]+r.base:u[0],c=o[l]||0,d="".concat(l," ").concat(c);o[l]=c+1;var p=t(d),f={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==p)n[p].references++,n[p].updater(f);else{var A=i(f,r);r.byIndex=s,n.splice(s,0,{identifier:d,updater:A,references:1})}a.push(d)}return a}function i(e,n){var t=n.domAPI(n);return t.update(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap&&n.supports===e.supports&&n.layer===e.layer)return;t.update(e=n)}else t.remove()}}e.exports=function(e,i){var o=r(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var s=t(o[a]);n[s].references--}for(var u=r(e,i),l=0;l<o.length;l++){var c=t(o[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}o=u}}},659(e){"use strict";var n={};e.exports=function(e,t){var r=function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},540(e){"use strict";e.exports=function(e){var n=document.createElement("style");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},56(e,n,t){"use strict";e.exports=function(e){var n=t.nc;n&&e.setAttribute("nonce",n)}},825(e){"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){!function(e,n,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,i&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),n.styleTagTransform(r,e,n.options)}(n,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)}}}},113(e){"use strict";e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}}},n={};function t(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.exports}t.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},t.d=(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.nc=void 0,(()=>{"use strict";var e="tripfusion-widget",n="tripfusion-widget-inner-wrapper",r="tripfusion-widget-header",i="tripfusion-widget-wrapper",o="tripfusion-widget-iframe",a="tripfusion-resume-panel",s="tripfusion-loader",u="normal",l="append";function c(e,n){let t;try{t=e()}catch(e){return}return{getItem:e=>{var r;const i=e=>null===e?null:JSON.parse(e,null==n?void 0:n.reviver),o=null!=(r=t.getItem(e))?r:null;return o instanceof Promise?o.then(i):i(o)},setItem:(e,r)=>t.setItem(e,JSON.stringify(r,null==n?void 0:n.replacer)),removeItem:e=>t.removeItem(e)}}const d=e=>n=>{try{const t=e(n);return t instanceof Promise?t:{then:e=>d(e)(t),catch(e){return this}}}catch(e){return{then(e){return this},catch:n=>d(n)(e)}}},p=(e,n)=>(t,r,i)=>{let o={storage:c(()=>localStorage),partialize:e=>e,version:0,merge:(e,n)=>({...n,...e}),...n},a=!1;const s=new Set,u=new Set;let l=o.storage;if(!l)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),t(...e)},r,i);const p=()=>{const e=o.partialize({...r()});return l.setItem(o.name,{state:e,version:o.version})},f=i.setState;i.setState=(e,n)=>(f(e,n),p());const A=e((...e)=>(t(...e),p()),r,i);let g;i.getInitialState=()=>A;const h=()=>{var e,n;if(!l)return;a=!1,s.forEach(e=>{var n;return e(null!=(n=r())?n:A)});const i=(null==(n=o.onRehydrateStorage)?void 0:n.call(o,null!=(e=r())?e:A))||void 0;return d(l.getItem.bind(l))(o.name).then(e=>{if(e){if("number"!=typeof e.version||e.version===o.version)return[!1,e.state];if(o.migrate){const n=o.migrate(e.state,e.version);return n instanceof Promise?n.then(e=>[!0,e]):[!0,n]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var n;const[i,a]=e;if(g=o.merge(a,null!=(n=r())?n:A),t(g,!0),i)return p()}).then(()=>{null==i||i(g,void 0),g=r(),a=!0,u.forEach(e=>e(g))}).catch(e=>{null==i||i(void 0,e)})};return i.persist={setOptions:e=>{o={...o,...e},e.storage&&(l=e.storage)},clearStorage:()=>{null==l||l.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>h(),hasHydrated:()=>a,onHydrate:e=>(s.add(e),()=>{s.delete(e)}),onFinishHydration:e=>(u.add(e),()=>{u.delete(e)})},o.skipHydration||h(),g||A},f=e=>{let n;const t=new Set,r=(e,r)=>{const i="function"==typeof e?e(n):e;if(!Object.is(i,n)){const e=n;n=(null!=r?r:"object"!=typeof i||null===i)?i:Object.assign({},n,i),t.forEach(t=>t(n,e))}},i=()=>n,o={setState:r,getState:i,getInitialState:()=>a,subscribe:e=>(t.add(e),()=>t.delete(e))},a=n=e(r,i,o);return o},A=e=>e?f(e):f;var g=function(){return g=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},g.apply(this,arguments)},h={isOpen:!1,isResumePanelVisible:!1,isReady:!1,isBookingCompleted:!1,backgroundColor:"rgb(35, 76, 121)",primaryGuestName:null,checkInDate:null,checkOutDate:null,cart:{}},m=A()(p(function(e){return g(g({},h),{showWidget:function(){return e({isOpen:!0})},hideWidget:function(){return e({isOpen:!1})},showResumePanel:function(){return e({isResumePanelVisible:!0})},hideResumePanel:function(){return e({isResumePanelVisible:!1})},setIsReady:function(n){return e({isReady:n})},setIsBookingCompleted:function(n){return e({isBookingCompleted:n})},setBackgroundColor:function(n){return e(n?{backgroundColor:n}:{backgroundColor:h.backgroundColor})},setPrimaryGuestName:function(n){return e({primaryGuestName:n})},setCart:function(n){return e({cart:n})},setDates:function(n,t){return e({checkInDate:n,checkOutDate:t})},reset:function(){return e(h)}})},{name:"widgetStore",storage:c(function(){return sessionStorage}),partialize:function(e){return Object.fromEntries(Object.entries(e).filter(function(e){var n=e[0];return!["cart","isReady"].includes(n)}))},onRehydrateStorage:function(){return function(e){(null==e?void 0:e.isBookingCompleted)&&e.reset()}}})),y=function(){return y=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},y.apply(this,arguments)},v={client:null,propertyId:null,propertySlug:null,landingPagePath:null,landingPageId:null,mode:u,bookingId:null,checkIn:null,checkOut:null,adults:null,children:null,offerId:null,env:null,embedKey:null,embedBase:null},I=A()(p(function(e){return y(y({},v),{replace:function(n){return e(y(y({},v),n))}})},{name:"globalStore",storage:c(function(){return sessionStorage}),partialize:function(e){return e.env,e.embedKey,e.embedBase,function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(t[r[i]]=e[r[i]])}return t}(e,["env","embedKey","embedBase"])}})),b=function(){return b=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},b.apply(this,arguments)},C=/^pk_(live|test)_[A-Za-z0-9]{32}$/,B=function(){var e,n,t,r,i,o=document.getElementById("tripfusion-sdk").getAttribute("src"),a=w(new URLSearchParams(o.substring(o.indexOf("?")))),s=null!==(e=a.client)&&void 0!==e?e:null,u=a.propertyId?+a.propertyId:null,l=null!==(n=a.propertySlug)&&void 0!==n?n:null,c=null!==(t=a.landingPagePath)&&void 0!==t?t:null,d=a.landingPageId?+a.landingPageId:null,p=null!==(r=a.env)&&void 0!==r?r:null,f=null!==(i=a.embedKey)&&void 0!==i?i:null,A=f;return null===f||C.test(f)||(k("Widget: invalid pk format — embedKey cleared. Expected pk_(live|test)_[A-Za-z0-9]{32}"),A=null),{client:s,propertyId:u,propertySlug:l,landingPagePath:c,landingPageId:d,env:p,embedKey:A,embedBase:"self"===a.embedBase?"self":null}};function w(e){var n={tripfusion:"tripfusion",client:"client",propertyid:"propertyId",propertyslug:"propertySlug",landingpagepath:"landingPagePath",landingpageid:"landingPageId",mode:"mode",offerid:"offerId",bookingid:"bookingId",checkin:"checkIn",checkout:"checkOut",adults:"adults",children:"children",env:"env",pk:"embedKey",embedbase:"embedBase"};return Array.from(e.entries()).reduce(function(e,t){var r,i=t[0],o=t[1];return b(b({},e),((r={})[n[i.toLowerCase()]]=o,r))},{})}function k(e){return n=this,t=arguments,i=function(e,n){var t,r,i,o;return void 0===n&&(n="error"),function(e,n){var t,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(u){return function(s){if(t)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(o=0)),o;)try{if(t=1,r&&(i=2&s[0]?r.return:s[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;switch(r=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(6===s[0]&&o.label<i[1]){o.label=i[1],i=s;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(s);break}i[2]&&o.ops.pop(),o.trys.pop();continue}s=n.call(e,o)}catch(e){s=[6,e],r=0}finally{t=i=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,u])}}}(this,function(a){return t=x(),r="".concat(t,"api/vacayou/log"),i={message:e,page:window.location.href},o={"content-type":"application/json"},[2,fetch(r,{method:"POST",body:JSON.stringify({type:n,payload:i}),headers:o}).then(function(e){return e.json()}).catch(function(e){console.log("Tripfusion: failed to log message: ".concat(e))})]})},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{u(i.next(e))}catch(e){o(e)}}function s(e){try{u(i.throw(e))}catch(e){o(e)}}function u(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r(function(e){e(t)})).then(a,s)}u((i=i.apply(n,t||[])).next())});var n,t,r,i}function x(){if("self"===I.getState().embedBase)return"".concat(window.location.origin,"/");switch(I.getState().env){case"local":return"".concat(window.location.origin,"/");case"develop":return"https://develop.checkout.tripfusion.com/";case"staging":return"https://staging.checkout.tripfusion.com/";default:return"https://checkout.tripfusion.com/"}}function S(){try{var n=document.getElementById(e),t=document.getElementById(i);n&&t&&(document.body.style.overflow="",n.setAttribute("class","slide-out"),t.style.background="rgba(0, 0, 0, 0)",n.style.display="none",t.style.zIndex="".concat(-1e11))}catch(e){k("Widget: Error closing widget: ".concat(e)),console.error("Tripfusion: Error closing widget: ",e)}}function O(e){var t,r=e.client,i=e.propertyId,a=e.propertySlug,s=e.landingPagePath,u=e.landingPageId,c=e.mode,d=e.bookingId,p=e.env,f=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(t[r[i]]=e[r[i]])}return t}(e,["client","propertyId","propertySlug","landingPagePath","landingPageId","mode","bookingId","env"]);try{null===(t=document.getElementById(o))||void 0===t||t.remove();var A=document.getElementById(n);if(A){var g=["checkIn","checkOut","adults","children","offerId"],h=document.createElement("iframe"),m=x(),y=null!=u?u:s,v=null!=a?a:i,I=y?"".concat(m).concat(r,"/offers/").concat(y):"".concat(m).concat(r,"/").concat(v);c===l&&d&&(I+="/booking/".concat(d,"/append"));var b=Object.entries(f).filter(function(e){var n=e[0],t=e[1];return g.includes(n)&&!!t}).map(function(e){var n=e[0],t=e[1];return"".concat(n,"=").concat(t).toLowerCase()}).join("&"),C=[b,"develop"===p||"staging"===p?"x-vercel-protection-bypass=".concat(""):""].filter(Boolean).join("&");C&&(I+="?".concat(C)),h.setAttribute("allow","payment"),h.setAttribute("src",I),h.id=o,A.appendChild(h)}}catch(e){k("Widget: Error injecting iframe: ".concat(e)),console.error("Tripfusion: Error injecting iframe: ",e)}}function P(){document.body.style.overflow="hidden"}var E=t(353),$=t.n(E);const D=e=>Symbol.iterator in e,M=e=>"entries"in e,j=(e,n)=>{const t=e instanceof Map?e:new Map(e.entries()),r=n instanceof Map?n:new Map(n.entries());if(t.size!==r.size)return!1;for(const[e,n]of t)if(!r.has(e)||!Object.is(n,r.get(e)))return!1;return!0};var Y=t(72),_=t.n(Y),z=t(825),W=t.n(z),T=t(659),R=t.n(T),L=t(56),Q=t.n(L),H=t(540),N=t.n(H),U=t(113),X=t.n(U),Z=t(365),J={};J.styleTagTransform=X(),J.setAttributes=Q(),J.insert=R().bind(null,"head"),J.domAPI=W(),J.insertStyleElement=N(),_()(Z.A,J),Z.A&&Z.A.locals&&Z.A.locals;var q=function(){return q=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},q.apply(this,arguments)};function K(e){try{var n=B().env,t=I.getState(),r=q(q(q({},t),e),{env:(null==e?void 0:e.env)||t.env||n}),i=r.propertyId||r.propertySlug||r.landingPagePath||r.landingPageId;if(!r.client||!i)throw new Error("Client and one of {propertyId, propertySlug, landingPagePath, landingPageId} are required to book");var o=m.getState(),a=o.hideResumePanel,s=o.reset;a(),u=I.getState(),l=r,!!Object.is(u,l)||"object"==typeof u&&null!==u&&"object"==typeof l&&null!==l&&Object.getPrototypeOf(u)===Object.getPrototypeOf(l)&&(D(u)&&D(l)?M(u)&&M(l)?j(u,l):((e,n)=>{const t=e[Symbol.iterator](),r=n[Symbol.iterator]();let i=t.next(),o=r.next();for(;!i.done&&!o.done;){if(!Object.is(i.value,o.value))return!1;i=t.next(),o=r.next()}return!!i.done&&!!o.done})(u,l):j({entries:()=>Object.entries(u)},{entries:()=>Object.entries(l)}))||(s(),I.getState().replace(r)),m.getState().showWidget()}catch(e){k("Widget: failed to book: ".concat(e)),console.error("Tripfusion: failed to book: ".concat(e))}var u,l}I.subscribe(function(e){e.client&&e.propertyId&&O(e)}),m.subscribe(function(n){var t,u,l,c;if(n.isResumePanelVisible){var d=n.primaryGuestName?"".concat(n.primaryGuestName[0].toUpperCase()).concat(n.primaryGuestName.substring(1),", don't let that reservation slip away!"):"Don't let that reservation slip away!",p="",f=[];if(n.isBookingCompleted&&(d="Booking completed!"),n.checkInDate&&n.checkOutDate&&f.push("".concat($()(n.checkInDate).format("MMM DD")," - ").concat($()(n.checkOutDate).format("MMM DD"))),n.cart.total){if((null===(t=n.cart)||void 0===t?void 0:t.rooms)&&n.cart.rooms.length>0){var A=n.cart.rooms.length,g=n.cart.rooms.reduce(function(e,n){return e+n.passengers.adults+n.passengers.children.length},0);p="".concat(A," room").concat(A>1?"s":""," for "),f.push("".concat(g," guest").concat(g>1?"s":""))}p+=null!==(u=n.cart.total)?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}).format(u/100):""}!function(e){var n=e.headerText,t=e.subheaderText,r=e.footerText;document.getElementById(a).innerHTML='\n <div>\n <div class="tripfusion-resume-panel__header">\n <span>'.concat(n,'</span>\n <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 330 330" xml:space="preserve">\n <path id="XMLID_222_" d="M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z"/>\n </svg>\n </div>\n ').concat(t&&'<span class="tripfusion-resume-panel__subheader">'.concat(t,"</span>"),"\n </div>\n ").concat(r&&'<span class="tripfusion-resume-panel__footer">'.concat(r,"</span>"),"\n ")}({headerText:d,subheaderText:p,footerText:f.join(", ")})}n.backgroundColor&&function(e){var n=e.backgroundColor,t=document.getElementById(a),i=document.getElementById(r);t&&(t.style.backgroundColor=n),i&&(i.style.backgroundColor=n)}({backgroundColor:n.backgroundColor}),n.isReady?(n.isOpen?function(){try{var n=document.getElementById(e),t=document.getElementById(i);Object.assign(t.style,{zIndex:0xe8d4a5100b,height:"100%",background:"rgba(0, 0, 0, .5)"}),P(),n.style.display="block",n.setAttribute("class","slide-in"),setTimeout(function(){var e=document.getElementById(o);null==e||e.focus()},250)}catch(e){k("Widget: Error openning widget: ".concat(e)),console.error("Tripfusion: Error openning widget: ",e)}}():S(),n.isResumePanelVisible?((c=document.getElementById(a)).setAttribute("class","tripfusion-resume-panel--slide-in"),c.focus()):document.getElementById(a).setAttribute("class","tripfusion-resume-panel--slide-out"),null==(l=document.getElementById(s))||l.remove()):function(){var e=document.getElementById(s);if(!e){var n=document.getElementById(i);n&&((e=document.createElement("div")).id=s,e.innerHTML="Loading <span>TripFusion</span>",n.appendChild(e),n.style.zIndex="".concat(1e11),n.style.height="100%",n.style.background="rgba(0, 0, 0, .74)",P())}}()}),function(){try{var t=setInterval(function(){if("complete"===document.readyState){!function(){try{var t=m.getState(),o=t.showWidget,s=t.hideWidget,u=t.showResumePanel,l=t.hideResumePanel,c=document.createElement("div"),d=document.createElement("div"),p=document.createElement("div"),f=document.createElement("div"),A=document.createElement("span"),g=document.createElement("button"),h=document.createElement("div");h.id=a,null==h||h.addEventListener("click",function(){o(),l()}),c.id=e,c.style.display="none",d.id=i,c.addEventListener("click",function(e){this===e.target&&(s(),u())}),p.id=n,f.id=r,g.id="tripfusion-widget-close-button",g.addEventListener("click",function(){s(),u()}),A.id="tripfusion-widget-header-title",A.innerHTML="Booking",d.appendChild(c),c.appendChild(p),p.appendChild(f),f.appendChild(A),f.appendChild(g),document.body.appendChild(d),document.body.appendChild(h)}catch(e){k("Widget: Error preparing DOM: ".concat(e)),console.error("Tripfusion: Error preparing DOM: ",e)}}();var o=B(),s=o.client,c=o.propertyId,d=o.propertySlug,p=o.landingPagePath,f=o.landingPageId,A=o.env,g=o.embedKey,h=o.embedBase,y=I.getState(),v=A||y.env,b=y.propertyId||y.propertySlug||y.landingPagePath||y.landingPageId;y.client&&b?(I.getState().replace(q(q({},y),{env:v,embedKey:g,embedBase:h})),O(I.getState())):I.getState().replace(q(q({},y),{client:s,propertyId:c,propertySlug:d,landingPagePath:p,landingPageId:f,env:v,embedKey:g,embedBase:h})),function(){function e(e){var n,t,r,i;try{var o=e.target,a=o.parentNode;"A"!==o.tagName&&"A"===(null==a?void 0:a.tagName)&&(o.href=null==a?void 0:a.href);var s=o.href||"";if(!s.includes("?"))return;var c=w(new URLSearchParams(s.substring(s.indexOf("?"))));if("true"===c.tripfusion){e.preventDefault();var d=B(),p=d.client,f=d.propertyId,A=d.propertySlug,g=d.landingPagePath,h=d.landingPageId,m=d.env;K({client:null!==(n=c.client)&&void 0!==n?n:p,propertyId:c.propertyId?+c.propertyId:f,propertySlug:null!==(t=c.propertySlug)&&void 0!==t?t:A,landingPagePath:null!==(r=c.landingPagePath)&&void 0!==r?r:g,landingPageId:c.landingPageId?+c.landingPageId:h,mode:c.mode===l?l:u,bookingId:(null==c?void 0:c.bookingId)&&(null==c?void 0:c.mode)===l?+c.bookingId:null,offerId:c.offerId?+c.offerId:void 0,checkIn:c.checkIn,checkOut:c.checkOut,adults:c.adults?+c.adults:void 0,children:c.children?c.children.split(",").map(function(e){return+e}):void 0,env:null!==(i=c.env)&&void 0!==i?i:m})}}catch(e){k("Widget: Error in link click handler: ".concat(e)),console.error("Tripfusion: Error in link click handler: ",e)}}document.querySelectorAll("a").forEach(function(n){n.addEventListener("click",e)})}(),clearInterval(t)}},100);!function(){function e(){setTimeout(function(){var e,n,t,r,i=w(new URLSearchParams(window.location.search)),o=I.getState(),a=o.propertyId||i.propertyId||o.propertySlug||i.propertySlug||o.landingPagePath||i.landingPagePath||o.landingPageId||i.landingPageId;"true"===i.tripfusion&&(o.client||i.client)&&a&&K({client:null!==(e=i.client)&&void 0!==e?e:o.client,propertyId:i.propertyId?+i.propertyId:o.propertyId,propertySlug:null!==(n=i.propertySlug)&&void 0!==n?n:o.propertySlug,landingPagePath:null!==(t=i.landingPagePath)&&void 0!==t?t:o.landingPagePath,landingPageId:i.landingPageId?+i.landingPageId:o.landingPageId,mode:i.mode===l?l:u,bookingId:(null==i?void 0:i.bookingId)&&(null==i?void 0:i.mode)===l?+i.bookingId:null,offerId:i.offerId?+i.offerId:void 0,checkIn:i.checkIn,checkOut:i.checkOut,adults:i.adults?+i.adults:void 0,children:i.children?i.children.split(",").map(function(e){return+e}):void 0,env:null!==(r=i.env)&&void 0!==r?r:o.env})},500)}"complete"===document.readyState?e():window.addEventListener("load",e)}(),Object.assign(window,{book:K,closeWidget:S}),window.onmessage=function(e){if(function(e){try{var n=new URL(e),t=n.host;return!("https:"!==n.protocol||!/^(develop\.|staging\.)?checkout\.tripfusion\.com$/.test(t))||"self"===I.getState().embedBase&&e===window.location.origin||!("local"!==I.getState().env||!/^(localhost|127\.0\.0\.1)(:\d+)?$/.test(t))}catch(e){return!1}}(e.origin)){var n=e.data;switch(n.type){case"tripfusion-embed-handshake-request":var t=document.getElementById(o);if(e.source!==(null==t?void 0:t.contentWindow))break;e.source.postMessage({type:"tripfusion-embed-handshake-response",key:I.getState().embedKey},e.origin);break;case"tripfusion-widget-ready":m.getState().setIsReady(!0);break;case"tripfusion-booking-completed":m.getState().setIsBookingCompleted(!0);break;case"tripfusion-set-client-theme":var r=(i=n.data).primary;r&&m.getState().setBackgroundColor(r);break;case"tripfusion-set-guest-name":var i=n.data;m.getState().setPrimaryGuestName(i.name);break;case"tripfusion-set-dates":(i=n.data).checkIn&&i.checkOut&&m.getState().setDates(i.checkIn,i.checkOut);break;case"tripfusion-set-cart":i=n.data,m.getState().setCart(i.cart)}}}}catch(e){k("Widget: failed to init Tripfusion JS SDK: ".concat(e)),console.error("Tripfusion: failed to init SDK: ".concat(e))}}()})()})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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bGVzLmNzcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL3J1bnRpbWUvbm9uY2UiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9zcmMvY29uc3QudHMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vbWlkZGxld2FyZS5tanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vdmFuaWxsYS5tanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9zcmMvc3RvcmUvd2lkZ2V0LnN0b3JlLnRzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL3N0b3JlL2dsb2JhbC5zdG9yZS50cyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy9kb20udHMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vdmFuaWxsYS9zaGFsbG93Lm1qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy9zdHlsZXMuY3NzPzQ0YjIiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvc2FnOGNlYi5jc3MpO1wiXSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYCN0cmlwZnVzaW9uLWxvYWRlciB7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIG1hcmdpbi1yaWdodDogLTUwJTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIGZvbnQtZmFtaWx5OiBmdXR1cmEtbHQtdzAxLWJvb2ssIGZ1dHVyYS1sdC13MDUtYm9vaywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cblxuI3RyaXBmdXNpb24tbG9hZGVyIHNwYW4ge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xufVxuXG4jdHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwge1xuICAgIG1heC13aWR0aDogMjUwcHg7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDAuNXJlbTtcbiAgICBwYWRkaW5nOiAxMnB4IDI0cHg7XG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgMHB4IDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICAgIHJpZ2h0OiAzMHB4O1xuICAgIHotaW5kZXg6IDEwMDAwMDAwMDAwMDtcbiAgICBib3R0b206IDQwcHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCk7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtZmFtaWx5OiBzd2VldC1zYW5zLXBybywgc2Fucy1zZXJpZjtcbn1cblxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMmVtO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9faGVhZGVyIHN2ZyB7XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xuICAgIGZpbGw6IHdoaXRlO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2hlYWRlciBzcGFuLFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19zdWJoZWFkZXIge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2Zvb3RlciB7XG4gICAgZm9udC1mYW1pbHk6IFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICBmb250LXdlaWdodDogNDAwO1xufVxuXG4jdHJpcGZ1c2lvbi13aWRnZXQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC41cyBlYXNlLW91dDtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRvcDogMHB4O1xuICAgIHJpZ2h0OiAwcHg7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldC1pbm5lci13cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1pbi13aWR0aDogMzIwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHJpZ2h0OiAwcHg7XG4gICAgYm90dG9tOiAwcHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGZvbnQtZmFtaWx5OiBcIlJvYm90b1wiLCBcIkhlbHZldGljYVwiLCBcIkFyaWFsXCIsIHNhbnMtc2VyaWY7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMDkzOGVtO1xufVxuXG4jdHJpcGZ1c2lvbi13aWRnZXQtaGVhZGVyIHtcbiAgICBoZWlnaHQ6IDYwcHg7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMWYxZjE7XG4gICAgcGFkZGluZzogMCAxNnB4IDAgMTZweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGNvbG9yOiB3aGl0ZTtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LWlmcmFtZSB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlcjogbm9uZTtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LWhlYWRlci10aXRsZSB7XG4gICAgZm9udC1mYW1pbHk6IHN3ZWV0LXNhbnMtcHJvLCBzYW5zLXNlcmlmO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldC1jbG9zZS1idXR0b24ge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHdpZHRoOiAyZW07XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgdGV4dC1pbmRlbnQ6IDEwMCU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICAgIG91dGxpbmU6IHNvbGlkIDAgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgfVxuXG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAyNSU7XG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMC4wNjI1ZW0pO1xuICAgICAgICB3aWR0aDogMC4xMjVlbTtcbiAgICAgICAgaGVpZ2h0OiA1MCU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMTI1ZW07XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgICAgYmFja2dyb3VuZDogY3VycmVudGNvbG9yO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgJjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XG4gICAgfVxufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXNsaWRlLWluIHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IDUwMG1zO1xuICAgIC1tb3otdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XG59XG5cbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tc2xpZGUtb3V0IHtcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IDUwMG1zO1xuICAgIC1tb3otdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDQwMHB4KSAhaW1wb3J0YW50O1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXJlc2l6ZS1pbiB7XG4gICAgd2lkdGg6IDQ2cHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDQ2cHggIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcbiAgICByaWdodDogMzBweCAhaW1wb3J0YW50O1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXJlc2l6ZS1pbjpob3ZlciB7XG4gICAgd2lkdGg6IDIxN3B4ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGxpbmVhcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tcmVzaXplLW91dCB7XG4gICAgd2lkdGg6IDQ2cHggIWltcG9ydGFudDtcbiAgICBoZWlnaHQ6IDQ2cHggIWltcG9ydGFudDtcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcbiAgICByaWdodDogLTEwMHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5zbGlkZS1pbiB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUtdXAgMC44cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS11cCAwLjhzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgei1pbmRleDogMTAwMDAwMDAwMDAwMDtcbn1cblxuLnNsaWRlLW91dCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIGFuaW1hdGlvbjogc2xpZGUtZG93biAwLjVzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLWRvd24gMC41cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xuICAgIHotaW5kZXg6IC0xMDAwMDAwMDAwMDAwO1xufVxuXG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzbGlkZS11cCB7XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gICAgMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7SUFDSSxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsU0FBUztJQUNULGlGQUFpRjtJQUNqRixnQ0FBZ0M7QUFDcEM7O0FBRUE7SUFDSSxpQkFBaUI7SUFDakIsaUJBQWlCO0FBQ3JCOztBQUVBO0lBQ0ksZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIsV0FBVztJQUNYLGtCQUFrQjtJQUNsQiwyRUFBMkU7SUFDM0UsV0FBVztJQUNYLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osWUFBWTtJQUNaLDRC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SUFFQTtRQUNJLG1DQUFtQztJQUN2QztBQUNKXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIkBpbXBvcnQgdXJsKFxcXCJodHRwczovL3VzZS50eXBla2l0Lm5ldC9zYWc4Y2ViLmNzc1xcXCIpO1xcblxcbiN0cmlwZnVzaW9uLWxvYWRlciB7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgbWFyZ2luLXJpZ2h0OiAtNTAlO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHRvcDogNTAlO1xcbiAgICBsZWZ0OiA1MCU7XFxuICAgIGZvbnQtZmFtaWx5OiBmdXR1cmEtbHQtdzAxLWJvb2ssIGZ1dHVyYS1sdC13MDUtYm9vaywgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XFxufVxcblxcbiN0cmlwZnVzaW9uLWxvYWRlciBzcGFuIHtcXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwge1xcbiAgICBtYXgtd2lkdGg6IDI1MHB4O1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgZ2FwOiAwLjVyZW07XFxuICAgIHBhZGRpbmc6IDEycHggMjRweDtcXG4gICAgYm94LXNoYWRvdzogMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjI1KSwgMHB4IDRweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcbiAgICByaWdodDogMzBweDtcXG4gICAgei1pbmRleDogMTAwMDAwMDAwMDAwO1xcbiAgICBib3R0b206IDQwcHg7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDQwMHB4KTtcXG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcXG4gICAgY29sb3I6IHdoaXRlO1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGZvbnQtZmFtaWx5OiBzd2VldC1zYW5zLXBybywgc2Fucy1zZXJpZjtcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19oZWFkZXIge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGdhcDogMmVtO1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2hlYWRlciBzdmcge1xcbiAgICB3aWR0aDogMThweDtcXG4gICAgaGVpZ2h0OiAxOHB4O1xcbiAgICBmaWxsOiB3aGl0ZTtcXG4gICAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9faGVhZGVyIHNwYW4sXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19zdWJoZWFkZXIge1xcbiAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICBsaW5lLWhlaWdodDogMS4yO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19mb290ZXIge1xcbiAgICBmb250LWZhbWlseTogUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgICBmb250LXNpemU6IDAuOHJlbTtcXG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0LXdyYXBwZXIge1xcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDApO1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIHRvcDogMDtcXG4gICAgcmlnaHQ6IDA7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuNXMgZWFzZS1vdXQ7XFxufVxcblxcbiN0cmlwZnVzaW9uLXdpZGdldCB7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgdG9wOiAwcHg7XFxuICAgIHJpZ2h0OiAwcHg7XFxufVxcblxcbiN0cmlwZnVzaW9uLXdpZGdldC1pbm5lci13cmFwcGVyIHtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICBtaW4td2lkdGg6IDMyMHB4O1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICByaWdodDogMHB4O1xcbiAgICBib3R0b206IDBweDtcXG4gICAgYmFja2dyb3VuZDogd2hpdGU7XFxuICAgIGJvcmRlci1yYWRpdXM6IDA7XFxuICAgIGJveC1zaGFkb3c6IG5vbmU7XFxuICAgIGZvbnQtZmFtaWx5OiBcXFwiUm9ib3RvXFxcIiwgXFxcIkhlbHZldGljYVxcXCIsIFxcXCJBcmlhbFxcXCIsIHNhbnMtc2VyaWY7XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNTtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDA5MzhlbTtcXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0LWhlYWRlciB7XFxuICAgIGhlaWdodDogNjBweDtcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMWYxZjE7XFxuICAgIHBhZGRpbmc6IDAgMTZweCAwIDE2cHg7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtaWZyYW1lIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBib3JkZXI6IG5vbmU7XFxufVxcblxcbiN0cmlwZnVzaW9uLXdpZGdldC1oZWFkZXItdGl0bGUge1xcbiAgICBmb250LWZhbWlseTogc3dlZXQtc2Fucy1wcm8sIHNhbnMtc2VyaWY7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XFxuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtY2xvc2UtYnV0dG9uIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIHdpZHRoOiAyZW07XFxuICAgIGhlaWdodDogMmVtO1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICBmb250OiBpbmhlcml0O1xcbiAgICB0ZXh0LWluZGVudDogMTAwJTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICAgIG91dGxpbmU6IHNvbGlkIDAgdHJhbnNwYXJlbnQ7XFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA0KTtcXG4gICAgfVxcblxcbiAgICAmOmJlZm9yZSxcXG4gICAgJjphZnRlciB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB0b3A6IDI1JTtcXG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMC4wNjI1ZW0pO1xcbiAgICAgICAgd2lkdGg6IDAuMTI1ZW07XFxuICAgICAgICBoZWlnaHQ6IDUwJTtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMTI1ZW07XFxuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Y29sb3I7XFxuICAgICAgICBjb2xvcjogd2hpdGU7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgfVxcblxcbiAgICAmOmFmdGVyIHtcXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICAgIH1cXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1zbGlkZS1pbiB7XFxuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogNTAwbXM7XFxuICAgIC1tb3otdHJhbnNpdGlvbjogNTAwbXM7XFxuICAgIHRyYW5zaXRpb246IDUwMG1zO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1zbGlkZS1vdXQge1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IDUwMG1zO1xcbiAgICAtbW96LXRyYW5zaXRpb246IDUwMG1zO1xcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDQwMHB4KSAhaW1wb3J0YW50O1xcbn1cXG5cXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXJlc2l6ZS1pbiB7XFxuICAgIHdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XFxuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgcmlnaHQ6IDMwcHggIWltcG9ydGFudDtcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1yZXNpemUtaW46aG92ZXIge1xcbiAgICB3aWR0aDogMjE3cHggIWltcG9ydGFudDtcXG4gICAgaGVpZ2h0OiA0NnB4ICFpbXBvcnRhbnQ7XFxuICAgIHRyYW5zaXRpb246IGFsbCAzMDBtcyBsaW5lYXI7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1yZXNpemUtb3V0IHtcXG4gICAgd2lkdGg6IDQ2cHggIWltcG9ydGFudDtcXG4gICAgaGVpZ2h0OiA0NnB4ICFpbXBvcnRhbnQ7XFxuICAgIHRyYW5zaXRpb246IDUwMG1zO1xcbiAgICByaWdodDogLTEwMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5zbGlkZS1pbiB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAgIGFuaW1hdGlvbjogc2xpZGUtdXAgMC44cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogc2xpZGUtdXAgMC44cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xcbiAgICB6LWluZGV4OiAxMDAwMDAwMDAwMDAwO1xcbn1cXG5cXG4uc2xpZGUtb3V0IHtcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgYW5pbWF0aW9uOiBzbGlkZS1kb3duIDAuNXMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLWRvd24gMC41cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xcbiAgICB6LWluZGV4OiAtMTAwMDAwMDAwMDAwMDtcXG59XFxuXFxuQGtleWZyYW1lcyBzbGlkZS11cCB7XFxuICAgIDEwMCUge1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcXG4gICAgfVxcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtdXAge1xcbiAgICAxMDAlIHtcXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcXG4gICAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xcbiAgICAwJSB7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xcbiAgICB9XFxuXFxuICAgIDEwMCUge1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbiAgICB9XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBzbGlkZS1kb3duIHtcXG4gICAgMCUge1xcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xcbiAgICB9XFxuXFxuICAgIDEwMCUge1xcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAgIH1cXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdO1xuXG4gIC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuICAgICAgY29udGVudCArPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuICAgICAgaWYgKG5lZWRMYXllcikge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9O1xuXG4gIC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRoaXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIGlkID0gdGhpc1trXVswXTtcbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICh2YXIgX2sgPSAwOyBfayA8IG1vZHVsZXMubGVuZ3RoOyBfaysrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19rXSk7XG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG1lZGlhKSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdXBwb3J0cykge1xuICAgICAgICBpZiAoIWl0ZW1bNF0pIHtcbiAgICAgICAgICBpdGVtWzRdID0gXCJcIi5jb25jYXQoc3VwcG9ydHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KGl0ZW1bNF0sIFwiKSB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVs0XSA9IHN1cHBvcnRzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZW0pIHtcbiAgdmFyIGNvbnRlbnQgPSBpdGVtWzFdO1xuICB2YXIgY3NzTWFwcGluZyA9IGl0ZW1bM107XG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRE9NLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRE9NW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXhCeUlkZW50aWZpZXIgPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM10sXG4gICAgICBzdXBwb3J0czogaXRlbVs0XSxcbiAgICAgIGxheWVyOiBpdGVtWzVdXG4gICAgfTtcbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWRlbnRpZmllcnMucHVzaChpZGVudGlmaWVyKTtcbiAgfVxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuICB2YXIgdXBkYXRlciA9IGZ1bmN0aW9uIHVwZGF0ZXIobmV3T2JqKSB7XG4gICAgaWYgKG5ld09iaikge1xuICAgICAgaWYgKG5ld09iai5jc3MgPT09IG9iai5jc3MgJiYgbmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiYgbmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcCAmJiBuZXdPYmouc3VwcG9ydHMgPT09IG9iai5zdXBwb3J0cyAmJiBuZXdPYmoubGF5ZXIgPT09IG9iai5sYXllcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhcGkudXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB1cGRhdGVyO1xufVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgbGlzdCA9IGxpc3QgfHwgW107XG4gIHZhciBsYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGUobmV3TGlzdCkge1xuICAgIG5ld0xpc3QgPSBuZXdMaXN0IHx8IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tpXTtcbiAgICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhdLnJlZmVyZW5jZXMtLTtcbiAgICB9XG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcbiAgICAgIHZhciBfaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihfaWRlbnRpZmllcik7XG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuICAgICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGFzdElkZW50aWZpZXJzID0gbmV3TGFzdElkZW50aWZpZXJzO1xuICB9O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIG1lbW8gPSB7fTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBnZXRUYXJnZXQodGFyZ2V0KSB7XG4gIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgdmFyIHN0eWxlVGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcbiAgICBpZiAod2luZG93LkhUTUxJRnJhbWVFbGVtZW50ICYmIHN0eWxlVGFyZ2V0IGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAvLyBkdWUgdG8gY3Jvc3Mtb3JpZ2luIHJlc3RyaWN0aW9uc1xuICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICB9XG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0QnlTZWxlY3RvcihpbnNlcnQsIHN0eWxlKSB7XG4gIHZhciB0YXJnZXQgPSBnZXRUYXJnZXQoaW5zZXJ0KTtcbiAgaWYgKCF0YXJnZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO1xuICB9XG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydEJ5U2VsZWN0b3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gIG9wdGlvbnMuc2V0QXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLmF0dHJpYnV0ZXMpO1xuICBvcHRpb25zLmluc2VydChlbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xuICByZXR1cm4gZWxlbWVudDtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0U3R5bGVFbGVtZW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcyhzdHlsZUVsZW1lbnQpIHtcbiAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSBcInVuZGVmaW5lZFwiID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHNldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlczsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gXCJcIjtcbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIkBzdXBwb3J0cyAoXCIuY29uY2F0KG9iai5zdXBwb3J0cywgXCIpIHtcIik7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG4gIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2Ygb2JqLmxheWVyICE9PSBcInVuZGVmaW5lZFwiO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwiQGxheWVyXCIuY29uY2F0KG9iai5sYXllci5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KG9iai5sYXllcikgOiBcIlwiLCBcIiB7XCIpO1xuICB9XG4gIGNzcyArPSBvYmouY3NzO1xuICBpZiAobmVlZExheWVyKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcbiAgaWYgKHNvdXJjZU1hcCAmJiB0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9XG5cbiAgLy8gRm9yIG9sZCBJRVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG4gIG9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG59XG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGVFbGVtZW50LnBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBkb21BUEkob3B0aW9ucykge1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge30sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfVxuICB2YXIgc3R5bGVFbGVtZW50ID0gb3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG4gIHJldHVybiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUob2JqKSB7XG4gICAgICBhcHBseShzdHlsZUVsZW1lbnQsIG9wdGlvbnMsIG9iaik7XG4gICAgfSxcbiAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgICAgIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpO1xuICAgIH1cbiAgfTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZG9tQVBJOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIHN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50KSB7XG4gIGlmIChzdHlsZUVsZW1lbnQuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZUVsZW1lbnQucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVUYWdUcmFuc2Zvcm07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiZXhwb3J0IGNvbnN0IFNES19TQ1JJUFRfSUQgPSBcInRyaXBmdXNpb24tc2RrXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX0lEID0gXCJ0cmlwZnVzaW9uLXdpZGdldFwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9JTk5FUl9XUkFQUEVSX0lEID0gXCJ0cmlwZnVzaW9uLXdpZGdldC1pbm5lci13cmFwcGVyXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX0hFQURFUl9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtaGVhZGVyXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX0NMT1NFX0JVVFRPTl9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtY2xvc2UtYnV0dG9uXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX0hFQURFUl9USVRMRV9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtaGVhZGVyLXRpdGxlXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX1dSQVBQRVJfSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LXdyYXBwZXJcIjtcbmV4cG9ydCBjb25zdCBXSURHRVRfSUZSQU1FX0lEID0gXCJ0cmlwZnVzaW9uLXdpZGdldC1pZnJhbWVcIjtcbmV4cG9ydCBjb25zdCBSRVNVTUVfUEFORUxfSUQgPSBcInRyaXBmdXNpb24tcmVzdW1lLXBhbmVsXCI7XG5leHBvcnQgY29uc3QgTE9BREVSX0lEID0gXCJ0cmlwZnVzaW9uLWxvYWRlclwiO1xuZXhwb3J0IGNvbnN0IEJPT0tJTkdfTU9ERSA9IHtcbiAgICBub3JtYWw6IFwibm9ybWFsXCIsXG4gICAgYXBwZW5kOiBcImFwcGVuZFwiLFxufSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBUFBfTUVTU0FHRV9UWVBFID0ge1xuICAgIFdJREdFVF9SRUFEWTogXCJ0cmlwZnVzaW9uLXdpZGdldC1yZWFkeVwiLFxuICAgIEJPT0tJTkdfQ09NUExFVEVEOiBcInRyaXBmdXNpb24tYm9va2luZy1jb21wbGV0ZWRcIixcbiAgICBTRVRfQ0xJRU5UX1RIRU1FOiBcInRyaXBmdXNpb24tc2V0LWNsaWVudC10aGVtZVwiLFxuICAgIFNFVF9QUklNQVJZX0dVRVNUX05BTUU6IFwidHJpcGZ1c2lvbi1zZXQtZ3Vlc3QtbmFtZVwiLFxuICAgIFNFVF9EQVRFUzogXCJ0cmlwZnVzaW9uLXNldC1kYXRlc1wiLFxuICAgIFNFVF9DQVJUOiBcInRyaXBmdXNpb24tc2V0LWNhcnRcIixcbiAgICBFTUJFRF9IQU5EU0hBS0VfUkVRVUVTVDogXCJ0cmlwZnVzaW9uLWVtYmVkLWhhbmRzaGFrZS1yZXF1ZXN0XCIsXG4gICAgRU1CRURfSEFORFNIQUtFX1JFU1BPTlNFOiBcInRyaXBmdXNpb24tZW1iZWQtaGFuZHNoYWtlLXJlc3BvbnNlXCIsXG59IGFzIGNvbnN0O1xuIiwiY29uc3QgcmVkdXhJbXBsID0gKHJlZHVjZXIsIGluaXRpYWwpID0+IChzZXQsIF9nZXQsIGFwaSkgPT4ge1xuICBhcGkuZGlzcGF0Y2ggPSAoYWN0aW9uKSA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSwgZmFsc2UsIGFjdGlvbik7XG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfTtcbiAgYXBpLmRpc3BhdGNoRnJvbURldnRvb2xzID0gdHJ1ZTtcbiAgcmV0dXJuIHsgZGlzcGF0Y2g6ICguLi5hcmdzKSA9PiBhcGkuZGlzcGF0Y2goLi4uYXJncyksIC4uLmluaXRpYWwgfTtcbn07XG5jb25zdCByZWR1eCA9IHJlZHV4SW1wbDtcblxuY29uc3QgdHJhY2tlZENvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmNvbnN0IGdldFRyYWNrZWRDb25uZWN0aW9uU3RhdGUgPSAobmFtZSkgPT4ge1xuICBjb25zdCBhcGkgPSB0cmFja2VkQ29ubmVjdGlvbnMuZ2V0KG5hbWUpO1xuICBpZiAoIWFwaSkgcmV0dXJuIHt9O1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGFwaS5zdG9yZXMpLm1hcCgoW2tleSwgYXBpMl0pID0+IFtrZXksIGFwaTIuZ2V0U3RhdGUoKV0pXG4gICk7XG59O1xuY29uc3QgZXh0cmFjdENvbm5lY3Rpb25JbmZvcm1hdGlvbiA9IChzdG9yZSwgZXh0ZW5zaW9uQ29ubmVjdG9yLCBvcHRpb25zKSA9PiB7XG4gIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFwidW50cmFja2VkXCIsXG4gICAgICBjb25uZWN0aW9uOiBleHRlbnNpb25Db25uZWN0b3IuY29ubmVjdChvcHRpb25zKVxuICAgIH07XG4gIH1cbiAgY29uc3QgZXhpc3RpbmdDb25uZWN0aW9uID0gdHJhY2tlZENvbm5lY3Rpb25zLmdldChvcHRpb25zLm5hbWUpO1xuICBpZiAoZXhpc3RpbmdDb25uZWN0aW9uKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogXCJ0cmFja2VkXCIsIHN0b3JlLCAuLi5leGlzdGluZ0Nvbm5lY3Rpb24gfTtcbiAgfVxuICBjb25zdCBuZXdDb25uZWN0aW9uID0ge1xuICAgIGNvbm5lY3Rpb246IGV4dGVuc2lvbkNvbm5lY3Rvci5jb25uZWN0KG9wdGlvbnMpLFxuICAgIHN0b3Jlczoge31cbiAgfTtcbiAgdHJhY2tlZENvbm5lY3Rpb25zLnNldChvcHRpb25zLm5hbWUsIG5ld0Nvbm5lY3Rpb24pO1xuICByZXR1cm4geyB0eXBlOiBcInRyYWNrZWRcIiwgc3RvcmUsIC4uLm5ld0Nvbm5lY3Rpb24gfTtcbn07XG5jb25zdCByZW1vdmVTdG9yZUZyb21UcmFja2VkQ29ubmVjdGlvbnMgPSAobmFtZSwgc3RvcmUpID0+IHtcbiAgaWYgKHN0b3JlID09PSB2b2lkIDApIHJldHVybjtcbiAgY29uc3QgY29ubmVjdGlvbkluZm8gPSB0cmFja2VkQ29ubmVjdGlvbnMuZ2V0KG5hbWUpO1xuICBpZiAoIWNvbm5lY3Rpb25JbmZvKSByZXR1cm47XG4gIGRlbGV0ZSBjb25uZWN0aW9uSW5mby5zdG9yZXNbc3RvcmVdO1xuICBpZiAoT2JqZWN0LmtleXMoY29ubmVjdGlvbkluZm8uc3RvcmVzKS5sZW5ndGggPT09IDApIHtcbiAgICB0cmFja2VkQ29ubmVjdGlvbnMuZGVsZXRlKG5hbWUpO1xuICB9XG59O1xuY29uc3QgZmluZENhbGxlck5hbWUgPSAoc3RhY2spID0+IHtcbiAgdmFyIF9hLCBfYjtcbiAgaWYgKCFzdGFjaykgcmV0dXJuIHZvaWQgMDtcbiAgY29uc3QgdHJhY2VMaW5lcyA9IHN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICBjb25zdCBhcGlTZXRTdGF0ZUxpbmVJbmRleCA9IHRyYWNlTGluZXMuZmluZEluZGV4KFxuICAgICh0cmFjZUxpbmUpID0+IHRyYWNlTGluZS5pbmNsdWRlcyhcImFwaS5zZXRTdGF0ZVwiKVxuICApO1xuICBpZiAoYXBpU2V0U3RhdGVMaW5lSW5kZXggPCAwKSByZXR1cm4gdm9pZCAwO1xuICBjb25zdCBjYWxsZXJMaW5lID0gKChfYSA9IHRyYWNlTGluZXNbYXBpU2V0U3RhdGVMaW5lSW5kZXggKyAxXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnRyaW0oKSkgfHwgXCJcIjtcbiAgcmV0dXJuIChfYiA9IC8uKyAoLispIC4rLy5leGVjKGNhbGxlckxpbmUpKSA9PSBudWxsID8gdm9pZCAwIDogX2JbMV07XG59O1xuY29uc3QgZGV2dG9vbHNJbXBsID0gKGZuLCBkZXZ0b29sc09wdGlvbnMgPSB7fSkgPT4gKHNldCwgZ2V0LCBhcGkpID0+IHtcbiAgY29uc3QgeyBlbmFibGVkLCBhbm9ueW1vdXNBY3Rpb25UeXBlLCBzdG9yZSwgLi4ub3B0aW9ucyB9ID0gZGV2dG9vbHNPcHRpb25zO1xuICBsZXQgZXh0ZW5zaW9uQ29ubmVjdG9yO1xuICB0cnkge1xuICAgIGV4dGVuc2lvbkNvbm5lY3RvciA9IChlbmFibGVkICE9IG51bGwgPyBlbmFibGVkIDogKGltcG9ydC5tZXRhLmVudiA/IGltcG9ydC5tZXRhLmVudi5NT0RFIDogdm9pZCAwKSAhPT0gXCJwcm9kdWN0aW9uXCIpICYmIHdpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fO1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbiAgaWYgKCFleHRlbnNpb25Db25uZWN0b3IpIHtcbiAgICByZXR1cm4gZm4oc2V0LCBnZXQsIGFwaSk7XG4gIH1cbiAgY29uc3QgeyBjb25uZWN0aW9uLCAuLi5jb25uZWN0aW9uSW5mb3JtYXRpb24gfSA9IGV4dHJhY3RDb25uZWN0aW9uSW5mb3JtYXRpb24oc3RvcmUsIGV4dGVuc2lvbkNvbm5lY3Rvciwgb3B0aW9ucyk7XG4gIGxldCBpc1JlY29yZGluZyA9IHRydWU7XG4gIGFwaS5zZXRTdGF0ZSA9ICgoc3RhdGUsIHJlcGxhY2UsIG5hbWVPckFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHIgPSBzZXQoc3RhdGUsIHJlcGxhY2UpO1xuICAgIGlmICghaXNSZWNvcmRpbmcpIHJldHVybiByO1xuICAgIGNvbnN0IGFjdGlvbiA9IG5hbWVPckFjdGlvbiA9PT0gdm9pZCAwID8ge1xuICAgICAgdHlwZTogYW5vbnltb3VzQWN0aW9uVHlwZSB8fCBmaW5kQ2FsbGVyTmFtZShuZXcgRXJyb3IoKS5zdGFjaykgfHwgXCJhbm9ueW1vdXNcIlxuICAgIH0gOiB0eXBlb2YgbmFtZU9yQWN0aW9uID09PSBcInN0cmluZ1wiID8geyB0eXBlOiBuYW1lT3JBY3Rpb24gfSA6IG5hbWVPckFjdGlvbjtcbiAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5zZW5kKGFjdGlvbiwgZ2V0KCkpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uc2VuZChcbiAgICAgIHtcbiAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICB0eXBlOiBgJHtzdG9yZX0vJHthY3Rpb24udHlwZX1gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5nZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSksXG4gICAgICAgIFtzdG9yZV06IGFwaS5nZXRTdGF0ZSgpXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcjtcbiAgfSk7XG4gIGFwaS5kZXZ0b29scyA9IHtcbiAgICBjbGVhbnVwOiAoKSA9PiB7XG4gICAgICBpZiAoY29ubmVjdGlvbiAmJiB0eXBlb2YgY29ubmVjdGlvbi51bnN1YnNjcmliZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHJlbW92ZVN0b3JlRnJvbVRyYWNrZWRDb25uZWN0aW9ucyhvcHRpb25zLm5hbWUsIHN0b3JlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldFN0YXRlRnJvbURldnRvb2xzID0gKC4uLmEpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbElzUmVjb3JkaW5nID0gaXNSZWNvcmRpbmc7XG4gICAgaXNSZWNvcmRpbmcgPSBmYWxzZTtcbiAgICBzZXQoLi4uYSk7XG4gICAgaXNSZWNvcmRpbmcgPSBvcmlnaW5hbElzUmVjb3JkaW5nO1xuICB9O1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSBmbihhcGkuc2V0U3RhdGUsIGdldCwgYXBpKTtcbiAgaWYgKGNvbm5lY3Rpb25JbmZvcm1hdGlvbi50eXBlID09PSBcInVudHJhY2tlZFwiKSB7XG4gICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5pbml0KGluaXRpYWxTdGF0ZSk7XG4gIH0gZWxzZSB7XG4gICAgY29ubmVjdGlvbkluZm9ybWF0aW9uLnN0b3Jlc1tjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmVdID0gYXBpO1xuICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChcbiAgICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY29ubmVjdGlvbkluZm9ybWF0aW9uLnN0b3JlcykubWFwKChba2V5LCBzdG9yZTJdKSA9PiBbXG4gICAgICAgICAga2V5LFxuICAgICAgICAgIGtleSA9PT0gY29ubmVjdGlvbkluZm9ybWF0aW9uLnN0b3JlID8gaW5pdGlhbFN0YXRlIDogc3RvcmUyLmdldFN0YXRlKClcbiAgICAgICAgXSlcbiAgICAgIClcbiAgICApO1xuICB9XG4gIGlmIChhcGkuZGlzcGF0Y2hGcm9tRGV2dG9vbHMgJiYgdHlwZW9mIGFwaS5kaXNwYXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbGV0IGRpZFdhcm5BYm91dFJlc2VydmVkQWN0aW9uVHlwZSA9IGZhbHNlO1xuICAgIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSBhcGkuZGlzcGF0Y2g7XG4gICAgYXBpLmRpc3BhdGNoID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgIGlmICgoaW1wb3J0Lm1ldGEuZW52ID8gaW1wb3J0Lm1ldGEuZW52Lk1PREUgOiB2b2lkIDApICE9PSBcInByb2R1Y3Rpb25cIiAmJiBhcmdzWzBdLnR5cGUgPT09IFwiX19zZXRTdGF0ZVwiICYmICFkaWRXYXJuQWJvdXRSZXNlcnZlZEFjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdbenVzdGFuZCBkZXZ0b29scyBtaWRkbGV3YXJlXSBcIl9fc2V0U3RhdGVcIiBhY3Rpb24gdHlwZSBpcyByZXNlcnZlZCB0byBzZXQgc3RhdGUgZnJvbSB0aGUgZGV2dG9vbHMuIEF2b2lkIHVzaW5nIGl0LidcbiAgICAgICAgKTtcbiAgICAgICAgZGlkV2FybkFib3V0UmVzZXJ2ZWRBY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsRGlzcGF0Y2goLi4uYXJncyk7XG4gICAgfTtcbiAgfVxuICBjb25uZWN0aW9uLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSBcIkFDVElPTlwiOlxuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UucGF5bG9hZCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlt6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIFVuc3VwcG9ydGVkIGFjdGlvbiBmb3JtYXRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUpzb25UaGVuKFxuICAgICAgICAgIG1lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IFwiX19zZXRTdGF0ZVwiKSB7XG4gICAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoYWN0aW9uLnN0YXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGFjdGlvbi5zdGF0ZSkubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgW3p1c3RhbmQgZGV2dG9vbHMgbWlkZGxld2FyZV0gVW5zdXBwb3J0ZWQgX19zZXRTdGF0ZSBhY3Rpb24gZm9ybWF0LlxuICAgICAgICAgICAgICAgICAgICBXaGVuIHVzaW5nICdzdG9yZScgb3B0aW9uIGluIGRldnRvb2xzKCksIHRoZSAnc3RhdGUnIHNob3VsZCBoYXZlIG9ubHkgb25lIGtleSwgd2hpY2ggaXMgYSB2YWx1ZSBvZiAnc3RvcmUnIHRoYXQgd2FzIHBhc3NlZCBpbiBkZXZ0b29scygpLFxuICAgICAgICAgICAgICAgICAgICBhbmQgdmFsdWUgb2YgdGhpcyBvbmx5IGtleSBzaG91bGQgYmUgYSBzdGF0ZSBvYmplY3QuIEV4YW1wbGU6IHsgXCJ0eXBlXCI6IFwiX19zZXRTdGF0ZVwiLCBcInN0YXRlXCI6IHsgXCJhYmMxMjNTdG9yZVwiOiB7IFwiZm9vXCI6IFwiYmFyXCIgfSB9IH1cbiAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc3RhdGVGcm9tRGV2dG9vbHMgPSBhY3Rpb24uc3RhdGVbc3RvcmVdO1xuICAgICAgICAgICAgICBpZiAoc3RhdGVGcm9tRGV2dG9vbHMgPT09IHZvaWQgMCB8fCBzdGF0ZUZyb21EZXZ0b29scyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoYXBpLmdldFN0YXRlKCkpICE9PSBKU09OLnN0cmluZ2lmeShzdGF0ZUZyb21EZXZ0b29scykpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZUZyb21EZXZ0b29scyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhcGkuZGlzcGF0Y2hGcm9tRGV2dG9vbHMpIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXBpLmRpc3BhdGNoICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybjtcbiAgICAgICAgICAgIGFwaS5kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIGNhc2UgXCJESVNQQVRDSFwiOlxuICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UucGF5bG9hZC50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcIlJFU0VUXCI6XG4gICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5pbml0KGdldFRyYWNrZWRDb25uZWN0aW9uU3RhdGUob3B0aW9ucy5uYW1lKSk7XG4gICAgICAgICAgY2FzZSBcIkNPTU1JVFwiOlxuICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5pbml0KGFwaS5nZXRTdGF0ZSgpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSkpO1xuICAgICAgICAgIGNhc2UgXCJST0xMQkFDS1wiOlxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSnNvblRoZW4obWVzc2FnZS5zdGF0ZSwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlW3N0b3JlXSk7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgY2FzZSBcIkpVTVBfVE9fU1RBVEVcIjpcbiAgICAgICAgICBjYXNlIFwiSlVNUF9UT19BQ1RJT05cIjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUpzb25UaGVuKG1lc3NhZ2Uuc3RhdGUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGFwaS5nZXRTdGF0ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGVbc3RvcmVdKSkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlW3N0b3JlXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhc2UgXCJJTVBPUlRfU1RBVEVcIjoge1xuICAgICAgICAgICAgY29uc3QgeyBuZXh0TGlmdGVkU3RhdGUgfSA9IG1lc3NhZ2UucGF5bG9hZDtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RDb21wdXRlZFN0YXRlID0gKF9hID0gbmV4dExpZnRlZFN0YXRlLmNvbXB1dGVkU3RhdGVzLnNsaWNlKC0xKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnN0YXRlO1xuICAgICAgICAgICAgaWYgKCFsYXN0Q29tcHV0ZWRTdGF0ZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMobGFzdENvbXB1dGVkU3RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMobGFzdENvbXB1dGVkU3RhdGVbc3RvcmVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uc2VuZChcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgLy8gRklYTUUgbm8tYW55XG4gICAgICAgICAgICAgIG5leHRMaWZ0ZWRTdGF0ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIlBBVVNFX1JFQ09SRElOR1wiOlxuICAgICAgICAgICAgcmV0dXJuIGlzUmVjb3JkaW5nID0gIWlzUmVjb3JkaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW5pdGlhbFN0YXRlO1xufTtcbmNvbnN0IGRldnRvb2xzID0gZGV2dG9vbHNJbXBsO1xuY29uc3QgcGFyc2VKc29uVGhlbiA9IChzdHJpbmdpZmllZCwgZm4pID0+IHtcbiAgbGV0IHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cmluZ2lmaWVkKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBcIlt6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIENvdWxkIG5vdCBwYXJzZSB0aGUgcmVjZWl2ZWQganNvblwiLFxuICAgICAgZVxuICAgICk7XG4gIH1cbiAgaWYgKHBhcnNlZCAhPT0gdm9pZCAwKSBmbihwYXJzZWQpO1xufTtcblxuY29uc3Qgc3Vic2NyaWJlV2l0aFNlbGVjdG9ySW1wbCA9IChmbikgPT4gKHNldCwgZ2V0LCBhcGkpID0+IHtcbiAgY29uc3Qgb3JpZ1N1YnNjcmliZSA9IGFwaS5zdWJzY3JpYmU7XG4gIGFwaS5zdWJzY3JpYmUgPSAoKHNlbGVjdG9yLCBvcHRMaXN0ZW5lciwgb3B0aW9ucykgPT4ge1xuICAgIGxldCBsaXN0ZW5lciA9IHNlbGVjdG9yO1xuICAgIGlmIChvcHRMaXN0ZW5lcikge1xuICAgICAgY29uc3QgZXF1YWxpdHlGbiA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmVxdWFsaXR5Rm4pIHx8IE9iamVjdC5pcztcbiAgICAgIGxldCBjdXJyZW50U2xpY2UgPSBzZWxlY3RvcihhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICBsaXN0ZW5lciA9IChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0U2xpY2UgPSBzZWxlY3RvcihzdGF0ZSk7XG4gICAgICAgIGlmICghZXF1YWxpdHlGbihjdXJyZW50U2xpY2UsIG5leHRTbGljZSkpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1NsaWNlID0gY3VycmVudFNsaWNlO1xuICAgICAgICAgIG9wdExpc3RlbmVyKGN1cnJlbnRTbGljZSA9IG5leHRTbGljZSwgcHJldmlvdXNTbGljZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5maXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgb3B0TGlzdGVuZXIoY3VycmVudFNsaWNlLCBjdXJyZW50U2xpY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JpZ1N1YnNjcmliZShsaXN0ZW5lcik7XG4gIH0pO1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSBmbihzZXQsIGdldCwgYXBpKTtcbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5jb25zdCBzdWJzY3JpYmVXaXRoU2VsZWN0b3IgPSBzdWJzY3JpYmVXaXRoU2VsZWN0b3JJbXBsO1xuXG5mdW5jdGlvbiBjb21iaW5lKGluaXRpYWxTdGF0ZSwgY3JlYXRlKSB7XG4gIHJldHVybiAoLi4uYXJncykgPT4gT2JqZWN0LmFzc2lnbih7fSwgaW5pdGlhbFN0YXRlLCBjcmVhdGUoLi4uYXJncykpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVKU09OU3RvcmFnZShnZXRTdG9yYWdlLCBvcHRpb25zKSB7XG4gIGxldCBzdG9yYWdlO1xuICB0cnkge1xuICAgIHN0b3JhZ2UgPSBnZXRTdG9yYWdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcGVyc2lzdFN0b3JhZ2UgPSB7XG4gICAgZ2V0SXRlbTogKG5hbWUpID0+IHtcbiAgICAgIHZhciBfYTtcbiAgICAgIGNvbnN0IHBhcnNlID0gKHN0cjIpID0+IHtcbiAgICAgICAgaWYgKHN0cjIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIyLCBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJldml2ZXIpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHN0ciA9IChfYSA9IHN0b3JhZ2UuZ2V0SXRlbShuYW1lKSkgIT0gbnVsbCA/IF9hIDogbnVsbDtcbiAgICAgIGlmIChzdHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBzdHIudGhlbihwYXJzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2Uoc3RyKTtcbiAgICB9LFxuICAgIHNldEl0ZW06IChuYW1lLCBuZXdWYWx1ZSkgPT4gc3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlLCBvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLnJlcGxhY2VyKSksXG4gICAgcmVtb3ZlSXRlbTogKG5hbWUpID0+IHN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKVxuICB9O1xuICByZXR1cm4gcGVyc2lzdFN0b3JhZ2U7XG59XG5jb25zdCB0b1RoZW5hYmxlID0gKGZuKSA9PiAoaW5wdXQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBmbihpbnB1dCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0aGVuKG9uRnVsZmlsbGVkKSB7XG4gICAgICAgIHJldHVybiB0b1RoZW5hYmxlKG9uRnVsZmlsbGVkKShyZXN1bHQpO1xuICAgICAgfSxcbiAgICAgIGNhdGNoKF9vblJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGhlbihfb25GdWxmaWxsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9LFxuICAgICAgY2F0Y2gob25SZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdG9UaGVuYWJsZShvblJlamVjdGVkKShlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59O1xuY29uc3QgcGVyc2lzdEltcGwgPSAoY29uZmlnLCBiYXNlT3B0aW9ucykgPT4gKHNldCwgZ2V0LCBhcGkpID0+IHtcbiAgbGV0IG9wdGlvbnMgPSB7XG4gICAgc3RvcmFnZTogY3JlYXRlSlNPTlN0b3JhZ2UoKCkgPT4gbG9jYWxTdG9yYWdlKSxcbiAgICBwYXJ0aWFsaXplOiAoc3RhdGUpID0+IHN0YXRlLFxuICAgIHZlcnNpb246IDAsXG4gICAgbWVyZ2U6IChwZXJzaXN0ZWRTdGF0ZSwgY3VycmVudFN0YXRlKSA9PiAoe1xuICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgLi4ucGVyc2lzdGVkU3RhdGVcbiAgICB9KSxcbiAgICAuLi5iYXNlT3B0aW9uc1xuICB9O1xuICBsZXQgaGFzSHlkcmF0ZWQgPSBmYWxzZTtcbiAgY29uc3QgaHlkcmF0aW9uTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3QgZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgbGV0IHN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2U7XG4gIGlmICghc3RvcmFnZSkge1xuICAgIHJldHVybiBjb25maWcoXG4gICAgICAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFt6dXN0YW5kIHBlcnNpc3QgbWlkZGxld2FyZV0gVW5hYmxlIHRvIHVwZGF0ZSBpdGVtICcke29wdGlvbnMubmFtZX0nLCB0aGUgZ2l2ZW4gc3RvcmFnZSBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUuYFxuICAgICAgICApO1xuICAgICAgICBzZXQoLi4uYXJncyk7XG4gICAgICB9LFxuICAgICAgZ2V0LFxuICAgICAgYXBpXG4gICAgKTtcbiAgfVxuICBjb25zdCBzZXRJdGVtID0gKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gb3B0aW9ucy5wYXJ0aWFsaXplKHsgLi4uZ2V0KCkgfSk7XG4gICAgcmV0dXJuIHN0b3JhZ2Uuc2V0SXRlbShvcHRpb25zLm5hbWUsIHtcbiAgICAgIHN0YXRlLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IHNhdmVkU2V0U3RhdGUgPSBhcGkuc2V0U3RhdGU7XG4gIGFwaS5zZXRTdGF0ZSA9IChzdGF0ZSwgcmVwbGFjZSkgPT4ge1xuICAgIHNhdmVkU2V0U3RhdGUoc3RhdGUsIHJlcGxhY2UpO1xuICAgIHJldHVybiBzZXRJdGVtKCk7XG4gIH07XG4gIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNvbmZpZyhcbiAgICAoLi4uYXJncykgPT4ge1xuICAgICAgc2V0KC4uLmFyZ3MpO1xuICAgICAgcmV0dXJuIHNldEl0ZW0oKTtcbiAgICB9LFxuICAgIGdldCxcbiAgICBhcGlcbiAgKTtcbiAgYXBpLmdldEluaXRpYWxTdGF0ZSA9ICgpID0+IGNvbmZpZ1Jlc3VsdDtcbiAgbGV0IHN0YXRlRnJvbVN0b3JhZ2U7XG4gIGNvbnN0IGh5ZHJhdGUgPSAoKSA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBpZiAoIXN0b3JhZ2UpIHJldHVybjtcbiAgICBoYXNIeWRyYXRlZCA9IGZhbHNlO1xuICAgIGh5ZHJhdGlvbkxpc3RlbmVycy5mb3JFYWNoKChjYikgPT4ge1xuICAgICAgdmFyIF9hMjtcbiAgICAgIHJldHVybiBjYigoX2EyID0gZ2V0KCkpICE9IG51bGwgPyBfYTIgOiBjb25maWdSZXN1bHQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrID0gKChfYiA9IG9wdGlvbnMub25SZWh5ZHJhdGVTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogX2IuY2FsbChvcHRpb25zLCAoX2EgPSBnZXQoKSkgIT0gbnVsbCA/IF9hIDogY29uZmlnUmVzdWx0KSkgfHwgdm9pZCAwO1xuICAgIHJldHVybiB0b1RoZW5hYmxlKHN0b3JhZ2UuZ2V0SXRlbS5iaW5kKHN0b3JhZ2UpKShvcHRpb25zLm5hbWUpLnRoZW4oKGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZSkgPT4ge1xuICAgICAgaWYgKGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS52ZXJzaW9uID09PSBcIm51bWJlclwiICYmIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS52ZXJzaW9uICE9PSBvcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5taWdyYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBtaWdyYXRpb24gPSBvcHRpb25zLm1pZ3JhdGUoXG4gICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS5zdGF0ZSxcbiAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnZlcnNpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobWlncmF0aW9uIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICByZXR1cm4gbWlncmF0aW9uLnRoZW4oKHJlc3VsdCkgPT4gW3RydWUsIHJlc3VsdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBtaWdyYXRpb25dO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYFN0YXRlIGxvYWRlZCBmcm9tIHN0b3JhZ2UgY291bGRuJ3QgYmUgbWlncmF0ZWQgc2luY2Ugbm8gbWlncmF0ZSBmdW5jdGlvbiB3YXMgcHJvdmlkZWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW2ZhbHNlLCBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUuc3RhdGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW2ZhbHNlLCB2b2lkIDBdO1xuICAgIH0pLnRoZW4oKG1pZ3JhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgdmFyIF9hMjtcbiAgICAgIGNvbnN0IFttaWdyYXRlZCwgbWlncmF0ZWRTdGF0ZV0gPSBtaWdyYXRpb25SZXN1bHQ7XG4gICAgICBzdGF0ZUZyb21TdG9yYWdlID0gb3B0aW9ucy5tZXJnZShcbiAgICAgICAgbWlncmF0ZWRTdGF0ZSxcbiAgICAgICAgKF9hMiA9IGdldCgpKSAhPSBudWxsID8gX2EyIDogY29uZmlnUmVzdWx0XG4gICAgICApO1xuICAgICAgc2V0KHN0YXRlRnJvbVN0b3JhZ2UsIHRydWUpO1xuICAgICAgaWYgKG1pZ3JhdGVkKSB7XG4gICAgICAgIHJldHVybiBzZXRJdGVtKCk7XG4gICAgICB9XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9PSBudWxsID8gdm9pZCAwIDogcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2soc3RhdGVGcm9tU3RvcmFnZSwgdm9pZCAwKTtcbiAgICAgIHN0YXRlRnJvbVN0b3JhZ2UgPSBnZXQoKTtcbiAgICAgIGhhc0h5ZHJhdGVkID0gdHJ1ZTtcbiAgICAgIGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycy5mb3JFYWNoKChjYikgPT4gY2Ioc3RhdGVGcm9tU3RvcmFnZSkpO1xuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9PSBudWxsID8gdm9pZCAwIDogcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2sodm9pZCAwLCBlKTtcbiAgICB9KTtcbiAgfTtcbiAgYXBpLnBlcnNpc3QgPSB7XG4gICAgc2V0T3B0aW9uczogKG5ld09wdGlvbnMpID0+IHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC4uLm5ld09wdGlvbnNcbiAgICAgIH07XG4gICAgICBpZiAobmV3T3B0aW9ucy5zdG9yYWdlKSB7XG4gICAgICAgIHN0b3JhZ2UgPSBuZXdPcHRpb25zLnN0b3JhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhclN0b3JhZ2U6ICgpID0+IHtcbiAgICAgIHN0b3JhZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3JhZ2UucmVtb3ZlSXRlbShvcHRpb25zLm5hbWUpO1xuICAgIH0sXG4gICAgZ2V0T3B0aW9uczogKCkgPT4gb3B0aW9ucyxcbiAgICByZWh5ZHJhdGU6ICgpID0+IGh5ZHJhdGUoKSxcbiAgICBoYXNIeWRyYXRlZDogKCkgPT4gaGFzSHlkcmF0ZWQsXG4gICAgb25IeWRyYXRlOiAoY2IpID0+IHtcbiAgICAgIGh5ZHJhdGlvbkxpc3RlbmVycy5hZGQoY2IpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaHlkcmF0aW9uTGlzdGVuZXJzLmRlbGV0ZShjYik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgb25GaW5pc2hIeWRyYXRpb246IChjYikgPT4ge1xuICAgICAgZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzLmFkZChjYik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMuZGVsZXRlKGNiKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICBpZiAoIW9wdGlvbnMuc2tpcEh5ZHJhdGlvbikge1xuICAgIGh5ZHJhdGUoKTtcbiAgfVxuICByZXR1cm4gc3RhdGVGcm9tU3RvcmFnZSB8fCBjb25maWdSZXN1bHQ7XG59O1xuY29uc3QgcGVyc2lzdCA9IHBlcnNpc3RJbXBsO1xuXG5mdW5jdGlvbiBzc3JTYWZlKGNvbmZpZywgaXNTU1IgPSB0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gIHJldHVybiAoc2V0LCBnZXQsIGFwaSkgPT4ge1xuICAgIGlmICghaXNTU1IpIHtcbiAgICAgIHJldHVybiBjb25maWcoc2V0LCBnZXQsIGFwaSk7XG4gICAgfVxuICAgIGNvbnN0IHNzclNldCA9ICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzZXQgc3RhdGUgb2YgWnVzdGFuZCBzdG9yZSBpbiBTU1JcIik7XG4gICAgfTtcbiAgICBhcGkuc2V0U3RhdGUgPSBzc3JTZXQ7XG4gICAgcmV0dXJuIGNvbmZpZyhzc3JTZXQsIGdldCwgYXBpKTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgY29tYmluZSwgY3JlYXRlSlNPTlN0b3JhZ2UsIGRldnRvb2xzLCBwZXJzaXN0LCByZWR1eCwgc3Vic2NyaWJlV2l0aFNlbGVjdG9yLCBzc3JTYWZlIGFzIHVuc3RhYmxlX3NzclNhZmUgfTtcbiIsImNvbnN0IGNyZWF0ZVN0b3JlSW1wbCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBsZXQgc3RhdGU7XG4gIGNvbnN0IGxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGNvbnN0IHNldFN0YXRlID0gKHBhcnRpYWwsIHJlcGxhY2UpID0+IHtcbiAgICBjb25zdCBuZXh0U3RhdGUgPSB0eXBlb2YgcGFydGlhbCA9PT0gXCJmdW5jdGlvblwiID8gcGFydGlhbChzdGF0ZSkgOiBwYXJ0aWFsO1xuICAgIGlmICghT2JqZWN0LmlzKG5leHRTdGF0ZSwgc3RhdGUpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gc3RhdGU7XG4gICAgICBzdGF0ZSA9IChyZXBsYWNlICE9IG51bGwgPyByZXBsYWNlIDogdHlwZW9mIG5leHRTdGF0ZSAhPT0gXCJvYmplY3RcIiB8fCBuZXh0U3RhdGUgPT09IG51bGwpID8gbmV4dFN0YXRlIDogT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIG5leHRTdGF0ZSk7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKHN0YXRlLCBwcmV2aW91c1N0YXRlKSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBnZXRTdGF0ZSA9ICgpID0+IHN0YXRlO1xuICBjb25zdCBnZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBpbml0aWFsU3RhdGU7XG4gIGNvbnN0IHN1YnNjcmliZSA9IChsaXN0ZW5lcikgPT4ge1xuICAgIGxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICAgIHJldHVybiAoKSA9PiBsaXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcbiAgfTtcbiAgY29uc3QgYXBpID0geyBzZXRTdGF0ZSwgZ2V0U3RhdGUsIGdldEluaXRpYWxTdGF0ZSwgc3Vic2NyaWJlIH07XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHN0YXRlID0gY3JlYXRlU3RhdGUoc2V0U3RhdGUsIGdldFN0YXRlLCBhcGkpO1xuICByZXR1cm4gYXBpO1xufTtcbmNvbnN0IGNyZWF0ZVN0b3JlID0gKChjcmVhdGVTdGF0ZSkgPT4gY3JlYXRlU3RhdGUgPyBjcmVhdGVTdG9yZUltcGwoY3JlYXRlU3RhdGUpIDogY3JlYXRlU3RvcmVJbXBsKTtcblxuZXhwb3J0IHsgY3JlYXRlU3RvcmUgfTtcbiIsImltcG9ydCB7IHBlcnNpc3QsIGNyZWF0ZUpTT05TdG9yYWdlIH0gZnJvbSBcInp1c3RhbmQvbWlkZGxld2FyZVwiO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwienVzdGFuZC92YW5pbGxhXCI7XG5cbi8vIFRPRE86IGNhcnQgc2hvdWxkIGJlIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgcHJvamVjdFxudHlwZSBXaWRnZXRTdGF0ZSA9IHtcbiAgICBpc09wZW46IGJvb2xlYW47XG4gICAgaXNSZXN1bWVQYW5lbFZpc2libGU6IGJvb2xlYW47XG4gICAgaXNSZWFkeTogYm9vbGVhbjtcbiAgICBpc0Jvb2tpbmdDb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gICAgcHJpbWFyeUd1ZXN0TmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBjaGVja0luRGF0ZTogc3RyaW5nIHwgbnVsbDtcbiAgICBjaGVja091dERhdGU6IHN0cmluZyB8IG51bGw7XG4gICAgY2FydDogYW55O1xufTtcblxudHlwZSBBY3Rpb25zID0ge1xuICAgIHNob3dXaWRnZXQ6ICgpID0+IHZvaWQ7XG4gICAgaGlkZVdpZGdldDogKCkgPT4gdm9pZDtcbiAgICBzaG93UmVzdW1lUGFuZWw6ICgpID0+IHZvaWQ7XG4gICAgaGlkZVJlc3VtZVBhbmVsOiAoKSA9PiB2b2lkO1xuICAgIHNldElzUmVhZHk6IChpc1JlYWR5OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHNldElzQm9va2luZ0NvbXBsZXRlZDogKGlzQ29tcGxldGVkOiBib29sZWFuKSA9PiB2b2lkO1xuICAgIHNldEJhY2tncm91bmRDb2xvcjogKGNvbG9yPzogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHNldFByaW1hcnlHdWVzdE5hbWU6IChuYW1lOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgc2V0Q2FydDogKGNhcnQ/OiBhbnkpID0+IHZvaWQ7XG4gICAgc2V0RGF0ZXM6IChjaGVja0luRGF0ZTogc3RyaW5nLCBjaGVja091dERhdGU6IHN0cmluZykgPT4gdm9pZDtcbiAgICByZXNldDogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGluaXRpYWxXaWRnZXRTdGF0ZTogV2lkZ2V0U3RhdGUgPSB7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBpc1Jlc3VtZVBhbmVsVmlzaWJsZTogZmFsc2UsXG4gICAgaXNSZWFkeTogZmFsc2UsXG4gICAgaXNCb29raW5nQ29tcGxldGVkOiBmYWxzZSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiKDM1LCA3NiwgMTIxKVwiLFxuICAgIHByaW1hcnlHdWVzdE5hbWU6IG51bGwsXG4gICAgY2hlY2tJbkRhdGU6IG51bGwsXG4gICAgY2hlY2tPdXREYXRlOiBudWxsLFxuICAgIGNhcnQ6IHt9LFxufTtcblxuZXhwb3J0IGNvbnN0IHdpZGdldFN0b3JlID0gY3JlYXRlU3RvcmU8V2lkZ2V0U3RhdGUgJiBBY3Rpb25zPigpKFxuICAgIHBlcnNpc3QoXG4gICAgICAgIChzZXQpID0+ICh7XG4gICAgICAgICAgICAuLi5pbml0aWFsV2lkZ2V0U3RhdGUsXG4gICAgICAgICAgICBzaG93V2lkZ2V0OiAoKSA9PiBzZXQoeyBpc09wZW46IHRydWUgfSksXG4gICAgICAgICAgICBoaWRlV2lkZ2V0OiAoKSA9PiBzZXQoeyBpc09wZW46IGZhbHNlIH0pLFxuICAgICAgICAgICAgc2hvd1Jlc3VtZVBhbmVsOiAoKSA9PiBzZXQoeyBpc1Jlc3VtZVBhbmVsVmlzaWJsZTogdHJ1ZSB9KSxcbiAgICAgICAgICAgIGhpZGVSZXN1bWVQYW5lbDogKCkgPT4gc2V0KHsgaXNSZXN1bWVQYW5lbFZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgICAgICAgc2V0SXNSZWFkeTogKGlzUmVhZHkpID0+IHNldCh7IGlzUmVhZHkgfSksXG4gICAgICAgICAgICBzZXRJc0Jvb2tpbmdDb21wbGV0ZWQ6IChpc0Jvb2tpbmdDb21wbGV0ZWQpID0+IHNldCh7IGlzQm9va2luZ0NvbXBsZXRlZCB9KSxcbiAgICAgICAgICAgIHNldEJhY2tncm91bmRDb2xvcjogKGJhY2tncm91bmRDb2xvcikgPT5cbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgPyBzZXQoeyBiYWNrZ3JvdW5kQ29sb3IgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBzZXQoeyBiYWNrZ3JvdW5kQ29sb3I6IGluaXRpYWxXaWRnZXRTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgfSksXG4gICAgICAgICAgICBzZXRQcmltYXJ5R3Vlc3ROYW1lOiAocHJpbWFyeUd1ZXN0TmFtZSkgPT4gc2V0KHsgcHJpbWFyeUd1ZXN0TmFtZSB9KSxcbiAgICAgICAgICAgIHNldENhcnQ6IChjYXJ0KSA9PiBzZXQoeyBjYXJ0IH0pLFxuICAgICAgICAgICAgc2V0RGF0ZXM6IChjaGVja0luRGF0ZSwgY2hlY2tPdXREYXRlKSA9PiBzZXQoeyBjaGVja0luRGF0ZSwgY2hlY2tPdXREYXRlIH0pLFxuICAgICAgICAgICAgcmVzZXQ6ICgpID0+IHNldChpbml0aWFsV2lkZ2V0U3RhdGUpLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJ3aWRnZXRTdG9yZVwiLFxuICAgICAgICAgICAgc3RvcmFnZTogY3JlYXRlSlNPTlN0b3JhZ2UoKCkgPT4gc2Vzc2lvblN0b3JhZ2UpLFxuICAgICAgICAgICAgcGFydGlhbGl6ZTogKHN0YXRlKSA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhzdGF0ZSkuZmlsdGVyKChba2V5XSkgPT4gIVtcImNhcnRcIiwgXCJpc1JlYWR5XCJdLmluY2x1ZGVzKGtleSkpKSxcbiAgICAgICAgICAgIG9uUmVoeWRyYXRlU3RvcmFnZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlPy5pc0Jvb2tpbmdDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgIClcbik7XG4iLCJpbXBvcnQgeyBCT09LSU5HX01PREUgfSBmcm9tIFwiLi4vY29uc3RcIjtcbmltcG9ydCB7IHBlcnNpc3QsIGNyZWF0ZUpTT05TdG9yYWdlIH0gZnJvbSBcInp1c3RhbmQvbWlkZGxld2FyZVwiO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmUgfSBmcm9tIFwienVzdGFuZC92YW5pbGxhXCI7XG5cbmV4cG9ydCB0eXBlIEdsb2JhbFN0YXRlID0ge1xuICAgIGNsaWVudDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm9wZXJ0eUlkOiBudW1iZXIgfCBudWxsO1xuICAgIHByb3BlcnR5U2x1Zzogc3RyaW5nIHwgbnVsbDtcbiAgICBsYW5kaW5nUGFnZVBhdGg6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZGluZ1BhZ2VJZDogbnVtYmVyIHwgbnVsbDtcbiAgICBtb2RlOiBrZXlvZiB0eXBlb2YgQk9PS0lOR19NT0RFO1xuICAgIGJvb2tpbmdJZDogbnVtYmVyIHwgbnVsbDtcbiAgICBjaGVja0luOiBzdHJpbmcgfCBudWxsO1xuICAgIGNoZWNrT3V0OiBzdHJpbmcgfCBudWxsO1xuICAgIGFkdWx0czogbnVtYmVyIHwgbnVsbDtcbiAgICBjaGlsZHJlbjogbnVtYmVyW10gfCBudWxsO1xuICAgIG9mZmVySWQ6IG51bWJlciB8IG51bGw7XG4gICAgZW52OiBzdHJpbmcgfCBudWxsO1xuICAgIGVtYmVkS2V5OiBzdHJpbmcgfCBudWxsO1xuICAgIC8vIFdoZW4gXCJzZWxmXCIsIHRoZSBTREsgb3BlbnMgdGhlIGNoZWNrb3V0IGlmcmFtZSBvbiB0aGUgQ1VSUkVOVCBwYWdlIG9yaWdpblxuICAgIC8vIGluc3RlYWQgb2YgdGhlIGNoZWNrb3V0LnRyaXBmdXNpb24uY29tIGhvc3QuIFNldCBvbmx5IGJ5IG91ciBvd24gaW5qZWN0b3JcbiAgICAvLyAoV2lkZ2V0Q29udGV4dCkgb24gaG9zdHMgd2Ugc2VydmUg4oCUIGtlZXBzIHRoZSB0ZW5hbnQgY29leGlzdGVuY2UgaWZyYW1lXG4gICAgLy8gZmlyc3QtcGFydHkuIEFic2VudCBmb3IgdGhpcmQtcGFydHkgQ0ROIGVtYmVkcywgc28gdGhlaXIgYmVoYXZpb3IgaXNcbiAgICAvLyB1bmNoYW5nZWQuIE5ldmVyIHBlcnNpc3RlZCAoc2VlIHBhcnRpYWxpemUpIOKAlCBpdCBpcyBhIHBlci1wYWdlIGZhY3QuXG4gICAgZW1iZWRCYXNlOiBzdHJpbmcgfCBudWxsO1xuICAgIHJlcGxhY2U6IChzdGF0ZTogUGFydGlhbDxHbG9iYWxTdGF0ZT4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgY2xpZW50OiBudWxsLFxuICAgIHByb3BlcnR5SWQ6IG51bGwsXG4gICAgcHJvcGVydHlTbHVnOiBudWxsLFxuICAgIGxhbmRpbmdQYWdlUGF0aDogbnVsbCxcbiAgICBsYW5kaW5nUGFnZUlkOiBudWxsLFxuICAgIG1vZGU6IEJPT0tJTkdfTU9ERS5ub3JtYWwsXG4gICAgYm9va2luZ0lkOiBudWxsLFxuICAgIGNoZWNrSW46IG51bGwsXG4gICAgY2hlY2tPdXQ6IG51bGwsXG4gICAgYWR1bHRzOiBudWxsLFxuICAgIGNoaWxkcmVuOiBudWxsLFxuICAgIG9mZmVySWQ6IG51bGwsXG4gICAgZW52OiBudWxsLFxuICAgIGVtYmVkS2V5OiBudWxsLFxuICAgIGVtYmVkQmFzZTogbnVsbCxcbn07XG5cbmV4cG9ydCBjb25zdCBnbG9iYWxTdG9yZSA9IGNyZWF0ZVN0b3JlPEdsb2JhbFN0YXRlPigpKFxuICAgIHBlcnNpc3QoXG4gICAgICAgIChzZXQpID0+ICh7XG4gICAgICAgICAgICAuLi5pbml0aWFsU3RhdGUsXG4gICAgICAgICAgICByZXBsYWNlOiAoc3RhdGUpID0+IHNldCh7IC4uLmluaXRpYWxTdGF0ZSwgLi4uc3RhdGUgfSksXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcImdsb2JhbFN0b3JlXCIsXG4gICAgICAgICAgICBzdG9yYWdlOiBjcmVhdGVKU09OU3RvcmFnZSgoKSA9PiBzZXNzaW9uU3RvcmFnZSksXG4gICAgICAgICAgICAvLyBFeGNsdWRlIGBlbnZgIGZyb20gc2Vzc2lvbiBzdG9yYWdlIHBlcnNpc3RlbmNlLlxuICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBlbnZpcm9ubWVudCBpcyBhbHdheXMgZGV0ZXJtaW5lZCBmcmVzaCBmcm9tIHRoZSBzY3JpcHQgVVJMJ3NcbiAgICAgICAgICAgIC8vIGA/ZW52PWAgcGFyYW1ldGVyIG9uIGVhY2ggcGFnZSBsb2FkLCBhbGxvd2luZyB0aGUgc2FtZSBwZXJzaXN0ZWQgYm9va2luZyBzdGF0ZVxuICAgICAgICAgICAgLy8gdG8gd29yayBjb3JyZWN0bHkgd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiBlbnZpcm9ubWVudHMgKGxvY2FsL2RldmVsb3Avc3RhZ2luZy9wcm9kdWN0aW9uKS5cbiAgICAgICAgICAgIC8vIEV4Y2x1ZGUgYGVtYmVkS2V5YCB0byBrZWVwIGl0IGluLW1lbW9yeSBvbmx5IOKAlCBuZXZlciBwZXJzaXN0IHRvIHNlc3Npb25TdG9yYWdlXG4gICAgICAgICAgICAvLyB0byBtaW5pbWlzZSB0aGUgZXhmaWx0cmF0aW9uIHN1cmZhY2UuXG4gICAgICAgICAgICAvLyBFeGNsdWRlIGBlbWJlZEJhc2VgIGZvciB0aGUgc2FtZSByZWFzb24gYXMgYGVudmA6IGl0IGlzIGRlcml2ZWQgZnJlc2ggZnJvbVxuICAgICAgICAgICAgLy8gdGhlIHNjcmlwdCBVUkwgZWFjaCBsb2FkLCBzbyBhIHBlcnNpc3RlZCB2YWx1ZSBtdXN0IG5ldmVyIGxlYWsgYWNyb3NzIHBhZ2VzLlxuICAgICAgICAgICAgcGFydGlhbGl6ZTogKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbnYsIGVtYmVkS2V5LCBlbWJlZEJhc2UsIC4uLnJlc3QgfSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN0O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgIClcbik7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyBTREtfU0NSSVBUX0lEIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IGdsb2JhbFN0b3JlIH0gZnJvbSBcIi4vc3RvcmUvZ2xvYmFsLnN0b3JlXCI7XG5cbmV4cG9ydCBjb25zdCBzdHJpbmdpZnlQcmljZSA9IChjZW50czogbnVtYmVyIHwgbnVsbCkgPT5cbiAgICBjZW50cyAhPT0gbnVsbCA/IG5ldyBJbnRsLk51bWJlckZvcm1hdChcImVuLVVTXCIsIHsgc3R5bGU6IFwiY3VycmVuY3lcIiwgY3VycmVuY3k6IFwiVVNEXCIgfSkuZm9ybWF0KGNlbnRzIC8gMTAwKSA6IFwiXCI7XG5cbmNvbnN0IEVNQkVEX0tFWV9GT1JNQVQgPSAvXnBrXyhsaXZlfHRlc3QpX1tBLVphLXowLTldezMyfSQvO1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFBhcmFtcyA9ICgpID0+IHtcbiAgICBjb25zdCAkanNTZGsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChTREtfU0NSSVBUX0lEKSBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBqc1Nka1NyYyA9ICRqc1Nkay5nZXRBdHRyaWJ1dGUoXCJzcmNcIikgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHVybFBhcmFtcyA9IGdldFBhcmFtc0Zyb21VcmwobmV3IFVSTFNlYXJjaFBhcmFtcyhqc1Nka1NyYy5zdWJzdHJpbmcoanNTZGtTcmMuaW5kZXhPZihcIj9cIikpKSk7XG5cbiAgICBjb25zdCBjbGllbnQgPSB1cmxQYXJhbXNbXCJjbGllbnRcIl0gPz8gbnVsbDtcbiAgICBjb25zdCBwcm9wZXJ0eUlkID0gdXJsUGFyYW1zW1wicHJvcGVydHlJZFwiXSA/ICt1cmxQYXJhbXNbXCJwcm9wZXJ0eUlkXCJdIDogbnVsbDtcbiAgICBjb25zdCBwcm9wZXJ0eVNsdWcgPSB1cmxQYXJhbXNbXCJwcm9wZXJ0eVNsdWdcIl0gPz8gbnVsbDtcbiAgICBjb25zdCBsYW5kaW5nUGFnZVBhdGggPSB1cmxQYXJhbXNbXCJsYW5kaW5nUGFnZVBhdGhcIl0gPz8gbnVsbDtcbiAgICBjb25zdCBsYW5kaW5nUGFnZUlkID0gdXJsUGFyYW1zW1wibGFuZGluZ1BhZ2VJZFwiXSA/ICt1cmxQYXJhbXNbXCJsYW5kaW5nUGFnZUlkXCJdIDogbnVsbDtcbiAgICBjb25zdCBlbnYgPSB1cmxQYXJhbXNbXCJlbnZcIl0gPz8gbnVsbDtcbiAgICBjb25zdCByYXdFbWJlZEtleSA9IHVybFBhcmFtc1tcImVtYmVkS2V5XCJdID8/IG51bGw7XG5cbiAgICBsZXQgZW1iZWRLZXk6IHN0cmluZyB8IG51bGwgPSByYXdFbWJlZEtleTtcbiAgICBpZiAocmF3RW1iZWRLZXkgIT09IG51bGwgJiYgIUVNQkVEX0tFWV9GT1JNQVQudGVzdChyYXdFbWJlZEtleSkpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IGludmFsaWQgcGsgZm9ybWF0IOKAlCBlbWJlZEtleSBjbGVhcmVkLiBFeHBlY3RlZCBwa18obGl2ZXx0ZXN0KV9bQS1aYS16MC05XXszMn1gKTtcbiAgICAgICAgZW1iZWRLZXkgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdGhlIGV4YWN0IFwic2VsZlwiIHZhbHVlIGFjdGl2YXRlcyBzYW1lLW9yaWdpbiBlbWJlZGRpbmc7IGFueXRoaW5nIGVsc2VcbiAgICAvLyBpcyB0cmVhdGVkIGFzIGFic2VudCBzbyBhbiB1bmV4cGVjdGVkIHZhbHVlIGNhbiBuZXZlciByZWRpcmVjdCB0aGUgaWZyYW1lLlxuICAgIGNvbnN0IGVtYmVkQmFzZSA9IHVybFBhcmFtc1tcImVtYmVkQmFzZVwiXSA9PT0gXCJzZWxmXCIgPyBcInNlbGZcIiA6IG51bGw7XG5cbiAgICByZXR1cm4geyBjbGllbnQsIHByb3BlcnR5SWQsIHByb3BlcnR5U2x1ZywgbGFuZGluZ1BhZ2VQYXRoLCBsYW5kaW5nUGFnZUlkLCBlbnYsIGVtYmVkS2V5LCBlbWJlZEJhc2UgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNGcm9tVXJsKHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgYXZhaWxhYmxlU2VhcmNoUGFyYW1zTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICB0cmlwZnVzaW9uOiBcInRyaXBmdXNpb25cIixcbiAgICAgICAgY2xpZW50OiBcImNsaWVudFwiLFxuICAgICAgICBwcm9wZXJ0eWlkOiBcInByb3BlcnR5SWRcIixcbiAgICAgICAgcHJvcGVydHlzbHVnOiBcInByb3BlcnR5U2x1Z1wiLFxuICAgICAgICBsYW5kaW5ncGFnZXBhdGg6IFwibGFuZGluZ1BhZ2VQYXRoXCIsXG4gICAgICAgIGxhbmRpbmdwYWdlaWQ6IFwibGFuZGluZ1BhZ2VJZFwiLFxuICAgICAgICBtb2RlOiBcIm1vZGVcIixcbiAgICAgICAgb2ZmZXJpZDogXCJvZmZlcklkXCIsXG4gICAgICAgIGJvb2tpbmdpZDogXCJib29raW5nSWRcIixcbiAgICAgICAgY2hlY2tpbjogXCJjaGVja0luXCIsXG4gICAgICAgIGNoZWNrb3V0OiBcImNoZWNrT3V0XCIsXG4gICAgICAgIGFkdWx0czogXCJhZHVsdHNcIixcbiAgICAgICAgY2hpbGRyZW46IFwiY2hpbGRyZW5cIixcbiAgICAgICAgZW52OiBcImVudlwiLFxuICAgICAgICBwazogXCJlbWJlZEtleVwiLFxuICAgICAgICBlbWJlZGJhc2U6IFwiZW1iZWRCYXNlXCIsXG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1cmxTZWFyY2hQYXJhbXMuZW50cmllcygpKS5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBbc2VhcmNoUGFyYW1LZXksIHNlYXJjaFBhcmFtVmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFthdmFpbGFibGVTZWFyY2hQYXJhbXNNYXBbc2VhcmNoUGFyYW1LZXkudG9Mb3dlckNhc2UoKV1dOiBzZWFyY2hQYXJhbVZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nZ2VyKG1lc3NhZ2U6IHN0cmluZywgdHlwZTogXCJlcnJvclwiIHwgXCJsb2dcIiA9IFwiZXJyb3JcIikge1xuICAgIGNvbnN0IHRyaXBmdXNpb25CYXNlVXJsID0gZ2V0VHJpcGZ1c2lvbkJhc2VVcmwoKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0cmlwZnVzaW9uQmFzZVVybH1hcGkvdmFjYXlvdS9sb2dgO1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHBhZ2U6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgIH07XG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgfTtcbiAgICByZXR1cm4gZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICB9KSxcbiAgICAgICAgaGVhZGVycyxcbiAgICB9KVxuICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBUcmlwZnVzaW9uOiBmYWlsZWQgdG8gbG9nIG1lc3NhZ2U6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUcmlwZnVzaW9uT3JpZ2luKG9yaWdpbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pO1xuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3Q7XG4gICAgICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIgJiYgL14oZGV2ZWxvcFxcLnxzdGFnaW5nXFwuKT9jaGVja291dFxcLnRyaXBmdXNpb25cXC5jb20kLy50ZXN0KGhvc3QpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gU2FtZS1vcmlnaW4gZW1iZWRkaW5nOiB0aGUgaWZyYW1lIHdhcyBvcGVuZWQgb24gb3VyIG93biBwYWdlIG9yaWdpblxuICAgICAgICAvLyAoZW1iZWRCYXNlPXNlbGYpLCBzbyBtZXNzYWdlcyBmcm9tIHRoYXQgZXhhY3Qgb3JpZ2luIGFyZSB0cnVzdGVkLiBHYXRlZFxuICAgICAgICAvLyBvbiBlbWJlZEJhc2Ugc28gaXQgY2FuIG5ldmVyIHdpZGVuIHRoZSBvcmlnaW4gc2V0IGZvciB0aGlyZC1wYXJ0eSBlbWJlZHMuXG4gICAgICAgIGlmIChnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLmVtYmVkQmFzZSA9PT0gXCJzZWxmXCIgJiYgb3JpZ2luID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgLy8gTG9jYWwgZGV2IGJ5cGFzczogb25seSBhbGxvdyBsb2NhbGhvc3Qgd2hlbiB0aGUgU0RLIGlzIGV4cGxpY2l0bHkgcnVubmluZyBpbiBsb2NhbCBlbnYuXG4gICAgICAgIC8vIFByb2R1Y3Rpb24gc2NyaXB0cyB1c2UgdGhlIGRlZmF1bHQgZW52IOKGkiBicmFuY2ggaXMgZGVhZC4gTmV2ZXIgd2Vha2VucyBwcm9kLlxuICAgICAgICBpZiAoZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5lbnYgPT09IFwibG9jYWxcIiAmJiAvXihsb2NhbGhvc3R8MTI3XFwuMFxcLjBcXC4xKSg6XFxkKyk/JC8udGVzdChob3N0KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmlwZnVzaW9uQmFzZVVybCgpOiBzdHJpbmcge1xuICAgIC8vIFNhbWUtb3JpZ2luIGVtYmVkZGluZyAodGVuYW50IGNvZXhpc3RlbmNlIGhvc3RzIHdlIHNlcnZlKTogb3BlbiB0aGUgaWZyYW1lXG4gICAgLy8gb24gdGhlIGN1cnJlbnQgcGFnZSBvcmlnaW4gc28gaXQgc3RheXMgZmlyc3QtcGFydHkgaW4gZXZlcnkgYnJvd3Nlci4gT25seVxuICAgIC8vIG91ciBvd24gaW5qZWN0b3Igc2V0cyBlbWJlZEJhc2U9c2VsZjsgdGhpcmQtcGFydHkgZW1iZWRzIGZhbGwgdGhyb3VnaCB0b1xuICAgIC8vIHRoZSBlbnYtYmFzZWQgY2hlY2tvdXQgaG9zdCBiZWxvdywgdW5jaGFuZ2VkLlxuICAgIGlmIChnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLmVtYmVkQmFzZSA9PT0gXCJzZWxmXCIpIHtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2A7XG4gICAgfVxuICAgIHN3aXRjaCAoZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5lbnYpIHtcbiAgICAgICAgY2FzZSBcImxvY2FsXCI6IHtcbiAgICAgICAgICAgIC8vIEZvbGxvdyB0aGUgcGFnZSBvcmlnaW4gc28gbG9jYWwgZGV2IHdvcmtzIG9uIGFueSBwb3J0LlxuICAgICAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5sb2NhdGlvbi5vcmlnaW59L2A7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcImRldmVsb3BcIjoge1xuICAgICAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9kZXZlbG9wLmNoZWNrb3V0LnRyaXBmdXNpb24uY29tL1wiO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJzdGFnaW5nXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBcImh0dHBzOi8vc3RhZ2luZy5jaGVja291dC50cmlwZnVzaW9uLmNvbS9cIjtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICByZXR1cm4gXCJodHRwczovL2NoZWNrb3V0LnRyaXBmdXNpb24uY29tL1wiO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHR5cGUgeyBHbG9iYWxTdGF0ZSB9IGZyb20gXCIuL3N0b3JlL2dsb2JhbC5zdG9yZVwiO1xuaW1wb3J0IHtcbiAgICBCT09LSU5HX01PREUsXG4gICAgTE9BREVSX0lELFxuICAgIFJFU1VNRV9QQU5FTF9JRCxcbiAgICBXSURHRVRfQ0xPU0VfQlVUVE9OX0lELFxuICAgIFdJREdFVF9IRUFERVJfSUQsXG4gICAgV0lER0VUX0hFQURFUl9USVRMRV9JRCxcbiAgICBXSURHRVRfSUQsXG4gICAgV0lER0VUX0lGUkFNRV9JRCxcbiAgICBXSURHRVRfSU5ORVJfV1JBUFBFUl9JRCxcbiAgICBXSURHRVRfV1JBUFBFUl9JRFxufSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgd2lkZ2V0U3RvcmUgfSBmcm9tIFwiLi9zdG9yZS93aWRnZXQuc3RvcmVcIjtcbmltcG9ydCB7IGdldFRyaXBmdXNpb25CYXNlVXJsLCBsb2dnZXIgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheUxvYWRpbmdPdmVybGF5KCkge1xuICAgIGxldCAkbG9hZGluZ0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKExPQURFUl9JRCk7XG4gICAgaWYgKCEkbG9hZGluZ0Rpdikge1xuICAgICAgICBjb25zdCAkd2lkZ2V0V3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9XUkFQUEVSX0lEKTtcblxuICAgICAgICBpZiAoJHdpZGdldFdyYXBwZXIpIHtcbiAgICAgICAgICAgICRsb2FkaW5nRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgICRsb2FkaW5nRGl2LmlkID0gTE9BREVSX0lEO1xuICAgICAgICAgICAgJGxvYWRpbmdEaXYuaW5uZXJIVE1MID0gXCJMb2FkaW5nIDxzcGFuPlRyaXBGdXNpb248L3NwYW4+XCI7XG4gICAgICAgICAgICAkd2lkZ2V0V3JhcHBlci5hcHBlbmRDaGlsZCgkbG9hZGluZ0Rpdik7XG5cbiAgICAgICAgICAgICR3aWRnZXRXcmFwcGVyLnN0eWxlLnpJbmRleCA9IGAkezFlMTF9YDtcbiAgICAgICAgICAgICR3aWRnZXRXcmFwcGVyLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuICAgICAgICAgICAgJHdpZGdldFdyYXBwZXIuc3R5bGUuYmFja2dyb3VuZCA9IFwicmdiYSgwLCAwLCAwLCAuNzQpXCI7XG4gICAgICAgICAgICBsb2NrUGFnZVNjcm9sbCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlkZUxvYWRpbmdPdmVybGF5KCkge1xuICAgIGNvbnN0ICRsb2FkaW5nRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTE9BREVSX0lEKTtcbiAgICAkbG9hZGluZ0Rpdj8ucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRG9tKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc2hvd1dpZGdldCwgaGlkZVdpZGdldCwgc2hvd1Jlc3VtZVBhbmVsLCBoaWRlUmVzdW1lUGFuZWwgfSA9IHdpZGdldFN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGNvbnN0ICR3aWRnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgJHdpZGdldFdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgJHdpZGdldElubmVyV3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgICAgICAkd2lkZ2V0SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgICAgICAgICAgICR3aWRnZXRIZWFkZXJUaXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLFxuICAgICAgICAgICAgJHdpZGdldENsb3NlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKSxcbiAgICAgICAgICAgICRyZXN1bWVQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgICAgJHJlc3VtZVBhbmVsLmlkID0gUkVTVU1FX1BBTkVMX0lEO1xuXG4gICAgICAgICRyZXN1bWVQYW5lbD8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIHNob3dXaWRnZXQoKTtcbiAgICAgICAgICAgIGhpZGVSZXN1bWVQYW5lbCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDb25maWd1cmUgd2lkZ2V0IGFuZCB3cmFwcGVyXG4gICAgICAgICR3aWRnZXQuaWQgPSBXSURHRVRfSUQ7XG4gICAgICAgICR3aWRnZXQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAkd2lkZ2V0V3JhcHBlci5pZCA9IFdJREdFVF9XUkFQUEVSX0lEO1xuICAgICAgICAkd2lkZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBoaWRlV2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgc2hvd1Jlc3VtZVBhbmVsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENvbmZpZ3VyZSB3aWRnZXQgaW5uZXIgd3JhcHBlclxuICAgICAgICAkd2lkZ2V0SW5uZXJXcmFwcGVyLmlkID0gV0lER0VUX0lOTkVSX1dSQVBQRVJfSUQ7XG4gICAgICAgICR3aWRnZXRIZWFkZXIuaWQgPSBXSURHRVRfSEVBREVSX0lEO1xuICAgICAgICAkd2lkZ2V0Q2xvc2VCdXR0b24uaWQgPSBXSURHRVRfQ0xPU0VfQlVUVE9OX0lEO1xuICAgICAgICAkd2lkZ2V0Q2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgICAgIGhpZGVXaWRnZXQoKTtcbiAgICAgICAgICAgIHNob3dSZXN1bWVQYW5lbCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgJHdpZGdldEhlYWRlclRpdGxlLmlkID0gV0lER0VUX0hFQURFUl9USVRMRV9JRDtcbiAgICAgICAgJHdpZGdldEhlYWRlclRpdGxlLmlubmVySFRNTCA9IFwiQm9va2luZ1wiO1xuXG4gICAgICAgIC8vIEFwcGVuZCB3aWRnZXQgdG8gd3JhcHBlciBhbmQgd3JhcHBlciB0byBkb2N1bWVudCBib2R5XG4gICAgICAgICR3aWRnZXRXcmFwcGVyLmFwcGVuZENoaWxkKCR3aWRnZXQpO1xuICAgICAgICAkd2lkZ2V0LmFwcGVuZENoaWxkKCR3aWRnZXRJbm5lcldyYXBwZXIpO1xuICAgICAgICAkd2lkZ2V0SW5uZXJXcmFwcGVyLmFwcGVuZENoaWxkKCR3aWRnZXRIZWFkZXIpO1xuICAgICAgICAkd2lkZ2V0SGVhZGVyLmFwcGVuZENoaWxkKCR3aWRnZXRIZWFkZXJUaXRsZSk7XG4gICAgICAgICR3aWRnZXRIZWFkZXIuYXBwZW5kQ2hpbGQoJHdpZGdldENsb3NlQnV0dG9uKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCgkd2lkZ2V0V3JhcHBlcik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoJHJlc3VtZVBhbmVsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIoYFdpZGdldDogRXJyb3IgcHJlcGFyaW5nIERPTTogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IEVycm9yIHByZXBhcmluZyBET006IFwiLCBlcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUmVzdW1lUGFuZWwoe1xuICAgIGhlYWRlclRleHQsXG4gICAgc3ViaGVhZGVyVGV4dCxcbiAgICBmb290ZXJUZXh0LFxufToge1xuICAgIGhlYWRlclRleHQ6IHN0cmluZztcbiAgICBzdWJoZWFkZXJUZXh0Pzogc3RyaW5nO1xuICAgIGZvb3RlclRleHQ/OiBzdHJpbmc7XG59KSB7XG4gICAgY29uc3QgJHJlc3VtZVBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX1BBTkVMX0lEKSBhcyBIVE1MRWxlbWVudDtcblxuICAgICRyZXN1bWVQYW5lbC5pbm5lckhUTUwgPSBgXG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPiR7aGVhZGVyVGV4dH08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJMYXllcl8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgMzMwIDMzMFwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiWE1MSURfMjIyX1wiIGQ9XCJNMjUwLjYwNiwxNTQuMzg5bC0xNTAtMTQ5Ljk5NmMtNS44NTctNS44NTgtMTUuMzU1LTUuODU4LTIxLjIxMywwLjAwMWMtNS44NTcsNS44NTgtNS44NTcsMTUuMzU1LDAuMDAxLDIxLjIxM2wxMzkuMzkzLDEzOS4zOUw3OS4zOTMsMzA0LjM5NGMtNS44NTcsNS44NTgtNS44NTcsMTUuMzU1LDAuMDAxLDIxLjIxM0M4Mi4zMjIsMzI4LjUzNiw4Ni4xNjEsMzMwLDkwLDMzMHM3LjY3OC0xLjQ2NCwxMC42MDctNC4zOTRsMTQ5Ljk5OS0xNTAuMDA0YzIuODE0LTIuODEzLDQuMzk0LTYuNjI4LDQuMzk0LTEwLjYwNkMyNTUsMTYxLjAxOCwyNTMuNDIsMTU3LjIwMiwyNTAuNjA2LDE1NC4zODl6XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAke3N1YmhlYWRlclRleHQgJiYgYDxzcGFuIGNsYXNzPVwidHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX3N1YmhlYWRlclwiPiR7c3ViaGVhZGVyVGV4dH08L3NwYW4+YH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7Zm9vdGVyVGV4dCAmJiBgPHNwYW4gY2xhc3M9XCJ0cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9fZm9vdGVyXCI+JHtmb290ZXJUZXh0fTwvc3Bhbj5gfVxuICAgIGA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG93UmVzdW1lUGFuZWxEb20oKSB7XG4gICAgY29uc3QgJHJlc3VtZVBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX1BBTkVMX0lEKSBhcyBIVE1MRWxlbWVudDtcbiAgICAkcmVzdW1lUGFuZWwuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJ0cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tc2xpZGUtaW5cIik7XG4gICAgJHJlc3VtZVBhbmVsLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWRlUmVzdW1lUGFuZWxEb20oKSB7XG4gICAgY29uc3QgJHJlc3VtZVBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX1BBTkVMX0lEKSBhcyBIVE1MRWxlbWVudDtcbiAgICAkcmVzdW1lUGFuZWwuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJ0cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tc2xpZGUtb3V0XCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd1dpZGdldERvbSgpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCAkd2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0lEKSBhcyBIVE1MRGl2RWxlbWVudCxcbiAgICAgICAgICAgICR3aWRnZXRXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX1dSQVBQRVJfSUQpIGFzIEhUTUxEaXZFbGVtZW50O1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24oJHdpZGdldFdyYXBwZXIuc3R5bGUsIHtcbiAgICAgICAgICAgIHpJbmRleDogMTAwMDAwMDAwMDAxMSxcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInJnYmEoMCwgMCwgMCwgLjUpXCIsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxvY2tQYWdlU2Nyb2xsKCk7XG4gICAgICAgICR3aWRnZXQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgJHdpZGdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNsaWRlLWluXCIpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJHdpZGdldElmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9JRlJBTUVfSUQpO1xuICAgICAgICAgICAgJHdpZGdldElmcmFtZT8uZm9jdXMoKTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIoYFdpZGdldDogRXJyb3Igb3Blbm5pbmcgd2lkZ2V0OiAke2Vycm9yfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVHJpcGZ1c2lvbjogRXJyb3Igb3Blbm5pbmcgd2lkZ2V0OiBcIiwgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZGVXaWRnZXREb20oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgJHdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9JRCksXG4gICAgICAgICAgICAkd2lkZ2V0V3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9XUkFQUEVSX0lEKTtcblxuICAgICAgICBpZiAoJHdpZGdldCAmJiAkd2lkZ2V0V3JhcHBlcikge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwiXCI7XG4gICAgICAgICAgICAkd2lkZ2V0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2xpZGUtb3V0XCIpO1xuICAgICAgICAgICAgJHdpZGdldFdyYXBwZXIuc3R5bGUuYmFja2dyb3VuZCA9IFwicmdiYSgwLCAwLCAwLCAwKVwiO1xuICAgICAgICAgICAgJHdpZGdldC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICAkd2lkZ2V0V3JhcHBlci5zdHlsZS56SW5kZXggPSBgJHstMWUxMX1gO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IEVycm9yIGNsb3Npbmcgd2lkZ2V0OiAke2Vycm9yfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVHJpcGZ1c2lvbjogRXJyb3IgY2xvc2luZyB3aWRnZXQ6IFwiLCBlcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SWZyYW1lKHtcbiAgICBjbGllbnQsXG4gICAgcHJvcGVydHlJZCxcbiAgICBwcm9wZXJ0eVNsdWcsXG4gICAgbGFuZGluZ1BhZ2VQYXRoLFxuICAgIGxhbmRpbmdQYWdlSWQsXG4gICAgbW9kZSxcbiAgICBib29raW5nSWQsXG4gICAgZW52LFxuICAgIC4uLnJlc3Rcbn06IEdsb2JhbFN0YXRlKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0lGUkFNRV9JRCk/LnJlbW92ZSgpO1xuXG4gICAgICAgIGNvbnN0ICRpbm5lcldyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSU5ORVJfV1JBUFBFUl9JRCk7XG4gICAgICAgIGlmICgkaW5uZXJXcmFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCBpZnJhbWVQYXJhbXNNYXAgPSBbXCJjaGVja0luXCIsIFwiY2hlY2tPdXRcIiwgXCJhZHVsdHNcIiwgXCJjaGlsZHJlblwiLCBcIm9mZmVySWRcIl07XG5cbiAgICAgICAgICAgIGNvbnN0ICR3aWRnZXRJZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgICAgICAgY29uc3QgdHJpcGZ1c2lvbkJhc2VVcmwgPSBnZXRUcmlwZnVzaW9uQmFzZVVybCgpO1xuXG4gICAgICAgICAgICAvLyBCdWlsZCB0aGUgZW50aXR5IHNlZ21lbnQgb2YgdGhlIFVSTC4gT3JkZXIgb2YgcHJlY2VkZW5jZTpcbiAgICAgICAgICAgIC8vICAgbGFuZGluZ1BhZ2VJZCAg4oaSIC97Y2xpZW50fS9vZmZlcnMve2lkfSAgICAgICAgICAob2ZmZXIgYnkgSUQsIG5ldylcbiAgICAgICAgICAgIC8vICAgbGFuZGluZ1BhZ2VQYXRoIOKGkiAve2NsaWVudH0vb2ZmZXJzL3twYXRofSAgICAgICAgKG9mZmVyIGJ5IHNsdWcsIGV4aXN0aW5nKVxuICAgICAgICAgICAgLy8gICBwcm9wZXJ0eVNsdWcgICDihpIgL3tjbGllbnR9L3tzbHVnfSAgICAgICAgICAgICAgICAocHJvcGVydHkgYnkgc2x1ZywgbmV3KVxuICAgICAgICAgICAgLy8gICBwcm9wZXJ0eUlkICAgICDihpIgL3tjbGllbnR9L3tpZH0gICAgICAgICAgICAgICAgICAocHJvcGVydHkgYnkgSUQsIGV4aXN0aW5nKVxuICAgICAgICAgICAgLy8gUmVjZWl2aW5nIExhcmF2ZWwgZW5kcG9pbnRzIGFscmVhZHkgYWNjZXB0IGVpdGhlciBmb3JtXG4gICAgICAgICAgICAvLyAoYXBpL3YyL2xhbmRpbmctcGFnZS9zaG93L3tpZHxwYXRofSwgYXBpL3YyL3Byb3BlcnR5L3Nob3cve2lkX3NsdWd9KS5cbiAgICAgICAgICAgIGNvbnN0IG9mZmVyU2VnbWVudCA9IGxhbmRpbmdQYWdlSWQgPz8gbGFuZGluZ1BhZ2VQYXRoO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlTZWdtZW50ID0gcHJvcGVydHlTbHVnID8/IHByb3BlcnR5SWQ7XG4gICAgICAgICAgICBsZXQgdXJsID0gb2ZmZXJTZWdtZW50XG4gICAgICAgICAgICAgICAgPyBgJHt0cmlwZnVzaW9uQmFzZVVybH0ke2NsaWVudH0vb2ZmZXJzLyR7b2ZmZXJTZWdtZW50fWBcbiAgICAgICAgICAgICAgICA6IGAke3RyaXBmdXNpb25CYXNlVXJsfSR7Y2xpZW50fS8ke3Byb3BlcnR5U2VnbWVudH1gO1xuICAgICAgICAgICAgaWYgKG1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgJiYgYm9va2luZ0lkKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGAvYm9va2luZy8ke2Jvb2tpbmdJZH0vYXBwZW5kYDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbFBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHJlc3QpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoW2tleSwgdmFsdWVdKSA9PiBpZnJhbWVQYXJhbXNNYXAuaW5jbHVkZXMoa2V5KSAmJiAhIXZhbHVlKVxuICAgICAgICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWAudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG5cblxuICAgICAgICAgICAgY29uc3QgdmVyY2VsQnlwYXNzUGFyYW0gPVxuICAgICAgICAgICAgICAgIGVudiA9PT0gXCJkZXZlbG9wXCIgfHwgZW52ID09PSBcInN0YWdpbmdcIlxuICAgICAgICAgICAgICAgICAgICA/IGB4LXZlcmNlbC1wcm90ZWN0aW9uLWJ5cGFzcz0ke3Byb2Nlc3MuZW52LlZFUkNFTF9BVVRPTUFUSU9OX0JZUEFTU19TRUNSRVR9YFxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IGFsbFBhcmFtcyA9IFthZGRpdGlvbmFsUGFyYW1zLCB2ZXJjZWxCeXBhc3NQYXJhbV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCImXCIpO1xuICAgICAgICAgICAgaWYgKGFsbFBhcmFtcykge1xuICAgICAgICAgICAgICAgIHVybCArPSBgPyR7YWxsUGFyYW1zfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICR3aWRnZXRJZnJhbWUuc2V0QXR0cmlidXRlKFwiYWxsb3dcIiwgXCJwYXltZW50XCIpO1xuICAgICAgICAgICAgJHdpZGdldElmcmFtZS5zZXRBdHRyaWJ1dGUoXCJzcmNcIiwgdXJsKTtcbiAgICAgICAgICAgICR3aWRnZXRJZnJhbWUuaWQgPSBXSURHRVRfSUZSQU1FX0lEO1xuICAgICAgICAgICAgJGlubmVyV3JhcHBlci5hcHBlbmRDaGlsZCgkd2lkZ2V0SWZyYW1lKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBFcnJvciBpbmplY3RpbmcgaWZyYW1lOiAke2Vycm9yfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiVHJpcGZ1c2lvbjogRXJyb3IgaW5qZWN0aW5nIGlmcmFtZTogXCIsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NrUGFnZVNjcm9sbCgpIHtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFdpZGdldFRoZW1lKHsgYmFja2dyb3VuZENvbG9yIH06IHsgYmFja2dyb3VuZENvbG9yOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0ICRyZXN1bWVQYW5lbFdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChSRVNVTUVfUEFORUxfSUQpIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAkd2lkZ2V0SGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0hFQURFUl9JRCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgaWYgKCRyZXN1bWVQYW5lbFdyYXBwZXIpIHtcbiAgICAgICAgJHJlc3VtZVBhbmVsV3JhcHBlci5zdHlsZVtcImJhY2tncm91bmRDb2xvclwiXSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgaWYgKCR3aWRnZXRIZWFkZXIpIHtcbiAgICAgICAgJHdpZGdldEhlYWRlci5zdHlsZVtcImJhY2tncm91bmRDb2xvclwiXSA9IGJhY2tncm91bmRDb2xvcjtcbiAgICB9XG59XG4iLCJjb25zdCBpc0l0ZXJhYmxlID0gKG9iaikgPT4gU3ltYm9sLml0ZXJhdG9yIGluIG9iajtcbmNvbnN0IGhhc0l0ZXJhYmxlRW50cmllcyA9ICh2YWx1ZSkgPT4gKFxuICAvLyBIQUNLOiBhdm9pZCBjaGVja2luZyBlbnRyaWVzIHR5cGVcbiAgXCJlbnRyaWVzXCIgaW4gdmFsdWVcbik7XG5jb25zdCBjb21wYXJlRW50cmllcyA9ICh2YWx1ZUEsIHZhbHVlQikgPT4ge1xuICBjb25zdCBtYXBBID0gdmFsdWVBIGluc3RhbmNlb2YgTWFwID8gdmFsdWVBIDogbmV3IE1hcCh2YWx1ZUEuZW50cmllcygpKTtcbiAgY29uc3QgbWFwQiA9IHZhbHVlQiBpbnN0YW5jZW9mIE1hcCA/IHZhbHVlQiA6IG5ldyBNYXAodmFsdWVCLmVudHJpZXMoKSk7XG4gIGlmIChtYXBBLnNpemUgIT09IG1hcEIuc2l6ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBtYXBBKSB7XG4gICAgaWYgKCFtYXBCLmhhcyhrZXkpIHx8ICFPYmplY3QuaXModmFsdWUsIG1hcEIuZ2V0KGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbmNvbnN0IGNvbXBhcmVJdGVyYWJsZXMgPSAodmFsdWVBLCB2YWx1ZUIpID0+IHtcbiAgY29uc3QgaXRlcmF0b3JBID0gdmFsdWVBW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgY29uc3QgaXRlcmF0b3JCID0gdmFsdWVCW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgbGV0IG5leHRBID0gaXRlcmF0b3JBLm5leHQoKTtcbiAgbGV0IG5leHRCID0gaXRlcmF0b3JCLm5leHQoKTtcbiAgd2hpbGUgKCFuZXh0QS5kb25lICYmICFuZXh0Qi5kb25lKSB7XG4gICAgaWYgKCFPYmplY3QuaXMobmV4dEEudmFsdWUsIG5leHRCLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBuZXh0QSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gICAgbmV4dEIgPSBpdGVyYXRvckIubmV4dCgpO1xuICB9XG4gIHJldHVybiAhIW5leHRBLmRvbmUgJiYgISFuZXh0Qi5kb25lO1xufTtcbmZ1bmN0aW9uIHNoYWxsb3codmFsdWVBLCB2YWx1ZUIpIHtcbiAgaWYgKE9iamVjdC5pcyh2YWx1ZUEsIHZhbHVlQikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlQSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZUEgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlQiAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZUIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZUEpICE9PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWVCKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoaXNJdGVyYWJsZSh2YWx1ZUEpICYmIGlzSXRlcmFibGUodmFsdWVCKSkge1xuICAgIGlmIChoYXNJdGVyYWJsZUVudHJpZXModmFsdWVBKSAmJiBoYXNJdGVyYWJsZUVudHJpZXModmFsdWVCKSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVFbnRyaWVzKHZhbHVlQSwgdmFsdWVCKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBhcmVJdGVyYWJsZXModmFsdWVBLCB2YWx1ZUIpO1xuICB9XG4gIHJldHVybiBjb21wYXJlRW50cmllcyhcbiAgICB7IGVudHJpZXM6ICgpID0+IE9iamVjdC5lbnRyaWVzKHZhbHVlQSkgfSxcbiAgICB7IGVudHJpZXM6ICgpID0+IE9iamVjdC5lbnRyaWVzKHZhbHVlQikgfVxuICApO1xufVxuXG5leHBvcnQgeyBzaGFsbG93IH07XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vc3R5bGVzLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xub3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlcy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgdHlwZSB7IEFwcE1lc3NhZ2UgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgQVBQX01FU1NBR0VfVFlQRSwgQk9PS0lOR19NT0RFLCBXSURHRVRfSUZSQU1FX0lEIH0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7XG4gICAgaGlkZVdpZGdldERvbSxcbiAgICBkaXNwbGF5TG9hZGluZ092ZXJsYXksXG4gICAgaGlkZVJlc3VtZVBhbmVsRG9tLFxuICAgIGluamVjdElmcmFtZSxcbiAgICBzaG93V2lkZ2V0RG9tLFxuICAgIHByZXBhcmVEb20sXG4gICAgcmVuZGVyUmVzdW1lUGFuZWwsXG4gICAgc2V0V2lkZ2V0VGhlbWUsXG4gICAgc2hvd1Jlc3VtZVBhbmVsRG9tLFxuICAgIGhpZGVMb2FkaW5nT3ZlcmxheSxcbn0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgeyBHbG9iYWxTdGF0ZSwgZ2xvYmFsU3RvcmUgfSBmcm9tIFwiLi9zdG9yZS9nbG9iYWwuc3RvcmVcIjtcbmltcG9ydCB7IHdpZGdldFN0b3JlIH0gZnJvbSBcIi4vc3RvcmUvd2lkZ2V0LnN0b3JlXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0UGFyYW1zLCBnZXRQYXJhbXNGcm9tVXJsLCBpc1RyaXBmdXNpb25PcmlnaW4sIGxvZ2dlciwgc3RyaW5naWZ5UHJpY2UgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgc2hhbGxvdyB9IGZyb20gXCJ6dXN0YW5kL3ZhbmlsbGEvc2hhbGxvd1wiO1xuaW1wb3J0IFwiLi9zdHlsZXMuY3NzXCI7XG5cbmdsb2JhbFN0b3JlLnN1YnNjcmliZSgobmV3U3RhdGUpID0+IHtcbiAgICBpZiAobmV3U3RhdGUuY2xpZW50ICYmIG5ld1N0YXRlLnByb3BlcnR5SWQpIHtcbiAgICAgICAgaW5qZWN0SWZyYW1lKG5ld1N0YXRlKTtcbiAgICB9XG59KTtcblxud2lkZ2V0U3RvcmUuc3Vic2NyaWJlKChuZXdTdGF0ZSkgPT4ge1xuICAgIGlmIChuZXdTdGF0ZS5pc1Jlc3VtZVBhbmVsVmlzaWJsZSkge1xuICAgICAgICBsZXQgaGVhZGVyVGV4dCA9IG5ld1N0YXRlLnByaW1hcnlHdWVzdE5hbWVcbiAgICAgICAgICAgID8gYCR7bmV3U3RhdGUucHJpbWFyeUd1ZXN0TmFtZVswXS50b1VwcGVyQ2FzZSgpfSR7bmV3U3RhdGUucHJpbWFyeUd1ZXN0TmFtZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICl9LCBkb24ndCBsZXQgdGhhdCByZXNlcnZhdGlvbiBzbGlwIGF3YXkhYFxuICAgICAgICAgICAgOiBcIkRvbid0IGxldCB0aGF0IHJlc2VydmF0aW9uIHNsaXAgYXdheSFcIjtcbiAgICAgICAgbGV0IHN1YmhlYWRlclRleHQgPSBcIlwiO1xuICAgICAgICBjb25zdCBmb290ZXJQYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBpZiAobmV3U3RhdGUuaXNCb29raW5nQ29tcGxldGVkKSB7XG4gICAgICAgICAgICBoZWFkZXJUZXh0ID0gXCJCb29raW5nIGNvbXBsZXRlZCFcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdTdGF0ZS5jaGVja0luRGF0ZSAmJiBuZXdTdGF0ZS5jaGVja091dERhdGUpIHtcbiAgICAgICAgICAgIGZvb3RlclBhcnRzLnB1c2goXG4gICAgICAgICAgICAgICAgYCR7ZGF5anMobmV3U3RhdGUuY2hlY2tJbkRhdGUpLmZvcm1hdChcIk1NTSBERFwiKX0gLSAke2RheWpzKG5ld1N0YXRlLmNoZWNrT3V0RGF0ZSkuZm9ybWF0KFwiTU1NIEREXCIpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV3U3RhdGUuY2FydC50b3RhbCkge1xuICAgICAgICAgICAgaWYgKG5ld1N0YXRlLmNhcnQ/LnJvb21zICYmIG5ld1N0YXRlLmNhcnQucm9vbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb21Db3VudCA9IG5ld1N0YXRlLmNhcnQucm9vbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGd1ZXN0Q291bnQgPSBuZXdTdGF0ZS5jYXJ0LnJvb21zLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgKGFjYzogbnVtYmVyLCByb29tOiBhbnkpID0+IGFjYyArIHJvb20ucGFzc2VuZ2Vycy5hZHVsdHMgKyByb29tLnBhc3NlbmdlcnMuY2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzdWJoZWFkZXJUZXh0ID0gYCR7cm9vbUNvdW50fSByb29tJHtyb29tQ291bnQgPiAxID8gXCJzXCIgOiBcIlwifSBmb3IgYDtcbiAgICAgICAgICAgICAgICBmb290ZXJQYXJ0cy5wdXNoKGAke2d1ZXN0Q291bnR9IGd1ZXN0JHtndWVzdENvdW50ID4gMSA/IFwic1wiIDogXCJcIn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YmhlYWRlclRleHQgKz0gc3RyaW5naWZ5UHJpY2UobmV3U3RhdGUuY2FydC50b3RhbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZW5kZXJSZXN1bWVQYW5lbCh7IGhlYWRlclRleHQsIHN1YmhlYWRlclRleHQsIGZvb3RlclRleHQ6IGZvb3RlclBhcnRzLmpvaW4oXCIsIFwiKSB9KTtcbiAgICB9XG5cbiAgICBpZiAobmV3U3RhdGUuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgIHNldFdpZGdldFRoZW1lKHsgYmFja2dyb3VuZENvbG9yOiBuZXdTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5ld1N0YXRlLmlzUmVhZHkpIHtcbiAgICAgICAgbmV3U3RhdGUuaXNPcGVuID8gc2hvd1dpZGdldERvbSgpIDogaGlkZVdpZGdldERvbSgpO1xuICAgICAgICBuZXdTdGF0ZS5pc1Jlc3VtZVBhbmVsVmlzaWJsZSA/IHNob3dSZXN1bWVQYW5lbERvbSgpIDogaGlkZVJlc3VtZVBhbmVsRG9tKCk7XG4gICAgICAgIGhpZGVMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXlMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH1cbn0pO1xuXG5mdW5jdGlvbiBhZGRMaW5rRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgZnVuY3Rpb24gaGFuZGxlTGlua0NsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGUgZXZlbnQgdGFyZ2V0IGhhcyBhIHZhbGlkIGhyZWZcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlIGFzIEhUTUxBbmNob3JFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRhcmdldC50YWdOYW1lICE9PSBcIkFcIiAmJiBwYXJlbnQ/LnRhZ05hbWUgPT09IFwiQVwiKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmhyZWYgPSBwYXJlbnQ/LmhyZWY7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmtIcmVmID0gdGFyZ2V0LmhyZWYgfHwgXCJcIjtcbiAgICAgICAgICAgIGlmICghbGlua0hyZWYuaW5jbHVkZXMoXCI/XCIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBnZXRQYXJhbXNGcm9tVXJsKG5ldyBVUkxTZWFyY2hQYXJhbXMobGlua0hyZWYuc3Vic3RyaW5nKGxpbmtIcmVmLmluZGV4T2YoXCI/XCIpKSkpO1xuXG4gICAgICAgICAgICBpZiAodXJsUGFyYW1zLnRyaXBmdXNpb24gPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNsaWVudCwgcHJvcGVydHlJZCwgcHJvcGVydHlTbHVnLCBsYW5kaW5nUGFnZVBhdGgsIGxhbmRpbmdQYWdlSWQsIGVudiB9ID0gZ2V0RGVmYXVsdFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGJvb2soe1xuICAgICAgICAgICAgICAgICAgICBjbGllbnQ6IHVybFBhcmFtcy5jbGllbnQgPz8gY2xpZW50LFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUlkOiB1cmxQYXJhbXMucHJvcGVydHlJZCA/ICt1cmxQYXJhbXMucHJvcGVydHlJZCA6IHByb3BlcnR5SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U2x1ZzogdXJsUGFyYW1zLnByb3BlcnR5U2x1ZyA/PyBwcm9wZXJ0eVNsdWcsXG4gICAgICAgICAgICAgICAgICAgIGxhbmRpbmdQYWdlUGF0aDogdXJsUGFyYW1zLmxhbmRpbmdQYWdlUGF0aCA/PyBsYW5kaW5nUGFnZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGxhbmRpbmdQYWdlSWQ6IHVybFBhcmFtcy5sYW5kaW5nUGFnZUlkID8gK3VybFBhcmFtcy5sYW5kaW5nUGFnZUlkIDogbGFuZGluZ1BhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogdXJsUGFyYW1zLm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgPyBCT09LSU5HX01PREUuYXBwZW5kIDogQk9PS0lOR19NT0RFLm5vcm1hbCxcbiAgICAgICAgICAgICAgICAgICAgYm9va2luZ0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW1zPy5ib29raW5nSWQgJiYgdXJsUGFyYW1zPy5tb2RlID09PSBCT09LSU5HX01PREUuYXBwZW5kID8gK3VybFBhcmFtcy5ib29raW5nSWQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvZmZlcklkOiB1cmxQYXJhbXMub2ZmZXJJZCA/ICt1cmxQYXJhbXMub2ZmZXJJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tJbjogdXJsUGFyYW1zLmNoZWNrSW4sXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrT3V0OiB1cmxQYXJhbXMuY2hlY2tPdXQsXG4gICAgICAgICAgICAgICAgICAgIGFkdWx0czogdXJsUGFyYW1zLmFkdWx0cyA/ICt1cmxQYXJhbXMuYWR1bHRzIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdXJsUGFyYW1zLmNoaWxkcmVuID8gdXJsUGFyYW1zLmNoaWxkcmVuLnNwbGl0KFwiLFwiKS5tYXAoKGFnZSkgPT4gK2FnZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVudjogdXJsUGFyYW1zLmVudiA/PyBlbnYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIoYFdpZGdldDogRXJyb3IgaW4gbGluayBjbGljayBoYW5kbGVyOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IEVycm9yIGluIGxpbmsgY2xpY2sgaGFuZGxlcjogXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goKGxpbmtFbGVtZW50KSA9PiB7XG4gICAgICAgIGxpbmtFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVMaW5rQ2xpY2spO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRQYWdlTG9hZExpc3RlbmVyKCkge1xuICAgIGZ1bmN0aW9uIG9uTG9hZEhhbmRsZXIoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gZ2V0UGFyYW1zRnJvbVVybChuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0VudHJ5ID1cbiAgICAgICAgICAgICAgICBzdGF0ZS5wcm9wZXJ0eUlkIHx8XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1zLnByb3BlcnR5SWQgfHxcbiAgICAgICAgICAgICAgICBzdGF0ZS5wcm9wZXJ0eVNsdWcgfHxcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXMucHJvcGVydHlTbHVnIHx8XG4gICAgICAgICAgICAgICAgc3RhdGUubGFuZGluZ1BhZ2VQYXRoIHx8XG4gICAgICAgICAgICAgICAgdXJsUGFyYW1zLmxhbmRpbmdQYWdlUGF0aCB8fFxuICAgICAgICAgICAgICAgIHN0YXRlLmxhbmRpbmdQYWdlSWQgfHxcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXMubGFuZGluZ1BhZ2VJZDtcbiAgICAgICAgICAgIGlmICh1cmxQYXJhbXMudHJpcGZ1c2lvbiA9PT0gXCJ0cnVlXCIgJiYgKHN0YXRlLmNsaWVudCB8fCB1cmxQYXJhbXMuY2xpZW50KSAmJiBoYXNFbnRyeSkge1xuICAgICAgICAgICAgICAgIGJvb2soe1xuICAgICAgICAgICAgICAgICAgICBjbGllbnQ6IHVybFBhcmFtcy5jbGllbnQgPz8gc3RhdGUuY2xpZW50LFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUlkOiB1cmxQYXJhbXMucHJvcGVydHlJZCA/ICt1cmxQYXJhbXMucHJvcGVydHlJZCA6IHN0YXRlLnByb3BlcnR5SWQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U2x1ZzogdXJsUGFyYW1zLnByb3BlcnR5U2x1ZyA/PyBzdGF0ZS5wcm9wZXJ0eVNsdWcsXG4gICAgICAgICAgICAgICAgICAgIGxhbmRpbmdQYWdlUGF0aDogdXJsUGFyYW1zLmxhbmRpbmdQYWdlUGF0aCA/PyBzdGF0ZS5sYW5kaW5nUGFnZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGxhbmRpbmdQYWdlSWQ6IHVybFBhcmFtcy5sYW5kaW5nUGFnZUlkID8gK3VybFBhcmFtcy5sYW5kaW5nUGFnZUlkIDogc3RhdGUubGFuZGluZ1BhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogdXJsUGFyYW1zLm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgPyBCT09LSU5HX01PREUuYXBwZW5kIDogQk9PS0lOR19NT0RFLm5vcm1hbCxcbiAgICAgICAgICAgICAgICAgICAgYm9va2luZ0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW1zPy5ib29raW5nSWQgJiYgdXJsUGFyYW1zPy5tb2RlID09PSBCT09LSU5HX01PREUuYXBwZW5kID8gK3VybFBhcmFtcy5ib29raW5nSWQgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvZmZlcklkOiB1cmxQYXJhbXMub2ZmZXJJZCA/ICt1cmxQYXJhbXMub2ZmZXJJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tJbjogdXJsUGFyYW1zLmNoZWNrSW4sXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrT3V0OiB1cmxQYXJhbXMuY2hlY2tPdXQsXG4gICAgICAgICAgICAgICAgICAgIGFkdWx0czogdXJsUGFyYW1zLmFkdWx0cyA/ICt1cmxQYXJhbXMuYWR1bHRzIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdXJsUGFyYW1zLmNoaWxkcmVuID8gdXJsUGFyYW1zLmNoaWxkcmVuLnNwbGl0KFwiLFwiKS5tYXAoKGFnZSkgPT4gK2FnZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVudjogdXJsUGFyYW1zLmVudiA/PyBzdGF0ZS5lbnYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICBvbkxvYWRIYW5kbGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZEhhbmRsZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYm9vayhwcm9wcz86IFBhcnRpYWw8R2xvYmFsU3RhdGU+KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBlbnY6IHNjcmlwdEVudiB9ID0gZ2V0RGVmYXVsdFBhcmFtcygpO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCBib29raW5nU3RhdGUgPSB7XG4gICAgICAgICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGVudjogcHJvcHM/LmVudiB8fCBjdXJyZW50U3RhdGUuZW52IHx8IHNjcmlwdEVudlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGhhc0VudGl0eSA9XG4gICAgICAgICAgICBib29raW5nU3RhdGUucHJvcGVydHlJZCB8fFxuICAgICAgICAgICAgYm9va2luZ1N0YXRlLnByb3BlcnR5U2x1ZyB8fFxuICAgICAgICAgICAgYm9va2luZ1N0YXRlLmxhbmRpbmdQYWdlUGF0aCB8fFxuICAgICAgICAgICAgYm9va2luZ1N0YXRlLmxhbmRpbmdQYWdlSWQ7XG4gICAgICAgIGlmICghYm9va2luZ1N0YXRlLmNsaWVudCB8fCAhaGFzRW50aXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJDbGllbnQgYW5kIG9uZSBvZiB7cHJvcGVydHlJZCwgcHJvcGVydHlTbHVnLCBsYW5kaW5nUGFnZVBhdGgsIGxhbmRpbmdQYWdlSWR9IGFyZSByZXF1aXJlZCB0byBib29rXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGhpZGVSZXN1bWVQYW5lbCwgcmVzZXQgfSA9IHdpZGdldFN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGhpZGVSZXN1bWVQYW5lbCgpO1xuXG4gICAgICAgIGlmICghc2hhbGxvdyhnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLCBib29raW5nU3RhdGUpKSB7XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICAgICAgZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5yZXBsYWNlKGJvb2tpbmdTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgd2lkZ2V0U3RvcmUuZ2V0U3RhdGUoKS5zaG93V2lkZ2V0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IGZhaWxlZCB0byBib29rOiAke2Vycm9yfWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBUcmlwZnVzaW9uOiBmYWlsZWQgdG8gYm9vazogJHtlcnJvcn1gKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGluaXRUcmlwZnVzaW9uU2RrKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNoZWNrSWZEb2N1bWVudExvYWRlZEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgIHByZXBhcmVEb20oKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50LCBwcm9wZXJ0eUlkLCBwcm9wZXJ0eVNsdWcsIGxhbmRpbmdQYWdlUGF0aCwgbGFuZGluZ1BhZ2VJZCwgZW52LCBlbWJlZEtleSwgZW1iZWRCYXNlIH0gPVxuICAgICAgICAgICAgICAgICAgICBnZXREZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaW5hbEVudiA9IGVudiB8fCBjdXJyZW50U3RhdGUuZW52O1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0VudGl0eSA9XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5wcm9wZXJ0eUlkIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZS5wcm9wZXJ0eVNsdWcgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlLmxhbmRpbmdQYWdlUGF0aCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUubGFuZGluZ1BhZ2VJZDtcblxuICAgICAgICAgICAgICAgIGlmICghY3VycmVudFN0YXRlLmNsaWVudCB8fCAhaGFzRW50aXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFN0b3JlLmdldFN0YXRlKCkucmVwbGFjZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTbHVnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZGluZ1BhZ2VQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZGluZ1BhZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudjogZmluYWxFbnYsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWJlZEtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5yZXBsYWNlKHsgLi4uY3VycmVudFN0YXRlLCBlbnY6IGZpbmFsRW52LCBlbWJlZEtleSwgZW1iZWRCYXNlIH0pO1xuICAgICAgICAgICAgICAgICAgICBpbmplY3RJZnJhbWUoZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZExpbmtFdmVudExpc3RlbmVycygpO1xuXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lmRG9jdW1lbnRMb2FkZWRJbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgICAgIGFkZFBhZ2VMb2FkTGlzdGVuZXIoKTtcblxuICAgICAgICBPYmplY3QuYXNzaWduKHdpbmRvdywgeyBib29rLCBjbG9zZVdpZGdldDogaGlkZVdpZGdldERvbSB9KTtcblxuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGlmICghaXNUcmlwZnVzaW9uT3JpZ2luKGUub3JpZ2luKSkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZTogQXBwTWVzc2FnZSA9IGUuZGF0YTtcbiAgICAgICAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBUFBfTUVTU0FHRV9UWVBFLkVNQkVEX0hBTkRTSEFLRV9SRVFVRVNUOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9JRlJBTUVfSUQpIGFzIEhUTUxJRnJhbWVFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuc291cmNlICE9PSBpZnJhbWU/LmNvbnRlbnRXaW5kb3cpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAoZS5zb3VyY2UgYXMgV2luZG93KS5wb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogQVBQX01FU1NBR0VfVFlQRS5FTUJFRF9IQU5EU0hBS0VfUkVTUE9OU0UsIGtleTogZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5lbWJlZEtleSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5XSURHRVRfUkVBRFk6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RvcmUuZ2V0U3RhdGUoKS5zZXRJc1JlYWR5KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBBUFBfTUVTU0FHRV9UWVBFLkJPT0tJTkdfQ09NUExFVEVEOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldFN0b3JlLmdldFN0YXRlKCkuc2V0SXNCb29raW5nQ29tcGxldGVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBBUFBfTUVTU0FHRV9UWVBFLlNFVF9DTElFTlRfVEhFTUU6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZURhdGEgPSBtZXNzYWdlLmRhdGEgYXMgeyBwcmltYXJ5Pzogc3RyaW5nIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaWVudFRoZW1lID0gbWVzc2FnZURhdGEucHJpbWFyeTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsaWVudFRoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdG9yZS5nZXRTdGF0ZSgpLnNldEJhY2tncm91bmRDb2xvcihjbGllbnRUaGVtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5TRVRfUFJJTUFSWV9HVUVTVF9OQU1FOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gbWVzc2FnZS5kYXRhIGFzIHsgbmFtZTogc3RyaW5nIH07XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldFN0b3JlLmdldFN0YXRlKCkuc2V0UHJpbWFyeUd1ZXN0TmFtZShtZXNzYWdlRGF0YS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5TRVRfREFURVM6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZURhdGEgPSBtZXNzYWdlLmRhdGEgYXMgeyBjaGVja0luPzogc3RyaW5nOyBjaGVja091dD86IHN0cmluZyB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZURhdGEuY2hlY2tJbiAmJiBtZXNzYWdlRGF0YS5jaGVja091dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RvcmUuZ2V0U3RhdGUoKS5zZXREYXRlcyhtZXNzYWdlRGF0YS5jaGVja0luLCBtZXNzYWdlRGF0YS5jaGVja091dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5TRVRfQ0FSVDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlRGF0YSA9IG1lc3NhZ2UuZGF0YSBhcyB7IGNhcnQ6IGFueSB9O1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdG9yZS5nZXRTdGF0ZSgpLnNldENhcnQobWVzc2FnZURhdGEuY2FydCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBmYWlsZWQgdG8gaW5pdCBUcmlwZnVzaW9uIEpTIFNESzogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgVHJpcGZ1c2lvbjogZmFpbGVkIHRvIGluaXQgU0RLOiAke2Vycm9yfWApO1xuICAgIH1cbn1cblxuaW5pdFRyaXBmdXNpb25TZGsoKTtcbiJdLCJuYW1lcyI6WyJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJtb2R1bGUiLCJpZCIsImV4cG9ydHMiLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwidGhpcyIsIm1hcCIsIml0ZW0iLCJjb250ZW50IiwibmVlZExheWVyIiwiY29uY2F0IiwibGVuZ3RoIiwiam9pbiIsImkiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJzdXBwb3J0cyIsImxheWVyIiwidW5kZWZpbmVkIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImsiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJlIiwibiIsInIiLCJzIiwidSIsImEiLCJvIiwiYyIsImYiLCJoIiwiZCIsImwiLCIkIiwieSIsIk0iLCJuYW1lIiwid2Vla2RheXMiLCJzcGxpdCIsIm1vbnRocyIsIm9yZGluYWwiLCJ0IiwibSIsIlN0cmluZyIsIkFycmF5IiwidiIsInoiLCJ1dGNPZmZzZXQiLCJNYXRoIiwiYWJzIiwiZmxvb3IiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiY2xvbmUiLCJhZGQiLCJjZWlsIiwicCIsInciLCJEIiwibXMiLCJRIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiZyIsIlMiLCJfIiwiTyIsImFyZ3MiLCJhcmd1bWVudHMiLCJiIiwibG9jYWxlIiwiJEwiLCJ1dGMiLCIkdSIsIngiLCIkeCIsIiRvZmZzZXQiLCJwYXJzZSIsInByb3RvdHlwZSIsIiRkIiwiRGF0ZSIsIk5hTiIsInRlc3QiLCJtYXRjaCIsInN1YnN0cmluZyIsIlVUQyIsImluaXQiLCIkeSIsImdldEZ1bGxZZWFyIiwiJE0iLCJnZXRNb250aCIsIiREIiwiZ2V0RGF0ZSIsIiRXIiwiZ2V0RGF5IiwiJEgiLCJnZXRIb3VycyIsIiRtIiwiZ2V0TWludXRlcyIsIiRzIiwiZ2V0U2Vjb25kcyIsIiRtcyIsImdldE1pbGxpc2Vjb25kcyIsIiR1dGlscyIsImlzVmFsaWQiLCJpc1NhbWUiLCJzdGFydE9mIiwiZW5kT2YiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCIkZyIsInNldCIsInVuaXgiLCJ2YWx1ZU9mIiwiZ2V0VGltZSIsInRvRGF0ZSIsImFwcGx5Iiwic2xpY2UiLCIkbG9jYWxlIiwid2Vla1N0YXJ0IiwiJHNldCIsIm1pbiIsImRheXNJbk1vbnRoIiwiZ2V0IiwiTnVtYmVyIiwicm91bmQiLCJzdWJ0cmFjdCIsImZvcm1hdCIsImludmFsaWREYXRlIiwibWVyaWRpZW0iLCJtb250aHNTaG9ydCIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZGlmZiIsInRvSlNPTiIsInRvSVNPU3RyaW5nIiwidG9VVENTdHJpbmciLCJmb3JFYWNoIiwiZXh0ZW5kIiwiJGkiLCJpc0RheWpzIiwiZW4iLCJMcyIsInN0eWxlc0luRE9NIiwiZ2V0SW5kZXhCeUlkZW50aWZpZXIiLCJpZGVudGlmaWVyIiwicmVzdWx0IiwibW9kdWxlc1RvRG9tIiwib3B0aW9ucyIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsImJhc2UiLCJjb3VudCIsImluZGV4QnlJZGVudGlmaWVyIiwib2JqIiwiY3NzIiwic291cmNlTWFwIiwicmVmZXJlbmNlcyIsInVwZGF0ZXIiLCJhZGRFbGVtZW50U3R5bGUiLCJieUluZGV4Iiwic3BsaWNlIiwiYXBpIiwiZG9tQVBJIiwidXBkYXRlIiwibmV3T2JqIiwicmVtb3ZlIiwibGFzdElkZW50aWZpZXJzIiwibmV3TGlzdCIsImluZGV4IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0Iiwic3R5bGUiLCJ0YXJnZXQiLCJzdHlsZVRhcmdldCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIndpbmRvdyIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsImdldFRhcmdldCIsIkVycm9yIiwiYXBwZW5kQ2hpbGQiLCJlbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVzIiwic3R5bGVFbGVtZW50Iiwibm9uY2UiLCJzZXRBdHRyaWJ1dGUiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZVRhZ1RyYW5zZm9ybSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiZmlyc3RDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImNhbGwiLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiZGVmaW5pdGlvbiIsImtleSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInByb3AiLCJoYXNPd25Qcm9wZXJ0eSIsIm5jIiwiV0lER0VUX0lEIiwiV0lER0VUX0lOTkVSX1dSQVBQRVJfSUQiLCJXSURHRVRfSEVBREVSX0lEIiwiV0lER0VUX1dSQVBQRVJfSUQiLCJXSURHRVRfSUZSQU1FX0lEIiwiUkVTVU1FX1BBTkVMX0lEIiwiTE9BREVSX0lEIiwiQk9PS0lOR19NT0RFIiwiY3JlYXRlSlNPTlN0b3JhZ2UiLCJnZXRTdG9yYWdlIiwic3RvcmFnZSIsImdldEl0ZW0iLCJfYSIsInN0cjIiLCJyZXZpdmVyIiwic3RyIiwiUHJvbWlzZSIsInRoZW4iLCJzZXRJdGVtIiwibmV3VmFsdWUiLCJyZXBsYWNlciIsInJlbW92ZUl0ZW0iLCJ0b1RoZW5hYmxlIiwiZm4iLCJpbnB1dCIsIm9uRnVsZmlsbGVkIiwiX29uUmVqZWN0ZWQiLCJfb25GdWxmaWxsZWQiLCJjYXRjaCIsIm9uUmVqZWN0ZWQiLCJwZXJzaXN0IiwiY29uZmlnIiwiYmFzZU9wdGlvbnMiLCJsb2NhbFN0b3JhZ2UiLCJwYXJ0aWFsaXplIiwic3RhdGUiLCJ2ZXJzaW9uIiwibWVyZ2UiLCJwZXJzaXN0ZWRTdGF0ZSIsImN1cnJlbnRTdGF0ZSIsImhhc0h5ZHJhdGVkIiwiaHlkcmF0aW9uTGlzdGVuZXJzIiwiU2V0IiwiZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzIiwiY29uc29sZSIsIndhcm4iLCJzYXZlZFNldFN0YXRlIiwic2V0U3RhdGUiLCJjb25maWdSZXN1bHQiLCJzdGF0ZUZyb21TdG9yYWdlIiwiZ2V0SW5pdGlhbFN0YXRlIiwiaHlkcmF0ZSIsIl9iIiwiY2IiLCJfYTIiLCJwb3N0UmVoeWRyYXRpb25DYWxsYmFjayIsIm9uUmVoeWRyYXRlU3RvcmFnZSIsImJpbmQiLCJkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUiLCJtaWdyYXRlIiwibWlncmF0aW9uIiwiZXJyb3IiLCJtaWdyYXRpb25SZXN1bHQiLCJtaWdyYXRlZCIsIm1pZ3JhdGVkU3RhdGUiLCJzZXRPcHRpb25zIiwibmV3T3B0aW9ucyIsImNsZWFyU3RvcmFnZSIsImdldE9wdGlvbnMiLCJyZWh5ZHJhdGUiLCJvbkh5ZHJhdGUiLCJkZWxldGUiLCJvbkZpbmlzaEh5ZHJhdGlvbiIsInNraXBIeWRyYXRpb24iLCJjcmVhdGVTdG9yZUltcGwiLCJjcmVhdGVTdGF0ZSIsImxpc3RlbmVycyIsInBhcnRpYWwiLCJuZXh0U3RhdGUiLCJpcyIsInByZXZpb3VzU3RhdGUiLCJhc3NpZ24iLCJsaXN0ZW5lciIsImdldFN0YXRlIiwiaW5pdGlhbFN0YXRlIiwic3Vic2NyaWJlIiwiY3JlYXRlU3RvcmUiLCJpbml0aWFsV2lkZ2V0U3RhdGUiLCJpc09wZW4iLCJpc1Jlc3VtZVBhbmVsVmlzaWJsZSIsImlzUmVhZHkiLCJpc0Jvb2tpbmdDb21wbGV0ZWQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwcmltYXJ5R3Vlc3ROYW1lIiwiY2hlY2tJbkRhdGUiLCJjaGVja091dERhdGUiLCJjYXJ0Iiwid2lkZ2V0U3RvcmUiLCJzaG93V2lkZ2V0IiwiaGlkZVdpZGdldCIsInNob3dSZXN1bWVQYW5lbCIsImhpZGVSZXN1bWVQYW5lbCIsInNldElzUmVhZHkiLCJzZXRJc0Jvb2tpbmdDb21wbGV0ZWQiLCJzZXRCYWNrZ3JvdW5kQ29sb3IiLCJzZXRQcmltYXJ5R3Vlc3ROYW1lIiwic2V0Q2FydCIsInNldERhdGVzIiwicmVzZXQiLCJzZXNzaW9uU3RvcmFnZSIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsImZpbHRlciIsImluY2x1ZGVzIiwiY2xpZW50IiwicHJvcGVydHlJZCIsInByb3BlcnR5U2x1ZyIsImxhbmRpbmdQYWdlUGF0aCIsImxhbmRpbmdQYWdlSWQiLCJtb2RlIiwiYm9va2luZ0lkIiwiY2hlY2tJbiIsImNoZWNrT3V0IiwiYWR1bHRzIiwiY2hpbGRyZW4iLCJvZmZlcklkIiwiZW52IiwiZW1iZWRLZXkiLCJlbWJlZEJhc2UiLCJnbG9iYWxTdG9yZSIsIkVNQkVEX0tFWV9GT1JNQVQiLCJnZXREZWZhdWx0UGFyYW1zIiwianNTZGtTcmMiLCJnZXRFbGVtZW50QnlJZCIsImdldEF0dHJpYnV0ZSIsInVybFBhcmFtcyIsImdldFBhcmFtc0Zyb21VcmwiLCJVUkxTZWFyY2hQYXJhbXMiLCJpbmRleE9mIiwicmF3RW1iZWRLZXkiLCJsb2dnZXIiLCJ1cmxTZWFyY2hQYXJhbXMiLCJhdmFpbGFibGVTZWFyY2hQYXJhbXNNYXAiLCJ0cmlwZnVzaW9uIiwicHJvcGVydHlpZCIsInByb3BlcnR5c2x1ZyIsImxhbmRpbmdwYWdlcGF0aCIsImxhbmRpbmdwYWdlaWQiLCJvZmZlcmlkIiwiYm9va2luZ2lkIiwiY2hlY2tpbiIsImNoZWNrb3V0IiwicGsiLCJlbWJlZGJhc2UiLCJmcm9tIiwicmVkdWNlIiwicHJldiIsInNlYXJjaFBhcmFtS2V5Iiwic2VhcmNoUGFyYW1WYWx1ZSIsIm1lc3NhZ2UiLCJ0eXBlIiwidHJpcGZ1c2lvbkJhc2VVcmwiLCJnZXRUcmlwZnVzaW9uQmFzZVVybCIsInVybCIsInBheWxvYWQiLCJwYWdlIiwibG9jYXRpb24iLCJocmVmIiwiaGVhZGVycyIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsInJlc3BvbnNlIiwianNvbiIsImxvZyIsIm9yaWdpbiIsImhpZGVXaWRnZXREb20iLCIkd2lkZ2V0IiwiJHdpZGdldFdyYXBwZXIiLCJvdmVyZmxvdyIsImJhY2tncm91bmQiLCJkaXNwbGF5IiwiekluZGV4IiwiaW5qZWN0SWZyYW1lIiwicmVzdCIsIiRpbm5lcldyYXBwZXIiLCIkd2lkZ2V0SWZyYW1lIiwib2ZmZXJTZWdtZW50IiwicHJvcGVydHlTZWdtZW50IiwiYWRkaXRpb25hbFBhcmFtcyIsInZhbHVlIiwiYWxsUGFyYW1zIiwiQm9vbGVhbiIsImxvY2tQYWdlU2Nyb2xsIiwiaXNJdGVyYWJsZSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaGFzSXRlcmFibGVFbnRyaWVzIiwiY29tcGFyZUVudHJpZXMiLCJ2YWx1ZUEiLCJ2YWx1ZUIiLCJtYXBBIiwiTWFwIiwibWFwQiIsInNpemUiLCJoYXMiLCJsb2NhbHMiLCJib29rIiwicHJvcHMiLCJzY3JpcHRFbnYiLCJib29raW5nU3RhdGUiLCJoYXNFbnRpdHkiLCJnZXRQcm90b3R5cGVPZiIsIml0ZXJhdG9yQSIsIml0ZXJhdG9yQiIsIm5leHRBIiwibmV4dCIsIm5leHRCIiwiZG9uZSIsImNvbXBhcmVJdGVyYWJsZXMiLCJuZXdTdGF0ZSIsImNlbnRzIiwiJGxvYWRpbmdEaXYiLCIkcmVzdW1lUGFuZWwiLCJoZWFkZXJUZXh0IiwidG9VcHBlckNhc2UiLCJzdWJoZWFkZXJUZXh0IiwiZm9vdGVyUGFydHMiLCJ0b3RhbCIsInJvb21zIiwicm9vbUNvdW50IiwiZ3Vlc3RDb3VudCIsImFjYyIsInJvb20iLCJwYXNzZW5nZXJzIiwiSW50bCIsIk51bWJlckZvcm1hdCIsImN1cnJlbmN5IiwiZm9vdGVyVGV4dCIsImlubmVySFRNTCIsInJlbmRlclJlc3VtZVBhbmVsIiwiJHJlc3VtZVBhbmVsV3JhcHBlciIsIiR3aWRnZXRIZWFkZXIiLCJzZXRXaWRnZXRUaGVtZSIsImhlaWdodCIsInNldFRpbWVvdXQiLCJmb2N1cyIsInNob3dXaWRnZXREb20iLCJkaXNwbGF5TG9hZGluZ092ZXJsYXkiLCJzZXRJbnRlcnZhbCIsInJlYWR5U3RhdGUiLCIkd2lkZ2V0SW5uZXJXcmFwcGVyIiwiJHdpZGdldEhlYWRlclRpdGxlIiwiJHdpZGdldENsb3NlQnV0dG9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicHJlcGFyZURvbSIsImZpbmFsRW52IiwiaGFuZGxlTGlua0NsaWNrIiwidGFnTmFtZSIsImxpbmtIcmVmIiwicHJldmVudERlZmF1bHQiLCJhZ2UiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGlua0VsZW1lbnQiLCJhZGRMaW5rRXZlbnRMaXN0ZW5lcnMiLCJjbGVhckludGVydmFsIiwib25Mb2FkSGFuZGxlciIsInNlYXJjaCIsImhhc0VudHJ5IiwiYWRkUGFnZUxvYWRMaXN0ZW5lciIsImNsb3NlV2lkZ2V0Iiwib25tZXNzYWdlIiwiVVJMIiwiaG9zdCIsInByb3RvY29sIiwiaXNUcmlwZnVzaW9uT3JpZ2luIiwiaWZyYW1lIiwic291cmNlIiwiY29udGVudFdpbmRvdyIsInBvc3RNZXNzYWdlIiwiY2xpZW50VGhlbWUiLCJtZXNzYWdlRGF0YSIsInByaW1hcnkiLCJpbml0VHJpcGZ1c2lvblNkayJdLCJzb3VyY2VSb290IjoiIn0=
1
+ (()=>{var e={365(e,n,t){"use strict";t.d(n,{A:()=>s});var r=t(354),i=t.n(r),o=t(314),a=t.n(o)()(i());a.push([e.id,"@import url(https://use.typekit.net/sag8ceb.css);"]),a.push([e.id,'#tripfusion-loader {\n color: white;\n margin-right: -50%;\n position: absolute;\n top: 50%;\n left: 50%;\n font-family: futura-lt-w01-book, futura-lt-w05-book, Arial, Helvetica, sans-serif;\n transform: translate(-50%, -50%);\n}\n\n#tripfusion-loader span {\n font-weight: bold;\n font-size: 1.3rem;\n}\n\n#tripfusion-resume-panel {\n max-width: 250px;\n position: fixed;\n overflow: hidden;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding: 12px 24px;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25), 0px 4px 4px rgba(0, 0, 0, 0.1);\n right: 30px;\n z-index: 100000000000;\n bottom: 40px;\n border: none;\n transform: translateX(400px);\n border-radius: 16px;\n color: white;\n font-size: 1rem;\n font-family: sweet-sans-pro, sans-serif;\n}\n\n.tripfusion-resume-panel__header {\n display: flex;\n justify-content: space-between;\n gap: 2em;\n align-items: center;\n}\n\n.tripfusion-resume-panel__header svg {\n width: 18px;\n height: 18px;\n fill: white;\n flex-shrink: 0;\n}\n\n.tripfusion-resume-panel__header span,\n.tripfusion-resume-panel__subheader {\n font-weight: 700;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tripfusion-resume-panel__footer {\n font-family: Roboto, Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n font-weight: 400;\n}\n\n#tripfusion-widget-wrapper {\n background: rgba(0, 0, 0, 0);\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n transition: background 0.5s ease-out;\n}\n\n#tripfusion-widget {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n right: 0px;\n}\n\n#tripfusion-widget-inner-wrapper {\n position: fixed;\n display: flex;\n flex-direction: column;\n min-width: 320px;\n width: 100%;\n height: 100%;\n right: 0px;\n bottom: 0px;\n background: white;\n border-radius: 0;\n box-shadow: none;\n font-family: "Roboto", "Helvetica", "Arial", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.5;\n letter-spacing: 0.00938em;\n}\n\n#tripfusion-widget-header {\n height: 60px;\n border-bottom: 1px solid #f1f1f1;\n padding: 0 16px 0 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: white;\n}\n\n#tripfusion-widget-iframe {\n height: 100%;\n border: none;\n}\n\n#tripfusion-widget-header-title {\n font-family: sweet-sans-pro, sans-serif;\n line-height: 1.2;\n font-weight: 700;\n font-size: 1rem;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n}\n\n#tripfusion-widget-close-button {\n overflow: hidden;\n position: relative;\n border: none;\n padding: 0;\n width: 2em;\n height: 2em;\n border-radius: 50%;\n background: transparent;\n font: inherit;\n text-indent: 100%;\n cursor: pointer;\n\n &:focus {\n outline: solid 0 transparent;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:before,\n &:after {\n position: absolute;\n top: 25%;\n left: calc(50% - 0.0625em);\n width: 0.125em;\n height: 50%;\n border-radius: 0.125em;\n transform: rotate(45deg);\n background: currentcolor;\n color: white;\n content: "";\n }\n\n &:after {\n transform: rotate(-45deg);\n }\n}\n\n.tripfusion-resume-panel--slide-in {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(0) !important;\n}\n\n.tripfusion-resume-panel--slide-out {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(400px) !important;\n}\n\n.tripfusion-resume-panel--resize-in {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: 30px !important;\n}\n\n.tripfusion-resume-panel--resize-in:hover {\n width: 217px !important;\n height: 46px !important;\n transition: all 300ms linear;\n cursor: pointer;\n}\n\n.tripfusion-resume-panel--resize-out {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: -100px !important;\n}\n\n.slide-in {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-up 0.8s forwards !important;\n -webkit-animation: slide-up 0.8s forwards !important;\n z-index: 1000000000000;\n}\n\n.slide-out {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-down 0.5s forwards !important;\n -webkit-animation: slide-down 0.5s forwards !important;\n z-index: -1000000000000;\n}\n\n@keyframes slide-up {\n 100% {\n transform: translateY(0%);\n }\n}\n\n@-webkit-keyframes slide-up {\n 100% {\n -webkit-transform: translateY(0%);\n }\n}\n\n@keyframes slide-down {\n 0% {\n transform: translateY(0%);\n }\n\n 100% {\n transform: translateY(100%);\n }\n}\n\n@-webkit-keyframes slide-down {\n 0% {\n -webkit-transform: translateY(0%);\n }\n\n 100% {\n -webkit-transform: translateY(100%);\n }\n}\n',"",{version:3,sources:["webpack://./src/styles.css"],names:[],mappings:"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",sourcesContent:['@import url("https://use.typekit.net/sag8ceb.css");\n\n#tripfusion-loader {\n color: white;\n margin-right: -50%;\n position: absolute;\n top: 50%;\n left: 50%;\n font-family: futura-lt-w01-book, futura-lt-w05-book, Arial, Helvetica, sans-serif;\n transform: translate(-50%, -50%);\n}\n\n#tripfusion-loader span {\n font-weight: bold;\n font-size: 1.3rem;\n}\n\n#tripfusion-resume-panel {\n max-width: 250px;\n position: fixed;\n overflow: hidden;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n padding: 12px 24px;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25), 0px 4px 4px rgba(0, 0, 0, 0.1);\n right: 30px;\n z-index: 100000000000;\n bottom: 40px;\n border: none;\n transform: translateX(400px);\n border-radius: 16px;\n color: white;\n font-size: 1rem;\n font-family: sweet-sans-pro, sans-serif;\n}\n\n.tripfusion-resume-panel__header {\n display: flex;\n justify-content: space-between;\n gap: 2em;\n align-items: center;\n}\n\n.tripfusion-resume-panel__header svg {\n width: 18px;\n height: 18px;\n fill: white;\n flex-shrink: 0;\n}\n\n.tripfusion-resume-panel__header span,\n.tripfusion-resume-panel__subheader {\n font-weight: 700;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tripfusion-resume-panel__footer {\n font-family: Roboto, Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n font-weight: 400;\n}\n\n#tripfusion-widget-wrapper {\n background: rgba(0, 0, 0, 0);\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n transition: background 0.5s ease-out;\n}\n\n#tripfusion-widget {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n right: 0px;\n}\n\n#tripfusion-widget-inner-wrapper {\n position: fixed;\n display: flex;\n flex-direction: column;\n min-width: 320px;\n width: 100%;\n height: 100%;\n right: 0px;\n bottom: 0px;\n background: white;\n border-radius: 0;\n box-shadow: none;\n font-family: "Roboto", "Helvetica", "Arial", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.5;\n letter-spacing: 0.00938em;\n}\n\n#tripfusion-widget-header {\n height: 60px;\n border-bottom: 1px solid #f1f1f1;\n padding: 0 16px 0 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: white;\n}\n\n#tripfusion-widget-iframe {\n height: 100%;\n border: none;\n}\n\n#tripfusion-widget-header-title {\n font-family: sweet-sans-pro, sans-serif;\n line-height: 1.2;\n font-weight: 700;\n font-size: 1rem;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n}\n\n#tripfusion-widget-close-button {\n overflow: hidden;\n position: relative;\n border: none;\n padding: 0;\n width: 2em;\n height: 2em;\n border-radius: 50%;\n background: transparent;\n font: inherit;\n text-indent: 100%;\n cursor: pointer;\n\n &:focus {\n outline: solid 0 transparent;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:before,\n &:after {\n position: absolute;\n top: 25%;\n left: calc(50% - 0.0625em);\n width: 0.125em;\n height: 50%;\n border-radius: 0.125em;\n transform: rotate(45deg);\n background: currentcolor;\n color: white;\n content: "";\n }\n\n &:after {\n transform: rotate(-45deg);\n }\n}\n\n.tripfusion-resume-panel--slide-in {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(0) !important;\n}\n\n.tripfusion-resume-panel--slide-out {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(400px) !important;\n}\n\n.tripfusion-resume-panel--resize-in {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: 30px !important;\n}\n\n.tripfusion-resume-panel--resize-in:hover {\n width: 217px !important;\n height: 46px !important;\n transition: all 300ms linear;\n cursor: pointer;\n}\n\n.tripfusion-resume-panel--resize-out {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: -100px !important;\n}\n\n.slide-in {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-up 0.8s forwards !important;\n -webkit-animation: slide-up 0.8s forwards !important;\n z-index: 1000000000000;\n}\n\n.slide-out {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-down 0.5s forwards !important;\n -webkit-animation: slide-down 0.5s forwards !important;\n z-index: -1000000000000;\n}\n\n@keyframes slide-up {\n 100% {\n transform: translateY(0%);\n }\n}\n\n@-webkit-keyframes slide-up {\n 100% {\n -webkit-transform: translateY(0%);\n }\n}\n\n@keyframes slide-down {\n 0% {\n transform: translateY(0%);\n }\n\n 100% {\n transform: translateY(100%);\n }\n}\n\n@-webkit-keyframes slide-down {\n 0% {\n -webkit-transform: translateY(0%);\n }\n\n 100% {\n -webkit-transform: translateY(100%);\n }\n}\n'],sourceRoot:""}]);const s=a},314(e){"use strict";e.exports=function(e){var n=[];return n.toString=function(){return this.map(function(n){var t="",r=void 0!==n[5];return n[4]&&(t+="@supports (".concat(n[4],") {")),n[2]&&(t+="@media ".concat(n[2]," {")),r&&(t+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),t+=e(n),r&&(t+="}"),n[2]&&(t+="}"),n[4]&&(t+="}"),t}).join("")},n.i=function(e,t,r,i,o){"string"==typeof e&&(e=[[null,e,void 0]]);var a={};if(r)for(var s=0;s<this.length;s++){var u=this[s][0];null!=u&&(a[u]=!0)}for(var l=0;l<e.length;l++){var c=[].concat(e[l]);r&&a[c[0]]||(void 0!==o&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=o),t&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=t):c[2]=t),i&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=i):c[4]="".concat(i)),n.push(c))}},n}},354(e){"use strict";e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),o="/*# ".concat(i," */");return[n].concat([o]).join("\n")}return[n].join("\n")}},353(e){e.exports=function(){"use strict";var e=6e4,n=36e5,t="millisecond",r="second",i="minute",o="hour",a="day",s="week",u="month",l="quarter",c="year",d="date",p="Invalid Date",f=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,A=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,g={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(e){var n=["th","st","nd","rd"],t=e%100;return"["+e+(n[(t-20)%10]||n[t]||n[0])+"]"}},h=function(e,n,t){var r=String(e);return!r||r.length>=n?e:""+Array(n+1-r.length).join(t)+e},m={s:h,z:function(e){var n=-e.utcOffset(),t=Math.abs(n),r=Math.floor(t/60),i=t%60;return(n<=0?"+":"-")+h(r,2,"0")+":"+h(i,2,"0")},m:function e(n,t){if(n.date()<t.date())return-e(t,n);var r=12*(t.year()-n.year())+(t.month()-n.month()),i=n.clone().add(r,u),o=t-i<0,a=n.clone().add(r+(o?-1:1),u);return+(-(r+(t-i)/(o?i-a:a-i))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(e){return{M:u,y:c,w:s,d:a,D:d,h:o,m:i,s:r,ms:t,Q:l}[e]||String(e||"").toLowerCase().replace(/s$/,"")},u:function(e){return void 0===e}},y="en",v={};v[y]=g;var I="$isDayjsObject",b=function(e){return e instanceof k||!(!e||!e[I])},C=function e(n,t,r){var i;if(!n)return y;if("string"==typeof n){var o=n.toLowerCase();v[o]&&(i=o),t&&(v[o]=t,i=o);var a=n.split("-");if(!i&&a.length>1)return e(a[0])}else{var s=n.name;v[s]=n,i=s}return!r&&i&&(y=i),i||!r&&y},B=function(e,n){if(b(e))return e.clone();var t="object"==typeof n?n:{};return t.date=e,t.args=arguments,new k(t)},w=m;w.l=C,w.i=b,w.w=function(e,n){return B(e,{locale:n.$L,utc:n.$u,x:n.$x,$offset:n.$offset})};var k=function(){function g(e){this.$L=C(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[I]=!0}var h=g.prototype;return h.parse=function(e){this.$d=function(e){var n=e.date,t=e.utc;if(null===n)return new Date(NaN);if(w.u(n))return new Date;if(n instanceof Date)return new Date(n);if("string"==typeof n&&!/Z$/i.test(n)){var r=n.match(f);if(r){var i=r[2]-1||0,o=(r[7]||"0").substring(0,3);return t?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(n)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return w},h.isValid=function(){return!(this.$d.toString()===p)},h.isSame=function(e,n){var t=B(e);return this.startOf(n)<=t&&t<=this.endOf(n)},h.isAfter=function(e,n){return B(e)<this.startOf(n)},h.isBefore=function(e,n){return this.endOf(n)<B(e)},h.$g=function(e,n,t){return w.u(e)?this[n]:this.set(t,e)},h.unix=function(){return Math.floor(this.valueOf()/1e3)},h.valueOf=function(){return this.$d.getTime()},h.startOf=function(e,n){var t=this,l=!!w.u(n)||n,p=w.p(e),f=function(e,n){var r=w.w(t.$u?Date.UTC(t.$y,n,e):new Date(t.$y,n,e),t);return l?r:r.endOf(a)},A=function(e,n){return w.w(t.toDate()[e].apply(t.toDate("s"),(l?[0,0,0,0]:[23,59,59,999]).slice(n)),t)},g=this.$W,h=this.$M,m=this.$D,y="set"+(this.$u?"UTC":"");switch(p){case c:return l?f(1,0):f(31,11);case u:return l?f(1,h):f(0,h+1);case s:var v=this.$locale().weekStart||0,I=(g<v?g+7:g)-v;return f(l?m-I:m+(6-I),h);case a:case d:return A(y+"Hours",0);case o:return A(y+"Minutes",1);case i:return A(y+"Seconds",2);case r:return A(y+"Milliseconds",3);default:return this.clone()}},h.endOf=function(e){return this.startOf(e,!1)},h.$set=function(e,n){var s,l=w.p(e),p="set"+(this.$u?"UTC":""),f=(s={},s[a]=p+"Date",s[d]=p+"Date",s[u]=p+"Month",s[c]=p+"FullYear",s[o]=p+"Hours",s[i]=p+"Minutes",s[r]=p+"Seconds",s[t]=p+"Milliseconds",s)[l],A=l===a?this.$D+(n-this.$W):n;if(l===u||l===c){var g=this.clone().set(d,1);g.$d[f](A),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](A);return this.init(),this},h.set=function(e,n){return this.clone().$set(e,n)},h.get=function(e){return this[w.p(e)]()},h.add=function(t,l){var d,p=this;t=Number(t);var f=w.p(l),A=function(e){var n=B(p);return w.w(n.date(n.date()+Math.round(e*t)),p)};if(f===u)return this.set(u,this.$M+t);if(f===c)return this.set(c,this.$y+t);if(f===a)return A(1);if(f===s)return A(7);var g=(d={},d[i]=e,d[o]=n,d[r]=1e3,d)[f]||1,h=this.$d.getTime()+t*g;return w.w(h,this)},h.subtract=function(e,n){return this.add(-1*e,n)},h.format=function(e){var n=this,t=this.$locale();if(!this.isValid())return t.invalidDate||p;var r=e||"YYYY-MM-DDTHH:mm:ssZ",i=w.z(this),o=this.$H,a=this.$m,s=this.$M,u=t.weekdays,l=t.months,c=t.meridiem,d=function(e,t,i,o){return e&&(e[t]||e(n,r))||i[t].slice(0,o)},f=function(e){return w.s(o%12||12,e,"0")},g=c||function(e,n,t){var r=e<12?"AM":"PM";return t?r.toLowerCase():r};return r.replace(A,function(e,r){return r||function(e){switch(e){case"YY":return String(n.$y).slice(-2);case"YYYY":return w.s(n.$y,4,"0");case"M":return s+1;case"MM":return w.s(s+1,2,"0");case"MMM":return d(t.monthsShort,s,l,3);case"MMMM":return d(l,s);case"D":return n.$D;case"DD":return w.s(n.$D,2,"0");case"d":return String(n.$W);case"dd":return d(t.weekdaysMin,n.$W,u,2);case"ddd":return d(t.weekdaysShort,n.$W,u,3);case"dddd":return u[n.$W];case"H":return String(o);case"HH":return w.s(o,2,"0");case"h":return f(1);case"hh":return f(2);case"a":return g(o,a,!0);case"A":return g(o,a,!1);case"m":return String(a);case"mm":return w.s(a,2,"0");case"s":return String(n.$s);case"ss":return w.s(n.$s,2,"0");case"SSS":return w.s(n.$ms,3,"0");case"Z":return i}return null}(e)||i.replace(":","")})},h.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},h.diff=function(t,d,p){var f,A=this,g=w.p(d),h=B(t),m=(h.utcOffset()-this.utcOffset())*e,y=this-h,v=function(){return w.m(A,h)};switch(g){case c:f=v()/12;break;case u:f=v();break;case l:f=v()/3;break;case s:f=(y-m)/6048e5;break;case a:f=(y-m)/864e5;break;case o:f=y/n;break;case i:f=y/e;break;case r:f=y/1e3;break;default:f=y}return p?f:w.a(f)},h.daysInMonth=function(){return this.endOf(u).$D},h.$locale=function(){return v[this.$L]},h.locale=function(e,n){if(!e)return this.$L;var t=this.clone(),r=C(e,n,!0);return r&&(t.$L=r),t},h.clone=function(){return w.w(this.$d,this)},h.toDate=function(){return new Date(this.valueOf())},h.toJSON=function(){return this.isValid()?this.toISOString():null},h.toISOString=function(){return this.$d.toISOString()},h.toString=function(){return this.$d.toUTCString()},g}(),x=k.prototype;return B.prototype=x,[["$ms",t],["$s",r],["$m",i],["$H",o],["$W",a],["$M",u],["$y",c],["$D",d]].forEach(function(e){x[e[1]]=function(n){return this.$g(n,e[0],e[1])}}),B.extend=function(e,n){return e.$i||(e(n,k,B),e.$i=!0),B},B.locale=C,B.isDayjs=b,B.unix=function(e){return B(1e3*e)},B.en=v[y],B.Ls=v,B.p={},B}()},72(e){"use strict";var n=[];function t(e){for(var t=-1,r=0;r<n.length;r++)if(n[r].identifier===e){t=r;break}return t}function r(e,r){for(var o={},a=[],s=0;s<e.length;s++){var u=e[s],l=r.base?u[0]+r.base:u[0],c=o[l]||0,d="".concat(l," ").concat(c);o[l]=c+1;var p=t(d),f={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==p)n[p].references++,n[p].updater(f);else{var A=i(f,r);r.byIndex=s,n.splice(s,0,{identifier:d,updater:A,references:1})}a.push(d)}return a}function i(e,n){var t=n.domAPI(n);return t.update(e),function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap&&n.supports===e.supports&&n.layer===e.layer)return;t.update(e=n)}else t.remove()}}e.exports=function(e,i){var o=r(e=e||[],i=i||{});return function(e){e=e||[];for(var a=0;a<o.length;a++){var s=t(o[a]);n[s].references--}for(var u=r(e,i),l=0;l<o.length;l++){var c=t(o[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}o=u}}},659(e){"use strict";var n={};e.exports=function(e,t){var r=function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(t)}},540(e){"use strict";e.exports=function(e){var n=document.createElement("style");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},56(e,n,t){"use strict";e.exports=function(e){var n=t.nc;n&&e.setAttribute("nonce",n)}},825(e){"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){!function(e,n,t){var r="";t.supports&&(r+="@supports (".concat(t.supports,") {")),t.media&&(r+="@media ".concat(t.media," {"));var i=void 0!==t.layer;i&&(r+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),r+=t.css,i&&(r+="}"),t.media&&(r+="}"),t.supports&&(r+="}");var o=t.sourceMap;o&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),n.styleTagTransform(r,e,n.options)}(n,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)}}}},113(e){"use strict";e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}}},n={};function t(r){var i=n[r];if(void 0!==i)return i.exports;var o=n[r]={id:r,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.exports}t.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},t.d=(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},t.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),t.nc=void 0,(()=>{"use strict";var e="tripfusion-widget",n="tripfusion-widget-inner-wrapper",r="tripfusion-widget-header",i="tripfusion-widget-wrapper",o="tripfusion-widget-iframe",a="tripfusion-resume-panel",s="tripfusion-loader",u="normal",l="append";function c(e,n){let t;try{t=e()}catch(e){return}return{getItem:e=>{var r;const i=e=>null===e?null:JSON.parse(e,null==n?void 0:n.reviver),o=null!=(r=t.getItem(e))?r:null;return o instanceof Promise?o.then(i):i(o)},setItem:(e,r)=>t.setItem(e,JSON.stringify(r,null==n?void 0:n.replacer)),removeItem:e=>t.removeItem(e)}}const d=e=>n=>{try{const t=e(n);return t instanceof Promise?t:{then:e=>d(e)(t),catch(e){return this}}}catch(e){return{then(e){return this},catch:n=>d(n)(e)}}},p=(e,n)=>(t,r,i)=>{let o={storage:c(()=>localStorage),partialize:e=>e,version:0,merge:(e,n)=>({...n,...e}),...n},a=!1;const s=new Set,u=new Set;let l=o.storage;if(!l)return e((...e)=>{console.warn(`[zustand persist middleware] Unable to update item '${o.name}', the given storage is currently unavailable.`),t(...e)},r,i);const p=()=>{const e=o.partialize({...r()});return l.setItem(o.name,{state:e,version:o.version})},f=i.setState;i.setState=(e,n)=>(f(e,n),p());const A=e((...e)=>(t(...e),p()),r,i);let g;i.getInitialState=()=>A;const h=()=>{var e,n;if(!l)return;a=!1,s.forEach(e=>{var n;return e(null!=(n=r())?n:A)});const i=(null==(n=o.onRehydrateStorage)?void 0:n.call(o,null!=(e=r())?e:A))||void 0;return d(l.getItem.bind(l))(o.name).then(e=>{if(e){if("number"!=typeof e.version||e.version===o.version)return[!1,e.state];if(o.migrate){const n=o.migrate(e.state,e.version);return n instanceof Promise?n.then(e=>[!0,e]):[!0,n]}console.error("State loaded from storage couldn't be migrated since no migrate function was provided")}return[!1,void 0]}).then(e=>{var n;const[i,a]=e;if(g=o.merge(a,null!=(n=r())?n:A),t(g,!0),i)return p()}).then(()=>{null==i||i(g,void 0),g=r(),a=!0,u.forEach(e=>e(g))}).catch(e=>{null==i||i(void 0,e)})};return i.persist={setOptions:e=>{o={...o,...e},e.storage&&(l=e.storage)},clearStorage:()=>{null==l||l.removeItem(o.name)},getOptions:()=>o,rehydrate:()=>h(),hasHydrated:()=>a,onHydrate:e=>(s.add(e),()=>{s.delete(e)}),onFinishHydration:e=>(u.add(e),()=>{u.delete(e)})},o.skipHydration||h(),g||A},f=e=>{let n;const t=new Set,r=(e,r)=>{const i="function"==typeof e?e(n):e;if(!Object.is(i,n)){const e=n;n=(null!=r?r:"object"!=typeof i||null===i)?i:Object.assign({},n,i),t.forEach(t=>t(n,e))}},i=()=>n,o={setState:r,getState:i,getInitialState:()=>a,subscribe:e=>(t.add(e),()=>t.delete(e))},a=n=e(r,i,o);return o},A=e=>e?f(e):f;var g=function(){return g=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},g.apply(this,arguments)},h={isOpen:!1,isResumePanelVisible:!1,isReady:!1,isBookingCompleted:!1,backgroundColor:"rgb(35, 76, 121)",primaryGuestName:null,checkInDate:null,checkOutDate:null,cart:{}},m=A()(p(function(e){return g(g({},h),{showWidget:function(){return e({isOpen:!0})},hideWidget:function(){return e({isOpen:!1})},showResumePanel:function(){return e({isResumePanelVisible:!0})},hideResumePanel:function(){return e({isResumePanelVisible:!1})},setIsReady:function(n){return e({isReady:n})},setIsBookingCompleted:function(n){return e({isBookingCompleted:n})},setBackgroundColor:function(n){return e(n?{backgroundColor:n}:{backgroundColor:h.backgroundColor})},setPrimaryGuestName:function(n){return e({primaryGuestName:n})},setCart:function(n){return e({cart:n})},setDates:function(n,t){return e({checkInDate:n,checkOutDate:t})},reset:function(){return e(h)}})},{name:"widgetStore",storage:c(function(){return sessionStorage}),partialize:function(e){return Object.fromEntries(Object.entries(e).filter(function(e){var n=e[0];return!["cart","isReady"].includes(n)}))},onRehydrateStorage:function(){return function(e){(null==e?void 0:e.isBookingCompleted)&&e.reset()}}})),y=function(){return y=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},y.apply(this,arguments)},v={client:null,propertyId:null,propertySlug:null,landingPagePath:null,landingPageId:null,mode:u,bookingId:null,checkIn:null,checkOut:null,adults:null,children:null,offerId:null,env:null,embedKey:null,embedBase:null},I=A()(p(function(e){return y(y({},v),{replace:function(n){return e(y(y({},v),n))}})},{name:"globalStore",storage:c(function(){return sessionStorage}),partialize:function(e){return e.env,e.embedKey,e.embedBase,function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(t[r[i]]=e[r[i]])}return t}(e,["env","embedKey","embedBase"])}})),b=function(){return b=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},b.apply(this,arguments)},C=/^pk_(live|test)_[A-Za-z0-9]{32}$/,B=function(){var e,n,t,r,i,o=document.getElementById("tripfusion-sdk").getAttribute("src"),a=w(new URLSearchParams(o.substring(o.indexOf("?")))),s=null!==(e=a.client)&&void 0!==e?e:null,u=a.propertyId?+a.propertyId:null,l=null!==(n=a.propertySlug)&&void 0!==n?n:null,c=null!==(t=a.landingPagePath)&&void 0!==t?t:null,d=a.landingPageId?+a.landingPageId:null,p=null!==(r=a.env)&&void 0!==r?r:null,f=null!==(i=a.embedKey)&&void 0!==i?i:null,A=f;return null===f||C.test(f)||(k("Widget: invalid pk format — embedKey cleared. Expected pk_(live|test)_[A-Za-z0-9]{32}"),A=null),{client:s,propertyId:u,propertySlug:l,landingPagePath:c,landingPageId:d,env:p,embedKey:A,embedBase:"self"===a.embedBase?"self":null}};function w(e){var n={tripfusion:"tripfusion",client:"client",propertyid:"propertyId",propertyslug:"propertySlug",landingpagepath:"landingPagePath",landingpageid:"landingPageId",mode:"mode",offerid:"offerId",bookingid:"bookingId",checkin:"checkIn",checkout:"checkOut",adults:"adults",children:"children",env:"env",pk:"embedKey",embedbase:"embedBase"};return Array.from(e.entries()).reduce(function(e,t){var r,i=t[0],o=t[1];return b(b({},e),((r={})[n[i.toLowerCase()]]=o,r))},{})}function k(e){return n=this,t=arguments,i=function(e,n){var t,r,i,o;return void 0===n&&(n="error"),function(e,n){var t,r,i,o={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return a.next=s(0),a.throw=s(1),a.return=s(2),"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function s(s){return function(u){return function(s){if(t)throw new TypeError("Generator is already executing.");for(;a&&(a=0,s[0]&&(o=0)),o;)try{if(t=1,r&&(i=2&s[0]?r.return:s[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;switch(r=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return o.label++,{value:s[1],done:!1};case 5:o.label++,r=s[1],s=[0];continue;case 7:s=o.ops.pop(),o.trys.pop();continue;default:if(!((i=(i=o.trys).length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){o=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]<i[3])){o.label=s[1];break}if(6===s[0]&&o.label<i[1]){o.label=i[1],i=s;break}if(i&&o.label<i[2]){o.label=i[2],o.ops.push(s);break}i[2]&&o.ops.pop(),o.trys.pop();continue}s=n.call(e,o)}catch(e){s=[6,e],r=0}finally{t=i=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,u])}}}(this,function(a){return t=x(),r="".concat(t,"api/vacayou/log"),i={message:e,page:window.location.href},o={"content-type":"application/json"},[2,fetch(r,{method:"POST",body:JSON.stringify({type:n,payload:i}),headers:o}).then(function(e){return e.json()}).catch(function(e){console.log("Tripfusion: failed to log message: ".concat(e))})]})},new((r=void 0)||(r=Promise))(function(e,o){function a(e){try{u(i.next(e))}catch(e){o(e)}}function s(e){try{u(i.throw(e))}catch(e){o(e)}}function u(n){var t;n.done?e(n.value):(t=n.value,t instanceof r?t:new r(function(e){e(t)})).then(a,s)}u((i=i.apply(n,t||[])).next())});var n,t,r,i}function x(){if("self"===I.getState().embedBase)return"".concat(window.location.origin,"/");switch(I.getState().env){case"local":return"".concat(window.location.origin,"/");case"develop":return"https://develop.checkout.tripfusion.com/";case"staging":return"https://staging.checkout.tripfusion.com/";default:return"https://checkout.tripfusion.com/"}}function S(){try{var n=document.getElementById(e),t=document.getElementById(i);n&&t&&(document.body.style.overflow="",n.setAttribute("class","slide-out"),t.style.background="rgba(0, 0, 0, 0)",n.style.display="none",t.style.zIndex="".concat(-1e11))}catch(e){k("Widget: Error closing widget: ".concat(e)),console.error("Tripfusion: Error closing widget: ",e)}}function O(e){var t,r=e.client,i=e.propertyId,a=e.propertySlug,s=e.landingPagePath,u=e.landingPageId,c=e.mode,d=e.bookingId,p=e.env,f=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&n.indexOf(r)<0&&(t[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)n.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(t[r[i]]=e[r[i]])}return t}(e,["client","propertyId","propertySlug","landingPagePath","landingPageId","mode","bookingId","env"]);try{null===(t=document.getElementById(o))||void 0===t||t.remove();var A=document.getElementById(n);if(A){var g=["checkIn","checkOut","adults","children","offerId"],h=document.createElement("iframe"),m=x(),y=null!=u?u:s,v=null!=a?a:i,I=y?"".concat(m).concat(r,"/offers/").concat(y):"".concat(m).concat(r,"/").concat(v);c===l&&d&&(I+="/booking/".concat(d,"/append"));var b=Object.entries(f).filter(function(e){var n=e[0],t=e[1];return g.includes(n)&&!!t}).map(function(e){var n=e[0],t=e[1];return"".concat(n,"=").concat(t).toLowerCase()}).join("&"),C=[b,"develop"===p||"staging"===p?"x-vercel-protection-bypass=".concat(""):""].filter(Boolean).join("&");C&&(I+="?".concat(C)),h.setAttribute("allow","payment"),h.setAttribute("src",I),h.id=o,A.appendChild(h)}}catch(e){k("Widget: Error injecting iframe: ".concat(e)),console.error("Tripfusion: Error injecting iframe: ",e)}}function P(){document.body.style.overflow="hidden"}var E=t(353),$=t.n(E);const D=e=>Symbol.iterator in e,M=e=>"entries"in e,j=(e,n)=>{const t=e instanceof Map?e:new Map(e.entries()),r=n instanceof Map?n:new Map(n.entries());if(t.size!==r.size)return!1;for(const[e,n]of t)if(!r.has(e)||!Object.is(n,r.get(e)))return!1;return!0};var Y=t(72),_=t.n(Y),z=t(825),W=t.n(z),T=t(659),R=t.n(T),L=t(56),Q=t.n(L),H=t(540),N=t.n(H),U=t(113),X=t.n(U),Z=t(365),J={};J.styleTagTransform=X(),J.setAttributes=Q(),J.insert=R().bind(null,"head"),J.domAPI=W(),J.insertStyleElement=N(),_()(Z.A,J),Z.A&&Z.A.locals&&Z.A.locals;var q=function(){return q=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e},q.apply(this,arguments)},K=!1;function F(){function e(e){var n,t,r,i;try{var o=e.target,a=o.parentNode;"A"!==o.tagName&&"A"===(null==a?void 0:a.tagName)&&(o.href=null==a?void 0:a.href);var s=o.href||"";if(!s.includes("?"))return;var c=w(new URLSearchParams(s.substring(s.indexOf("?"))));if("true"===c.tripfusion){e.preventDefault();var d=B(),p=d.client,f=d.propertyId,A=d.propertySlug,g=d.landingPagePath,h=d.landingPageId,m=d.env;G({client:null!==(n=c.client)&&void 0!==n?n:p,propertyId:c.propertyId?+c.propertyId:f,propertySlug:null!==(t=c.propertySlug)&&void 0!==t?t:A,landingPagePath:null!==(r=c.landingPagePath)&&void 0!==r?r:g,landingPageId:c.landingPageId?+c.landingPageId:h,mode:c.mode===l?l:u,bookingId:(null==c?void 0:c.bookingId)&&(null==c?void 0:c.mode)===l?+c.bookingId:null,offerId:c.offerId?+c.offerId:void 0,checkIn:c.checkIn,checkOut:c.checkOut,adults:c.adults?+c.adults:void 0,children:c.children?c.children.split(",").map(function(e){return+e}):void 0,env:null!==(i=c.env)&&void 0!==i?i:m})}}catch(e){k("Widget: Error in link click handler: ".concat(e)),console.error("Tripfusion: Error in link click handler: ",e)}}document.querySelectorAll("a").forEach(function(n){n.addEventListener("click",e)})}function V(){if(K)return!0;if(!document.body)return!1;!function(){try{var t=m.getState(),o=t.showWidget,s=t.hideWidget,u=t.showResumePanel,l=t.hideResumePanel,c=document.createElement("div"),d=document.createElement("div"),p=document.createElement("div"),f=document.createElement("div"),A=document.createElement("span"),g=document.createElement("button"),h=document.createElement("div");h.id=a,null==h||h.addEventListener("click",function(){o(),l()}),c.id=e,c.style.display="none",d.id=i,c.addEventListener("click",function(e){this===e.target&&(s(),u())}),p.id=n,f.id=r,g.id="tripfusion-widget-close-button",g.addEventListener("click",function(){s(),u()}),A.id="tripfusion-widget-header-title",A.innerHTML="Booking",d.appendChild(c),c.appendChild(p),p.appendChild(f),f.appendChild(A),f.appendChild(g),document.body.appendChild(d),document.body.appendChild(h)}catch(e){k("Widget: Error preparing DOM: ".concat(e)),console.error("Tripfusion: Error preparing DOM: ",e)}}();var t=B(),o=t.client,s=t.propertyId,u=t.propertySlug,l=t.landingPagePath,c=t.landingPageId,d=t.env,p=t.embedKey,f=t.embedBase,A=I.getState(),g=d||A.env,h=A.propertyId||A.propertySlug||A.landingPagePath||A.landingPageId;return A.client&&h?I.getState().replace(q(q({},A),{env:g,embedKey:p,embedBase:f})):I.getState().replace(q(q({},A),{client:o,propertyId:s,propertySlug:u,landingPagePath:l,landingPageId:c,env:g,embedKey:p,embedBase:f})),K=!0,!0}function G(e){try{V();var n=B().env,t=I.getState(),r=q(q(q({},t),e),{env:(null==e?void 0:e.env)||t.env||n}),i=r.propertyId||r.propertySlug||r.landingPagePath||r.landingPageId;if(!r.client||!i)throw new Error("Client and one of {propertyId, propertySlug, landingPagePath, landingPageId} are required to book");var o=m.getState(),a=o.hideResumePanel,s=o.reset;a(),u=I.getState(),l=r,!!Object.is(u,l)||"object"==typeof u&&null!==u&&"object"==typeof l&&null!==l&&Object.getPrototypeOf(u)===Object.getPrototypeOf(l)&&(D(u)&&D(l)?M(u)&&M(l)?j(u,l):((e,n)=>{const t=e[Symbol.iterator](),r=n[Symbol.iterator]();let i=t.next(),o=r.next();for(;!i.done&&!o.done;){if(!Object.is(i.value,o.value))return!1;i=t.next(),o=r.next()}return!!i.done&&!!o.done})(u,l):j({entries:()=>Object.entries(u)},{entries:()=>Object.entries(l)}))||(s(),I.getState().replace(r)),m.getState().showWidget()}catch(e){k("Widget: failed to book: ".concat(e)),console.error("Tripfusion: failed to book: ".concat(e))}var u,l}I.subscribe(function(e){e.client&&e.propertyId&&O(e)}),m.subscribe(function(n){var t,u,l,c;if(n.isResumePanelVisible){var d=n.primaryGuestName?"".concat(n.primaryGuestName[0].toUpperCase()).concat(n.primaryGuestName.substring(1),", don't let that reservation slip away!"):"Don't let that reservation slip away!",p="",f=[];if(n.isBookingCompleted&&(d="Booking completed!"),n.checkInDate&&n.checkOutDate&&f.push("".concat($()(n.checkInDate).format("MMM DD")," - ").concat($()(n.checkOutDate).format("MMM DD"))),n.cart.total){if((null===(t=n.cart)||void 0===t?void 0:t.rooms)&&n.cart.rooms.length>0){var A=n.cart.rooms.length,g=n.cart.rooms.reduce(function(e,n){return e+n.passengers.adults+n.passengers.children.length},0);p="".concat(A," room").concat(A>1?"s":""," for "),f.push("".concat(g," guest").concat(g>1?"s":""))}p+=null!==(u=n.cart.total)?new Intl.NumberFormat("en-US",{style:"currency",currency:"USD"}).format(u/100):""}!function(e){var n=e.headerText,t=e.subheaderText,r=e.footerText;document.getElementById(a).innerHTML='\n <div>\n <div class="tripfusion-resume-panel__header">\n <span>'.concat(n,'</span>\n <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 330 330" xml:space="preserve">\n <path id="XMLID_222_" d="M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z"/>\n </svg>\n </div>\n ').concat(t&&'<span class="tripfusion-resume-panel__subheader">'.concat(t,"</span>"),"\n </div>\n ").concat(r&&'<span class="tripfusion-resume-panel__footer">'.concat(r,"</span>"),"\n ")}({headerText:d,subheaderText:p,footerText:f.join(", ")})}n.backgroundColor&&function(e){var n=e.backgroundColor,t=document.getElementById(a),i=document.getElementById(r);t&&(t.style.backgroundColor=n),i&&(i.style.backgroundColor=n)}({backgroundColor:n.backgroundColor}),n.isReady?(n.isOpen?function(){try{var n=document.getElementById(e),t=document.getElementById(i);Object.assign(t.style,{zIndex:0xe8d4a5100b,height:"100%",background:"rgba(0, 0, 0, .5)"}),P(),n.style.display="block",n.setAttribute("class","slide-in"),setTimeout(function(){var e=document.getElementById(o);null==e||e.focus()},250)}catch(e){k("Widget: Error openning widget: ".concat(e)),console.error("Tripfusion: Error openning widget: ",e)}}():S(),n.isResumePanelVisible?((c=document.getElementById(a)).setAttribute("class","tripfusion-resume-panel--slide-in"),c.focus()):document.getElementById(a).setAttribute("class","tripfusion-resume-panel--slide-out"),null==(l=document.getElementById(s))||l.remove()):function(){var e=document.getElementById(s);if(!e){var n=document.getElementById(i);n&&((e=document.createElement("div")).id=s,e.innerHTML="Loading <span>TripFusion</span>",n.appendChild(e),n.style.zIndex="".concat(1e11),n.style.height="100%",n.style.background="rgba(0, 0, 0, .74)",P())}}()}),function(){try{var e=setInterval(function(){if("complete"===document.readyState){if(K)return F(),void clearInterval(e);var n=I.getState(),t=!!n.client&&!!(n.propertyId||n.propertySlug||n.landingPagePath||n.landingPageId);V(),t&&O(I.getState()),F(),clearInterval(e)}},100);!function(){function e(){setTimeout(function(){var e,n,t,r,i=w(new URLSearchParams(window.location.search)),o=I.getState(),a=o.propertyId||i.propertyId||o.propertySlug||i.propertySlug||o.landingPagePath||i.landingPagePath||o.landingPageId||i.landingPageId;"true"===i.tripfusion&&(o.client||i.client)&&a&&G({client:null!==(e=i.client)&&void 0!==e?e:o.client,propertyId:i.propertyId?+i.propertyId:o.propertyId,propertySlug:null!==(n=i.propertySlug)&&void 0!==n?n:o.propertySlug,landingPagePath:null!==(t=i.landingPagePath)&&void 0!==t?t:o.landingPagePath,landingPageId:i.landingPageId?+i.landingPageId:o.landingPageId,mode:i.mode===l?l:u,bookingId:(null==i?void 0:i.bookingId)&&(null==i?void 0:i.mode)===l?+i.bookingId:null,offerId:i.offerId?+i.offerId:void 0,checkIn:i.checkIn,checkOut:i.checkOut,adults:i.adults?+i.adults:void 0,children:i.children?i.children.split(",").map(function(e){return+e}):void 0,env:null!==(r=i.env)&&void 0!==r?r:o.env})},500)}"complete"===document.readyState?e():window.addEventListener("load",e)}(),Object.assign(window,{book:G,closeWidget:S}),window.onmessage=function(e){if(function(e){try{var n=new URL(e),t=n.host;return!("https:"!==n.protocol||!/^(develop\.|staging\.)?checkout\.tripfusion\.com$/.test(t))||"self"===I.getState().embedBase&&e===window.location.origin||!("local"!==I.getState().env||!/^(localhost|127\.0\.0\.1)(:\d+)?$/.test(t))}catch(e){return!1}}(e.origin)){var n=e.data;switch(n.type){case"tripfusion-embed-handshake-request":var t=document.getElementById(o);if(e.source!==(null==t?void 0:t.contentWindow))break;e.source.postMessage({type:"tripfusion-embed-handshake-response",key:I.getState().embedKey},e.origin);break;case"tripfusion-widget-ready":m.getState().setIsReady(!0);break;case"tripfusion-booking-completed":m.getState().setIsBookingCompleted(!0);break;case"tripfusion-set-client-theme":var r=(i=n.data).primary;r&&m.getState().setBackgroundColor(r);break;case"tripfusion-set-guest-name":var i=n.data;m.getState().setPrimaryGuestName(i.name);break;case"tripfusion-set-dates":(i=n.data).checkIn&&i.checkOut&&m.getState().setDates(i.checkIn,i.checkOut);break;case"tripfusion-set-cart":i=n.data,m.getState().setCart(i.cart)}}}}catch(e){k("Widget: failed to init Tripfusion JS SDK: ".concat(e)),console.error("Tripfusion: failed to init SDK: ".concat(e))}}()})()})();
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBWWQsV0FBV3dCLFNBQVNtTCxFQUFZckssUUFBU3FLLEVBQVlwSyxVQUVyRSxNQUVKLElUblVGLHNCU29VWW9LLEVBQWMvSCxFQUFRelcsS0FDNUIyUyxFQUFZZCxXQUFXdUIsUUFBUW9MLEVBQVk5TCxNQTFDVixDQWlEN0MsQ0FDSixDQUFFLE1BQU9uQyxHQUNMK0UsRUFBTyxvREFBNkMvRSxJQUNwRGpCLFFBQVFpQixNQUFNLDBDQUFtQ0EsR0FDckQsQ0FDSixDQUVBbU8sRSIsInNvdXJjZXMiOlsid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvZGF5anMvZGF5anMubWluLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL2NvbnN0LnRzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL21pZGRsZXdhcmUubWpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEubWpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL3N0b3JlL3dpZGdldC5zdG9yZS50cyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy9zdG9yZS9nbG9iYWwuc3RvcmUudHMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9zcmMvZG9tLnRzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEvc2hhbGxvdy5tanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9zcmMvc3R5bGVzLmNzcz80NGIyIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBpbXBvcnQgdXJsKGh0dHBzOi8vdXNlLnR5cGVraXQubmV0L3NhZzhjZWIuY3NzKTtcIl0pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIGAjdHJpcGZ1c2lvbi1sb2FkZXIge1xuICAgIGNvbG9yOiB3aGl0ZTtcbiAgICBtYXJnaW4tcmlnaHQ6IC01MCU7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICBmb250LWZhbWlseTogZnV0dXJhLWx0LXcwMS1ib29rLCBmdXR1cmEtbHQtdzA1LWJvb2ssIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG59XG5cbiN0cmlwZnVzaW9uLWxvYWRlciBzcGFuIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBmb250LXNpemU6IDEuM3JlbTtcbn1cblxuI3RyaXBmdXNpb24tcmVzdW1lLXBhbmVsIHtcbiAgICBtYXgtd2lkdGg6IDI1MHB4O1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiAwLjVyZW07XG4gICAgcGFkZGluZzogMTJweCAyNHB4O1xuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDBweCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgICByaWdodDogMzBweDtcbiAgICB6LWluZGV4OiAxMDAwMDAwMDAwMDA7XG4gICAgYm90dG9tOiA0MHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNDAwcHgpO1xuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XG4gICAgY29sb3I6IHdoaXRlO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBmb250LWZhbWlseTogc3dlZXQtc2Fucy1wcm8sIHNhbnMtc2VyaWY7XG59XG5cbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IDJlbTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2hlYWRlciBzdmcge1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBmaWxsOiB3aGl0ZTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19oZWFkZXIgc3Bhbixcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9fc3ViaGVhZGVyIHtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbn1cblxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19mb290ZXIge1xuICAgIGZvbnQtZmFtaWx5OiBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LXdyYXBwZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMCk7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuNXMgZWFzZS1vdXQ7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB0b3A6IDBweDtcbiAgICByaWdodDogMHB4O1xufVxuXG4jdHJpcGZ1c2lvbi13aWRnZXQtaW5uZXItd3JhcHBlciB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtaW4td2lkdGg6IDMyMHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICByaWdodDogMHB4O1xuICAgIGJvdHRvbTogMHB4O1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICBmb250LWZhbWlseTogXCJSb2JvdG9cIiwgXCJIZWx2ZXRpY2FcIiwgXCJBcmlhbFwiLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDA5MzhlbTtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LWhlYWRlciB7XG4gICAgaGVpZ2h0OiA2MHB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjFmMWYxO1xuICAgIHBhZGRpbmc6IDAgMTZweCAwIDE2cHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBjb2xvcjogd2hpdGU7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldC1pZnJhbWUge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBib3JkZXI6IG5vbmU7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldC1oZWFkZXItdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiBzd2VldC1zYW5zLXBybywgc2Fucy1zZXJpZjtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGxldHRlci1zcGFjaW5nOiAxLjVweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG4jdHJpcGZ1c2lvbi13aWRnZXQtY2xvc2UtYnV0dG9uIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgcGFkZGluZzogMDtcbiAgICB3aWR0aDogMmVtO1xuICAgIGhlaWdodDogMmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBmb250OiBpbmhlcml0O1xuICAgIHRleHQtaW5kZW50OiAxMDAlO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICY6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBzb2xpZCAwIHRyYW5zcGFyZW50O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xuICAgIH1cblxuICAgICY6YmVmb3JlLFxuICAgICY6YWZ0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMjUlO1xuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDAuMDYyNWVtKTtcbiAgICAgICAgd2lkdGg6IDAuMTI1ZW07XG4gICAgICAgIGhlaWdodDogNTAlO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjEyNWVtO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRjb2xvcjtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBjb250ZW50OiBcIlwiO1xuICAgIH1cblxuICAgICY6YWZ0ZXIge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xuICAgIH1cbn1cblxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1zbGlkZS1pbiB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiA1MDBtcztcbiAgICAtbW96LXRyYW5zaXRpb246IDUwMG1zO1xuICAgIHRyYW5zaXRpb246IDUwMG1zO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXNsaWRlLW91dCB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiA1MDBtcztcbiAgICAtbW96LXRyYW5zaXRpb246IDUwMG1zO1xuICAgIHRyYW5zaXRpb246IDUwMG1zO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCkgIWltcG9ydGFudDtcbn1cblxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1yZXNpemUtaW4ge1xuICAgIHdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgcmlnaHQ6IDMwcHggIWltcG9ydGFudDtcbn1cblxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1yZXNpemUtaW46aG92ZXIge1xuICAgIHdpZHRoOiAyMTdweCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IGFsbCAzMDBtcyBsaW5lYXI7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXJlc2l6ZS1vdXQge1xuICAgIHdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgcmlnaHQ6IC0xMDBweCAhaW1wb3J0YW50O1xufVxuXG4uc2xpZGUtaW4ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlLXVwIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogc2xpZGUtdXAgMC44cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xuICAgIHotaW5kZXg6IDEwMDAwMDAwMDAwMDA7XG59XG5cbi5zbGlkZS1vdXQge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICBhbmltYXRpb246IHNsaWRlLWRvd24gMC41cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS1kb3duIDAuNXMgZm9yd2FyZHMgIWltcG9ydGFudDtcbiAgICB6LWluZGV4OiAtMTAwMDAwMDAwMDAwMDtcbn1cblxuQGtleWZyYW1lcyBzbGlkZS11cCB7XG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtdXAge1xuICAgIDEwMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xuICAgIDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIH1cbn1cblxuQC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlLWRvd24ge1xuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICB9XG59XG5gLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9zdHlsZXMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUVBO0lBQ0ksWUFBWTtJ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bkMsNENBQTRDO0lBQzVDLG9EQUFvRDtJQUNwRCxzQkFBc0I7QUFDMUI7O0FBRUE7SUFDSSwyQkFBMkI7SUFDM0IsbUNBQW1DO0lBQ25DLDhDQUE4QztJQUM5QyxzREFBc0Q7SUFDdEQsdUJBQXVCO0FBQzNCOztBQUVBO0lBQ0k7UUFDSSx5QkFBeUI7SUFDN0I7QUFDSjs7QUFFQTtJQUNJO1FBQ0ksaUNBQWlDO0lBQ3JDO0FBQ0o7O0FBRUE7SUFDSTtRQUNJLHlCQUF5QjtJQUM3Qjs7SUFFQTtRQUNJLDJCQUEyQjtJQUMvQjtBQUNKOztBQUVBO0lBQ0k7UUFDSSxpQ0FBaUM7SUFDckM7O0lBRUE7UUFDSSxtQ0FBbUM7SUFDdkM7QUFDSlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IHVybChcXFwiaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvc2FnOGNlYi5jc3NcXFwiKTtcXG5cXG4jdHJpcGZ1c2lvbi1sb2FkZXIge1xcbiAgICBjb2xvcjogd2hpdGU7XFxuICAgIG1hcmdpbi1yaWdodDogLTUwJTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDUwJTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBmb250LWZhbWlseTogZnV0dXJhLWx0LXcwMS1ib29rLCBmdXR1cmEtbHQtdzA1LWJvb2ssIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi1sb2FkZXIgc3BhbiB7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICBmb250LXNpemU6IDEuM3JlbTtcXG59XFxuXFxuI3RyaXBmdXNpb24tcmVzdW1lLXBhbmVsIHtcXG4gICAgbWF4LXdpZHRoOiAyNTBweDtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIGdhcDogMC41cmVtO1xcbiAgICBwYWRkaW5nOiAxMnB4IDI0cHg7XFxuICAgIGJveC1zaGFkb3c6IDBweCAwcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSksIDBweCA0cHggNHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gICAgcmlnaHQ6IDMwcHg7XFxuICAgIHotaW5kZXg6IDEwMDAwMDAwMDAwMDtcXG4gICAgYm90dG9tOiA0MHB4O1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCk7XFxuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG4gICAgZm9udC1zaXplOiAxcmVtO1xcbiAgICBmb250LWZhbWlseTogc3dlZXQtc2Fucy1wcm8sIHNhbnMtc2VyaWY7XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9faGVhZGVyIHtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgICBnYXA6IDJlbTtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19oZWFkZXIgc3ZnIHtcXG4gICAgd2lkdGg6IDE4cHg7XFxuICAgIGhlaWdodDogMThweDtcXG4gICAgZmlsbDogd2hpdGU7XFxuICAgIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4udHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2hlYWRlciBzcGFuLFxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9fc3ViaGVhZGVyIHtcXG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbF9fZm9vdGVyIHtcXG4gICAgZm9udC1mYW1pbHk6IFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcXG4gICAgZm9udC1zaXplOiAwLjhyZW07XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcblxcbiN0cmlwZnVzaW9uLXdpZGdldC13cmFwcGVyIHtcXG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKTtcXG4gICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICB0b3A6IDA7XFxuICAgIHJpZ2h0OiAwO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjVzIGVhc2Utb3V0O1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHRvcDogMHB4O1xcbiAgICByaWdodDogMHB4O1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtaW5uZXItd3JhcHBlciB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgbWluLXdpZHRoOiAzMjBweDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgcmlnaHQ6IDBweDtcXG4gICAgYm90dG9tOiAwcHg7XFxuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xcbiAgICBib3JkZXItcmFkaXVzOiAwO1xcbiAgICBib3gtc2hhZG93OiBub25lO1xcbiAgICBmb250LWZhbWlseTogXFxcIlJvYm90b1xcXCIsIFxcXCJIZWx2ZXRpY2FcXFwiLCBcXFwiQXJpYWxcXFwiLCBzYW5zLXNlcmlmO1xcbiAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgIGxldHRlci1zcGFjaW5nOiAwLjAwOTM4ZW07XFxufVxcblxcbiN0cmlwZnVzaW9uLXdpZGdldC1oZWFkZXIge1xcbiAgICBoZWlnaHQ6IDYwcHg7XFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZjFmMWYxO1xcbiAgICBwYWRkaW5nOiAwIDE2cHggMCAxNnB4O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIGNvbG9yOiB3aGl0ZTtcXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0LWlmcmFtZSB7XFxuICAgIGhlaWdodDogMTAwJTtcXG4gICAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtaGVhZGVyLXRpdGxlIHtcXG4gICAgZm9udC1mYW1pbHk6IHN3ZWV0LXNhbnMtcHJvLCBzYW5zLXNlcmlmO1xcbiAgICBsaW5lLWhlaWdodDogMS4yO1xcbiAgICBmb250LXdlaWdodDogNzAwO1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGxldHRlci1zcGFjaW5nOiAxLjVweDtcXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0LWNsb3NlLWJ1dHRvbiB7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICB3aWR0aDogMmVtO1xcbiAgICBoZWlnaHQ6IDJlbTtcXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgZm9udDogaW5oZXJpdDtcXG4gICAgdGV4dC1pbmRlbnQ6IDEwMCU7XFxuICAgIGN1cnNvcjogcG9pbnRlcjtcXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgICBvdXRsaW5lOiBzb2xpZCAwIHRyYW5zcGFyZW50O1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA0KTtcXG4gICAgfVxcblxcbiAgICAmOmhvdmVyIHtcXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XFxuICAgIH1cXG5cXG4gICAgJjpiZWZvcmUsXFxuICAgICY6YWZ0ZXIge1xcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgdG9wOiAyNSU7XFxuICAgICAgICBsZWZ0OiBjYWxjKDUwJSAtIDAuMDYyNWVtKTtcXG4gICAgICAgIHdpZHRoOiAwLjEyNWVtO1xcbiAgICAgICAgaGVpZ2h0OiA1MCU7XFxuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjEyNWVtO1xcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcbiAgICAgICAgYmFja2dyb3VuZDogY3VycmVudGNvbG9yO1xcbiAgICAgICAgY29sb3I6IHdoaXRlO1xcbiAgICAgICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIH1cXG5cXG4gICAgJjphZnRlciB7XFxuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xcbiAgICB9XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tc2xpZGUtaW4ge1xcbiAgICAtd2Via2l0LXRyYW5zaXRpb246IDUwMG1zO1xcbiAgICAtbW96LXRyYW5zaXRpb246IDUwMG1zO1xcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApICFpbXBvcnRhbnQ7XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tc2xpZGUtb3V0IHtcXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgLW1vei10cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCkgIWltcG9ydGFudDtcXG59XFxuXFxuLnRyaXBmdXNpb24tcmVzdW1lLXBhbmVsLS1yZXNpemUtaW4ge1xcbiAgICB3aWR0aDogNDZweCAhaW1wb3J0YW50O1xcbiAgICBoZWlnaHQ6IDQ2cHggIWltcG9ydGFudDtcXG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XFxuICAgIHJpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tcmVzaXplLWluOmhvdmVyIHtcXG4gICAgd2lkdGg6IDIxN3B4ICFpbXBvcnRhbnQ7XFxuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xcbiAgICB0cmFuc2l0aW9uOiBhbGwgMzAwbXMgbGluZWFyO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50cmlwZnVzaW9uLXJlc3VtZS1wYW5lbC0tcmVzaXplLW91dCB7XFxuICAgIHdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XFxuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgcmlnaHQ6IC0xMDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uc2xpZGUtaW4ge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbiAgICBhbmltYXRpb246IHNsaWRlLXVwIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLXVwIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgei1pbmRleDogMTAwMDAwMDAwMDAwMDtcXG59XFxuXFxuLnNsaWRlLW91dCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAgIGFuaW1hdGlvbjogc2xpZGUtZG93biAwLjVzIGZvcndhcmRzICFpbXBvcnRhbnQ7XFxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS1kb3duIDAuNXMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgei1pbmRleDogLTEwMDAwMDAwMDAwMDA7XFxufVxcblxcbkBrZXlmcmFtZXMgc2xpZGUtdXAge1xcbiAgICAxMDAlIHtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XFxuICAgIH1cXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlLXVwIHtcXG4gICAgMTAwJSB7XFxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XFxuICAgIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcXG4gICAgMCUge1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgfVxcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtZG93biB7XFxuICAgIDAlIHtcXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbiAgICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqcz1lKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9MWUzLGU9NmU0LG49MzZlNSxyPVwibWlsbGlzZWNvbmRcIixpPVwic2Vjb25kXCIscz1cIm1pbnV0ZVwiLHU9XCJob3VyXCIsYT1cImRheVwiLG89XCJ3ZWVrXCIsYz1cIm1vbnRoXCIsZj1cInF1YXJ0ZXJcIixoPVwieWVhclwiLGQ9XCJkYXRlXCIsbD1cIkludmFsaWQgRGF0ZVwiLCQ9L14oXFxkezR9KVstL10/KFxcZHsxLDJ9KT9bLS9dPyhcXGR7MCwyfSlbVHRcXHNdKihcXGR7MSwyfSk/Oj8oXFxkezEsMn0pPzo/KFxcZHsxLDJ9KT9bLjpdPyhcXGQrKT8kLyx5PS9cXFsoW15cXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZyxNPXtuYW1lOlwiZW5cIix3ZWVrZGF5czpcIlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5XCIuc3BsaXQoXCJfXCIpLG1vbnRoczpcIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXJcIi5zcGxpdChcIl9cIiksb3JkaW5hbDpmdW5jdGlvbih0KXt2YXIgZT1bXCJ0aFwiLFwic3RcIixcIm5kXCIsXCJyZFwiXSxuPXQlMTAwO3JldHVyblwiW1wiK3QrKGVbKG4tMjApJTEwXXx8ZVtuXXx8ZVswXSkrXCJdXCJ9fSxtPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1TdHJpbmcodCk7cmV0dXJuIXJ8fHIubGVuZ3RoPj1lP3Q6XCJcIitBcnJheShlKzEtci5sZW5ndGgpLmpvaW4obikrdH0sdj17czptLHo6ZnVuY3Rpb24odCl7dmFyIGU9LXQudXRjT2Zmc2V0KCksbj1NYXRoLmFicyhlKSxyPU1hdGguZmxvb3Iobi82MCksaT1uJTYwO3JldHVybihlPD0wP1wiK1wiOlwiLVwiKSttKHIsMixcIjBcIikrXCI6XCIrbShpLDIsXCIwXCIpfSxtOmZ1bmN0aW9uIHQoZSxuKXtpZihlLmRhdGUoKTxuLmRhdGUoKSlyZXR1cm4tdChuLGUpO3ZhciByPTEyKihuLnllYXIoKS1lLnllYXIoKSkrKG4ubW9udGgoKS1lLm1vbnRoKCkpLGk9ZS5jbG9uZSgpLmFkZChyLGMpLHM9bi1pPDAsdT1lLmNsb25lKCkuYWRkKHIrKHM/LTE6MSksYyk7cmV0dXJuKygtKHIrKG4taSkvKHM/aS11OnUtaSkpfHwwKX0sYTpmdW5jdGlvbih0KXtyZXR1cm4gdDwwP01hdGguY2VpbCh0KXx8MDpNYXRoLmZsb29yKHQpfSxwOmZ1bmN0aW9uKHQpe3JldHVybntNOmMseTpoLHc6byxkOmEsRDpkLGg6dSxtOnMsczppLG1zOnIsUTpmfVt0XXx8U3RyaW5nKHR8fFwiXCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLFwiXCIpfSx1OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10fX0sZz1cImVuXCIsRD17fTtEW2ddPU07dmFyIHA9XCIkaXNEYXlqc09iamVjdFwiLFM9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBffHwhKCF0fHwhdFtwXSl9LHc9ZnVuY3Rpb24gdChlLG4scil7dmFyIGk7aWYoIWUpcmV0dXJuIGc7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe3ZhciBzPWUudG9Mb3dlckNhc2UoKTtEW3NdJiYoaT1zKSxuJiYoRFtzXT1uLGk9cyk7dmFyIHU9ZS5zcGxpdChcIi1cIik7aWYoIWkmJnUubGVuZ3RoPjEpcmV0dXJuIHQodVswXSl9ZWxzZXt2YXIgYT1lLm5hbWU7RFthXT1lLGk9YX1yZXR1cm4hciYmaSYmKGc9aSksaXx8IXImJmd9LE89ZnVuY3Rpb24odCxlKXtpZihTKHQpKXJldHVybiB0LmNsb25lKCk7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGU/ZTp7fTtyZXR1cm4gbi5kYXRlPXQsbi5hcmdzPWFyZ3VtZW50cyxuZXcgXyhuKX0sYj12O2IubD13LGIuaT1TLGIudz1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQse2xvY2FsZTplLiRMLHV0YzplLiR1LHg6ZS4keCwkb2Zmc2V0OmUuJG9mZnNldH0pfTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIE0odCl7dGhpcy4kTD13KHQubG9jYWxlLG51bGwsITApLHRoaXMucGFyc2UodCksdGhpcy4keD10aGlzLiR4fHx0Lnh8fHt9LHRoaXNbcF09ITB9dmFyIG09TS5wcm90b3R5cGU7cmV0dXJuIG0ucGFyc2U9ZnVuY3Rpb24odCl7dGhpcy4kZD1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGUsbj10LnV0YztpZihudWxsPT09ZSlyZXR1cm4gbmV3IERhdGUoTmFOKTtpZihiLnUoZSkpcmV0dXJuIG5ldyBEYXRlO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmIS9aJC9pLnRlc3QoZSkpe3ZhciByPWUubWF0Y2goJCk7aWYocil7dmFyIGk9clsyXS0xfHwwLHM9KHJbN118fFwiMFwiKS5zdWJzdHJpbmcoMCwzKTtyZXR1cm4gbj9uZXcgRGF0ZShEYXRlLlVUQyhyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKSk6bmV3IERhdGUoclsxXSxpLHJbM118fDEscls0XXx8MCxyWzVdfHwwLHJbNl18fDAscyl9fXJldHVybiBuZXcgRGF0ZShlKX0odCksdGhpcy5pbml0KCl9LG0uaW5pdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGQ7dGhpcy4keT10LmdldEZ1bGxZZWFyKCksdGhpcy4kTT10LmdldE1vbnRoKCksdGhpcy4kRD10LmdldERhdGUoKSx0aGlzLiRXPXQuZ2V0RGF5KCksdGhpcy4kSD10LmdldEhvdXJzKCksdGhpcy4kbT10LmdldE1pbnV0ZXMoKSx0aGlzLiRzPXQuZ2V0U2Vjb25kcygpLHRoaXMuJG1zPXQuZ2V0TWlsbGlzZWNvbmRzKCl9LG0uJHV0aWxzPWZ1bmN0aW9uKCl7cmV0dXJuIGJ9LG0uaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiEodGhpcy4kZC50b1N0cmluZygpPT09bCl9LG0uaXNTYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIG49Tyh0KTtyZXR1cm4gdGhpcy5zdGFydE9mKGUpPD1uJiZuPD10aGlzLmVuZE9mKGUpfSxtLmlzQWZ0ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTyh0KTx0aGlzLnN0YXJ0T2YoZSl9LG0uaXNCZWZvcmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lbmRPZihlKTxPKHQpfSxtLiRnPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gYi51KHQpP3RoaXNbZV06dGhpcy5zZXQobix0KX0sbS51bml4PWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX0sbS52YWx1ZU9mPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQuZ2V0VGltZSgpfSxtLnN0YXJ0T2Y9ZnVuY3Rpb24odCxlKXt2YXIgbj10aGlzLHI9ISFiLnUoZSl8fGUsZj1iLnAodCksbD1mdW5jdGlvbih0LGUpe3ZhciBpPWIudyhuLiR1P0RhdGUuVVRDKG4uJHksZSx0KTpuZXcgRGF0ZShuLiR5LGUsdCksbik7cmV0dXJuIHI/aTppLmVuZE9mKGEpfSwkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGIudyhuLnRvRGF0ZSgpW3RdLmFwcGx5KG4udG9EYXRlKFwic1wiKSwocj9bMCwwLDAsMF06WzIzLDU5LDU5LDk5OV0pLnNsaWNlKGUpKSxuKX0seT10aGlzLiRXLE09dGhpcy4kTSxtPXRoaXMuJEQsdj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIik7c3dpdGNoKGYpe2Nhc2UgaDpyZXR1cm4gcj9sKDEsMCk6bCgzMSwxMSk7Y2FzZSBjOnJldHVybiByP2woMSxNKTpsKDAsTSsxKTtjYXNlIG86dmFyIGc9dGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0fHwwLEQ9KHk8Zz95Kzc6eSktZztyZXR1cm4gbChyP20tRDptKyg2LUQpLE0pO2Nhc2UgYTpjYXNlIGQ6cmV0dXJuICQoditcIkhvdXJzXCIsMCk7Y2FzZSB1OnJldHVybiAkKHYrXCJNaW51dGVzXCIsMSk7Y2FzZSBzOnJldHVybiAkKHYrXCJTZWNvbmRzXCIsMik7Y2FzZSBpOnJldHVybiAkKHYrXCJNaWxsaXNlY29uZHNcIiwzKTtkZWZhdWx0OnJldHVybiB0aGlzLmNsb25lKCl9fSxtLmVuZE9mPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0YXJ0T2YodCwhMSl9LG0uJHNldD1mdW5jdGlvbih0LGUpe3ZhciBuLG89Yi5wKHQpLGY9XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpLGw9KG49e30sblthXT1mK1wiRGF0ZVwiLG5bZF09ZitcIkRhdGVcIixuW2NdPWYrXCJNb250aFwiLG5baF09ZitcIkZ1bGxZZWFyXCIsblt1XT1mK1wiSG91cnNcIixuW3NdPWYrXCJNaW51dGVzXCIsbltpXT1mK1wiU2Vjb25kc1wiLG5bcl09ZitcIk1pbGxpc2Vjb25kc1wiLG4pW29dLCQ9bz09PWE/dGhpcy4kRCsoZS10aGlzLiRXKTplO2lmKG89PT1jfHxvPT09aCl7dmFyIHk9dGhpcy5jbG9uZSgpLnNldChkLDEpO3kuJGRbbF0oJCkseS5pbml0KCksdGhpcy4kZD15LnNldChkLE1hdGgubWluKHRoaXMuJEQseS5kYXlzSW5Nb250aCgpKSkuJGR9ZWxzZSBsJiZ0aGlzLiRkW2xdKCQpO3JldHVybiB0aGlzLmluaXQoKSx0aGlzfSxtLnNldD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNsb25lKCkuJHNldCh0LGUpfSxtLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpc1tiLnAodCldKCl9LG0uYWRkPWZ1bmN0aW9uKHIsZil7dmFyIGQsbD10aGlzO3I9TnVtYmVyKHIpO3ZhciAkPWIucChmKSx5PWZ1bmN0aW9uKHQpe3ZhciBlPU8obCk7cmV0dXJuIGIudyhlLmRhdGUoZS5kYXRlKCkrTWF0aC5yb3VuZCh0KnIpKSxsKX07aWYoJD09PWMpcmV0dXJuIHRoaXMuc2V0KGMsdGhpcy4kTStyKTtpZigkPT09aClyZXR1cm4gdGhpcy5zZXQoaCx0aGlzLiR5K3IpO2lmKCQ9PT1hKXJldHVybiB5KDEpO2lmKCQ9PT1vKXJldHVybiB5KDcpO3ZhciBNPShkPXt9LGRbc109ZSxkW3VdPW4sZFtpXT10LGQpWyRdfHwxLG09dGhpcy4kZC5nZXRUaW1lKCkrcipNO3JldHVybiBiLncobSx0aGlzKX0sbS5zdWJ0cmFjdD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFkZCgtMSp0LGUpfSxtLmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49dGhpcy4kbG9jYWxlKCk7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBuLmludmFsaWREYXRlfHxsO3ZhciByPXR8fFwiWVlZWS1NTS1ERFRISDptbTpzc1pcIixpPWIueih0aGlzKSxzPXRoaXMuJEgsdT10aGlzLiRtLGE9dGhpcy4kTSxvPW4ud2Vla2RheXMsYz1uLm1vbnRocyxmPW4ubWVyaWRpZW0saD1mdW5jdGlvbih0LG4saSxzKXtyZXR1cm4gdCYmKHRbbl18fHQoZSxyKSl8fGlbbl0uc2xpY2UoMCxzKX0sZD1mdW5jdGlvbih0KXtyZXR1cm4gYi5zKHMlMTJ8fDEyLHQsXCIwXCIpfSwkPWZ8fGZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10PDEyP1wiQU1cIjpcIlBNXCI7cmV0dXJuIG4/ci50b0xvd2VyQ2FzZSgpOnJ9O3JldHVybiByLnJlcGxhY2UoeSwoZnVuY3Rpb24odCxyKXtyZXR1cm4gcnx8ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2VcIllZXCI6cmV0dXJuIFN0cmluZyhlLiR5KS5zbGljZSgtMik7Y2FzZVwiWVlZWVwiOnJldHVybiBiLnMoZS4keSw0LFwiMFwiKTtjYXNlXCJNXCI6cmV0dXJuIGErMTtjYXNlXCJNTVwiOnJldHVybiBiLnMoYSsxLDIsXCIwXCIpO2Nhc2VcIk1NTVwiOnJldHVybiBoKG4ubW9udGhzU2hvcnQsYSxjLDMpO2Nhc2VcIk1NTU1cIjpyZXR1cm4gaChjLGEpO2Nhc2VcIkRcIjpyZXR1cm4gZS4kRDtjYXNlXCJERFwiOnJldHVybiBiLnMoZS4kRCwyLFwiMFwiKTtjYXNlXCJkXCI6cmV0dXJuIFN0cmluZyhlLiRXKTtjYXNlXCJkZFwiOnJldHVybiBoKG4ud2Vla2RheXNNaW4sZS4kVyxvLDIpO2Nhc2VcImRkZFwiOnJldHVybiBoKG4ud2Vla2RheXNTaG9ydCxlLiRXLG8sMyk7Y2FzZVwiZGRkZFwiOnJldHVybiBvW2UuJFddO2Nhc2VcIkhcIjpyZXR1cm4gU3RyaW5nKHMpO2Nhc2VcIkhIXCI6cmV0dXJuIGIucyhzLDIsXCIwXCIpO2Nhc2VcImhcIjpyZXR1cm4gZCgxKTtjYXNlXCJoaFwiOnJldHVybiBkKDIpO2Nhc2VcImFcIjpyZXR1cm4gJChzLHUsITApO2Nhc2VcIkFcIjpyZXR1cm4gJChzLHUsITEpO2Nhc2VcIm1cIjpyZXR1cm4gU3RyaW5nKHUpO2Nhc2VcIm1tXCI6cmV0dXJuIGIucyh1LDIsXCIwXCIpO2Nhc2VcInNcIjpyZXR1cm4gU3RyaW5nKGUuJHMpO2Nhc2VcInNzXCI6cmV0dXJuIGIucyhlLiRzLDIsXCIwXCIpO2Nhc2VcIlNTU1wiOnJldHVybiBiLnMoZS4kbXMsMyxcIjBcIik7Y2FzZVwiWlwiOnJldHVybiBpfXJldHVybiBudWxsfSh0KXx8aS5yZXBsYWNlKFwiOlwiLFwiXCIpfSkpfSxtLnV0Y09mZnNldD1mdW5jdGlvbigpe3JldHVybiAxNSotTWF0aC5yb3VuZCh0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkvMTUpfSxtLmRpZmY9ZnVuY3Rpb24ocixkLGwpe3ZhciAkLHk9dGhpcyxNPWIucChkKSxtPU8ociksdj0obS51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSplLGc9dGhpcy1tLEQ9ZnVuY3Rpb24oKXtyZXR1cm4gYi5tKHksbSl9O3N3aXRjaChNKXtjYXNlIGg6JD1EKCkvMTI7YnJlYWs7Y2FzZSBjOiQ9RCgpO2JyZWFrO2Nhc2UgZjokPUQoKS8zO2JyZWFrO2Nhc2UgbzokPShnLXYpLzYwNDhlNTticmVhaztjYXNlIGE6JD0oZy12KS84NjRlNTticmVhaztjYXNlIHU6JD1nL247YnJlYWs7Y2FzZSBzOiQ9Zy9lO2JyZWFrO2Nhc2UgaTokPWcvdDticmVhaztkZWZhdWx0OiQ9Z31yZXR1cm4gbD8kOmIuYSgkKX0sbS5kYXlzSW5Nb250aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZE9mKGMpLiREfSxtLiRsb2NhbGU9ZnVuY3Rpb24oKXtyZXR1cm4gRFt0aGlzLiRMXX0sbS5sb2NhbGU9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4gdGhpcy4kTDt2YXIgbj10aGlzLmNsb25lKCkscj13KHQsZSwhMCk7cmV0dXJuIHImJihuLiRMPXIpLG59LG0uY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gYi53KHRoaXMuJGQsdGhpcyl9LG0udG9EYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKX0sbS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9LG0udG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b0lTT1N0cmluZygpfSxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKX0sTX0oKSxrPV8ucHJvdG90eXBlO3JldHVybiBPLnByb3RvdHlwZT1rLFtbXCIkbXNcIixyXSxbXCIkc1wiLGldLFtcIiRtXCIsc10sW1wiJEhcIix1XSxbXCIkV1wiLGFdLFtcIiRNXCIsY10sW1wiJHlcIixoXSxbXCIkRFwiLGRdXS5mb3JFYWNoKChmdW5jdGlvbih0KXtrW3RbMV1dPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLiRnKGUsdFswXSx0WzFdKX19KSksTy5leHRlbmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC4kaXx8KHQoZSxfLE8pLHQuJGk9ITApLE99LE8ubG9jYWxlPXcsTy5pc0RheWpzPVMsTy51bml4PWZ1bmN0aW9uKHQpe3JldHVybiBPKDFlMyp0KX0sTy5lbj1EW2ddLE8uTHM9RCxPLnA9e30sT30pKTsiLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gdXBkYXRlcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuICBjc3MgKz0gb2JqLmNzcztcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfVxuXG4gIC8vIEZvciBvbGQgSUVcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHt9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH1cbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsImV4cG9ydCBjb25zdCBTREtfU0NSSVBUX0lEID0gXCJ0cmlwZnVzaW9uLXNka1wiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXRcIjtcbmV4cG9ydCBjb25zdCBXSURHRVRfSU5ORVJfV1JBUFBFUl9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtaW5uZXItd3JhcHBlclwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9IRUFERVJfSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LWhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9DTE9TRV9CVVRUT05fSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LWNsb3NlLWJ1dHRvblwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9IRUFERVJfVElUTEVfSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LWhlYWRlci10aXRsZVwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9XUkFQUEVSX0lEID0gXCJ0cmlwZnVzaW9uLXdpZGdldC13cmFwcGVyXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX0lGUkFNRV9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtaWZyYW1lXCI7XG5leHBvcnQgY29uc3QgUkVTVU1FX1BBTkVMX0lEID0gXCJ0cmlwZnVzaW9uLXJlc3VtZS1wYW5lbFwiO1xuZXhwb3J0IGNvbnN0IExPQURFUl9JRCA9IFwidHJpcGZ1c2lvbi1sb2FkZXJcIjtcbmV4cG9ydCBjb25zdCBCT09LSU5HX01PREUgPSB7XG4gICAgbm9ybWFsOiBcIm5vcm1hbFwiLFxuICAgIGFwcGVuZDogXCJhcHBlbmRcIixcbn0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgQVBQX01FU1NBR0VfVFlQRSA9IHtcbiAgICBXSURHRVRfUkVBRFk6IFwidHJpcGZ1c2lvbi13aWRnZXQtcmVhZHlcIixcbiAgICBCT09LSU5HX0NPTVBMRVRFRDogXCJ0cmlwZnVzaW9uLWJvb2tpbmctY29tcGxldGVkXCIsXG4gICAgU0VUX0NMSUVOVF9USEVNRTogXCJ0cmlwZnVzaW9uLXNldC1jbGllbnQtdGhlbWVcIixcbiAgICBTRVRfUFJJTUFSWV9HVUVTVF9OQU1FOiBcInRyaXBmdXNpb24tc2V0LWd1ZXN0LW5hbWVcIixcbiAgICBTRVRfREFURVM6IFwidHJpcGZ1c2lvbi1zZXQtZGF0ZXNcIixcbiAgICBTRVRfQ0FSVDogXCJ0cmlwZnVzaW9uLXNldC1jYXJ0XCIsXG4gICAgRU1CRURfSEFORFNIQUtFX1JFUVVFU1Q6IFwidHJpcGZ1c2lvbi1lbWJlZC1oYW5kc2hha2UtcmVxdWVzdFwiLFxuICAgIEVNQkVEX0hBTkRTSEFLRV9SRVNQT05TRTogXCJ0cmlwZnVzaW9uLWVtYmVkLWhhbmRzaGFrZS1yZXNwb25zZVwiLFxufSBhcyBjb25zdDtcbiIsImNvbnN0IHJlZHV4SW1wbCA9IChyZWR1Y2VyLCBpbml0aWFsKSA9PiAoc2V0LCBfZ2V0LCBhcGkpID0+IHtcbiAgYXBpLmRpc3BhdGNoID0gKGFjdGlvbikgPT4ge1xuICAgIHNldCgoc3RhdGUpID0+IHJlZHVjZXIoc3RhdGUsIGFjdGlvbiksIGZhbHNlLCBhY3Rpb24pO1xuICAgIHJldHVybiBhY3Rpb247XG4gIH07XG4gIGFwaS5kaXNwYXRjaEZyb21EZXZ0b29scyA9IHRydWU7XG4gIHJldHVybiB7IGRpc3BhdGNoOiAoLi4uYXJncykgPT4gYXBpLmRpc3BhdGNoKC4uLmFyZ3MpLCAuLi5pbml0aWFsIH07XG59O1xuY29uc3QgcmVkdXggPSByZWR1eEltcGw7XG5cbmNvbnN0IHRyYWNrZWRDb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5jb25zdCBnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlID0gKG5hbWUpID0+IHtcbiAgY29uc3QgYXBpID0gdHJhY2tlZENvbm5lY3Rpb25zLmdldChuYW1lKTtcbiAgaWYgKCFhcGkpIHJldHVybiB7fTtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhhcGkuc3RvcmVzKS5tYXAoKFtrZXksIGFwaTJdKSA9PiBba2V5LCBhcGkyLmdldFN0YXRlKCldKVxuICApO1xufTtcbmNvbnN0IGV4dHJhY3RDb25uZWN0aW9uSW5mb3JtYXRpb24gPSAoc3RvcmUsIGV4dGVuc2lvbkNvbm5lY3Rvciwgb3B0aW9ucykgPT4ge1xuICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInVudHJhY2tlZFwiLFxuICAgICAgY29ubmVjdGlvbjogZXh0ZW5zaW9uQ29ubmVjdG9yLmNvbm5lY3Qob3B0aW9ucylcbiAgICB9O1xuICB9XG4gIGNvbnN0IGV4aXN0aW5nQ29ubmVjdGlvbiA9IHRyYWNrZWRDb25uZWN0aW9ucy5nZXQob3B0aW9ucy5uYW1lKTtcbiAgaWYgKGV4aXN0aW5nQ29ubmVjdGlvbikge1xuICAgIHJldHVybiB7IHR5cGU6IFwidHJhY2tlZFwiLCBzdG9yZSwgLi4uZXhpc3RpbmdDb25uZWN0aW9uIH07XG4gIH1cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IHtcbiAgICBjb25uZWN0aW9uOiBleHRlbnNpb25Db25uZWN0b3IuY29ubmVjdChvcHRpb25zKSxcbiAgICBzdG9yZXM6IHt9XG4gIH07XG4gIHRyYWNrZWRDb25uZWN0aW9ucy5zZXQob3B0aW9ucy5uYW1lLCBuZXdDb25uZWN0aW9uKTtcbiAgcmV0dXJuIHsgdHlwZTogXCJ0cmFja2VkXCIsIHN0b3JlLCAuLi5uZXdDb25uZWN0aW9uIH07XG59O1xuY29uc3QgcmVtb3ZlU3RvcmVGcm9tVHJhY2tlZENvbm5lY3Rpb25zID0gKG5hbWUsIHN0b3JlKSA9PiB7XG4gIGlmIChzdG9yZSA9PT0gdm9pZCAwKSByZXR1cm47XG4gIGNvbnN0IGNvbm5lY3Rpb25JbmZvID0gdHJhY2tlZENvbm5lY3Rpb25zLmdldChuYW1lKTtcbiAgaWYgKCFjb25uZWN0aW9uSW5mbykgcmV0dXJuO1xuICBkZWxldGUgY29ubmVjdGlvbkluZm8uc3RvcmVzW3N0b3JlXTtcbiAgaWYgKE9iamVjdC5rZXlzKGNvbm5lY3Rpb25JbmZvLnN0b3JlcykubGVuZ3RoID09PSAwKSB7XG4gICAgdHJhY2tlZENvbm5lY3Rpb25zLmRlbGV0ZShuYW1lKTtcbiAgfVxufTtcbmNvbnN0IGZpbmRDYWxsZXJOYW1lID0gKHN0YWNrKSA9PiB7XG4gIHZhciBfYSwgX2I7XG4gIGlmICghc3RhY2spIHJldHVybiB2b2lkIDA7XG4gIGNvbnN0IHRyYWNlTGluZXMgPSBzdGFjay5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgYXBpU2V0U3RhdGVMaW5lSW5kZXggPSB0cmFjZUxpbmVzLmZpbmRJbmRleChcbiAgICAodHJhY2VMaW5lKSA9PiB0cmFjZUxpbmUuaW5jbHVkZXMoXCJhcGkuc2V0U3RhdGVcIilcbiAgKTtcbiAgaWYgKGFwaVNldFN0YXRlTGluZUluZGV4IDwgMCkgcmV0dXJuIHZvaWQgMDtcbiAgY29uc3QgY2FsbGVyTGluZSA9ICgoX2EgPSB0cmFjZUxpbmVzW2FwaVNldFN0YXRlTGluZUluZGV4ICsgMV0pID09IG51bGwgPyB2b2lkIDAgOiBfYS50cmltKCkpIHx8IFwiXCI7XG4gIHJldHVybiAoX2IgPSAvLisgKC4rKSAuKy8uZXhlYyhjYWxsZXJMaW5lKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iWzFdO1xufTtcbmNvbnN0IGRldnRvb2xzSW1wbCA9IChmbiwgZGV2dG9vbHNPcHRpb25zID0ge30pID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGNvbnN0IHsgZW5hYmxlZCwgYW5vbnltb3VzQWN0aW9uVHlwZSwgc3RvcmUsIC4uLm9wdGlvbnMgfSA9IGRldnRvb2xzT3B0aW9ucztcbiAgbGV0IGV4dGVuc2lvbkNvbm5lY3RvcjtcbiAgdHJ5IHtcbiAgICBleHRlbnNpb25Db25uZWN0b3IgPSAoZW5hYmxlZCAhPSBudWxsID8gZW5hYmxlZCA6IChpbXBvcnQubWV0YS5lbnYgPyBpbXBvcnQubWV0YS5lbnYuTU9ERSA6IHZvaWQgMCkgIT09IFwicHJvZHVjdGlvblwiKSAmJiB3aW5kb3cuX19SRURVWF9ERVZUT09MU19FWFRFTlNJT05fXztcbiAgfSBjYXRjaCAoZSkge1xuICB9XG4gIGlmICghZXh0ZW5zaW9uQ29ubmVjdG9yKSB7XG4gICAgcmV0dXJuIGZuKHNldCwgZ2V0LCBhcGkpO1xuICB9XG4gIGNvbnN0IHsgY29ubmVjdGlvbiwgLi4uY29ubmVjdGlvbkluZm9ybWF0aW9uIH0gPSBleHRyYWN0Q29ubmVjdGlvbkluZm9ybWF0aW9uKHN0b3JlLCBleHRlbnNpb25Db25uZWN0b3IsIG9wdGlvbnMpO1xuICBsZXQgaXNSZWNvcmRpbmcgPSB0cnVlO1xuICBhcGkuc2V0U3RhdGUgPSAoKHN0YXRlLCByZXBsYWNlLCBuYW1lT3JBY3Rpb24pID0+IHtcbiAgICBjb25zdCByID0gc2V0KHN0YXRlLCByZXBsYWNlKTtcbiAgICBpZiAoIWlzUmVjb3JkaW5nKSByZXR1cm4gcjtcbiAgICBjb25zdCBhY3Rpb24gPSBuYW1lT3JBY3Rpb24gPT09IHZvaWQgMCA/IHtcbiAgICAgIHR5cGU6IGFub255bW91c0FjdGlvblR5cGUgfHwgZmluZENhbGxlck5hbWUobmV3IEVycm9yKCkuc3RhY2spIHx8IFwiYW5vbnltb3VzXCJcbiAgICB9IDogdHlwZW9mIG5hbWVPckFjdGlvbiA9PT0gXCJzdHJpbmdcIiA/IHsgdHlwZTogbmFtZU9yQWN0aW9uIH0gOiBuYW1lT3JBY3Rpb247XG4gICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uc2VuZChhY3Rpb24sIGdldCgpKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cbiAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLnNlbmQoXG4gICAgICB7XG4gICAgICAgIC4uLmFjdGlvbixcbiAgICAgICAgdHlwZTogYCR7c3RvcmV9LyR7YWN0aW9uLnR5cGV9YFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgLi4uZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpLFxuICAgICAgICBbc3RvcmVdOiBhcGkuZ2V0U3RhdGUoKVxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIHI7XG4gIH0pO1xuICBhcGkuZGV2dG9vbHMgPSB7XG4gICAgY2xlYW51cDogKCkgPT4ge1xuICAgICAgaWYgKGNvbm5lY3Rpb24gJiYgdHlwZW9mIGNvbm5lY3Rpb24udW5zdWJzY3JpYmUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICByZW1vdmVTdG9yZUZyb21UcmFja2VkQ29ubmVjdGlvbnMob3B0aW9ucy5uYW1lLCBzdG9yZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzZXRTdGF0ZUZyb21EZXZ0b29scyA9ICguLi5hKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxJc1JlY29yZGluZyA9IGlzUmVjb3JkaW5nO1xuICAgIGlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgc2V0KC4uLmEpO1xuICAgIGlzUmVjb3JkaW5nID0gb3JpZ2luYWxJc1JlY29yZGluZztcbiAgfTtcbiAgY29uc3QgaW5pdGlhbFN0YXRlID0gZm4oYXBpLnNldFN0YXRlLCBnZXQsIGFwaSk7XG4gIGlmIChjb25uZWN0aW9uSW5mb3JtYXRpb24udHlwZSA9PT0gXCJ1bnRyYWNrZWRcIikge1xuICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChpbml0aWFsU3RhdGUpO1xuICB9IGVsc2Uge1xuICAgIGNvbm5lY3Rpb25JbmZvcm1hdGlvbi5zdG9yZXNbY29ubmVjdGlvbkluZm9ybWF0aW9uLnN0b3JlXSA9IGFwaTtcbiAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoXG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbm5lY3Rpb25JbmZvcm1hdGlvbi5zdG9yZXMpLm1hcCgoW2tleSwgc3RvcmUyXSkgPT4gW1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICBrZXkgPT09IGNvbm5lY3Rpb25JbmZvcm1hdGlvbi5zdG9yZSA/IGluaXRpYWxTdGF0ZSA6IHN0b3JlMi5nZXRTdGF0ZSgpXG4gICAgICAgIF0pXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBpZiAoYXBpLmRpc3BhdGNoRnJvbURldnRvb2xzICYmIHR5cGVvZiBhcGkuZGlzcGF0Y2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxldCBkaWRXYXJuQWJvdXRSZXNlcnZlZEFjdGlvblR5cGUgPSBmYWxzZTtcbiAgICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gYXBpLmRpc3BhdGNoO1xuICAgIGFwaS5kaXNwYXRjaCA9ICguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoKGltcG9ydC5tZXRhLmVudiA/IGltcG9ydC5tZXRhLmVudi5NT0RFIDogdm9pZCAwKSAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgYXJnc1swXS50eXBlID09PSBcIl9fc2V0U3RhdGVcIiAmJiAhZGlkV2FybkFib3V0UmVzZXJ2ZWRBY3Rpb25UeXBlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnW3p1c3RhbmQgZGV2dG9vbHMgbWlkZGxld2FyZV0gXCJfX3NldFN0YXRlXCIgYWN0aW9uIHR5cGUgaXMgcmVzZXJ2ZWQgdG8gc2V0IHN0YXRlIGZyb20gdGhlIGRldnRvb2xzLiBBdm9pZCB1c2luZyBpdC4nXG4gICAgICAgICk7XG4gICAgICAgIGRpZFdhcm5BYm91dFJlc2VydmVkQWN0aW9uVHlwZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBvcmlnaW5hbERpc3BhdGNoKC4uLmFyZ3MpO1xuICAgIH07XG4gIH1cbiAgY29ubmVjdGlvbi5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgc3dpdGNoIChtZXNzYWdlLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJBQ1RJT05cIjpcbiAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlLnBheWxvYWQgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJbenVzdGFuZCBkZXZ0b29scyBtaWRkbGV3YXJlXSBVbnN1cHBvcnRlZCBhY3Rpb24gZm9ybWF0XCJcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VKc29uVGhlbihcbiAgICAgICAgICBtZXNzYWdlLnBheWxvYWQsXG4gICAgICAgICAgKGFjdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBcIl9fc2V0U3RhdGVcIikge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGFjdGlvbi5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhhY3Rpb24uc3RhdGUpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgIFt6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIFVuc3VwcG9ydGVkIF9fc2V0U3RhdGUgYWN0aW9uIGZvcm1hdC5cbiAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZyAnc3RvcmUnIG9wdGlvbiBpbiBkZXZ0b29scygpLCB0aGUgJ3N0YXRlJyBzaG91bGQgaGF2ZSBvbmx5IG9uZSBrZXksIHdoaWNoIGlzIGEgdmFsdWUgb2YgJ3N0b3JlJyB0aGF0IHdhcyBwYXNzZWQgaW4gZGV2dG9vbHMoKSxcbiAgICAgICAgICAgICAgICAgICAgYW5kIHZhbHVlIG9mIHRoaXMgb25seSBrZXkgc2hvdWxkIGJlIGEgc3RhdGUgb2JqZWN0LiBFeGFtcGxlOiB7IFwidHlwZVwiOiBcIl9fc2V0U3RhdGVcIiwgXCJzdGF0ZVwiOiB7IFwiYWJjMTIzU3RvcmVcIjogeyBcImZvb1wiOiBcImJhclwiIH0gfSB9XG4gICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXRlRnJvbURldnRvb2xzID0gYWN0aW9uLnN0YXRlW3N0b3JlXTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlRnJvbURldnRvb2xzID09PSB2b2lkIDAgfHwgc3RhdGVGcm9tRGV2dG9vbHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGFwaS5nZXRTdGF0ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGVGcm9tRGV2dG9vbHMpKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoc3RhdGVGcm9tRGV2dG9vbHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYXBpLmRpc3BhdGNoRnJvbURldnRvb2xzKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFwaS5kaXNwYXRjaCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm47XG4gICAgICAgICAgICBhcGkuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiRElTUEFUQ0hcIjpcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLnBheWxvYWQudHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJSRVNFVFwiOlxuICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSkpO1xuICAgICAgICAgIGNhc2UgXCJDT01NSVRcIjpcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpKTtcbiAgICAgICAgICBjYXNlIFwiUk9MTEJBQ0tcIjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUpzb25UaGVuKG1lc3NhZ2Uuc3RhdGUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZVtzdG9yZV0pO1xuICAgICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhc2UgXCJKVU1QX1RPX1NUQVRFXCI6XG4gICAgICAgICAgY2FzZSBcIkpVTVBfVE9fQUNUSU9OXCI6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VKc29uVGhlbihtZXNzYWdlLnN0YXRlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhcGkuZ2V0U3RhdGUoKSkgIT09IEpTT04uc3RyaW5naWZ5KHN0YXRlW3N0b3JlXSkpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZVtzdG9yZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBjYXNlIFwiSU1QT1JUX1NUQVRFXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmV4dExpZnRlZFN0YXRlIH0gPSBtZXNzYWdlLnBheWxvYWQ7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29tcHV0ZWRTdGF0ZSA9IChfYSA9IG5leHRMaWZ0ZWRTdGF0ZS5jb21wdXRlZFN0YXRlcy5zbGljZSgtMSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdGF0ZTtcbiAgICAgICAgICAgIGlmICghbGFzdENvbXB1dGVkU3RhdGUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGxhc3RDb21wdXRlZFN0YXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGxhc3RDb21wdXRlZFN0YXRlW3N0b3JlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIC8vIEZJWE1FIG5vLWFueVxuICAgICAgICAgICAgICBuZXh0TGlmdGVkU3RhdGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJQQVVTRV9SRUNPUkRJTkdcIjpcbiAgICAgICAgICAgIHJldHVybiBpc1JlY29yZGluZyA9ICFpc1JlY29yZGluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5jb25zdCBkZXZ0b29scyA9IGRldnRvb2xzSW1wbDtcbmNvbnN0IHBhcnNlSnNvblRoZW4gPSAoc3RyaW5naWZpZWQsIGZuKSA9PiB7XG4gIGxldCBwYXJzZWQ7XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShzdHJpbmdpZmllZCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgXCJbenVzdGFuZCBkZXZ0b29scyBtaWRkbGV3YXJlXSBDb3VsZCBub3QgcGFyc2UgdGhlIHJlY2VpdmVkIGpzb25cIixcbiAgICAgIGVcbiAgICApO1xuICB9XG4gIGlmIChwYXJzZWQgIT09IHZvaWQgMCkgZm4ocGFyc2VkKTtcbn07XG5cbmNvbnN0IHN1YnNjcmliZVdpdGhTZWxlY3RvckltcGwgPSAoZm4pID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGNvbnN0IG9yaWdTdWJzY3JpYmUgPSBhcGkuc3Vic2NyaWJlO1xuICBhcGkuc3Vic2NyaWJlID0gKChzZWxlY3Rvciwgb3B0TGlzdGVuZXIsIG9wdGlvbnMpID0+IHtcbiAgICBsZXQgbGlzdGVuZXIgPSBzZWxlY3RvcjtcbiAgICBpZiAob3B0TGlzdGVuZXIpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5Rm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5lcXVhbGl0eUZuKSB8fCBPYmplY3QuaXM7XG4gICAgICBsZXQgY3VycmVudFNsaWNlID0gc2VsZWN0b3IoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgbGlzdGVuZXIgPSAoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFNsaWNlID0gc2VsZWN0b3Ioc3RhdGUpO1xuICAgICAgICBpZiAoIWVxdWFsaXR5Rm4oY3VycmVudFNsaWNlLCBuZXh0U2xpY2UpKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNTbGljZSA9IGN1cnJlbnRTbGljZTtcbiAgICAgICAgICBvcHRMaXN0ZW5lcihjdXJyZW50U2xpY2UgPSBuZXh0U2xpY2UsIHByZXZpb3VzU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyZUltbWVkaWF0ZWx5KSB7XG4gICAgICAgIG9wdExpc3RlbmVyKGN1cnJlbnRTbGljZSwgY3VycmVudFNsaWNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9yaWdTdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9KTtcbiAgY29uc3QgaW5pdGlhbFN0YXRlID0gZm4oc2V0LCBnZXQsIGFwaSk7XG4gIHJldHVybiBpbml0aWFsU3RhdGU7XG59O1xuY29uc3Qgc3Vic2NyaWJlV2l0aFNlbGVjdG9yID0gc3Vic2NyaWJlV2l0aFNlbGVjdG9ySW1wbDtcblxuZnVuY3Rpb24gY29tYmluZShpbml0aWFsU3RhdGUsIGNyZWF0ZSkge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IE9iamVjdC5hc3NpZ24oe30sIGluaXRpYWxTdGF0ZSwgY3JlYXRlKC4uLmFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSlNPTlN0b3JhZ2UoZ2V0U3RvcmFnZSwgb3B0aW9ucykge1xuICBsZXQgc3RvcmFnZTtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlID0gZ2V0U3RvcmFnZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBlcnNpc3RTdG9yYWdlID0ge1xuICAgIGdldEl0ZW06IChuYW1lKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBwYXJzZSA9IChzdHIyKSA9PiB7XG4gICAgICAgIGlmIChzdHIyID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyMiwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZpdmVyKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdHIgPSAoX2EgPSBzdG9yYWdlLmdldEl0ZW0obmFtZSkpICE9IG51bGwgPyBfYSA6IG51bGw7XG4gICAgICBpZiAoc3RyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gc3RyLnRoZW4ocGFyc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlKHN0cik7XG4gICAgfSxcbiAgICBzZXRJdGVtOiAobmFtZSwgbmV3VmFsdWUpID0+IHN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXBsYWNlcikpLFxuICAgIHJlbW92ZUl0ZW06IChuYW1lKSA9PiBzdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSlcbiAgfTtcbiAgcmV0dXJuIHBlcnNpc3RTdG9yYWdlO1xufVxuY29uc3QgdG9UaGVuYWJsZSA9IChmbikgPT4gKGlucHV0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZm4oaW5wdXQpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGhlbihvbkZ1bGZpbGxlZCkge1xuICAgICAgICByZXR1cm4gdG9UaGVuYWJsZShvbkZ1bGZpbGxlZCkocmVzdWx0KTtcbiAgICAgIH0sXG4gICAgICBjYXRjaChfb25SZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW4oX29uRnVsZmlsbGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIGNhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRvVGhlbmFibGUob25SZWplY3RlZCkoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcbmNvbnN0IHBlcnNpc3RJbXBsID0gKGNvbmZpZywgYmFzZU9wdGlvbnMpID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGxldCBvcHRpb25zID0ge1xuICAgIHN0b3JhZ2U6IGNyZWF0ZUpTT05TdG9yYWdlKCgpID0+IGxvY2FsU3RvcmFnZSksXG4gICAgcGFydGlhbGl6ZTogKHN0YXRlKSA9PiBzdGF0ZSxcbiAgICB2ZXJzaW9uOiAwLFxuICAgIG1lcmdlOiAocGVyc2lzdGVkU3RhdGUsIGN1cnJlbnRTdGF0ZSkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcbiAgICAgIC4uLnBlcnNpc3RlZFN0YXRlXG4gICAgfSksXG4gICAgLi4uYmFzZU9wdGlvbnNcbiAgfTtcbiAgbGV0IGhhc0h5ZHJhdGVkID0gZmFsc2U7XG4gIGNvbnN0IGh5ZHJhdGlvbkxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGNvbnN0IGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGxldCBzdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlO1xuICBpZiAoIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4gY29uZmlnKFxuICAgICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbenVzdGFuZCBwZXJzaXN0IG1pZGRsZXdhcmVdIFVuYWJsZSB0byB1cGRhdGUgaXRlbSAnJHtvcHRpb25zLm5hbWV9JywgdGhlIGdpdmVuIHN0b3JhZ2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLmBcbiAgICAgICAgKTtcbiAgICAgICAgc2V0KC4uLmFyZ3MpO1xuICAgICAgfSxcbiAgICAgIGdldCxcbiAgICAgIGFwaVxuICAgICk7XG4gIH1cbiAgY29uc3Qgc2V0SXRlbSA9ICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IG9wdGlvbnMucGFydGlhbGl6ZSh7IC4uLmdldCgpIH0pO1xuICAgIHJldHVybiBzdG9yYWdlLnNldEl0ZW0ob3B0aW9ucy5uYW1lLCB7XG4gICAgICBzdGF0ZSxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBzYXZlZFNldFN0YXRlID0gYXBpLnNldFN0YXRlO1xuICBhcGkuc2V0U3RhdGUgPSAoc3RhdGUsIHJlcGxhY2UpID0+IHtcbiAgICBzYXZlZFNldFN0YXRlKHN0YXRlLCByZXBsYWNlKTtcbiAgICByZXR1cm4gc2V0SXRlbSgpO1xuICB9O1xuICBjb25zdCBjb25maWdSZXN1bHQgPSBjb25maWcoXG4gICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgIHNldCguLi5hcmdzKTtcbiAgICAgIHJldHVybiBzZXRJdGVtKCk7XG4gICAgfSxcbiAgICBnZXQsXG4gICAgYXBpXG4gICk7XG4gIGFwaS5nZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBjb25maWdSZXN1bHQ7XG4gIGxldCBzdGF0ZUZyb21TdG9yYWdlO1xuICBjb25zdCBoeWRyYXRlID0gKCkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFzdG9yYWdlKSByZXR1cm47XG4gICAgaGFzSHlkcmF0ZWQgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25MaXN0ZW5lcnMuZm9yRWFjaCgoY2IpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICByZXR1cm4gY2IoKF9hMiA9IGdldCgpKSAhPSBudWxsID8gX2EyIDogY29uZmlnUmVzdWx0KTtcbiAgICB9KTtcbiAgICBjb25zdCBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9ICgoX2IgPSBvcHRpb25zLm9uUmVoeWRyYXRlU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwob3B0aW9ucywgKF9hID0gZ2V0KCkpICE9IG51bGwgPyBfYSA6IGNvbmZpZ1Jlc3VsdCkpIHx8IHZvaWQgMDtcbiAgICByZXR1cm4gdG9UaGVuYWJsZShzdG9yYWdlLmdldEl0ZW0uYmluZChzdG9yYWdlKSkob3B0aW9ucy5uYW1lKS50aGVuKChkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUpID0+IHtcbiAgICAgIGlmIChkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvbiA9PT0gXCJudW1iZXJcIiAmJiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvbiAhPT0gb3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMubWlncmF0ZSkge1xuICAgICAgICAgICAgY29uc3QgbWlncmF0aW9uID0gb3B0aW9ucy5taWdyYXRlKFxuICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUuc3RhdGUsXG4gICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS52ZXJzaW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1pZ3JhdGlvbiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1pZ3JhdGlvbi50aGVuKChyZXN1bHQpID0+IFt0cnVlLCByZXN1bHRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgbWlncmF0aW9uXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBTdGF0ZSBsb2FkZWQgZnJvbSBzdG9yYWdlIGNvdWxkbid0IGJlIG1pZ3JhdGVkIHNpbmNlIG5vIG1pZ3JhdGUgZnVuY3Rpb24gd2FzIHByb3ZpZGVkYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtmYWxzZSwgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnN0YXRlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtmYWxzZSwgdm9pZCAwXTtcbiAgICB9KS50aGVuKChtaWdyYXRpb25SZXN1bHQpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICBjb25zdCBbbWlncmF0ZWQsIG1pZ3JhdGVkU3RhdGVdID0gbWlncmF0aW9uUmVzdWx0O1xuICAgICAgc3RhdGVGcm9tU3RvcmFnZSA9IG9wdGlvbnMubWVyZ2UoXG4gICAgICAgIG1pZ3JhdGVkU3RhdGUsXG4gICAgICAgIChfYTIgPSBnZXQoKSkgIT0gbnVsbCA/IF9hMiA6IGNvbmZpZ1Jlc3VsdFxuICAgICAgKTtcbiAgICAgIHNldChzdGF0ZUZyb21TdG9yYWdlLCB0cnVlKTtcbiAgICAgIGlmIChtaWdyYXRlZCkge1xuICAgICAgICByZXR1cm4gc2V0SXRlbSgpO1xuICAgICAgfVxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2sgPT0gbnVsbCA/IHZvaWQgMCA6IHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrKHN0YXRlRnJvbVN0b3JhZ2UsIHZvaWQgMCk7XG4gICAgICBzdGF0ZUZyb21TdG9yYWdlID0gZ2V0KCk7XG4gICAgICBoYXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMuZm9yRWFjaCgoY2IpID0+IGNiKHN0YXRlRnJvbVN0b3JhZ2UpKTtcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2sgPT0gbnVsbCA/IHZvaWQgMCA6IHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrKHZvaWQgMCwgZSk7XG4gICAgfSk7XG4gIH07XG4gIGFwaS5wZXJzaXN0ID0ge1xuICAgIHNldE9wdGlvbnM6IChuZXdPcHRpb25zKSA9PiB7XG4gICAgICBvcHRpb25zID0ge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAuLi5uZXdPcHRpb25zXG4gICAgICB9O1xuICAgICAgaWYgKG5ld09wdGlvbnMuc3RvcmFnZSkge1xuICAgICAgICBzdG9yYWdlID0gbmV3T3B0aW9ucy5zdG9yYWdlO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJTdG9yYWdlOiAoKSA9PiB7XG4gICAgICBzdG9yYWdlID09IG51bGwgPyB2b2lkIDAgOiBzdG9yYWdlLnJlbW92ZUl0ZW0ob3B0aW9ucy5uYW1lKTtcbiAgICB9LFxuICAgIGdldE9wdGlvbnM6ICgpID0+IG9wdGlvbnMsXG4gICAgcmVoeWRyYXRlOiAoKSA9PiBoeWRyYXRlKCksXG4gICAgaGFzSHlkcmF0ZWQ6ICgpID0+IGhhc0h5ZHJhdGVkLFxuICAgIG9uSHlkcmF0ZTogKGNiKSA9PiB7XG4gICAgICBoeWRyYXRpb25MaXN0ZW5lcnMuYWRkKGNiKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGh5ZHJhdGlvbkxpc3RlbmVycy5kZWxldGUoY2IpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG9uRmluaXNoSHlkcmF0aW9uOiAoY2IpID0+IHtcbiAgICAgIGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycy5hZGQoY2IpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzLmRlbGV0ZShjYik7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgaWYgKCFvcHRpb25zLnNraXBIeWRyYXRpb24pIHtcbiAgICBoeWRyYXRlKCk7XG4gIH1cbiAgcmV0dXJuIHN0YXRlRnJvbVN0b3JhZ2UgfHwgY29uZmlnUmVzdWx0O1xufTtcbmNvbnN0IHBlcnNpc3QgPSBwZXJzaXN0SW1wbDtcblxuZnVuY3Rpb24gc3NyU2FmZShjb25maWcsIGlzU1NSID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICByZXR1cm4gKHNldCwgZ2V0LCBhcGkpID0+IHtcbiAgICBpZiAoIWlzU1NSKSB7XG4gICAgICByZXR1cm4gY29uZmlnKHNldCwgZ2V0LCBhcGkpO1xuICAgIH1cbiAgICBjb25zdCBzc3JTZXQgPSAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc2V0IHN0YXRlIG9mIFp1c3RhbmQgc3RvcmUgaW4gU1NSXCIpO1xuICAgIH07XG4gICAgYXBpLnNldFN0YXRlID0gc3NyU2V0O1xuICAgIHJldHVybiBjb25maWcoc3NyU2V0LCBnZXQsIGFwaSk7XG4gIH07XG59XG5cbmV4cG9ydCB7IGNvbWJpbmUsIGNyZWF0ZUpTT05TdG9yYWdlLCBkZXZ0b29scywgcGVyc2lzdCwgcmVkdXgsIHN1YnNjcmliZVdpdGhTZWxlY3Rvciwgc3NyU2FmZSBhcyB1bnN0YWJsZV9zc3JTYWZlIH07XG4iLCJjb25zdCBjcmVhdGVTdG9yZUltcGwgPSAoY3JlYXRlU3RhdGUpID0+IHtcbiAgbGV0IHN0YXRlO1xuICBjb25zdCBsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBjb25zdCBzZXRTdGF0ZSA9IChwYXJ0aWFsLCByZXBsYWNlKSA9PiB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdHlwZW9mIHBhcnRpYWwgPT09IFwiZnVuY3Rpb25cIiA/IHBhcnRpYWwoc3RhdGUpIDogcGFydGlhbDtcbiAgICBpZiAoIU9iamVjdC5pcyhuZXh0U3RhdGUsIHN0YXRlKSkge1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHN0YXRlO1xuICAgICAgc3RhdGUgPSAocmVwbGFjZSAhPSBudWxsID8gcmVwbGFjZSA6IHR5cGVvZiBuZXh0U3RhdGUgIT09IFwib2JqZWN0XCIgfHwgbmV4dFN0YXRlID09PSBudWxsKSA/IG5leHRTdGF0ZSA6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihzdGF0ZSwgcHJldmlvdXNTdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZ2V0U3RhdGUgPSAoKSA9PiBzdGF0ZTtcbiAgY29uc3QgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gaW5pdGlhbFN0YXRlO1xuICBjb25zdCBzdWJzY3JpYmUgPSAobGlzdGVuZXIpID0+IHtcbiAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gIH07XG4gIGNvbnN0IGFwaSA9IHsgc2V0U3RhdGUsIGdldFN0YXRlLCBnZXRJbml0aWFsU3RhdGUsIHN1YnNjcmliZSB9O1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSBzdGF0ZSA9IGNyZWF0ZVN0YXRlKHNldFN0YXRlLCBnZXRTdGF0ZSwgYXBpKTtcbiAgcmV0dXJuIGFwaTtcbn07XG5jb25zdCBjcmVhdGVTdG9yZSA9ICgoY3JlYXRlU3RhdGUpID0+IGNyZWF0ZVN0YXRlID8gY3JlYXRlU3RvcmVJbXBsKGNyZWF0ZVN0YXRlKSA6IGNyZWF0ZVN0b3JlSW1wbCk7XG5cbmV4cG9ydCB7IGNyZWF0ZVN0b3JlIH07XG4iLCJpbXBvcnQgeyBwZXJzaXN0LCBjcmVhdGVKU09OU3RvcmFnZSB9IGZyb20gXCJ6dXN0YW5kL21pZGRsZXdhcmVcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gZnJvbSBcInp1c3RhbmQvdmFuaWxsYVwiO1xuXG4vLyBUT0RPOiBjYXJ0IHNob3VsZCBiZSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IHByb2plY3RcbnR5cGUgV2lkZ2V0U3RhdGUgPSB7XG4gICAgaXNPcGVuOiBib29sZWFuO1xuICAgIGlzUmVzdW1lUGFuZWxWaXNpYmxlOiBib29sZWFuO1xuICAgIGlzUmVhZHk6IGJvb2xlYW47XG4gICAgaXNCb29raW5nQ29tcGxldGVkOiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIHByaW1hcnlHdWVzdE5hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgY2hlY2tJbkRhdGU6IHN0cmluZyB8IG51bGw7XG4gICAgY2hlY2tPdXREYXRlOiBzdHJpbmcgfCBudWxsO1xuICAgIGNhcnQ6IGFueTtcbn07XG5cbnR5cGUgQWN0aW9ucyA9IHtcbiAgICBzaG93V2lkZ2V0OiAoKSA9PiB2b2lkO1xuICAgIGhpZGVXaWRnZXQ6ICgpID0+IHZvaWQ7XG4gICAgc2hvd1Jlc3VtZVBhbmVsOiAoKSA9PiB2b2lkO1xuICAgIGhpZGVSZXN1bWVQYW5lbDogKCkgPT4gdm9pZDtcbiAgICBzZXRJc1JlYWR5OiAoaXNSZWFkeTogYm9vbGVhbikgPT4gdm9pZDtcbiAgICBzZXRJc0Jvb2tpbmdDb21wbGV0ZWQ6IChpc0NvbXBsZXRlZDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IChjb2xvcj86IHN0cmluZykgPT4gdm9pZDtcbiAgICBzZXRQcmltYXJ5R3Vlc3ROYW1lOiAobmFtZTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIHNldENhcnQ6IChjYXJ0PzogYW55KSA9PiB2b2lkO1xuICAgIHNldERhdGVzOiAoY2hlY2tJbkRhdGU6IHN0cmluZywgY2hlY2tPdXREYXRlOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgcmVzZXQ6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpbml0aWFsV2lkZ2V0U3RhdGU6IFdpZGdldFN0YXRlID0ge1xuICAgIGlzT3BlbjogZmFsc2UsXG4gICAgaXNSZXN1bWVQYW5lbFZpc2libGU6IGZhbHNlLFxuICAgIGlzUmVhZHk6IGZhbHNlLFxuICAgIGlzQm9va2luZ0NvbXBsZXRlZDogZmFsc2UsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcInJnYigzNSwgNzYsIDEyMSlcIixcbiAgICBwcmltYXJ5R3Vlc3ROYW1lOiBudWxsLFxuICAgIGNoZWNrSW5EYXRlOiBudWxsLFxuICAgIGNoZWNrT3V0RGF0ZTogbnVsbCxcbiAgICBjYXJ0OiB7fSxcbn07XG5cbmV4cG9ydCBjb25zdCB3aWRnZXRTdG9yZSA9IGNyZWF0ZVN0b3JlPFdpZGdldFN0YXRlICYgQWN0aW9ucz4oKShcbiAgICBwZXJzaXN0KFxuICAgICAgICAoc2V0KSA9PiAoe1xuICAgICAgICAgICAgLi4uaW5pdGlhbFdpZGdldFN0YXRlLFxuICAgICAgICAgICAgc2hvd1dpZGdldDogKCkgPT4gc2V0KHsgaXNPcGVuOiB0cnVlIH0pLFxuICAgICAgICAgICAgaGlkZVdpZGdldDogKCkgPT4gc2V0KHsgaXNPcGVuOiBmYWxzZSB9KSxcbiAgICAgICAgICAgIHNob3dSZXN1bWVQYW5lbDogKCkgPT4gc2V0KHsgaXNSZXN1bWVQYW5lbFZpc2libGU6IHRydWUgfSksXG4gICAgICAgICAgICBoaWRlUmVzdW1lUGFuZWw6ICgpID0+IHNldCh7IGlzUmVzdW1lUGFuZWxWaXNpYmxlOiBmYWxzZSB9KSxcbiAgICAgICAgICAgIHNldElzUmVhZHk6IChpc1JlYWR5KSA9PiBzZXQoeyBpc1JlYWR5IH0pLFxuICAgICAgICAgICAgc2V0SXNCb29raW5nQ29tcGxldGVkOiAoaXNCb29raW5nQ29tcGxldGVkKSA9PiBzZXQoeyBpc0Jvb2tpbmdDb21wbGV0ZWQgfSksXG4gICAgICAgICAgICBzZXRCYWNrZ3JvdW5kQ29sb3I6IChiYWNrZ3JvdW5kQ29sb3IpID0+XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yXG4gICAgICAgICAgICAgICAgICAgID8gc2V0KHsgYmFja2dyb3VuZENvbG9yIH0pXG4gICAgICAgICAgICAgICAgICAgIDogc2V0KHsgYmFja2dyb3VuZENvbG9yOiBpbml0aWFsV2lkZ2V0U3RhdGUuYmFja2dyb3VuZENvbG9yIH0pLFxuICAgICAgICAgICAgc2V0UHJpbWFyeUd1ZXN0TmFtZTogKHByaW1hcnlHdWVzdE5hbWUpID0+IHNldCh7IHByaW1hcnlHdWVzdE5hbWUgfSksXG4gICAgICAgICAgICBzZXRDYXJ0OiAoY2FydCkgPT4gc2V0KHsgY2FydCB9KSxcbiAgICAgICAgICAgIHNldERhdGVzOiAoY2hlY2tJbkRhdGUsIGNoZWNrT3V0RGF0ZSkgPT4gc2V0KHsgY2hlY2tJbkRhdGUsIGNoZWNrT3V0RGF0ZSB9KSxcbiAgICAgICAgICAgIHJlc2V0OiAoKSA9PiBzZXQoaW5pdGlhbFdpZGdldFN0YXRlKSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwid2lkZ2V0U3RvcmVcIixcbiAgICAgICAgICAgIHN0b3JhZ2U6IGNyZWF0ZUpTT05TdG9yYWdlKCgpID0+IHNlc3Npb25TdG9yYWdlKSxcbiAgICAgICAgICAgIHBhcnRpYWxpemU6IChzdGF0ZSkgPT5cbiAgICAgICAgICAgICAgICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoc3RhdGUpLmZpbHRlcigoW2tleV0pID0+ICFbXCJjYXJ0XCIsIFwiaXNSZWFkeVwiXS5pbmNsdWRlcyhrZXkpKSksXG4gICAgICAgICAgICBvblJlaHlkcmF0ZVN0b3JhZ2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZT8uaXNCb29raW5nQ29tcGxldGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICApXG4pO1xuIiwiaW1wb3J0IHsgQk9PS0lOR19NT0RFIH0gZnJvbSBcIi4uL2NvbnN0XCI7XG5pbXBvcnQgeyBwZXJzaXN0LCBjcmVhdGVKU09OU3RvcmFnZSB9IGZyb20gXCJ6dXN0YW5kL21pZGRsZXdhcmVcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JlIH0gZnJvbSBcInp1c3RhbmQvdmFuaWxsYVwiO1xuXG5leHBvcnQgdHlwZSBHbG9iYWxTdGF0ZSA9IHtcbiAgICBjbGllbnQ6IHN0cmluZyB8IG51bGw7XG4gICAgcHJvcGVydHlJZDogbnVtYmVyIHwgbnVsbDtcbiAgICBwcm9wZXJ0eVNsdWc6IHN0cmluZyB8IG51bGw7XG4gICAgbGFuZGluZ1BhZ2VQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIGxhbmRpbmdQYWdlSWQ6IG51bWJlciB8IG51bGw7XG4gICAgbW9kZToga2V5b2YgdHlwZW9mIEJPT0tJTkdfTU9ERTtcbiAgICBib29raW5nSWQ6IG51bWJlciB8IG51bGw7XG4gICAgY2hlY2tJbjogc3RyaW5nIHwgbnVsbDtcbiAgICBjaGVja091dDogc3RyaW5nIHwgbnVsbDtcbiAgICBhZHVsdHM6IG51bWJlciB8IG51bGw7XG4gICAgY2hpbGRyZW46IG51bWJlcltdIHwgbnVsbDtcbiAgICBvZmZlcklkOiBudW1iZXIgfCBudWxsO1xuICAgIGVudjogc3RyaW5nIHwgbnVsbDtcbiAgICBlbWJlZEtleTogc3RyaW5nIHwgbnVsbDtcbiAgICAvLyBXaGVuIFwic2VsZlwiLCB0aGUgU0RLIG9wZW5zIHRoZSBjaGVja291dCBpZnJhbWUgb24gdGhlIENVUlJFTlQgcGFnZSBvcmlnaW5cbiAgICAvLyBpbnN0ZWFkIG9mIHRoZSBjaGVja291dC50cmlwZnVzaW9uLmNvbSBob3N0LiBTZXQgb25seSBieSBvdXIgb3duIGluamVjdG9yXG4gICAgLy8gKFdpZGdldENvbnRleHQpIG9uIGhvc3RzIHdlIHNlcnZlIOKAlCBrZWVwcyB0aGUgdGVuYW50IGNvZXhpc3RlbmNlIGlmcmFtZVxuICAgIC8vIGZpcnN0LXBhcnR5LiBBYnNlbnQgZm9yIHRoaXJkLXBhcnR5IENETiBlbWJlZHMsIHNvIHRoZWlyIGJlaGF2aW9yIGlzXG4gICAgLy8gdW5jaGFuZ2VkLiBOZXZlciBwZXJzaXN0ZWQgKHNlZSBwYXJ0aWFsaXplKSDigJQgaXQgaXMgYSBwZXItcGFnZSBmYWN0LlxuICAgIGVtYmVkQmFzZTogc3RyaW5nIHwgbnVsbDtcbiAgICByZXBsYWNlOiAoc3RhdGU6IFBhcnRpYWw8R2xvYmFsU3RhdGU+KSA9PiB2b2lkO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgIGNsaWVudDogbnVsbCxcbiAgICBwcm9wZXJ0eUlkOiBudWxsLFxuICAgIHByb3BlcnR5U2x1ZzogbnVsbCxcbiAgICBsYW5kaW5nUGFnZVBhdGg6IG51bGwsXG4gICAgbGFuZGluZ1BhZ2VJZDogbnVsbCxcbiAgICBtb2RlOiBCT09LSU5HX01PREUubm9ybWFsLFxuICAgIGJvb2tpbmdJZDogbnVsbCxcbiAgICBjaGVja0luOiBudWxsLFxuICAgIGNoZWNrT3V0OiBudWxsLFxuICAgIGFkdWx0czogbnVsbCxcbiAgICBjaGlsZHJlbjogbnVsbCxcbiAgICBvZmZlcklkOiBudWxsLFxuICAgIGVudjogbnVsbCxcbiAgICBlbWJlZEtleTogbnVsbCxcbiAgICBlbWJlZEJhc2U6IG51bGwsXG59O1xuXG5leHBvcnQgY29uc3QgZ2xvYmFsU3RvcmUgPSBjcmVhdGVTdG9yZTxHbG9iYWxTdGF0ZT4oKShcbiAgICBwZXJzaXN0KFxuICAgICAgICAoc2V0KSA9PiAoe1xuICAgICAgICAgICAgLi4uaW5pdGlhbFN0YXRlLFxuICAgICAgICAgICAgcmVwbGFjZTogKHN0YXRlKSA9PiBzZXQoeyAuLi5pbml0aWFsU3RhdGUsIC4uLnN0YXRlIH0pLFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJnbG9iYWxTdG9yZVwiLFxuICAgICAgICAgICAgc3RvcmFnZTogY3JlYXRlSlNPTlN0b3JhZ2UoKCkgPT4gc2Vzc2lvblN0b3JhZ2UpLFxuICAgICAgICAgICAgLy8gRXhjbHVkZSBgZW52YCBmcm9tIHNlc3Npb24gc3RvcmFnZSBwZXJzaXN0ZW5jZS5cbiAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgZW52aXJvbm1lbnQgaXMgYWx3YXlzIGRldGVybWluZWQgZnJlc2ggZnJvbSB0aGUgc2NyaXB0IFVSTCdzXG4gICAgICAgICAgICAvLyBgP2Vudj1gIHBhcmFtZXRlciBvbiBlYWNoIHBhZ2UgbG9hZCwgYWxsb3dpbmcgdGhlIHNhbWUgcGVyc2lzdGVkIGJvb2tpbmcgc3RhdGVcbiAgICAgICAgICAgIC8vIHRvIHdvcmsgY29ycmVjdGx5IHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZW52aXJvbm1lbnRzIChsb2NhbC9kZXZlbG9wL3N0YWdpbmcvcHJvZHVjdGlvbikuXG4gICAgICAgICAgICAvLyBFeGNsdWRlIGBlbWJlZEtleWAgdG8ga2VlcCBpdCBpbi1tZW1vcnkgb25seSDigJQgbmV2ZXIgcGVyc2lzdCB0byBzZXNzaW9uU3RvcmFnZVxuICAgICAgICAgICAgLy8gdG8gbWluaW1pc2UgdGhlIGV4ZmlsdHJhdGlvbiBzdXJmYWNlLlxuICAgICAgICAgICAgLy8gRXhjbHVkZSBgZW1iZWRCYXNlYCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGBlbnZgOiBpdCBpcyBkZXJpdmVkIGZyZXNoIGZyb21cbiAgICAgICAgICAgIC8vIHRoZSBzY3JpcHQgVVJMIGVhY2ggbG9hZCwgc28gYSBwZXJzaXN0ZWQgdmFsdWUgbXVzdCBuZXZlciBsZWFrIGFjcm9zcyBwYWdlcy5cbiAgICAgICAgICAgIHBhcnRpYWxpemU6IChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW52LCBlbWJlZEtleSwgZW1iZWRCYXNlLCAuLi5yZXN0IH0gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICApXG4pO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgU0RLX1NDUklQVF9JRCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQgeyBnbG9iYWxTdG9yZSB9IGZyb20gXCIuL3N0b3JlL2dsb2JhbC5zdG9yZVwiO1xuXG5leHBvcnQgY29uc3Qgc3RyaW5naWZ5UHJpY2UgPSAoY2VudHM6IG51bWJlciB8IG51bGwpID0+XG4gICAgY2VudHMgIT09IG51bGwgPyBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXCJlbi1VU1wiLCB7IHN0eWxlOiBcImN1cnJlbmN5XCIsIGN1cnJlbmN5OiBcIlVTRFwiIH0pLmZvcm1hdChjZW50cyAvIDEwMCkgOiBcIlwiO1xuXG5jb25zdCBFTUJFRF9LRVlfRk9STUFUID0gL15wa18obGl2ZXx0ZXN0KV9bQS1aYS16MC05XXszMn0kLztcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRQYXJhbXMgPSAoKSA9PiB7XG4gICAgY29uc3QgJGpzU2RrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU0RLX1NDUklQVF9JRCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QganNTZGtTcmMgPSAkanNTZGsuZ2V0QXR0cmlidXRlKFwic3JjXCIpIGFzIHN0cmluZztcbiAgICBjb25zdCB1cmxQYXJhbXMgPSBnZXRQYXJhbXNGcm9tVXJsKG5ldyBVUkxTZWFyY2hQYXJhbXMoanNTZGtTcmMuc3Vic3RyaW5nKGpzU2RrU3JjLmluZGV4T2YoXCI/XCIpKSkpO1xuXG4gICAgY29uc3QgY2xpZW50ID0gdXJsUGFyYW1zW1wiY2xpZW50XCJdID8/IG51bGw7XG4gICAgY29uc3QgcHJvcGVydHlJZCA9IHVybFBhcmFtc1tcInByb3BlcnR5SWRcIl0gPyArdXJsUGFyYW1zW1wicHJvcGVydHlJZFwiXSA6IG51bGw7XG4gICAgY29uc3QgcHJvcGVydHlTbHVnID0gdXJsUGFyYW1zW1wicHJvcGVydHlTbHVnXCJdID8/IG51bGw7XG4gICAgY29uc3QgbGFuZGluZ1BhZ2VQYXRoID0gdXJsUGFyYW1zW1wibGFuZGluZ1BhZ2VQYXRoXCJdID8/IG51bGw7XG4gICAgY29uc3QgbGFuZGluZ1BhZ2VJZCA9IHVybFBhcmFtc1tcImxhbmRpbmdQYWdlSWRcIl0gPyArdXJsUGFyYW1zW1wibGFuZGluZ1BhZ2VJZFwiXSA6IG51bGw7XG4gICAgY29uc3QgZW52ID0gdXJsUGFyYW1zW1wiZW52XCJdID8/IG51bGw7XG4gICAgY29uc3QgcmF3RW1iZWRLZXkgPSB1cmxQYXJhbXNbXCJlbWJlZEtleVwiXSA/PyBudWxsO1xuXG4gICAgbGV0IGVtYmVkS2V5OiBzdHJpbmcgfCBudWxsID0gcmF3RW1iZWRLZXk7XG4gICAgaWYgKHJhd0VtYmVkS2V5ICE9PSBudWxsICYmICFFTUJFRF9LRVlfRk9STUFULnRlc3QocmF3RW1iZWRLZXkpKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBpbnZhbGlkIHBrIGZvcm1hdCDigJQgZW1iZWRLZXkgY2xlYXJlZC4gRXhwZWN0ZWQgcGtfKGxpdmV8dGVzdClfW0EtWmEtejAtOV17MzJ9YCk7XG4gICAgICAgIGVtYmVkS2V5ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBleGFjdCBcInNlbGZcIiB2YWx1ZSBhY3RpdmF0ZXMgc2FtZS1vcmlnaW4gZW1iZWRkaW5nOyBhbnl0aGluZyBlbHNlXG4gICAgLy8gaXMgdHJlYXRlZCBhcyBhYnNlbnQgc28gYW4gdW5leHBlY3RlZCB2YWx1ZSBjYW4gbmV2ZXIgcmVkaXJlY3QgdGhlIGlmcmFtZS5cbiAgICBjb25zdCBlbWJlZEJhc2UgPSB1cmxQYXJhbXNbXCJlbWJlZEJhc2VcIl0gPT09IFwic2VsZlwiID8gXCJzZWxmXCIgOiBudWxsO1xuXG4gICAgcmV0dXJuIHsgY2xpZW50LCBwcm9wZXJ0eUlkLCBwcm9wZXJ0eVNsdWcsIGxhbmRpbmdQYWdlUGF0aCwgbGFuZGluZ1BhZ2VJZCwgZW52LCBlbWJlZEtleSwgZW1iZWRCYXNlIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW1zRnJvbVVybCh1cmxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGF2YWlsYWJsZVNlYXJjaFBhcmFtc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgdHJpcGZ1c2lvbjogXCJ0cmlwZnVzaW9uXCIsXG4gICAgICAgIGNsaWVudDogXCJjbGllbnRcIixcbiAgICAgICAgcHJvcGVydHlpZDogXCJwcm9wZXJ0eUlkXCIsXG4gICAgICAgIHByb3BlcnR5c2x1ZzogXCJwcm9wZXJ0eVNsdWdcIixcbiAgICAgICAgbGFuZGluZ3BhZ2VwYXRoOiBcImxhbmRpbmdQYWdlUGF0aFwiLFxuICAgICAgICBsYW5kaW5ncGFnZWlkOiBcImxhbmRpbmdQYWdlSWRcIixcbiAgICAgICAgbW9kZTogXCJtb2RlXCIsXG4gICAgICAgIG9mZmVyaWQ6IFwib2ZmZXJJZFwiLFxuICAgICAgICBib29raW5naWQ6IFwiYm9va2luZ0lkXCIsXG4gICAgICAgIGNoZWNraW46IFwiY2hlY2tJblwiLFxuICAgICAgICBjaGVja291dDogXCJjaGVja091dFwiLFxuICAgICAgICBhZHVsdHM6IFwiYWR1bHRzXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcImNoaWxkcmVuXCIsXG4gICAgICAgIGVudjogXCJlbnZcIixcbiAgICAgICAgcGs6IFwiZW1iZWRLZXlcIixcbiAgICAgICAgZW1iZWRiYXNlOiBcImVtYmVkQmFzZVwiLFxuICAgIH07XG4gICAgcmV0dXJuIEFycmF5LmZyb20odXJsU2VhcmNoUGFyYW1zLmVudHJpZXMoKSkucmVkdWNlKFxuICAgICAgICAocHJldiwgW3NlYXJjaFBhcmFtS2V5LCBzZWFyY2hQYXJhbVZhbHVlXSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICBbYXZhaWxhYmxlU2VhcmNoUGFyYW1zTWFwW3NlYXJjaFBhcmFtS2V5LnRvTG93ZXJDYXNlKCldXTogc2VhcmNoUGFyYW1WYWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIHt9XG4gICAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvZ2dlcihtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IFwiZXJyb3JcIiB8IFwibG9nXCIgPSBcImVycm9yXCIpIHtcbiAgICBjb25zdCB0cmlwZnVzaW9uQmFzZVVybCA9IGdldFRyaXBmdXNpb25CYXNlVXJsKCk7XG4gICAgY29uc3QgdXJsID0gYCR7dHJpcGZ1c2lvbkJhc2VVcmx9YXBpL3ZhY2F5b3UvbG9nYDtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBwYWdlOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICB9O1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH07XG4gICAgcmV0dXJuIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVHJpcGZ1c2lvbjogZmFpbGVkIHRvIGxvZyBtZXNzYWdlOiAke2Vycm9yfWApO1xuICAgICAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVHJpcGZ1c2lvbk9yaWdpbihvcmlnaW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKTtcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0O1xuICAgICAgICBpZiAodXJsLnByb3RvY29sID09PSBcImh0dHBzOlwiICYmIC9eKGRldmVsb3BcXC58c3RhZ2luZ1xcLik/Y2hlY2tvdXRcXC50cmlwZnVzaW9uXFwuY29tJC8udGVzdChob3N0KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIFNhbWUtb3JpZ2luIGVtYmVkZGluZzogdGhlIGlmcmFtZSB3YXMgb3BlbmVkIG9uIG91ciBvd24gcGFnZSBvcmlnaW5cbiAgICAgICAgLy8gKGVtYmVkQmFzZT1zZWxmKSwgc28gbWVzc2FnZXMgZnJvbSB0aGF0IGV4YWN0IG9yaWdpbiBhcmUgdHJ1c3RlZC4gR2F0ZWRcbiAgICAgICAgLy8gb24gZW1iZWRCYXNlIHNvIGl0IGNhbiBuZXZlciB3aWRlbiB0aGUgb3JpZ2luIHNldCBmb3IgdGhpcmQtcGFydHkgZW1iZWRzLlxuICAgICAgICBpZiAoZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5lbWJlZEJhc2UgPT09IFwic2VsZlwiICYmIG9yaWdpbiA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbikgcmV0dXJuIHRydWU7XG4gICAgICAgIC8vIExvY2FsIGRldiBieXBhc3M6IG9ubHkgYWxsb3cgbG9jYWxob3N0IHdoZW4gdGhlIFNESyBpcyBleHBsaWNpdGx5IHJ1bm5pbmcgaW4gbG9jYWwgZW52LlxuICAgICAgICAvLyBQcm9kdWN0aW9uIHNjcmlwdHMgdXNlIHRoZSBkZWZhdWx0IGVudiDihpIgYnJhbmNoIGlzIGRlYWQuIE5ldmVyIHdlYWtlbnMgcHJvZC5cbiAgICAgICAgaWYgKGdsb2JhbFN0b3JlLmdldFN0YXRlKCkuZW52ID09PSBcImxvY2FsXCIgJiYgL14obG9jYWxob3N0fDEyN1xcLjBcXC4wXFwuMSkoOlxcZCspPyQvLnRlc3QoaG9zdCkpIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHJpcGZ1c2lvbkJhc2VVcmwoKTogc3RyaW5nIHtcbiAgICAvLyBTYW1lLW9yaWdpbiBlbWJlZGRpbmcgKHRlbmFudCBjb2V4aXN0ZW5jZSBob3N0cyB3ZSBzZXJ2ZSk6IG9wZW4gdGhlIGlmcmFtZVxuICAgIC8vIG9uIHRoZSBjdXJyZW50IHBhZ2Ugb3JpZ2luIHNvIGl0IHN0YXlzIGZpcnN0LXBhcnR5IGluIGV2ZXJ5IGJyb3dzZXIuIE9ubHlcbiAgICAvLyBvdXIgb3duIGluamVjdG9yIHNldHMgZW1iZWRCYXNlPXNlbGY7IHRoaXJkLXBhcnR5IGVtYmVkcyBmYWxsIHRocm91Z2ggdG9cbiAgICAvLyB0aGUgZW52LWJhc2VkIGNoZWNrb3V0IGhvc3QgYmVsb3csIHVuY2hhbmdlZC5cbiAgICBpZiAoZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5lbWJlZEJhc2UgPT09IFwic2VsZlwiKSB7XG4gICAgICAgIHJldHVybiBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gO1xuICAgIH1cbiAgICBzd2l0Y2ggKGdsb2JhbFN0b3JlLmdldFN0YXRlKCkuZW52KSB7XG4gICAgICAgIGNhc2UgXCJsb2NhbFwiOiB7XG4gICAgICAgICAgICAvLyBGb2xsb3cgdGhlIHBhZ2Ugb3JpZ2luIHNvIGxvY2FsIGRldiB3b3JrcyBvbiBhbnkgcG9ydC5cbiAgICAgICAgICAgIHJldHVybiBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9gO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJkZXZlbG9wXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBcImh0dHBzOi8vZGV2ZWxvcC5jaGVja291dC50cmlwZnVzaW9uLmNvbS9cIjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RhZ2luZ1wiOiB7XG4gICAgICAgICAgICByZXR1cm4gXCJodHRwczovL3N0YWdpbmcuY2hlY2tvdXQudHJpcGZ1c2lvbi5jb20vXCI7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIFwiaHR0cHM6Ly9jaGVja291dC50cmlwZnVzaW9uLmNvbS9cIjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB0eXBlIHsgR2xvYmFsU3RhdGUgfSBmcm9tIFwiLi9zdG9yZS9nbG9iYWwuc3RvcmVcIjtcbmltcG9ydCB7XG4gICAgQk9PS0lOR19NT0RFLFxuICAgIExPQURFUl9JRCxcbiAgICBSRVNVTUVfUEFORUxfSUQsXG4gICAgV0lER0VUX0NMT1NFX0JVVFRPTl9JRCxcbiAgICBXSURHRVRfSEVBREVSX0lELFxuICAgIFdJREdFVF9IRUFERVJfVElUTEVfSUQsXG4gICAgV0lER0VUX0lELFxuICAgIFdJREdFVF9JRlJBTUVfSUQsXG4gICAgV0lER0VUX0lOTkVSX1dSQVBQRVJfSUQsXG4gICAgV0lER0VUX1dSQVBQRVJfSURcbn0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IHdpZGdldFN0b3JlIH0gZnJvbSBcIi4vc3RvcmUvd2lkZ2V0LnN0b3JlXCI7XG5pbXBvcnQgeyBnZXRUcmlwZnVzaW9uQmFzZVVybCwgbG9nZ2VyIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlMb2FkaW5nT3ZlcmxheSgpIHtcbiAgICBsZXQgJGxvYWRpbmdEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChMT0FERVJfSUQpO1xuICAgIGlmICghJGxvYWRpbmdEaXYpIHtcbiAgICAgICAgY29uc3QgJHdpZGdldFdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfV1JBUFBFUl9JRCk7XG5cbiAgICAgICAgaWYgKCR3aWRnZXRXcmFwcGVyKSB7XG4gICAgICAgICAgICAkbG9hZGluZ0RpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICAkbG9hZGluZ0Rpdi5pZCA9IExPQURFUl9JRDtcbiAgICAgICAgICAgICRsb2FkaW5nRGl2LmlubmVySFRNTCA9IFwiTG9hZGluZyA8c3Bhbj5UcmlwRnVzaW9uPC9zcGFuPlwiO1xuICAgICAgICAgICAgJHdpZGdldFdyYXBwZXIuYXBwZW5kQ2hpbGQoJGxvYWRpbmdEaXYpO1xuXG4gICAgICAgICAgICAkd2lkZ2V0V3JhcHBlci5zdHlsZS56SW5kZXggPSBgJHsxZTExfWA7XG4gICAgICAgICAgICAkd2lkZ2V0V3JhcHBlci5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcbiAgICAgICAgICAgICR3aWRnZXRXcmFwcGVyLnN0eWxlLmJhY2tncm91bmQgPSBcInJnYmEoMCwgMCwgMCwgLjc0KVwiO1xuICAgICAgICAgICAgbG9ja1BhZ2VTY3JvbGwoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhpZGVMb2FkaW5nT3ZlcmxheSgpIHtcbiAgICBjb25zdCAkbG9hZGluZ0RpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKExPQURFUl9JRCk7XG4gICAgJGxvYWRpbmdEaXY/LnJlbW92ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZURvbSgpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHNob3dXaWRnZXQsIGhpZGVXaWRnZXQsIHNob3dSZXN1bWVQYW5lbCwgaGlkZVJlc3VtZVBhbmVsIH0gPSB3aWRnZXRTdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCAkd2lkZ2V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgICAgICAgICAgICR3aWRnZXRXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgICAgICAgICAgICR3aWRnZXRJbm5lcldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgJHdpZGdldEhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgICAgICAkd2lkZ2V0SGVhZGVyVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKSxcbiAgICAgICAgICAgICR3aWRnZXRDbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiksXG4gICAgICAgICAgICAkcmVzdW1lUGFuZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgICAgICRyZXN1bWVQYW5lbC5pZCA9IFJFU1VNRV9QQU5FTF9JRDtcblxuICAgICAgICAkcmVzdW1lUGFuZWw/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBzaG93V2lkZ2V0KCk7XG4gICAgICAgICAgICBoaWRlUmVzdW1lUGFuZWwoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIHdpZGdldCBhbmQgd3JhcHBlclxuICAgICAgICAkd2lkZ2V0LmlkID0gV0lER0VUX0lEO1xuICAgICAgICAkd2lkZ2V0LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgJHdpZGdldFdyYXBwZXIuaWQgPSBXSURHRVRfV1JBUFBFUl9JRDtcbiAgICAgICAgJHdpZGdldC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAodGhpcyA9PT0gZXZlbnQudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgaGlkZVdpZGdldCgpO1xuICAgICAgICAgICAgICAgIHNob3dSZXN1bWVQYW5lbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDb25maWd1cmUgd2lkZ2V0IGlubmVyIHdyYXBwZXJcbiAgICAgICAgJHdpZGdldElubmVyV3JhcHBlci5pZCA9IFdJREdFVF9JTk5FUl9XUkFQUEVSX0lEO1xuICAgICAgICAkd2lkZ2V0SGVhZGVyLmlkID0gV0lER0VUX0hFQURFUl9JRDtcbiAgICAgICAgJHdpZGdldENsb3NlQnV0dG9uLmlkID0gV0lER0VUX0NMT1NFX0JVVFRPTl9JRDtcbiAgICAgICAgJHdpZGdldENsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICBoaWRlV2lkZ2V0KCk7XG4gICAgICAgICAgICBzaG93UmVzdW1lUGFuZWwoKTtcbiAgICAgICAgfSk7XG4gICAgICAgICR3aWRnZXRIZWFkZXJUaXRsZS5pZCA9IFdJREdFVF9IRUFERVJfVElUTEVfSUQ7XG4gICAgICAgICR3aWRnZXRIZWFkZXJUaXRsZS5pbm5lckhUTUwgPSBcIkJvb2tpbmdcIjtcblxuICAgICAgICAvLyBBcHBlbmQgd2lkZ2V0IHRvIHdyYXBwZXIgYW5kIHdyYXBwZXIgdG8gZG9jdW1lbnQgYm9keVxuICAgICAgICAkd2lkZ2V0V3JhcHBlci5hcHBlbmRDaGlsZCgkd2lkZ2V0KTtcbiAgICAgICAgJHdpZGdldC5hcHBlbmRDaGlsZCgkd2lkZ2V0SW5uZXJXcmFwcGVyKTtcbiAgICAgICAgJHdpZGdldElubmVyV3JhcHBlci5hcHBlbmRDaGlsZCgkd2lkZ2V0SGVhZGVyKTtcbiAgICAgICAgJHdpZGdldEhlYWRlci5hcHBlbmRDaGlsZCgkd2lkZ2V0SGVhZGVyVGl0bGUpO1xuICAgICAgICAkd2lkZ2V0SGVhZGVyLmFwcGVuZENoaWxkKCR3aWRnZXRDbG9zZUJ1dHRvbik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoJHdpZGdldFdyYXBwZXIpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCRyZXN1bWVQYW5lbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IEVycm9yIHByZXBhcmluZyBET006ICR7ZXJyb3J9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUcmlwZnVzaW9uOiBFcnJvciBwcmVwYXJpbmcgRE9NOiBcIiwgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclJlc3VtZVBhbmVsKHtcbiAgICBoZWFkZXJUZXh0LFxuICAgIHN1YmhlYWRlclRleHQsXG4gICAgZm9vdGVyVGV4dCxcbn06IHtcbiAgICBoZWFkZXJUZXh0OiBzdHJpbmc7XG4gICAgc3ViaGVhZGVyVGV4dD86IHN0cmluZztcbiAgICBmb290ZXJUZXh0Pzogc3RyaW5nO1xufSkge1xuICAgIGNvbnN0ICRyZXN1bWVQYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFJFU1VNRV9QQU5FTF9JRCkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICAkcmVzdW1lUGFuZWwuaW5uZXJIVE1MID0gYFxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj4ke2hlYWRlclRleHR9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdmcgdmVyc2lvbj1cIjEuMVwiIGlkPVwiTGF5ZXJfMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIiB2aWV3Qm94PVwiMCAwIDMzMCAzMzBcIiB4bWw6c3BhY2U9XCJwcmVzZXJ2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cIlhNTElEXzIyMl9cIiBkPVwiTTI1MC42MDYsMTU0LjM4OWwtMTUwLTE0OS45OTZjLTUuODU3LTUuODU4LTE1LjM1NS01Ljg1OC0yMS4yMTMsMC4wMDFjLTUuODU3LDUuODU4LTUuODU3LDE1LjM1NSwwLjAwMSwyMS4yMTNsMTM5LjM5MywxMzkuMzlMNzkuMzkzLDMwNC4zOTRjLTUuODU3LDUuODU4LTUuODU3LDE1LjM1NSwwLjAwMSwyMS4yMTNDODIuMzIyLDMyOC41MzYsODYuMTYxLDMzMCw5MCwzMzBzNy42NzgtMS40NjQsMTAuNjA3LTQuMzk0bDE0OS45OTktMTUwLjAwNGMyLjgxNC0yLjgxMyw0LjM5NC02LjYyOCw0LjM5NC0xMC42MDZDMjU1LDE2MS4wMTgsMjUzLjQyLDE1Ny4yMDIsMjUwLjYwNiwxNTQuMzg5elwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgJHtzdWJoZWFkZXJUZXh0ICYmIGA8c3BhbiBjbGFzcz1cInRyaXBmdXNpb24tcmVzdW1lLXBhbmVsX19zdWJoZWFkZXJcIj4ke3N1YmhlYWRlclRleHR9PC9zcGFuPmB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke2Zvb3RlclRleHQgJiYgYDxzcGFuIGNsYXNzPVwidHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWxfX2Zvb3RlclwiPiR7Zm9vdGVyVGV4dH08L3NwYW4+YH1cbiAgICBgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd1Jlc3VtZVBhbmVsRG9tKCkge1xuICAgIGNvbnN0ICRyZXN1bWVQYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFJFU1VNRV9QQU5FTF9JRCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgJHJlc3VtZVBhbmVsLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwidHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXNsaWRlLWluXCIpO1xuICAgICRyZXN1bWVQYW5lbC5mb2N1cygpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGlkZVJlc3VtZVBhbmVsRG9tKCkge1xuICAgIGNvbnN0ICRyZXN1bWVQYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFJFU1VNRV9QQU5FTF9JRCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgJHJlc3VtZVBhbmVsLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwidHJpcGZ1c2lvbi1yZXN1bWUtcGFuZWwtLXNsaWRlLW91dFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dXaWRnZXREb20oKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgJHdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9JRCkgYXMgSFRNTERpdkVsZW1lbnQsXG4gICAgICAgICAgICAkd2lkZ2V0V3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9XUkFQUEVSX0lEKSBhcyBIVE1MRGl2RWxlbWVudDtcblxuICAgICAgICBPYmplY3QuYXNzaWduKCR3aWRnZXRXcmFwcGVyLnN0eWxlLCB7XG4gICAgICAgICAgICB6SW5kZXg6IDEwMDAwMDAwMDAwMTEsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogXCJyZ2JhKDAsIDAsIDAsIC41KVwiLFxuICAgICAgICB9KTtcblxuICAgICAgICBsb2NrUGFnZVNjcm9sbCgpO1xuICAgICAgICAkd2lkZ2V0LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgICR3aWRnZXQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJzbGlkZS1pblwiKTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICR3aWRnZXRJZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSUZSQU1FX0lEKTtcbiAgICAgICAgICAgICR3aWRnZXRJZnJhbWU/LmZvY3VzKCk7XG4gICAgICAgIH0sIDI1MCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IEVycm9yIG9wZW5uaW5nIHdpZGdldDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IEVycm9yIG9wZW5uaW5nIHdpZGdldDogXCIsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWRlV2lkZ2V0RG9tKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0ICR3aWRnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSUQpLFxuICAgICAgICAgICAgJHdpZGdldFdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfV1JBUFBFUl9JRCk7XG5cbiAgICAgICAgaWYgKCR3aWRnZXQgJiYgJHdpZGdldFdyYXBwZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xuICAgICAgICAgICAgJHdpZGdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNsaWRlLW91dFwiKTtcbiAgICAgICAgICAgICR3aWRnZXRXcmFwcGVyLnN0eWxlLmJhY2tncm91bmQgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcbiAgICAgICAgICAgICR3aWRnZXQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgJHdpZGdldFdyYXBwZXIuc3R5bGUuekluZGV4ID0gYCR7LTFlMTF9YDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBFcnJvciBjbG9zaW5nIHdpZGdldDogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IEVycm9yIGNsb3Npbmcgd2lkZ2V0OiBcIiwgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdElmcmFtZSh7XG4gICAgY2xpZW50LFxuICAgIHByb3BlcnR5SWQsXG4gICAgcHJvcGVydHlTbHVnLFxuICAgIGxhbmRpbmdQYWdlUGF0aCxcbiAgICBsYW5kaW5nUGFnZUlkLFxuICAgIG1vZGUsXG4gICAgYm9va2luZ0lkLFxuICAgIGVudixcbiAgICAuLi5yZXN0XG59OiBHbG9iYWxTdGF0ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9JRlJBTUVfSUQpPy5yZW1vdmUoKTtcblxuICAgICAgICBjb25zdCAkaW5uZXJXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0lOTkVSX1dSQVBQRVJfSUQpO1xuICAgICAgICBpZiAoJGlubmVyV3JhcHBlcikge1xuICAgICAgICAgICAgY29uc3QgaWZyYW1lUGFyYW1zTWFwID0gW1wiY2hlY2tJblwiLCBcImNoZWNrT3V0XCIsIFwiYWR1bHRzXCIsIFwiY2hpbGRyZW5cIiwgXCJvZmZlcklkXCJdO1xuXG4gICAgICAgICAgICBjb25zdCAkd2lkZ2V0SWZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcbiAgICAgICAgICAgIGNvbnN0IHRyaXBmdXNpb25CYXNlVXJsID0gZ2V0VHJpcGZ1c2lvbkJhc2VVcmwoKTtcblxuICAgICAgICAgICAgLy8gQnVpbGQgdGhlIGVudGl0eSBzZWdtZW50IG9mIHRoZSBVUkwuIE9yZGVyIG9mIHByZWNlZGVuY2U6XG4gICAgICAgICAgICAvLyAgIGxhbmRpbmdQYWdlSWQgIOKGkiAve2NsaWVudH0vb2ZmZXJzL3tpZH0gICAgICAgICAgKG9mZmVyIGJ5IElELCBuZXcpXG4gICAgICAgICAgICAvLyAgIGxhbmRpbmdQYWdlUGF0aCDihpIgL3tjbGllbnR9L29mZmVycy97cGF0aH0gICAgICAgIChvZmZlciBieSBzbHVnLCBleGlzdGluZylcbiAgICAgICAgICAgIC8vICAgcHJvcGVydHlTbHVnICAg4oaSIC97Y2xpZW50fS97c2x1Z30gICAgICAgICAgICAgICAgKHByb3BlcnR5IGJ5IHNsdWcsIG5ldylcbiAgICAgICAgICAgIC8vICAgcHJvcGVydHlJZCAgICAg4oaSIC97Y2xpZW50fS97aWR9ICAgICAgICAgICAgICAgICAgKHByb3BlcnR5IGJ5IElELCBleGlzdGluZylcbiAgICAgICAgICAgIC8vIFJlY2VpdmluZyBMYXJhdmVsIGVuZHBvaW50cyBhbHJlYWR5IGFjY2VwdCBlaXRoZXIgZm9ybVxuICAgICAgICAgICAgLy8gKGFwaS92Mi9sYW5kaW5nLXBhZ2Uvc2hvdy97aWR8cGF0aH0sIGFwaS92Mi9wcm9wZXJ0eS9zaG93L3tpZF9zbHVnfSkuXG4gICAgICAgICAgICBjb25zdCBvZmZlclNlZ21lbnQgPSBsYW5kaW5nUGFnZUlkID8/IGxhbmRpbmdQYWdlUGF0aDtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5U2VnbWVudCA9IHByb3BlcnR5U2x1ZyA/PyBwcm9wZXJ0eUlkO1xuICAgICAgICAgICAgbGV0IHVybCA9IG9mZmVyU2VnbWVudFxuICAgICAgICAgICAgICAgID8gYCR7dHJpcGZ1c2lvbkJhc2VVcmx9JHtjbGllbnR9L29mZmVycy8ke29mZmVyU2VnbWVudH1gXG4gICAgICAgICAgICAgICAgOiBgJHt0cmlwZnVzaW9uQmFzZVVybH0ke2NsaWVudH0vJHtwcm9wZXJ0eVNlZ21lbnR9YDtcbiAgICAgICAgICAgIGlmIChtb2RlID09PSBCT09LSU5HX01PREUuYXBwZW5kICYmIGJvb2tpbmdJZCkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgL2Jvb2tpbmcvJHtib29raW5nSWR9L2FwcGVuZGA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxQYXJhbXMgPSBPYmplY3QuZW50cmllcyhyZXN0KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKFtrZXksIHZhbHVlXSkgPT4gaWZyYW1lUGFyYW1zTWFwLmluY2x1ZGVzKGtleSkgJiYgISF2YWx1ZSlcbiAgICAgICAgICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX09JHt2YWx1ZX1gLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuXG5cbiAgICAgICAgICAgIGNvbnN0IHZlcmNlbEJ5cGFzc1BhcmFtID1cbiAgICAgICAgICAgICAgICBlbnYgPT09IFwiZGV2ZWxvcFwiIHx8IGVudiA9PT0gXCJzdGFnaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgPyBgeC12ZXJjZWwtcHJvdGVjdGlvbi1ieXBhc3M9JHtwcm9jZXNzLmVudi5WRVJDRUxfQVVUT01BVElPTl9CWVBBU1NfU0VDUkVUfWBcbiAgICAgICAgICAgICAgICAgICAgOiBcIlwiO1xuXG4gICAgICAgICAgICBjb25zdCBhbGxQYXJhbXMgPSBbYWRkaXRpb25hbFBhcmFtcywgdmVyY2VsQnlwYXNzUGFyYW1dLmZpbHRlcihCb29sZWFuKS5qb2luKFwiJlwiKTtcbiAgICAgICAgICAgIGlmIChhbGxQYXJhbXMpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYD8ke2FsbFBhcmFtc31gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAkd2lkZ2V0SWZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93XCIsIFwicGF5bWVudFwiKTtcbiAgICAgICAgICAgICR3aWRnZXRJZnJhbWUuc2V0QXR0cmlidXRlKFwic3JjXCIsIHVybCk7XG4gICAgICAgICAgICAkd2lkZ2V0SWZyYW1lLmlkID0gV0lER0VUX0lGUkFNRV9JRDtcbiAgICAgICAgICAgICRpbm5lcldyYXBwZXIuYXBwZW5kQ2hpbGQoJHdpZGdldElmcmFtZSk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIoYFdpZGdldDogRXJyb3IgaW5qZWN0aW5nIGlmcmFtZTogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IEVycm9yIGluamVjdGluZyBpZnJhbWU6IFwiLCBlcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9ja1BhZ2VTY3JvbGwoKSB7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRXaWRnZXRUaGVtZSh7IGJhY2tncm91bmRDb2xvciB9OiB7IGJhY2tncm91bmRDb2xvcjogc3RyaW5nIH0pIHtcbiAgICBjb25zdCAkcmVzdW1lUGFuZWxXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX1BBTkVMX0lEKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgJHdpZGdldEhlYWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9IRUFERVJfSUQpIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICgkcmVzdW1lUGFuZWxXcmFwcGVyKSB7XG4gICAgICAgICRyZXN1bWVQYW5lbFdyYXBwZXIuc3R5bGVbXCJiYWNrZ3JvdW5kQ29sb3JcIl0gPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuICAgIGlmICgkd2lkZ2V0SGVhZGVyKSB7XG4gICAgICAgICR3aWRnZXRIZWFkZXIuc3R5bGVbXCJiYWNrZ3JvdW5kQ29sb3JcIl0gPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxufVxuIiwiY29uc3QgaXNJdGVyYWJsZSA9IChvYmopID0+IFN5bWJvbC5pdGVyYXRvciBpbiBvYmo7XG5jb25zdCBoYXNJdGVyYWJsZUVudHJpZXMgPSAodmFsdWUpID0+IChcbiAgLy8gSEFDSzogYXZvaWQgY2hlY2tpbmcgZW50cmllcyB0eXBlXG4gIFwiZW50cmllc1wiIGluIHZhbHVlXG4pO1xuY29uc3QgY29tcGFyZUVudHJpZXMgPSAodmFsdWVBLCB2YWx1ZUIpID0+IHtcbiAgY29uc3QgbWFwQSA9IHZhbHVlQSBpbnN0YW5jZW9mIE1hcCA/IHZhbHVlQSA6IG5ldyBNYXAodmFsdWVBLmVudHJpZXMoKSk7XG4gIGNvbnN0IG1hcEIgPSB2YWx1ZUIgaW5zdGFuY2VvZiBNYXAgPyB2YWx1ZUIgOiBuZXcgTWFwKHZhbHVlQi5lbnRyaWVzKCkpO1xuICBpZiAobWFwQS5zaXplICE9PSBtYXBCLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgbWFwQSkge1xuICAgIGlmICghbWFwQi5oYXMoa2V5KSB8fCAhT2JqZWN0LmlzKHZhbHVlLCBtYXBCLmdldChrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5jb25zdCBjb21wYXJlSXRlcmFibGVzID0gKHZhbHVlQSwgdmFsdWVCKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yQSA9IHZhbHVlQVtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIGNvbnN0IGl0ZXJhdG9yQiA9IHZhbHVlQltTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIGxldCBuZXh0QSA9IGl0ZXJhdG9yQS5uZXh0KCk7XG4gIGxldCBuZXh0QiA9IGl0ZXJhdG9yQi5uZXh0KCk7XG4gIHdoaWxlICghbmV4dEEuZG9uZSAmJiAhbmV4dEIuZG9uZSkge1xuICAgIGlmICghT2JqZWN0LmlzKG5leHRBLnZhbHVlLCBuZXh0Qi52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbmV4dEEgPSBpdGVyYXRvckEubmV4dCgpO1xuICAgIG5leHRCID0gaXRlcmF0b3JCLm5leHQoKTtcbiAgfVxuICByZXR1cm4gISFuZXh0QS5kb25lICYmICEhbmV4dEIuZG9uZTtcbn07XG5mdW5jdGlvbiBzaGFsbG93KHZhbHVlQSwgdmFsdWVCKSB7XG4gIGlmIChPYmplY3QuaXModmFsdWVBLCB2YWx1ZUIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZUEgIT09IFwib2JqZWN0XCIgfHwgdmFsdWVBID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZUIgIT09IFwib2JqZWN0XCIgfHwgdmFsdWVCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWVBKSAhPT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlQikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGlzSXRlcmFibGUodmFsdWVBKSAmJiBpc0l0ZXJhYmxlKHZhbHVlQikpIHtcbiAgICBpZiAoaGFzSXRlcmFibGVFbnRyaWVzKHZhbHVlQSkgJiYgaGFzSXRlcmFibGVFbnRyaWVzKHZhbHVlQikpIHtcbiAgICAgIHJldHVybiBjb21wYXJlRW50cmllcyh2YWx1ZUEsIHZhbHVlQik7XG4gICAgfVxuICAgIHJldHVybiBjb21wYXJlSXRlcmFibGVzKHZhbHVlQSwgdmFsdWVCKTtcbiAgfVxuICByZXR1cm4gY29tcGFyZUVudHJpZXMoXG4gICAgeyBlbnRyaWVzOiAoKSA9PiBPYmplY3QuZW50cmllcyh2YWx1ZUEpIH0sXG4gICAgeyBlbnRyaWVzOiAoKSA9PiBPYmplY3QuZW50cmllcyh2YWx1ZUIpIH1cbiAgKTtcbn1cblxuZXhwb3J0IHsgc2hhbGxvdyB9O1xuIiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlcy5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHR5cGUgeyBBcHBNZXNzYWdlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IEFQUF9NRVNTQUdFX1RZUEUsIEJPT0tJTkdfTU9ERSwgV0lER0VUX0lGUkFNRV9JRCB9IGZyb20gXCIuL2NvbnN0XCI7XG5pbXBvcnQge1xuICAgIGhpZGVXaWRnZXREb20sXG4gICAgZGlzcGxheUxvYWRpbmdPdmVybGF5LFxuICAgIGhpZGVSZXN1bWVQYW5lbERvbSxcbiAgICBpbmplY3RJZnJhbWUsXG4gICAgc2hvd1dpZGdldERvbSxcbiAgICBwcmVwYXJlRG9tLFxuICAgIHJlbmRlclJlc3VtZVBhbmVsLFxuICAgIHNldFdpZGdldFRoZW1lLFxuICAgIHNob3dSZXN1bWVQYW5lbERvbSxcbiAgICBoaWRlTG9hZGluZ092ZXJsYXksXG59IGZyb20gXCIuL2RvbVwiO1xuaW1wb3J0IHsgR2xvYmFsU3RhdGUsIGdsb2JhbFN0b3JlIH0gZnJvbSBcIi4vc3RvcmUvZ2xvYmFsLnN0b3JlXCI7XG5pbXBvcnQgeyB3aWRnZXRTdG9yZSB9IGZyb20gXCIuL3N0b3JlL3dpZGdldC5zdG9yZVwiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFBhcmFtcywgZ2V0UGFyYW1zRnJvbVVybCwgaXNUcmlwZnVzaW9uT3JpZ2luLCBsb2dnZXIsIHN0cmluZ2lmeVByaWNlIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IHNoYWxsb3cgfSBmcm9tIFwienVzdGFuZC92YW5pbGxhL3NoYWxsb3dcIjtcbmltcG9ydCBcIi4vc3R5bGVzLmNzc1wiO1xuXG4vLyBTZXQgb25jZSB0aGUgRE9NICsgcGFyYW1zIGJvb3RzdHJhcCBoYXMgcnVuICh2aWEgYW4gZWFybHkgYm9vaygpIG9yIHRoZVxuLy8gcmVhZHlTdGF0ZS1jb21wbGV0ZSB0aWNrKSwgc28gbmVpdGhlciBwYXRoIHJlcGVhdHMgcHJlcGFyZURvbSgpIC8gcGFyYW1cbi8vIHNlZWRpbmcg4oCUIGFuZCBzbyB0aGUgY29tcGxldGUgdGljayBuZXZlciByZS1pbmplY3RzIGFuIGFscmVhZHktbGl2ZSBpZnJhbWUuXG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuZ2xvYmFsU3RvcmUuc3Vic2NyaWJlKChuZXdTdGF0ZSkgPT4ge1xuICAgIGlmIChuZXdTdGF0ZS5jbGllbnQgJiYgbmV3U3RhdGUucHJvcGVydHlJZCkge1xuICAgICAgICBpbmplY3RJZnJhbWUobmV3U3RhdGUpO1xuICAgIH1cbn0pO1xuXG53aWRnZXRTdG9yZS5zdWJzY3JpYmUoKG5ld1N0YXRlKSA9PiB7XG4gICAgaWYgKG5ld1N0YXRlLmlzUmVzdW1lUGFuZWxWaXNpYmxlKSB7XG4gICAgICAgIGxldCBoZWFkZXJUZXh0ID0gbmV3U3RhdGUucHJpbWFyeUd1ZXN0TmFtZVxuICAgICAgICAgICAgPyBgJHtuZXdTdGF0ZS5wcmltYXJ5R3Vlc3ROYW1lWzBdLnRvVXBwZXJDYXNlKCl9JHtuZXdTdGF0ZS5wcmltYXJ5R3Vlc3ROYW1lLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKX0sIGRvbid0IGxldCB0aGF0IHJlc2VydmF0aW9uIHNsaXAgYXdheSFgXG4gICAgICAgICAgICA6IFwiRG9uJ3QgbGV0IHRoYXQgcmVzZXJ2YXRpb24gc2xpcCBhd2F5IVwiO1xuICAgICAgICBsZXQgc3ViaGVhZGVyVGV4dCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGZvb3RlclBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGlmIChuZXdTdGF0ZS5pc0Jvb2tpbmdDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIGhlYWRlclRleHQgPSBcIkJvb2tpbmcgY29tcGxldGVkIVwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1N0YXRlLmNoZWNrSW5EYXRlICYmIG5ld1N0YXRlLmNoZWNrT3V0RGF0ZSkge1xuICAgICAgICAgICAgZm9vdGVyUGFydHMucHVzaChcbiAgICAgICAgICAgICAgICBgJHtkYXlqcyhuZXdTdGF0ZS5jaGVja0luRGF0ZSkuZm9ybWF0KFwiTU1NIEREXCIpfSAtICR7ZGF5anMobmV3U3RhdGUuY2hlY2tPdXREYXRlKS5mb3JtYXQoXCJNTU0gRERcIil9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdTdGF0ZS5jYXJ0LnRvdGFsKSB7XG4gICAgICAgICAgICBpZiAobmV3U3RhdGUuY2FydD8ucm9vbXMgJiYgbmV3U3RhdGUuY2FydC5yb29tcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vbUNvdW50ID0gbmV3U3RhdGUuY2FydC5yb29tcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Vlc3RDb3VudCA9IG5ld1N0YXRlLmNhcnQucm9vbXMucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoYWNjOiBudW1iZXIsIHJvb206IGFueSkgPT4gYWNjICsgcm9vbS5wYXNzZW5nZXJzLmFkdWx0cyArIHJvb20ucGFzc2VuZ2Vycy5jaGlsZHJlbi5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHN1YmhlYWRlclRleHQgPSBgJHtyb29tQ291bnR9IHJvb20ke3Jvb21Db3VudCA+IDEgPyBcInNcIiA6IFwiXCJ9IGZvciBgO1xuICAgICAgICAgICAgICAgIGZvb3RlclBhcnRzLnB1c2goYCR7Z3Vlc3RDb3VudH0gZ3Vlc3Qke2d1ZXN0Q291bnQgPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3ViaGVhZGVyVGV4dCArPSBzdHJpbmdpZnlQcmljZShuZXdTdGF0ZS5jYXJ0LnRvdGFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlbmRlclJlc3VtZVBhbmVsKHsgaGVhZGVyVGV4dCwgc3ViaGVhZGVyVGV4dCwgZm9vdGVyVGV4dDogZm9vdGVyUGFydHMuam9pbihcIiwgXCIpIH0pO1xuICAgIH1cblxuICAgIGlmIChuZXdTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgc2V0V2lkZ2V0VGhlbWUoeyBiYWNrZ3JvdW5kQ29sb3I6IG5ld1N0YXRlLmJhY2tncm91bmRDb2xvciB9KTtcbiAgICB9XG5cbiAgICBpZiAobmV3U3RhdGUuaXNSZWFkeSkge1xuICAgICAgICBuZXdTdGF0ZS5pc09wZW4gPyBzaG93V2lkZ2V0RG9tKCkgOiBoaWRlV2lkZ2V0RG9tKCk7XG4gICAgICAgIG5ld1N0YXRlLmlzUmVzdW1lUGFuZWxWaXNpYmxlID8gc2hvd1Jlc3VtZVBhbmVsRG9tKCkgOiBoaWRlUmVzdW1lUGFuZWxEb20oKTtcbiAgICAgICAgaGlkZUxvYWRpbmdPdmVybGF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGlzcGxheUxvYWRpbmdPdmVybGF5KCk7XG4gICAgfVxufSk7XG5cbmZ1bmN0aW9uIGFkZExpbmtFdmVudExpc3RlbmVycygpIHtcbiAgICBmdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MQW5jaG9yRWxlbWVudDtcblxuICAgICAgICAgICAgLy8gRW5zdXJlIHRoZSBldmVudCB0YXJnZXQgaGFzIGEgdmFsaWQgaHJlZlxuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGUgYXMgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09IFwiQVwiICYmIHBhcmVudD8udGFnTmFtZSA9PT0gXCJBXCIpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuaHJlZiA9IHBhcmVudD8uaHJlZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGlua0hyZWYgPSB0YXJnZXQuaHJlZiB8fCBcIlwiO1xuICAgICAgICAgICAgaWYgKCFsaW5rSHJlZi5pbmNsdWRlcyhcIj9cIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IGdldFBhcmFtc0Zyb21VcmwobmV3IFVSTFNlYXJjaFBhcmFtcyhsaW5rSHJlZi5zdWJzdHJpbmcobGlua0hyZWYuaW5kZXhPZihcIj9cIikpKSk7XG5cbiAgICAgICAgICAgIGlmICh1cmxQYXJhbXMudHJpcGZ1c2lvbiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50LCBwcm9wZXJ0eUlkLCBwcm9wZXJ0eVNsdWcsIGxhbmRpbmdQYWdlUGF0aCwgbGFuZGluZ1BhZ2VJZCwgZW52IH0gPSBnZXREZWZhdWx0UGFyYW1zKCk7XG4gICAgICAgICAgICAgICAgYm9vayh7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudDogdXJsUGFyYW1zLmNsaWVudCA/PyBjbGllbnQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5SWQ6IHVybFBhcmFtcy5wcm9wZXJ0eUlkID8gK3VybFBhcmFtcy5wcm9wZXJ0eUlkIDogcHJvcGVydHlJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTbHVnOiB1cmxQYXJhbXMucHJvcGVydHlTbHVnID8/IHByb3BlcnR5U2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgbGFuZGluZ1BhZ2VQYXRoOiB1cmxQYXJhbXMubGFuZGluZ1BhZ2VQYXRoID8/IGxhbmRpbmdQYWdlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZGluZ1BhZ2VJZDogdXJsUGFyYW1zLmxhbmRpbmdQYWdlSWQgPyArdXJsUGFyYW1zLmxhbmRpbmdQYWdlSWQgOiBsYW5kaW5nUGFnZUlkLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiB1cmxQYXJhbXMubW9kZSA9PT0gQk9PS0lOR19NT0RFLmFwcGVuZCA/IEJPT0tJTkdfTU9ERS5hcHBlbmQgOiBCT09LSU5HX01PREUubm9ybWFsLFxuICAgICAgICAgICAgICAgICAgICBib29raW5nSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXM/LmJvb2tpbmdJZCAmJiB1cmxQYXJhbXM/Lm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgPyArdXJsUGFyYW1zLmJvb2tpbmdJZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG9mZmVySWQ6IHVybFBhcmFtcy5vZmZlcklkID8gK3VybFBhcmFtcy5vZmZlcklkIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0luOiB1cmxQYXJhbXMuY2hlY2tJbixcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tPdXQ6IHVybFBhcmFtcy5jaGVja091dCxcbiAgICAgICAgICAgICAgICAgICAgYWR1bHRzOiB1cmxQYXJhbXMuYWR1bHRzID8gK3VybFBhcmFtcy5hZHVsdHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB1cmxQYXJhbXMuY2hpbGRyZW4gPyB1cmxQYXJhbXMuY2hpbGRyZW4uc3BsaXQoXCIsXCIpLm1hcCgoYWdlKSA9PiArYWdlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZW52OiB1cmxQYXJhbXMuZW52ID8/IGVudixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBFcnJvciBpbiBsaW5rIGNsaWNrIGhhbmRsZXI6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiVHJpcGZ1c2lvbjogRXJyb3IgaW4gbGluayBjbGljayBoYW5kbGVyOiBcIiwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcImFcIikuZm9yRWFjaCgobGlua0VsZW1lbnQpID0+IHtcbiAgICAgICAgbGlua0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFBhZ2VMb2FkTGlzdGVuZXIoKSB7XG4gICAgZnVuY3Rpb24gb25Mb2FkSGFuZGxlcigpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBnZXRQYXJhbXNGcm9tVXJsKG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCkpO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgaGFzRW50cnkgPVxuICAgICAgICAgICAgICAgIHN0YXRlLnByb3BlcnR5SWQgfHxcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXMucHJvcGVydHlJZCB8fFxuICAgICAgICAgICAgICAgIHN0YXRlLnByb3BlcnR5U2x1ZyB8fFxuICAgICAgICAgICAgICAgIHVybFBhcmFtcy5wcm9wZXJ0eVNsdWcgfHxcbiAgICAgICAgICAgICAgICBzdGF0ZS5sYW5kaW5nUGFnZVBhdGggfHxcbiAgICAgICAgICAgICAgICB1cmxQYXJhbXMubGFuZGluZ1BhZ2VQYXRoIHx8XG4gICAgICAgICAgICAgICAgc3RhdGUubGFuZGluZ1BhZ2VJZCB8fFxuICAgICAgICAgICAgICAgIHVybFBhcmFtcy5sYW5kaW5nUGFnZUlkO1xuICAgICAgICAgICAgaWYgKHVybFBhcmFtcy50cmlwZnVzaW9uID09PSBcInRydWVcIiAmJiAoc3RhdGUuY2xpZW50IHx8IHVybFBhcmFtcy5jbGllbnQpICYmIGhhc0VudHJ5KSB7XG4gICAgICAgICAgICAgICAgYm9vayh7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudDogdXJsUGFyYW1zLmNsaWVudCA/PyBzdGF0ZS5jbGllbnQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5SWQ6IHVybFBhcmFtcy5wcm9wZXJ0eUlkID8gK3VybFBhcmFtcy5wcm9wZXJ0eUlkIDogc3RhdGUucHJvcGVydHlJZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTbHVnOiB1cmxQYXJhbXMucHJvcGVydHlTbHVnID8/IHN0YXRlLnByb3BlcnR5U2x1ZyxcbiAgICAgICAgICAgICAgICAgICAgbGFuZGluZ1BhZ2VQYXRoOiB1cmxQYXJhbXMubGFuZGluZ1BhZ2VQYXRoID8/IHN0YXRlLmxhbmRpbmdQYWdlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZGluZ1BhZ2VJZDogdXJsUGFyYW1zLmxhbmRpbmdQYWdlSWQgPyArdXJsUGFyYW1zLmxhbmRpbmdQYWdlSWQgOiBzdGF0ZS5sYW5kaW5nUGFnZUlkLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiB1cmxQYXJhbXMubW9kZSA9PT0gQk9PS0lOR19NT0RFLmFwcGVuZCA/IEJPT0tJTkdfTU9ERS5hcHBlbmQgOiBCT09LSU5HX01PREUubm9ybWFsLFxuICAgICAgICAgICAgICAgICAgICBib29raW5nSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXM/LmJvb2tpbmdJZCAmJiB1cmxQYXJhbXM/Lm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgPyArdXJsUGFyYW1zLmJvb2tpbmdJZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG9mZmVySWQ6IHVybFBhcmFtcy5vZmZlcklkID8gK3VybFBhcmFtcy5vZmZlcklkIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGVja0luOiB1cmxQYXJhbXMuY2hlY2tJbixcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tPdXQ6IHVybFBhcmFtcy5jaGVja091dCxcbiAgICAgICAgICAgICAgICAgICAgYWR1bHRzOiB1cmxQYXJhbXMuYWR1bHRzID8gK3VybFBhcmFtcy5hZHVsdHMgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiB1cmxQYXJhbXMuY2hpbGRyZW4gPyB1cmxQYXJhbXMuY2hpbGRyZW4uc3BsaXQoXCIsXCIpLm1hcCgoYWdlKSA9PiArYWdlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZW52OiB1cmxQYXJhbXMuZW52ID8/IHN0YXRlLmVudixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgIG9uTG9hZEhhbmRsZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkSGFuZGxlcik7XG4gICAgfVxufVxuXG4vKipcbiAqIElkZW1wb3RlbnQgRE9NICsgcGFyYW0gYm9vdHN0cmFwLiBSdW5zIHByZXBhcmVEb20oKSAobW9kYWwvb3ZlcmxheSBET00pIGFuZFxuICogc2VlZHMgdGhlIHNjcmlwdC1zcmMgcGFyYW1zIChjbGllbnQgLyBwcm9wZXJ0eUlkIC8g4oCmIC8gZW52IC8gZW1iZWRLZXkgL1xuICogZW1iZWRCYXNlKSBpbnRvIHRoZSBnbG9iYWwgc3RvcmUg4oCUIGV2ZXJ5dGhpbmcgYSBib29rKCkgbmVlZHMgdG8gb3BlbiB0aGVcbiAqIHdpZGdldCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIuXG4gKlxuICogRGVsaWJlcmF0ZWx5IGRvZXMgTk9UIGluamVjdCB0aGUgcGVyc2lzdGVkLWVudGl0eSBpZnJhbWUgYW5kIGRvZXMgTk9UIHdpcmUgdXBcbiAqIGxpbmsgbGlzdGVuZXJzOiBib3RoIGtlZXAgdGhlaXIgb3JpZ2luYWwgcmVhZHlTdGF0ZS1jb21wbGV0ZSB0aW1pbmcuXG4gKlxuICogUmV0dXJucyBmYWxzZSAoYSBuby1vcCwgbGVhdmluZyBgaW5pdGlhbGl6ZWRgIGZhbHNlKSB3aGVuIGRvY3VtZW50LmJvZHkgaXMgbm90XG4gKiB5ZXQgYXZhaWxhYmxlIOKAlCBlLmcuIGEgaGVhZC1zY3JpcHQgY2FsbGVyLiBUaGF0IGNhbGxlciB0aGVuIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBleGlzdGluZyBpbnRlcnZhbCBib290c3RyYXAsIHdoaWNoIHJ1bnMgb25jZSBib2R5IGV4aXN0cywgc28gbm90aGluZyBjcmFzaGVzLlxuICovXG5mdW5jdGlvbiBlbnN1cmVTZGtJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybiB0cnVlO1xuICAgIGlmICghZG9jdW1lbnQuYm9keSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcHJlcGFyZURvbSgpO1xuXG4gICAgY29uc3QgeyBjbGllbnQsIHByb3BlcnR5SWQsIHByb3BlcnR5U2x1ZywgbGFuZGluZ1BhZ2VQYXRoLCBsYW5kaW5nUGFnZUlkLCBlbnYsIGVtYmVkS2V5LCBlbWJlZEJhc2UgfSA9XG4gICAgICAgIGdldERlZmF1bHRQYXJhbXMoKTtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGZpbmFsRW52ID0gZW52IHx8IGN1cnJlbnRTdGF0ZS5lbnY7XG4gICAgY29uc3QgaGFzRW50aXR5ID1cbiAgICAgICAgY3VycmVudFN0YXRlLnByb3BlcnR5SWQgfHxcbiAgICAgICAgY3VycmVudFN0YXRlLnByb3BlcnR5U2x1ZyB8fFxuICAgICAgICBjdXJyZW50U3RhdGUubGFuZGluZ1BhZ2VQYXRoIHx8XG4gICAgICAgIGN1cnJlbnRTdGF0ZS5sYW5kaW5nUGFnZUlkO1xuXG4gICAgaWYgKCFjdXJyZW50U3RhdGUuY2xpZW50IHx8ICFoYXNFbnRpdHkpIHtcbiAgICAgICAgZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKS5yZXBsYWNlKHtcbiAgICAgICAgICAgIC4uLmN1cnJlbnRTdGF0ZSxcbiAgICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICAgIHByb3BlcnR5SWQsXG4gICAgICAgICAgICBwcm9wZXJ0eVNsdWcsXG4gICAgICAgICAgICBsYW5kaW5nUGFnZVBhdGgsXG4gICAgICAgICAgICBsYW5kaW5nUGFnZUlkLFxuICAgICAgICAgICAgZW52OiBmaW5hbEVudixcbiAgICAgICAgICAgIGVtYmVkS2V5LFxuICAgICAgICAgICAgZW1iZWRCYXNlLFxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLnJlcGxhY2UoeyAuLi5jdXJyZW50U3RhdGUsIGVudjogZmluYWxFbnYsIGVtYmVkS2V5LCBlbWJlZEJhc2UgfSk7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBib29rKHByb3BzPzogUGFydGlhbDxHbG9iYWxTdGF0ZT4pIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBCb290c3RyYXAgRE9NICsgcGFyYW1zIG9uIGRlbWFuZCBzbyBhIGNsaWNrIGR1cmluZyBwYWdlIGxvYWQgb3BlbnMgdGhlXG4gICAgICAgIC8vIHdpZGdldCBpbnN0ZWFkIG9mIGRlYWQtY2xpY2tpbmcgdW50aWwgZG9jdW1lbnQgXCJjb21wbGV0ZVwiIGZpcmVzLlxuICAgICAgICBlbnN1cmVTZGtJbml0aWFsaXplZCgpO1xuXG4gICAgICAgIGNvbnN0IHsgZW52OiBzY3JpcHRFbnYgfSA9IGdldERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgY29uc3QgYm9va2luZ1N0YXRlID0ge1xuICAgICAgICAgICAgLi4uY3VycmVudFN0YXRlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICBlbnY6IHByb3BzPy5lbnYgfHwgY3VycmVudFN0YXRlLmVudiB8fCBzY3JpcHRFbnZcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBoYXNFbnRpdHkgPVxuICAgICAgICAgICAgYm9va2luZ1N0YXRlLnByb3BlcnR5SWQgfHxcbiAgICAgICAgICAgIGJvb2tpbmdTdGF0ZS5wcm9wZXJ0eVNsdWcgfHxcbiAgICAgICAgICAgIGJvb2tpbmdTdGF0ZS5sYW5kaW5nUGFnZVBhdGggfHxcbiAgICAgICAgICAgIGJvb2tpbmdTdGF0ZS5sYW5kaW5nUGFnZUlkO1xuICAgICAgICBpZiAoIWJvb2tpbmdTdGF0ZS5jbGllbnQgfHwgIWhhc0VudGl0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiQ2xpZW50IGFuZCBvbmUgb2Yge3Byb3BlcnR5SWQsIHByb3BlcnR5U2x1ZywgbGFuZGluZ1BhZ2VQYXRoLCBsYW5kaW5nUGFnZUlkfSBhcmUgcmVxdWlyZWQgdG8gYm9va1wiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBoaWRlUmVzdW1lUGFuZWwsIHJlc2V0IH0gPSB3aWRnZXRTdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBoaWRlUmVzdW1lUGFuZWwoKTtcblxuICAgICAgICBpZiAoIXNoYWxsb3coZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSwgYm9va2luZ1N0YXRlKSkge1xuICAgICAgICAgICAgcmVzZXQoKTtcbiAgICAgICAgICAgIGdsb2JhbFN0b3JlLmdldFN0YXRlKCkucmVwbGFjZShib29raW5nU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHdpZGdldFN0b3JlLmdldFN0YXRlKCkuc2hvd1dpZGdldCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBmYWlsZWQgdG8gYm9vazogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgVHJpcGZ1c2lvbjogZmFpbGVkIHRvIGJvb2s6ICR7ZXJyb3J9YCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0VHJpcGZ1c2lvblNkaygpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjaGVja0lmRG9jdW1lbnRMb2FkZWRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICAvLyBBbiBlYXJseSBib29rKCkgYWxyZWFkeSByYW4gdGhlIGJvb3RzdHJhcCAocHJlcGFyZURvbSArIHBhcmFtXG4gICAgICAgICAgICAgICAgLy8gc2VlZGluZykgYW5kIGl0cyByZXBsYWNlKCkgaW5qZWN0ZWQgdGhlIG5vdy1saXZlIGlmcmFtZS4gUmUtXG4gICAgICAgICAgICAgICAgLy8gc2VlZGluZyBvciByZS1pbmplY3RpbmcgaGVyZSB3b3VsZCByZW1vdmUrcmVjcmVhdGUgdGhhdCBpZnJhbWVcbiAgICAgICAgICAgICAgICAvLyDigJQgYSB2aXNpYmxlIGZ1bm5lbCByZWxvYWQgbWlkLXVzZS4gT25seSB3aXJlIGxpbmsgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgIGlmIChpbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5rRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0lmRG9jdW1lbnRMb2FkZWRJbnRlcnZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdC1ydW4gYm9vdHN0cmFwIChubyBlYXJseSBib29rKTogY2FwdHVyZSB3aGV0aGVyIGEgcGVyc2lzdGVkXG4gICAgICAgICAgICAgICAgLy8gZW50aXR5IGlzIHByZXNlbnQgQkVGT1JFIHNlZWRpbmcsIHByZXBhcmUgdGhlIERPTSArIHNlZWQgcGFyYW1zLFxuICAgICAgICAgICAgICAgIC8vIHRoZW4gaW5qZWN0IHRoYXQgcGVyc2lzdGVkIGVudGl0eSdzIGlmcmFtZSBleGFjdGx5IGFzIGJlZm9yZS5cbiAgICAgICAgICAgICAgICBjb25zdCBwcmVTdGF0ZSA9IGdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFkUGVyc2lzdGVkRW50aXR5ID1cbiAgICAgICAgICAgICAgICAgICAgISFwcmVTdGF0ZS5jbGllbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgISEoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVTdGF0ZS5wcm9wZXJ0eUlkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVTdGF0ZS5wcm9wZXJ0eVNsdWcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZVN0YXRlLmxhbmRpbmdQYWdlUGF0aCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlU3RhdGUubGFuZGluZ1BhZ2VJZFxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZW5zdXJlU2RrSW5pdGlhbGl6ZWQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChoYWRQZXJzaXN0ZWRFbnRpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5qZWN0SWZyYW1lKGdsb2JhbFN0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRMaW5rRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJZkRvY3VtZW50TG9hZGVkSW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAxMDApO1xuICAgICAgICBhZGRQYWdlTG9hZExpc3RlbmVyKCk7XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih3aW5kb3csIHsgYm9vaywgY2xvc2VXaWRnZXQ6IGhpZGVXaWRnZXREb20gfSk7XG5cbiAgICAgICAgd2luZG93Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICBpZiAoIWlzVHJpcGZ1c2lvbk9yaWdpbihlLm9yaWdpbikpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IEFwcE1lc3NhZ2UgPSBlLmRhdGE7XG4gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5FTUJFRF9IQU5EU0hBS0VfUkVRVUVTVDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSUZSQU1FX0lEKSBhcyBIVE1MSUZyYW1lRWxlbWVudCB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnNvdXJjZSAhPT0gaWZyYW1lPy5jb250ZW50V2luZG93KSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgKGUuc291cmNlIGFzIFdpbmRvdykucG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6IEFQUF9NRVNTQUdFX1RZUEUuRU1CRURfSEFORFNIQUtFX1JFU1BPTlNFLCBrZXk6IGdsb2JhbFN0b3JlLmdldFN0YXRlKCkuZW1iZWRLZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGUub3JpZ2luXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEFQUF9NRVNTQUdFX1RZUEUuV0lER0VUX1JFQURZOiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldFN0b3JlLmdldFN0YXRlKCkuc2V0SXNSZWFkeSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5CT09LSU5HX0NPTVBMRVRFRDoge1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdG9yZS5nZXRTdGF0ZSgpLnNldElzQm9va2luZ0NvbXBsZXRlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgQVBQX01FU1NBR0VfVFlQRS5TRVRfQ0xJRU5UX1RIRU1FOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gbWVzc2FnZS5kYXRhIGFzIHsgcHJpbWFyeT86IHN0cmluZyB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGllbnRUaGVtZSA9IG1lc3NhZ2VEYXRhLnByaW1hcnk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnRUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RvcmUuZ2V0U3RhdGUoKS5zZXRCYWNrZ3JvdW5kQ29sb3IoY2xpZW50VGhlbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEFQUF9NRVNTQUdFX1RZUEUuU0VUX1BSSU1BUllfR1VFU1RfTkFNRToge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlRGF0YSA9IG1lc3NhZ2UuZGF0YSBhcyB7IG5hbWU6IHN0cmluZyB9O1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdG9yZS5nZXRTdGF0ZSgpLnNldFByaW1hcnlHdWVzdE5hbWUobWVzc2FnZURhdGEubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEFQUF9NRVNTQUdFX1RZUEUuU0VUX0RBVEVTOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gbWVzc2FnZS5kYXRhIGFzIHsgY2hlY2tJbj86IHN0cmluZzsgY2hlY2tPdXQ/OiBzdHJpbmcgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VEYXRhLmNoZWNrSW4gJiYgbWVzc2FnZURhdGEuY2hlY2tPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0b3JlLmdldFN0YXRlKCkuc2V0RGF0ZXMobWVzc2FnZURhdGEuY2hlY2tJbiwgbWVzc2FnZURhdGEuY2hlY2tPdXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEFQUF9NRVNTQUdFX1RZUEUuU0VUX0NBUlQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZURhdGEgPSBtZXNzYWdlLmRhdGEgYXMgeyBjYXJ0OiBhbnkgfTtcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RvcmUuZ2V0U3RhdGUoKS5zZXRDYXJ0KG1lc3NhZ2VEYXRhLmNhcnQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIoYFdpZGdldDogZmFpbGVkIHRvIGluaXQgVHJpcGZ1c2lvbiBKUyBTREs6ICR7ZXJyb3J9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFRyaXBmdXNpb246IGZhaWxlZCB0byBpbml0IFNESzogJHtlcnJvcn1gKTtcbiAgICB9XG59XG5cbmluaXRUcmlwZnVzaW9uU2RrKCk7XG4iXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwiZSIsIm4iLCJyIiwicyIsInUiLCJhIiwibyIsImMiLCJmIiwiaCIsImQiLCJsIiwiJCIsInkiLCJNIiwibmFtZSIsIndlZWtkYXlzIiwic3BsaXQiLCJtb250aHMiLCJvcmRpbmFsIiwidCIsIm0iLCJTdHJpbmciLCJBcnJheSIsInYiLCJ6IiwidXRjT2Zmc2V0IiwiTWF0aCIsImFicyIsImZsb29yIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImNsb25lIiwiYWRkIiwiY2VpbCIsInAiLCJ3IiwiRCIsIm1zIiwiUSIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsImciLCJTIiwiXyIsIk8iLCJhcmdzIiwiYXJndW1lbnRzIiwiYiIsImxvY2FsZSIsIiRMIiwidXRjIiwiJHUiLCJ4IiwiJHgiLCIkb2Zmc2V0IiwicGFyc2UiLCJwcm90b3R5cGUiLCIkZCIsIkRhdGUiLCJOYU4iLCJ0ZXN0IiwibWF0Y2giLCJzdWJzdHJpbmciLCJVVEMiLCJpbml0IiwiJHkiLCJnZXRGdWxsWWVhciIsIiRNIiwiZ2V0TW9udGgiLCIkRCIsImdldERhdGUiLCIkVyIsImdldERheSIsIiRIIiwiZ2V0SG91cnMiLCIkbSIsImdldE1pbnV0ZXMiLCIkcyIsImdldFNlY29uZHMiLCIkbXMiLCJnZXRNaWxsaXNlY29uZHMiLCIkdXRpbHMiLCJpc1ZhbGlkIiwiaXNTYW1lIiwic3RhcnRPZiIsImVuZE9mIiwiaXNBZnRlciIsImlzQmVmb3JlIiwiJGciLCJzZXQiLCJ1bml4IiwidmFsdWVPZiIsImdldFRpbWUiLCJ0b0RhdGUiLCJhcHBseSIsInNsaWNlIiwiJGxvY2FsZSIsIndlZWtTdGFydCIsIiRzZXQiLCJtaW4iLCJkYXlzSW5Nb250aCIsImdldCIsIk51bWJlciIsInJvdW5kIiwic3VidHJhY3QiLCJmb3JtYXQiLCJpbnZhbGlkRGF0ZSIsIm1lcmlkaWVtIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJnZXRUaW1lem9uZU9mZnNldCIsImRpZmYiLCJ0b0pTT04iLCJ0b0lTT1N0cmluZyIsInRvVVRDU3RyaW5nIiwiZm9yRWFjaCIsImV4dGVuZCIsIiRpIiwiaXNEYXlqcyIsImVuIiwiTHMiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsInJlc3VsdCIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiY291bnQiLCJpbmRleEJ5SWRlbnRpZmllciIsIm9iaiIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsInNwbGljZSIsImFwaSIsImRvbUFQSSIsInVwZGF0ZSIsIm5ld09iaiIsInJlbW92ZSIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJpbmRleCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4IiwibWVtbyIsImluc2VydCIsInN0eWxlIiwidGFyZ2V0Iiwic3R5bGVUYXJnZXQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJnZXRUYXJnZXQiLCJFcnJvciIsImFwcGVuZENoaWxkIiwiZWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsInN0eWxlRWxlbWVudCIsIm5vbmNlIiwic2V0QXR0cmlidXRlIiwiaW5zZXJ0U3R5bGVFbGVtZW50Iiwic3R5bGVUYWdUcmFuc2Zvcm0iLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImZpcnN0Q2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJjYWxsIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJrZXkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJuYyIsIldJREdFVF9JRCIsIldJREdFVF9JTk5FUl9XUkFQUEVSX0lEIiwiV0lER0VUX0hFQURFUl9JRCIsIldJREdFVF9XUkFQUEVSX0lEIiwiV0lER0VUX0lGUkFNRV9JRCIsIlJFU1VNRV9QQU5FTF9JRCIsIkxPQURFUl9JRCIsIkJPT0tJTkdfTU9ERSIsImNyZWF0ZUpTT05TdG9yYWdlIiwiZ2V0U3RvcmFnZSIsInN0b3JhZ2UiLCJnZXRJdGVtIiwiX2EiLCJzdHIyIiwicmV2aXZlciIsInN0ciIsIlByb21pc2UiLCJ0aGVuIiwic2V0SXRlbSIsIm5ld1ZhbHVlIiwicmVwbGFjZXIiLCJyZW1vdmVJdGVtIiwidG9UaGVuYWJsZSIsImZuIiwiaW5wdXQiLCJvbkZ1bGZpbGxlZCIsIl9vblJlamVjdGVkIiwiX29uRnVsZmlsbGVkIiwiY2F0Y2giLCJvblJlamVjdGVkIiwicGVyc2lzdCIsImNvbmZpZyIsImJhc2VPcHRpb25zIiwibG9jYWxTdG9yYWdlIiwicGFydGlhbGl6ZSIsInN0YXRlIiwidmVyc2lvbiIsIm1lcmdlIiwicGVyc2lzdGVkU3RhdGUiLCJjdXJyZW50U3RhdGUiLCJoYXNIeWRyYXRlZCIsImh5ZHJhdGlvbkxpc3RlbmVycyIsIlNldCIsImZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycyIsImNvbnNvbGUiLCJ3YXJuIiwic2F2ZWRTZXRTdGF0ZSIsInNldFN0YXRlIiwiY29uZmlnUmVzdWx0Iiwic3RhdGVGcm9tU3RvcmFnZSIsImdldEluaXRpYWxTdGF0ZSIsImh5ZHJhdGUiLCJfYiIsImNiIiwiX2EyIiwicG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2siLCJvblJlaHlkcmF0ZVN0b3JhZ2UiLCJiaW5kIiwiZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlIiwibWlncmF0ZSIsIm1pZ3JhdGlvbiIsImVycm9yIiwibWlncmF0aW9uUmVzdWx0IiwibWlncmF0ZWQiLCJtaWdyYXRlZFN0YXRlIiwic2V0T3B0aW9ucyIsIm5ld09wdGlvbnMiLCJjbGVhclN0b3JhZ2UiLCJnZXRPcHRpb25zIiwicmVoeWRyYXRlIiwib25IeWRyYXRlIiwiZGVsZXRlIiwib25GaW5pc2hIeWRyYXRpb24iLCJza2lwSHlkcmF0aW9uIiwiY3JlYXRlU3RvcmVJbXBsIiwiY3JlYXRlU3RhdGUiLCJsaXN0ZW5lcnMiLCJwYXJ0aWFsIiwibmV4dFN0YXRlIiwiaXMiLCJwcmV2aW91c1N0YXRlIiwiYXNzaWduIiwibGlzdGVuZXIiLCJnZXRTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInN1YnNjcmliZSIsImNyZWF0ZVN0b3JlIiwiaW5pdGlhbFdpZGdldFN0YXRlIiwiaXNPcGVuIiwiaXNSZXN1bWVQYW5lbFZpc2libGUiLCJpc1JlYWR5IiwiaXNCb29raW5nQ29tcGxldGVkIiwiYmFja2dyb3VuZENvbG9yIiwicHJpbWFyeUd1ZXN0TmFtZSIsImNoZWNrSW5EYXRlIiwiY2hlY2tPdXREYXRlIiwiY2FydCIsIndpZGdldFN0b3JlIiwic2hvd1dpZGdldCIsImhpZGVXaWRnZXQiLCJzaG93UmVzdW1lUGFuZWwiLCJoaWRlUmVzdW1lUGFuZWwiLCJzZXRJc1JlYWR5Iiwic2V0SXNCb29raW5nQ29tcGxldGVkIiwic2V0QmFja2dyb3VuZENvbG9yIiwic2V0UHJpbWFyeUd1ZXN0TmFtZSIsInNldENhcnQiLCJzZXREYXRlcyIsInJlc2V0Iiwic2Vzc2lvblN0b3JhZ2UiLCJmcm9tRW50cmllcyIsImVudHJpZXMiLCJmaWx0ZXIiLCJpbmNsdWRlcyIsImNsaWVudCIsInByb3BlcnR5SWQiLCJwcm9wZXJ0eVNsdWciLCJsYW5kaW5nUGFnZVBhdGgiLCJsYW5kaW5nUGFnZUlkIiwibW9kZSIsImJvb2tpbmdJZCIsImNoZWNrSW4iLCJjaGVja091dCIsImFkdWx0cyIsImNoaWxkcmVuIiwib2ZmZXJJZCIsImVudiIsImVtYmVkS2V5IiwiZW1iZWRCYXNlIiwiZ2xvYmFsU3RvcmUiLCJFTUJFRF9LRVlfRk9STUFUIiwiZ2V0RGVmYXVsdFBhcmFtcyIsImpzU2RrU3JjIiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRBdHRyaWJ1dGUiLCJ1cmxQYXJhbXMiLCJnZXRQYXJhbXNGcm9tVXJsIiwiVVJMU2VhcmNoUGFyYW1zIiwiaW5kZXhPZiIsInJhd0VtYmVkS2V5IiwibG9nZ2VyIiwidXJsU2VhcmNoUGFyYW1zIiwiYXZhaWxhYmxlU2VhcmNoUGFyYW1zTWFwIiwidHJpcGZ1c2lvbiIsInByb3BlcnR5aWQiLCJwcm9wZXJ0eXNsdWciLCJsYW5kaW5ncGFnZXBhdGgiLCJsYW5kaW5ncGFnZWlkIiwib2ZmZXJpZCIsImJvb2tpbmdpZCIsImNoZWNraW4iLCJjaGVja291dCIsInBrIiwiZW1iZWRiYXNlIiwiZnJvbSIsInJlZHVjZSIsInByZXYiLCJzZWFyY2hQYXJhbUtleSIsInNlYXJjaFBhcmFtVmFsdWUiLCJtZXNzYWdlIiwidHlwZSIsInRyaXBmdXNpb25CYXNlVXJsIiwiZ2V0VHJpcGZ1c2lvbkJhc2VVcmwiLCJ1cmwiLCJwYXlsb2FkIiwicGFnZSIsImxvY2F0aW9uIiwiaHJlZiIsImhlYWRlcnMiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJyZXNwb25zZSIsImpzb24iLCJsb2ciLCJvcmlnaW4iLCJoaWRlV2lkZ2V0RG9tIiwiJHdpZGdldCIsIiR3aWRnZXRXcmFwcGVyIiwib3ZlcmZsb3ciLCJiYWNrZ3JvdW5kIiwiZGlzcGxheSIsInpJbmRleCIsImluamVjdElmcmFtZSIsInJlc3QiLCIkaW5uZXJXcmFwcGVyIiwiJHdpZGdldElmcmFtZSIsIm9mZmVyU2VnbWVudCIsInByb3BlcnR5U2VnbWVudCIsImFkZGl0aW9uYWxQYXJhbXMiLCJ2YWx1ZSIsImFsbFBhcmFtcyIsIkJvb2xlYW4iLCJsb2NrUGFnZVNjcm9sbCIsImlzSXRlcmFibGUiLCJTeW1ib2wiLCJpdGVyYXRvciIsImhhc0l0ZXJhYmxlRW50cmllcyIsImNvbXBhcmVFbnRyaWVzIiwidmFsdWVBIiwidmFsdWVCIiwibWFwQSIsIk1hcCIsIm1hcEIiLCJzaXplIiwiaGFzIiwibG9jYWxzIiwiaW5pdGlhbGl6ZWQiLCJhZGRMaW5rRXZlbnRMaXN0ZW5lcnMiLCJoYW5kbGVMaW5rQ2xpY2siLCJldmVudCIsInRhZ05hbWUiLCJsaW5rSHJlZiIsInByZXZlbnREZWZhdWx0IiwiYm9vayIsImFnZSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsaW5rRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlbnN1cmVTZGtJbml0aWFsaXplZCIsIiR3aWRnZXRJbm5lcldyYXBwZXIiLCIkd2lkZ2V0SGVhZGVyIiwiJHdpZGdldEhlYWRlclRpdGxlIiwiJHdpZGdldENsb3NlQnV0dG9uIiwiJHJlc3VtZVBhbmVsIiwiaW5uZXJIVE1MIiwicHJlcGFyZURvbSIsImZpbmFsRW52IiwiaGFzRW50aXR5IiwicHJvcHMiLCJzY3JpcHRFbnYiLCJib29raW5nU3RhdGUiLCJnZXRQcm90b3R5cGVPZiIsIml0ZXJhdG9yQSIsIml0ZXJhdG9yQiIsIm5leHRBIiwibmV4dCIsIm5leHRCIiwiZG9uZSIsImNvbXBhcmVJdGVyYWJsZXMiLCJuZXdTdGF0ZSIsImNlbnRzIiwiJGxvYWRpbmdEaXYiLCJoZWFkZXJUZXh0IiwidG9VcHBlckNhc2UiLCJzdWJoZWFkZXJUZXh0IiwiZm9vdGVyUGFydHMiLCJ0b3RhbCIsInJvb21zIiwicm9vbUNvdW50IiwiZ3Vlc3RDb3VudCIsImFjYyIsInJvb20iLCJwYXNzZW5nZXJzIiwiSW50bCIsIk51bWJlckZvcm1hdCIsImN1cnJlbmN5IiwiZm9vdGVyVGV4dCIsInJlbmRlclJlc3VtZVBhbmVsIiwiJHJlc3VtZVBhbmVsV3JhcHBlciIsInNldFdpZGdldFRoZW1lIiwiaGVpZ2h0Iiwic2V0VGltZW91dCIsImZvY3VzIiwic2hvd1dpZGdldERvbSIsImRpc3BsYXlMb2FkaW5nT3ZlcmxheSIsInNldEludGVydmFsIiwicmVhZHlTdGF0ZSIsImNsZWFySW50ZXJ2YWwiLCJwcmVTdGF0ZSIsImhhZFBlcnNpc3RlZEVudGl0eSIsIm9uTG9hZEhhbmRsZXIiLCJzZWFyY2giLCJoYXNFbnRyeSIsImFkZFBhZ2VMb2FkTGlzdGVuZXIiLCJjbG9zZVdpZGdldCIsIm9ubWVzc2FnZSIsIlVSTCIsImhvc3QiLCJwcm90b2NvbCIsImlzVHJpcGZ1c2lvbk9yaWdpbiIsImlmcmFtZSIsInNvdXJjZSIsImNvbnRlbnRXaW5kb3ciLCJwb3N0TWVzc2FnZSIsImNsaWVudFRoZW1lIiwibWVzc2FnZURhdGEiLCJwcmltYXJ5IiwiaW5pdFRyaXBmdXNpb25TZGsiXSwic291cmNlUm9vdCI6IiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vacayou/tripfusion-js-sdk",
3
- "version": "1.65.0",
3
+ "version": "1.66.0",
4
4
  "description": "Tripfusion Booking Engine JS SDK",
5
5
  "browser": "./dist/main.js",
6
6
  "files": [