@digitransit-component/digitransit-component-favourite-editing-modal 5.1.0 → 5.1.2

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.
@@ -1,7 +1,7 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@hsl-fi/container-spinner"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","react-sortablejs","@hsl-fi/container-spinner","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal","i18next"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},t.PropTypes,t.React,t.reactI18next,t.reactSortablejs,t.ContainerSpinner,t.Modal,t.Icon,t.DialogModal,t.i18next)}(this,function(t,e,r,n,i,o,a,u,s,l){"use strict";function c(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var f=c(e),d=c(r),v=c(o),_=c(a),p=c(u),y=c(s);function h(t){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h(t)}function m(t){var e=function(t,e){if("object"!=h(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=h(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==h(e)?e:e+""}function b(t,e,r){return(e=m(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function g(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var j,w={exports:{}};
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@hsl-fi/loading-indicators"),require("@hsl-fi/modal"),require("@digitransit-component/digitransit-component-icon"),require("@digitransit-component/digitransit-component-dialog-modal"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","react-i18next","react-sortablejs","@hsl-fi/loading-indicators","@hsl-fi/modal","@digitransit-component/digitransit-component-icon","@digitransit-component/digitransit-component-dialog-modal","i18next"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self)["@digitransit-component/digitransit-component-favourite-editing-modal"]={},t.PropTypes,t.React,t.reactI18next,t.reactSortablejs,t.LoadingIndicators,t.Modal,t.Icon,t.DialogModal,t.i18next)}(this,function(t,e,r,n,i,o,a,u,s,l){"use strict";function c(t){return t&&t.__esModule?t:{default:t}}var f=c(e),d=c(r),v=c(a),_=c(u),p=c(s);function y(t){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y(t)}function h(t){var e=function(t,e){if("object"!=y(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e);if("object"!=y(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==y(e)?e:e+""}function m(t,e,r){return(e=h(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function b(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var g,j={exports:{}};
2
2
  /*!
3
3
  Copyright (c) 2018 Jed Watson.
4
4
  Licensed under the MIT License (MIT), see
5
5
  http://jedwatson.github.io/classnames
6
- */var x,S,O,M,P,E,F,N,I,A,V,k,D,z,C,Z,T,R,H,L,J,q,B,U,Q,$,G,W,K,Y,X,tt,et,rt,nt,it,ot,at,ut,st,lt,ct,ft,dt,vt,_t,pt,yt,ht,mt,bt,gt,jt,wt,xt,St,Ot,Mt,Pt,Et,Ft,Nt,It,At,Vt,kt,Dt,zt,Ct,Zt,Tt,Rt,Ht,Lt,Jt,qt,Bt,Ut,Qt,$t,Gt,Wt,Kt,Yt,Xt,te,ee,re,ne,ie,oe,ae,ue,se,le,ce,fe,de,ve,_e,pe,ye,he,me,be,ge,je,we,xe,Se,Oe,Me,Pe,Ee,Fe,Ne,Ie,Ae,Ve,ke,De,ze,Ce,Ze,Te,Re,He,Le,Je,qe,Be,Ue,Qe,$e,Ge,We,Ke,Ye,Xe,tr,er,rr,nr,ir,or=(j||(j=1,function(t){!function(){var e={}.hasOwnProperty;function r(){for(var t="",e=0;e<arguments.length;e++){var r=arguments[e];r&&(t=i(t,n(r)))}return t}function n(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return r.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var n="";for(var o in t)e.call(t,o)&&t[o]&&(n=i(n,o));return n}function i(t,e){return e?t?t+" "+e:t+e:t}t.exports?(r.default=r,t.exports=r):window.classNames=r}()}(w)),w.exports),ar=g(or);function ur(){if(S)return x;S=1;var t="object"==typeof global&&global&&global.Object===Object&&global;return x=t}function sr(){if(M)return O;M=1;var t=ur(),e="object"==typeof self&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return O=r}function lr(){if(E)return P;E=1;var t=sr().Symbol;return P=t}function cr(){if(k)return V;k=1;var t=lr(),e=function(){if(N)return F;N=1;var t=lr(),e=Object.prototype,r=e.hasOwnProperty,n=e.toString,i=t?t.toStringTag:void 0;return F=function(t){var e=r.call(t,i),o=t[i];try{t[i]=void 0;var a=!0}catch(t){}var u=n.call(t);return a&&(e?t[i]=o:delete t[i]),u}}(),r=function(){if(A)return I;A=1;var t=Object.prototype.toString;return I=function(e){return t.call(e)}}(),n=t?t.toStringTag:void 0;return V=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":n&&n in Object(t)?e(t):r(t)}}function fr(){if(z)return D;return z=1,D=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}}function dr(){if(Z)return C;Z=1;var t=cr(),e=fr();return C=function(r){if(!e(r))return!1;var n=t(r);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}}function vr(){if(L)return H;L=1;var t,e=function(){if(R)return T;R=1;var t=sr()["__core-js_shared__"];return T=t}(),r=(t=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"";return H=function(t){return!!r&&r in t}}function _r(){if(q)return J;q=1;var t=Function.prototype.toString;return J=function(e){if(null!=e){try{return t.call(e)}catch(t){}try{return e+""}catch(t){}}return""}}function pr(){if(W)return G;W=1;var t=function(){if(U)return B;U=1;var t=dr(),e=vr(),r=fr(),n=_r(),i=/^\[object .+?Constructor\]$/,o=Function.prototype,a=Object.prototype,u=o.toString,s=a.hasOwnProperty,l=RegExp("^"+u.call(s).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");return B=function(o){return!(!r(o)||e(o))&&(t(o)?l:i).test(n(o))}}(),e=$?Q:($=1,Q=function(t,e){return null==t?void 0:t[e]});return G=function(r,n){var i=e(r,n);return t(i)?i:void 0}}function yr(){if(Y)return K;Y=1;var t=pr()(Object,"create");return K=t}function hr(){if(ct)return lt;ct=1;var t=function(){if(tt)return X;tt=1;var t=yr();return X=function(){this.__data__=t?t(null):{},this.size=0}}(),e=rt?et:(rt=1,et=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}),r=function(){if(it)return nt;it=1;var t=yr(),e=Object.prototype.hasOwnProperty;return nt=function(r){var n=this.__data__;if(t){var i=n[r];return"__lodash_hash_undefined__"===i?void 0:i}return e.call(n,r)?n[r]:void 0}}(),n=function(){if(at)return ot;at=1;var t=yr(),e=Object.prototype.hasOwnProperty;return ot=function(r){var n=this.__data__;return t?void 0!==n[r]:e.call(n,r)}}(),i=function(){if(st)return ut;st=1;var t=yr();return ut=function(e,r){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=t&&void 0===r?"__lodash_hash_undefined__":r,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,lt=o}function mr(){if(_t)return vt;return _t=1,vt=function(t,e){return t===e||t!=t&&e!=e}}function br(){if(yt)return pt;yt=1;var t=mr();return pt=function(e,r){for(var n=e.length;n--;)if(t(e[n][0],r))return n;return-1}}function gr(){if(Mt)return Ot;Mt=1;var t=dt?ft:(dt=1,ft=function(){this.__data__=[],this.size=0}),e=function(){if(mt)return ht;mt=1;var t=br(),e=Array.prototype.splice;return ht=function(r){var n=this.__data__,i=t(n,r);return!(i<0||(i==n.length-1?n.pop():e.call(n,i,1),--this.size,0))},ht}(),r=function(){if(gt)return bt;gt=1;var t=br();return bt=function(e){var r=this.__data__,n=t(r,e);return n<0?void 0:r[n][1]},bt}(),n=function(){if(wt)return jt;wt=1;var t=br();return jt=function(e){return t(this.__data__,e)>-1}}(),i=function(){if(St)return xt;St=1;var t=br();return xt=function(e,r){var n=this.__data__,i=t(n,e);return i<0?(++this.size,n.push([e,r])):n[i][1]=r,this},xt}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Ot=o}function jr(){if(Et)return Pt;Et=1;var t=pr()(sr(),"Map");return Pt=t}function wr(){if(kt)return Vt;kt=1;var t=At?It:(At=1,It=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t});return Vt=function(e,r){var n=e.__data__;return t(r)?n["string"==typeof r?"string":"hash"]:n.map}}function xr(){if(qt)return Jt;qt=1;var t=function(){if(Nt)return Ft;Nt=1;var t=hr(),e=gr(),r=jr();return Ft=function(){this.size=0,this.__data__={hash:new t,map:new(r||e),string:new t}}}(),e=function(){if(zt)return Dt;zt=1;var t=wr();return Dt=function(e){var r=t(this,e).delete(e);return this.size-=r?1:0,r}}(),r=function(){if(Zt)return Ct;Zt=1;var t=wr();return Ct=function(e){return t(this,e).get(e)}}(),n=function(){if(Rt)return Tt;Rt=1;var t=wr();return Tt=function(e){return t(this,e).has(e)}}(),i=function(){if(Lt)return Ht;Lt=1;var t=wr();return Ht=function(e,r){var n=t(this,e),i=n.size;return n.set(e,r),this.size+=n.size==i?0:1,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Jt=o}function Sr(){if(Wt)return Gt;Wt=1;var t=xr(),e=Ut?Bt:(Ut=1,Bt=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}),r=$t?Qt:($t=1,Qt=function(t){return this.__data__.has(t)});function n(e){var r=-1,n=null==e?0:e.length;for(this.__data__=new t;++r<n;)this.add(e[r])}return n.prototype.add=n.prototype.push=e,n.prototype.has=r,Gt=n}function Or(){if(ie)return ne;ie=1;var t=(Yt||(Yt=1,Kt=function(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}),Kt),e=te?Xt:(te=1,Xt=function(t){return t!=t}),r=(re||(re=1,ee=function(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}),ee);return ne=function(n,i,o){return i==i?r(n,i,o):t(n,e,o)}}function Mr(){if(ae)return oe;ae=1;var t=Or();return oe=function(e,r){return!!(null==e?0:e.length)&&t(e,r,0)>-1}}function Pr(){if(se)return ue;return se=1,ue=function(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1},ue}function Er(){if(ce)return le;return ce=1,le=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i},le}function Fr(){if(de)return fe;return de=1,fe=function(t){return function(e){return t(e)}}}function Nr(){if(_e)return ve;return _e=1,ve=function(t,e){return t.has(e)}}function Ir(){if(me)return he;return me=1,he=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t},he}function Ar(){if(ge)return be;return ge=1,be=function(t){return null!=t&&"object"==typeof t}}function Vr(){if(Se)return xe;Se=1;var t=function(){if(we)return je;we=1;var t=cr(),e=Ar();return je=function(r){return e(r)&&"[object Arguments]"==t(r)}}(),e=Ar(),r=Object.prototype,n=r.hasOwnProperty,i=r.propertyIsEnumerable,o=t(function(){return arguments}())?t:function(t){return e(t)&&n.call(t,"callee")&&!i.call(t,"callee")};return xe=o}function kr(){if(Me)return Oe;Me=1;var t=Array.isArray;return Oe=t}function Dr(){if(Ne)return Fe;Ne=1;var t=Ir(),e=function(){if(Ee)return Pe;Ee=1;var t=lr(),e=Vr(),r=kr(),n=t?t.isConcatSpreadable:void 0;return Pe=function(t){return r(t)||e(t)||!!(n&&t&&t[n])}}();return Fe=function r(n,i,o,a,u){var s=-1,l=n.length;for(o||(o=e),u||(u=[]);++s<l;){var c=n[s];i>0&&o(c)?i>1?r(c,i-1,o,a,u):t(u,c):a||(u[u.length]=c)}return u},Fe}function zr(){if(Ae)return Ie;return Ae=1,Ie=function(t){return t}}function Cr(){if(ze)return De;ze=1;var t=ke?Ve:(ke=1,Ve=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}),e=Math.max;return De=function(r,n,i){return n=e(void 0===n?r.length-1:n,0),function(){for(var o=arguments,a=-1,u=e(o.length-n,0),s=Array(u);++a<u;)s[a]=o[n+a];a=-1;for(var l=Array(n+1);++a<n;)l[a]=o[a];return l[n]=i(s),t(r,this,l)}},De}function Zr(){if(Re)return Te;Re=1;var t=pr(),e=function(){try{var e=t(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();return Te=e}function Tr(){if(Le)return He;Le=1;var t=Ze?Ce:(Ze=1,Ce=function(t){return function(){return t}}),e=Zr(),r=zr();return He=e?function(r,n){return e(r,"toString",{configurable:!0,enumerable:!1,value:t(n),writable:!0})}:r}function Rr(){if(Ue)return Be;Ue=1;var t=Tr(),e=function(){if(qe)return Je;qe=1;var t=Date.now;return Je=function(e){var r=0,n=0;return function(){var i=t(),o=16-(i-n);if(n=i,o>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}},Je}(),r=e(t);return Be=r}function Hr(){if(We)return Ge;We=1;return Ge=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}}function Lr(){if(Ye)return Ke;Ye=1;var t=dr(),e=Hr();return Ke=function(r){return null!=r&&e(r.length)&&!t(r)}}function Jr(){if(rr)return er;return rr=1,er=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}}var qr,Br,Ur,Qr,$r,Gr,Wr,Kr,Yr,Xr,tn,en,rn,nn,on,an,un,sn,ln,cn,fn,dn,vn,_n,pn,yn,hn,mn,bn,gn,jn,wn,xn,Sn,On=function(){if(ir)return nr;ir=1;var t=function(){if(ye)return pe;ye=1;var t=Sr(),e=Mr(),r=Pr(),n=Er(),i=Fr(),o=Nr();return pe=function(a,u,s,l){var c=-1,f=e,d=!0,v=a.length,_=[],p=u.length;if(!v)return _;s&&(u=n(u,i(s))),l?(f=r,d=!1):u.length>=200&&(f=o,d=!1,u=new t(u));t:for(;++c<v;){var y=a[c],h=null==s?y:s(y);if(y=l||0!==y?y:0,d&&h==h){for(var m=p;m--;)if(u[m]===h)continue t;_.push(y)}else f(u,h,l)||_.push(y)}return _},pe}(),e=Dr(),r=function(){if($e)return Qe;$e=1;var t=zr(),e=Cr(),r=Rr();return Qe=function(n,i){return r(e(n,i,t),n+"")}}(),n=function(){if(tr)return Xe;tr=1;var t=Lr(),e=Ar();return Xe=function(r){return e(r)&&t(r)}}(),i=Jr(),o=r(function(r,o){var a=i(o);return n(a)&&(a=void 0),n(r)?t(r,e(o,1,n,!0),void 0,a):[]});return nr=o}(),Mn=g(On);function Pn(){if(en)return tn;en=1;var t=gr(),e=function(){if(Br)return qr;Br=1;var t=gr();return qr=function(){this.__data__=new t,this.size=0}}(),r=Qr?Ur:(Qr=1,Ur=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}),n=Gr?$r:(Gr=1,$r=function(t){return this.__data__.get(t)}),i=Kr?Wr:(Kr=1,Wr=function(t){return this.__data__.has(t)}),o=function(){if(Xr)return Yr;Xr=1;var t=gr(),e=jr(),r=xr();return Yr=function(n,i){var o=this.__data__;if(o instanceof t){var a=o.__data__;if(!e||a.length<199)return a.push([n,i]),this.size=++o.size,this;o=this.__data__=new r(a)}return o.set(n,i),this.size=o.size,this}}();function a(e){var r=this.__data__=new t(e);this.size=r.size}return a.prototype.clear=e,a.prototype.delete=r,a.prototype.get=n,a.prototype.has=i,a.prototype.set=o,tn=a}function En(){if(an)return on;an=1;var t=Sr(),e=(nn||(nn=1,rn=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}),rn),r=Nr();return on=function(n,i,o,a,u,s){var l=1&o,c=n.length,f=i.length;if(c!=f&&!(l&&f>c))return!1;var d=s.get(n),v=s.get(i);if(d&&v)return d==i&&v==n;var _=-1,p=!0,y=2&o?new t:void 0;for(s.set(n,i),s.set(i,n);++_<c;){var h=n[_],m=i[_];if(a)var b=l?a(m,h,_,i,n,s):a(h,m,_,n,i,s);if(void 0!==b){if(b)continue;p=!1;break}if(y){if(!e(i,function(t,e){if(!r(y,e)&&(h===t||u(h,t,o,a,s)))return y.push(e)})){p=!1;break}}else if(h!==m&&!u(h,m,o,a,s)){p=!1;break}}return s.delete(n),s.delete(i),p},on}function Fn(){if(sn)return un;sn=1;var t=sr().Uint8Array;return un=t}function Nn(){if(dn)return fn;return dn=1,fn=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},fn}function In(){if(_n)return vn;_n=1;var t=lr(),e=Fn(),r=mr(),n=En(),i=(cn||(cn=1,ln=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}),ln),o=Nn(),a=t?t.prototype:void 0,u=a?a.valueOf:void 0;return vn=function(t,a,s,l,c,f,d){switch(s){case"[object DataView]":if(t.byteLength!=a.byteLength||t.byteOffset!=a.byteOffset)return!1;t=t.buffer,a=a.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=a.byteLength||!f(new e(t),new e(a)));case"[object Boolean]":case"[object Date]":case"[object Number]":return r(+t,+a);case"[object Error]":return t.name==a.name&&t.message==a.message;case"[object RegExp]":case"[object String]":return t==a+"";case"[object Map]":var v=i;case"[object Set]":var _=1&l;if(v||(v=o),t.size!=a.size&&!_)return!1;var p=d.get(t);if(p)return p==a;l|=2,d.set(t,a);var y=n(v(t),v(a),l,c,f,d);return d.delete(t),y;case"[object Symbol]":if(u)return u.call(t)==u.call(a)}return!1}}function An(){if(yn)return pn;yn=1;var t=Ir(),e=kr();return pn=function(r,n,i){var o=n(r);return e(r)?o:t(o,i(r))}}function Vn(){if(gn)return bn;return gn=1,bn=function(){return[]}}function kn(){if(wn)return jn;wn=1;var t=(mn||(mn=1,hn=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}),hn),e=Vn(),r=Object.prototype.propertyIsEnumerable,n=Object.getOwnPropertySymbols;return jn=n?function(e){return null==e?[]:(e=Object(e),t(n(e),function(t){return r.call(e,t)}))}:e}var Dn,zn,Cn,Zn,Tn,Rn,Hn,Ln={exports:{}};function Jn(){return Cn||(Cn=1,function(t,e){var r=sr(),n=zn?Dn:(zn=1,Dn=function(){return!1}),i=e&&!e.nodeType&&e,o=i&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,u=(a?a.isBuffer:void 0)||n;t.exports=u}(Ln,Ln.exports)),Ln.exports}var qn,Bn,Un,Qn,$n,Gn,Wn,Kn,Yn,Xn,ti,ei,ri,ni,ii,oi,ai,ui,si,li,ci,fi,di,vi,_i,pi,yi,hi,mi,bi,gi,ji,wi,xi,Si,Oi={exports:{}};function Mi(){return qn||(qn=1,function(t,e){var r=ur(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=a}(Oi,Oi.exports)),Oi.exports}function Pi(){if(Un)return Bn;Un=1;var t=function(){if(Hn)return Rn;Hn=1;var t=cr(),e=Hr(),r=Ar(),n={};return n["[object Float32Array]"]=n["[object Float64Array]"]=n["[object Int8Array]"]=n["[object Int16Array]"]=n["[object Int32Array]"]=n["[object Uint8Array]"]=n["[object Uint8ClampedArray]"]=n["[object Uint16Array]"]=n["[object Uint32Array]"]=!0,n["[object Arguments]"]=n["[object Array]"]=n["[object ArrayBuffer]"]=n["[object Boolean]"]=n["[object DataView]"]=n["[object Date]"]=n["[object Error]"]=n["[object Function]"]=n["[object Map]"]=n["[object Number]"]=n["[object Object]"]=n["[object RegExp]"]=n["[object Set]"]=n["[object String]"]=n["[object WeakMap]"]=!1,Rn=function(i){return r(i)&&e(i.length)&&!!n[t(i)]}}(),e=Fr(),r=Mi(),n=r&&r.isTypedArray,i=n?e(n):t;return Bn=i}function Ei(){if($n)return Qn;$n=1;var t=(Sn||(Sn=1,xn=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}),xn),e=Vr(),r=kr(),n=Jn(),i=function(){if(Tn)return Zn;Tn=1;var t=/^(?:0|[1-9]\d*)$/;return Zn=function(e,r){var n=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&t.test(e))&&e>-1&&e%1==0&&e<r}}(),o=Pi(),a=Object.prototype.hasOwnProperty;return Qn=function(u,s){var l=r(u),c=!l&&e(u),f=!l&&!c&&n(u),d=!l&&!c&&!f&&o(u),v=l||c||f||d,_=v?t(u.length,String):[],p=_.length;for(var y in u)!s&&!a.call(u,y)||v&&("length"==y||f&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||i(y,p))||_.push(y);return _}}function Fi(){if(Wn)return Gn;Wn=1;var t=Object.prototype;return Gn=function(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}}function Ni(){if(Yn)return Kn;return Yn=1,Kn=function(t,e){return function(r){return t(e(r))}}}function Ii(){if(ri)return ei;ri=1;var t=Fi(),e=function(){if(ti)return Xn;ti=1;var t=Ni()(Object.keys,Object);return Xn=t}(),r=Object.prototype.hasOwnProperty;return ei=function(n){if(!t(n))return e(n);var i=[];for(var o in Object(n))r.call(n,o)&&"constructor"!=o&&i.push(o);return i}}function Ai(){if(ii)return ni;ii=1;var t=Ei(),e=Ii(),r=Lr();return ni=function(n){return r(n)?t(n):e(n)}}function Vi(){if(ai)return oi;ai=1;var t=An(),e=kn(),r=Ai();return oi=function(n){return t(n,r,e)}}function ki(){if(_i)return vi;_i=1;var t=pr()(sr(),"Set");return vi=t}function Di(){if(mi)return hi;mi=1;var t=function(){if(ci)return li;ci=1;var t=pr()(sr(),"DataView");return li=t}(),e=jr(),r=function(){if(di)return fi;di=1;var t=pr()(sr(),"Promise");return fi=t}(),n=ki(),i=function(){if(yi)return pi;yi=1;var t=pr()(sr(),"WeakMap");return pi=t}(),o=cr(),a=_r(),u="[object Map]",s="[object Promise]",l="[object Set]",c="[object WeakMap]",f="[object DataView]",d=a(t),v=a(e),_=a(r),p=a(n),y=a(i),h=o;return(t&&h(new t(new ArrayBuffer(1)))!=f||e&&h(new e)!=u||r&&h(r.resolve())!=s||n&&h(new n)!=l||i&&h(new i)!=c)&&(h=function(t){var e=o(t),r="[object Object]"==e?t.constructor:void 0,n=r?a(r):"";if(n)switch(n){case d:return f;case v:return u;case _:return s;case p:return l;case y:return c}return e}),hi=h}function zi(){if(gi)return bi;gi=1;var t=Pn(),e=En(),r=In(),n=function(){if(si)return ui;si=1;var t=Vi(),e=Object.prototype.hasOwnProperty;return ui=function(r,n,i,o,a,u){var s=1&i,l=t(r),c=l.length;if(c!=t(n).length&&!s)return!1;for(var f=c;f--;){var d=l[f];if(!(s?d in n:e.call(n,d)))return!1}var v=u.get(r),_=u.get(n);if(v&&_)return v==n&&_==r;var p=!0;u.set(r,n),u.set(n,r);for(var y=s;++f<c;){var h=r[d=l[f]],m=n[d];if(o)var b=s?o(m,h,d,n,r,u):o(h,m,d,r,n,u);if(!(void 0===b?h===m||a(h,m,i,o,u):b)){p=!1;break}y||(y="constructor"==d)}if(p&&!y){var g=r.constructor,j=n.constructor;g==j||!("constructor"in r)||!("constructor"in n)||"function"==typeof g&&g instanceof g&&"function"==typeof j&&j instanceof j||(p=!1)}return u.delete(r),u.delete(n),p},ui}(),i=Di(),o=kr(),a=Jn(),u=Pi(),s="[object Arguments]",l="[object Array]",c="[object Object]",f=Object.prototype.hasOwnProperty;return bi=function(d,v,_,p,y,h){var m=o(d),b=o(v),g=m?l:i(d),j=b?l:i(v),w=(g=g==s?c:g)==c,x=(j=j==s?c:j)==c,S=g==j;if(S&&a(d)){if(!a(v))return!1;m=!0,w=!1}if(S&&!w)return h||(h=new t),m||u(d)?e(d,v,_,p,y,h):r(d,v,g,_,p,y,h);if(!(1&_)){var O=w&&f.call(d,"__wrapped__"),M=x&&f.call(v,"__wrapped__");if(O||M){var P=O?d.value():d,E=M?v.value():v;return h||(h=new t),y(P,E,_,p,h)}}return!!S&&(h||(h=new t),n(d,v,_,p,y,h))}}var Ci,Zi,Ti=g(function(){if(Si)return xi;Si=1;var t=function(){if(wi)return ji;wi=1;var t=zi(),e=Ar();return ji=function r(n,i,o,a,u){return n===i||(null==n||null==i||!e(n)&&!e(i)?n!=n&&i!=i:t(n,i,o,a,r,u))},ji}();return xi=function(e,r){return t(e,r)}}());var Ri,Hi,Li,Ji,qi,Bi,Ui,Qi,$i,Gi,Wi,Ki,Yi,Xi,to,eo,ro,no,io=function(){if(Zi)return Ci;Zi=1;var t=Ii(),e=Di(),r=Vr(),n=kr(),i=Lr(),o=Jn(),a=Fi(),u=Pi(),s=Object.prototype.hasOwnProperty;return Ci=function(l){if(null==l)return!0;if(i(l)&&(n(l)||"string"==typeof l||"function"==typeof l.splice||o(l)||u(l)||r(l)))return!l.length;var c=e(l);if("[object Map]"==c||"[object Set]"==c)return!l.size;if(a(l))return!t(l).length;for(var f in l)if(s.call(l,f))return!1;return!0}}(),oo=g(io);function ao(){if(Ji)return Li;Ji=1;var t=Zr();return Li=function(e,r,n){"__proto__"==r&&t?t(e,r,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[r]=n}}function uo(){if(Bi)return qi;Bi=1;var t=ao(),e=mr(),r=Object.prototype.hasOwnProperty;return qi=function(n,i,o){var a=n[i];r.call(n,i)&&e(a,o)&&(void 0!==o||i in n)||t(n,i,o)}}function so(){if(Qi)return Ui;Qi=1;var t=uo(),e=ao();return Ui=function(r,n,i,o){var a=!i;i||(i={});for(var u=-1,s=n.length;++u<s;){var l=n[u],c=o?o(i[l],r[l],l,i,r):void 0;void 0===c&&(c=r[l]),a?e(i,l,c):t(i,l,c)}return i},Ui}function lo(){if(Xi)return Yi;Xi=1;var t=fr(),e=Fi(),r=Ki?Wi:(Ki=1,Wi=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}),n=Object.prototype.hasOwnProperty;return Yi=function(i){if(!t(i))return r(i);var o=e(i),a=[];for(var u in i)("constructor"!=u||!o&&n.call(i,u))&&a.push(u);return a}}function co(){if(eo)return to;eo=1;var t=Ei(),e=lo(),r=Lr();return to=function(n){return r(n)?t(n,!0):e(n)}}var fo,vo,_o,po,yo,ho,mo,bo,go,jo,wo,xo,So,Oo,Mo,Po,Eo,Fo,No,Io,Ao,Vo,ko,Do,zo,Co,Zo,To,Ro,Ho,Lo,Jo,qo,Bo,Uo,Qo,$o,Go,Wo,Ko,Yo,Xo,ta,ea,ra,na,ia,oa,aa,ua,sa,la,ca,fa,da,va,_a,pa,ya,ha,ma,ba,ga,ja,wa,xa,Sa,Oa,Ma,Pa,Ea,Fa,Na,Ia,Aa,Va,ka,Da={exports:{}};function za(){if(mo)return ho;mo=1;var t=Ni()(Object.getPrototypeOf,Object);return ho=t}function Ca(){if(go)return bo;go=1;var t=Ir(),e=za(),r=kn(),n=Vn(),i=Object.getOwnPropertySymbols;return bo=i?function(n){for(var i=[];n;)t(i,r(n)),n=e(n);return i}:n}function Za(){if(So)return xo;So=1;var t=An(),e=Ca(),r=co();return xo=function(n){return t(n,r,e)}}function Ta(){if(Eo)return Po;Eo=1;var t=Fn();return Po=function(e){var r=new e.constructor(e.byteLength);return new t(r).set(new t(e)),r}}function Ra(){if(Zo)return Co;Zo=1;var t=Ta(),e=function(){if(No)return Fo;No=1;var t=Ta();return Fo=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}}(),r=function(){if(Ao)return Io;Ao=1;var t=/\w*$/;return Io=function(e){var r=new e.constructor(e.source,t.exec(e));return r.lastIndex=e.lastIndex,r}}(),n=function(){if(ko)return Vo;ko=1;var t=lr(),e=t?t.prototype:void 0,r=e?e.valueOf:void 0;return Vo=function(t){return r?Object(r.call(t)):{}}}(),i=function(){if(zo)return Do;zo=1;var t=Ta();return Do=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}}();return Co=function(o,a,u){var s=o.constructor;switch(a){case"[object ArrayBuffer]":return t(o);case"[object Boolean]":case"[object Date]":return new s(+o);case"[object DataView]":return e(o,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return i(o,u);case"[object Map]":case"[object Set]":return new s;case"[object Number]":case"[object String]":return new s(o);case"[object RegExp]":return r(o);case"[object Symbol]":return n(o)}}}function Ha(){if(Lo)return Ho;Lo=1;var t=function(){if(Ro)return To;Ro=1;var t=fr(),e=Object.create,r=function(){function r(){}return function(n){if(!t(n))return{};if(e)return e(n);r.prototype=n;var i=new r;return r.prototype=void 0,i}}();return To=r}(),e=za(),r=Fi();return Ho=function(n){return"function"!=typeof n.constructor||r(n)?{}:t(e(n))}}function La(){if(Uo)return Bo;Uo=1;var t=function(){if(qo)return Jo;qo=1;var t=Di(),e=Ar();return Jo=function(r){return e(r)&&"[object Map]"==t(r)}}(),e=Fr(),r=Mi(),n=r&&r.isMap,i=n?e(n):t;return Bo=i}function Ja(){if(Wo)return Go;Wo=1;var t=function(){if($o)return Qo;$o=1;var t=Di(),e=Ar();return Qo=function(r){return e(r)&&"[object Set]"==t(r)}}(),e=Fr(),r=Mi(),n=r&&r.isSet,i=n?e(n):t;return Go=i}function qa(){if(Yo)return Ko;Yo=1;var t=Pn(),e=(Hi||(Hi=1,Ri=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}),Ri),r=uo(),n=function(){if(Gi)return $i;Gi=1;var t=so(),e=Ai();return $i=function(r,n){return r&&t(n,e(n),r)}}(),i=function(){if(no)return ro;no=1;var t=so(),e=co();return ro=function(r,n){return r&&t(n,e(n),r)}}(),o=(fo||(fo=1,function(t,e){var r=sr(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n?r.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=a?a(r):new t.constructor(r);return t.copy(n),n}}(Da,Da.exports)),Da.exports),a=(_o||(_o=1,vo=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}),vo),u=function(){if(yo)return po;yo=1;var t=so(),e=kn();return po=function(r,n){return t(r,e(r),n)}}(),s=function(){if(wo)return jo;wo=1;var t=so(),e=Ca();return jo=function(r,n){return t(r,e(r),n)}}(),l=Vi(),c=Za(),f=Di(),d=function(){if(Mo)return Oo;Mo=1;var t=Object.prototype.hasOwnProperty;return Oo=function(e){var r=e.length,n=new e.constructor(r);return r&&"string"==typeof e[0]&&t.call(e,"index")&&(n.index=e.index,n.input=e.input),n}}(),v=Ra(),_=Ha(),p=kr(),y=Jn(),h=La(),m=fr(),b=Ja(),g=Ai(),j=co(),w="[object Arguments]",x="[object Function]",S="[object Object]",O={};return O[w]=O["[object Array]"]=O["[object ArrayBuffer]"]=O["[object DataView]"]=O["[object Boolean]"]=O["[object Date]"]=O["[object Float32Array]"]=O["[object Float64Array]"]=O["[object Int8Array]"]=O["[object Int16Array]"]=O["[object Int32Array]"]=O["[object Map]"]=O["[object Number]"]=O[S]=O["[object RegExp]"]=O["[object Set]"]=O["[object String]"]=O["[object Symbol]"]=O["[object Uint8Array]"]=O["[object Uint8ClampedArray]"]=O["[object Uint16Array]"]=O["[object Uint32Array]"]=!0,O["[object Error]"]=O[x]=O["[object WeakMap]"]=!1,Ko=function M(P,E,F,N,I,A){var V,k=1&E,D=2&E,z=4&E;if(F&&(V=I?F(P,N,I,A):F(P)),void 0!==V)return V;if(!m(P))return P;var C=p(P);if(C){if(V=d(P),!k)return a(P,V)}else{var Z=f(P),T=Z==x||"[object GeneratorFunction]"==Z;if(y(P))return o(P,k);if(Z==S||Z==w||T&&!I){if(V=D||T?{}:_(P),!k)return D?s(P,i(V,P)):u(P,n(V,P))}else{if(!O[Z])return I?P:{};V=v(P,Z,k)}}A||(A=new t);var R=A.get(P);if(R)return R;A.set(P,V),b(P)?P.forEach(function(t){V.add(M(t,E,F,t,P,A))}):h(P)&&P.forEach(function(t,e){V.set(e,M(t,E,F,e,P,A))});var H=C?void 0:(z?D?c:l:D?j:g)(P);return e(H||P,function(t,e){H&&(t=P[e=t]),r(V,e,M(t,E,F,e,P,A))}),V},Ko}function Ba(){if(ta)return Xo;ta=1;var t=cr(),e=Ar();return Xo=function(r){return"symbol"==typeof r||e(r)&&"[object Symbol]"==t(r)}}function Ua(){if(ia)return na;ia=1;var t=xr();function e(r,n){if("function"!=typeof r||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var i=function(){var t=arguments,e=n?n.apply(this,t):t[0],o=i.cache;if(o.has(e))return o.get(e);var a=r.apply(this,t);return i.cache=o.set(e,a)||o,a};return i.cache=new(e.Cache||t),i}return e.Cache=t,na=e}function Qa(){if(sa)return ua;sa=1;var t=function(){if(aa)return oa;aa=1;var t=Ua();return oa=function(e){var r=t(e,function(t){return 500===n.size&&n.clear(),t}),n=r.cache;return r}}(),e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=t(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(e,function(t,e,i,o){n.push(i?o.replace(r,"$1"):e||t)}),n});return ua=n}function $a(){if(da)return fa;da=1;var t=function(){if(ca)return la;ca=1;var t=lr(),e=Er(),r=kr(),n=Ba(),i=t?t.prototype:void 0,o=i?i.toString:void 0;return la=function t(i){if("string"==typeof i)return i;if(r(i))return e(i,t)+"";if(n(i))return o?o.call(i):"";var a=i+"";return"0"==a&&1/i==-1/0?"-0":a},la}();return fa=function(e){return null==e?"":t(e)}}function Ga(){if(_a)return va;_a=1;var t=kr(),e=function(){if(ra)return ea;ra=1;var t=kr(),e=Ba(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;return ea=function(i,o){if(t(i))return!1;var a=typeof i;return!("number"!=a&&"symbol"!=a&&"boolean"!=a&&null!=i&&!e(i))||n.test(i)||!r.test(i)||null!=o&&i in Object(o)}}(),r=Qa(),n=$a();return va=function(i,o){return t(i)?i:e(i,o)?[i]:r(n(i))}}function Wa(){if(ya)return pa;ya=1;var t=Ba();return pa=function(e){if("string"==typeof e||t(e))return e;var r=e+"";return"0"==r&&1/e==-1/0?"-0":r}}function Ka(){if(wa)return ja;wa=1;var t=function(){if(ma)return ha;ma=1;var t=Ga(),e=Wa();return ha=function(r,n){for(var i=0,o=(n=t(n,r)).length;null!=r&&i<o;)r=r[e(n[i++])];return i&&i==o?r:void 0},ha}(),e=(ga||(ga=1,ba=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}),ba);return ja=function(r,n){return n.length<2?r:t(r,e(n,0,-1))}}function Ya(){if(Ea)return Pa;Ea=1;var t=function(){if(Ma)return Oa;Ma=1;var t=cr(),e=za(),r=Ar(),n=Function.prototype,i=Object.prototype,o=n.toString,a=i.hasOwnProperty,u=o.call(Object);return Oa=function(n){if(!r(n)||"[object Object]"!=t(n))return!1;var i=e(n);if(null===i)return!0;var s=a.call(i,"constructor")&&i.constructor;return"function"==typeof s&&s instanceof s&&o.call(s)==u}}();return Pa=function(e){return t(e)?void 0:e}}function Xa(){if(Aa)return Ia;Aa=1;var t=function(){if(Na)return Fa;Na=1;var t=Dr();return Fa=function(e){return null!=e&&e.length?t(e,1):[]}}(),e=Cr(),r=Rr();return Ia=function(n){return r(e(n,void 0,t),n+"")}}var tu,eu,ru,nu,iu,ou,au,uu,su=function(){if(ka)return Va;ka=1;var t=Er(),e=qa(),r=function(){if(Sa)return xa;Sa=1;var t=Ga(),e=Jr(),r=Ka(),n=Wa(),i=Object.prototype.hasOwnProperty;return xa=function(o,a){var u=-1,s=(a=t(a,o)).length;if(!s)return!0;for(;++u<s;){var l=n(a[u]);if("__proto__"===l&&!i.call(o,"__proto__"))return!1;if(("constructor"===l||"prototype"===l)&&u<s-1)return!1}var c=r(o,a);return null==c||delete c[n(e(a))]},xa}(),n=Ga(),i=so(),o=Ya(),a=Xa(),u=Za(),s=a(function(a,s){var l={};if(null==a)return l;var c=!1;s=t(s,function(t){return t=n(t,a),c||(c=t.length>1),t}),i(a,u(a),l),c&&(l=e(l,7,o));for(var f=s.length;f--;)r(l,s[f]);return l});return Va=s}(),lu=g(su);function cu(){if(nu)return ru;nu=1;var t=ki(),e=eu?tu:(eu=1,tu=function(){}),r=Nn(),n=t&&1/r(new t([,-0]))[1]==1/0?function(e){return new t(e)}:e;return ru=n}!function(){if(uu)return au;uu=1;var t=function(){if(ou)return iu;ou=1;var t=Sr(),e=Mr(),r=Pr(),n=Nr(),i=cu(),o=Nn();return iu=function(a,u,s){var l=-1,c=e,f=a.length,d=!0,v=[],_=v;if(s)d=!1,c=r;else if(f>=200){var p=u?null:i(a);if(p)return o(p);d=!1,c=n,_=new t}else _=u?[]:v;t:for(;++l<f;){var y=a[l],h=u?u(y):y;if(y=s||0!==y?y:0,d&&h==h){for(var m=_.length;m--;)if(_[m]===h)continue t;u&&_.push(h),v.push(y)}else c(_,h,s)||(_!==v&&_.push(h),v.push(y))}return v},iu}();au=function(e,r){return r="function"==typeof r?r:void 0,e&&e.length?t(e,void 0,r):[]}}();var fu,du,vu=g(Ua());var _u,pu,yu=g(function(){if(du)return fu;du=1;var t=$a(),e=/[\\^$.*+?()[\]{}|]/g,r=RegExp(e.source);return fu=function(n){return(n=t(n))&&r.test(n)?n.replace(e,"\\$&"):n}}());var hu=g(function(){if(pu)return _u;pu=1;var t=qa();return _u=function(e){return t(e,5)}}());const mu=t=>t.localadmin||t.localadmin||t.address&&t.address.lastIndexOf(",")<t.address.length-2&&t.address.substring(t.address.lastIndexOf(",")+2)||"",bu=({id:t,code:e})=>e||(void 0!==t&&void 0!==t.indexOf&&-1!==t.indexOf("#")?t.substring(t.indexOf("#")+1):void 0),gu=(t,e)=>[t||e&&e.split(",")[0],"string"==typeof e?e.replace(new RegExp(`${yu(t)}([ ,]|$)+`),""):""];function ju(t,e){void 0===e&&(e={});var r=e.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===r&&n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i),i.styleSheet?i.styleSheet.cssText=t:i.appendChild(document.createTextNode(t))}}vu((t,e=!1)=>{switch(t.layer){case"currentPosition":return[t.labelId,t.address];case"selectFromMap":case"ownLocations":case"back":return[t.labelId];case"favouritePlace":return gu(t.name,t.address);case"favouriteVehicleRentalStation":case"bikestation":return[t.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!e&&t.shortName?[t.gtfsId,t.mode.toLowerCase(),t.longName]:[t.shortName,t.longName,t.agency?t.agency.name:void 0];case"venue":case"address":case"street":return[t.name,t.label.replace(new RegExp(`${yu(t.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return e?[t.name||t.label||t.address&&t.address.split(",")[0],mu(t)]:[t.name,t.id,bu(t),mu(t)];default:return[t.name||t.label||t.address&&t.address.split(",")[0],mu(t)]}},(t,e)=>{const r=hu(t);return r.plain=e,r});var wu="modal-content_favourite-edit-modal-content-container__dGK6D",xu="modal-content_favourite-edit-modal-content-top__Luuv-",Su="modal-content_favourite-edit-modal-content-header__2oSv9";ju(".modal-content_favourite-edit-modal-content-container__dGK6D {\n display: flex;\n flex-direction: column;\n}\n.modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px;\n}\n@media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- {\n border-bottom: none;\n margin-bottom: 0;\n }\n}\n.modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px;\n}\n@media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__dGK6D .modal-content_favourite-edit-modal-content-top__Luuv- .modal-content_favourite-edit-modal-content-header__2oSv9 {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33;\n }\n}");const Ou=({headerText:t,renderList:e})=>d.default.createElement("div",{className:wu},d.default.createElement("div",{className:xu},d.default.createElement("div",{className:Su},t)),e());"production"!==process.env.NODE_ENV&&(Ou.propTypes={headerText:f.default.string.isRequired,renderList:f.default.func.isRequired});var Mu={"favourite-edit-list-container":"styles_favourite-edit-list-container__SM5ZN","favourite-edit-list":"styles_favourite-edit-list__VJIsM","favourite-edit-list-item":"styles_favourite-edit-list-item__VHc3F","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__iPstx","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__Of1nE","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__puT4i","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__ChHu0","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__QN7uQ",place:"styles_place__bY4jg",home:"styles_home__P1rvA",school:"styles_school__exJZw",sport:"styles_sport__rEyiE",shopping:"styles_shopping__hGZRe",work:"styles_work__PM6aB","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__qcbys","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__8HtQs","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__VxW9P","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__5dGkh","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__D-KxF","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__Ifpcz"};ju(".styles_favourite-edit-list-container__SM5ZN {\n display: flex;\n position: relative;\n width: 100%;\n}\n@media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__SM5ZN {\n min-height: 286px;\n }\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F:not(:first-child) {\n margin-top: 9px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #ddd;\n list-style: none;\n box-sizing: border-box;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-arrow-hidden__Of1nE:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 {\n height: 20px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-drag__puT4i .styles_favourite-edit-list-item-ellipsis__ChHu0 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg);\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_place__bY4jg svg {\n fill: var(--color);\n width: 24px;\n height: 24px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_home__P1rvA svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_school__exJZw svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_sport__rEyiE svg, .styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_shopping__hGZRe svg {\n fill: var(--color);\n width: 18px;\n height: 18px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-left__iPstx .styles_favourite-edit-list-item-icon__QN7uQ.styles_work__PM6aB svg {\n fill: var(--color);\n width: 20px;\n height: 20px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px);\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-name__8HtQs {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-content__qcbys .styles_favourite-edit-list-item-address__VxW9P:empty {\n margin-top: 0;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-edit__D-KxF svg {\n fill: #888;\n width: 22px;\n height: 22px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px;\n}\n.styles_favourite-edit-list-container__SM5ZN .styles_favourite-edit-list__VJIsM .styles_favourite-edit-list-item__VHc3F .styles_favourite-edit-list-item-right__5dGkh .styles_favourite-edit-list-item-remove__Ifpcz svg {\n fill: #888;\n width: 18px;\n height: 20px;\n}\n.styles_favourite-edit-list-container__SM5ZN > div {\n width: 100%;\n}");const Pu=l.createInstance({fallbackLng:"fi",resources:{de:{translation:{cancel:"Abbrechen",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"}},en:{translation:{cancel:"Cancel",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}","edit-places":"Edit places","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Select the place's icon","close-modal":"Close the modal","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up",down:"Move favourite down"}},fi:{translation:{cancel:"Peruuta",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}","edit-places":"Muokkaa paikkoja","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-modal-on-open":"Suosikkien muokkaus modaali.","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin",down:"Siirrä suosikkisijaintia alaspäin"}},pl:{translation:{cancel:"Anuluj",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-modal-on-open":"Modal edycji ulubionych.","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej",down:"Przenieś ulubione niżej"}},sv:{translation:{cancel:"Avbryt",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}","edit-places":"Redigera platser","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt",down:"Flytta favoriten nedåt"}}},defaultNS:"translation",react:{useSuspense:!0}});function Eu(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}Pu.init();const Fu=t=>{const e=t&&(t.key||t.which||t.keyCode)||"";return!(!e||![13," ","Spacebar"].concat([32,"Enter"]).includes(e))&&(t.preventDefault(),!0)};class Nu extends d.default.Component{constructor(t){super(t),b(this,"translate",(t,e)=>this.props.t(t,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Eu(Object(r),!0).forEach(function(e){b(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Eu(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}({lng:this.props.lang},e))),b(this,"moveFavourite",(t,e)=>{const{favourites:r}=this.state,n=[...r],i=n[t+e];n[t+e]=n[t],n[t]=i,this.setState({favourites:n})}),b(this,"renderFavouriteListItem",(t,e)=>{let r="place";if(t.selectedIconId){const e=t.selectedIconId.indexOf("icon_");e>0&&(r=t.selectedIconId.substring(e+5))}const[n,i]=gu(t.name,t.address);return d.default.createElement("li",{className:ar(Mu["favourite-edit-list-item"]),key:t.favouriteId},d.default.createElement("div",{className:Mu["favourite-edit-list-item-left"]},e>0&&d.default.createElement("button",{className:Mu["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("up"),onClick:()=>{this.moveFavourite(e,-1)}},"↑"),e<this.state.favourites.length-1&&d.default.createElement("button",{className:Mu["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("down"),onClick:()=>{this.moveFavourite(e,1)}},"↓"),d.default.createElement("div",{className:Mu["favourite-edit-list-item-drag"]},d.default.createElement("div",{className:Mu["favourite-edit-list-item-ellipsis"]},d.default.createElement(p.default,{img:"ellipsis"}))),d.default.createElement("div",{className:ar(Mu["favourite-edit-list-item-icon"],Mu[r])},d.default.createElement(p.default,{img:r,color:this.props.colors.primary}))),d.default.createElement("div",{className:Mu["favourite-edit-list-item-content"]},d.default.createElement("p",{className:Mu["favourite-edit-list-item-name"]},n),d.default.createElement("p",{className:Mu["favourite-edit-list-item-address"]},i)),d.default.createElement("div",{className:Mu["favourite-edit-list-item-right"]},d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("edit-place-name",{favourite:t}),className:Mu["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(t),onKeyDown:e=>{Fu(e)&&this.props.onEditSelected(t)}},d.default.createElement(p.default,{img:"edit"})),d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("delete-place-name",{favourite:t}),className:Mu["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:t,showDeletePlaceModal:!0}),onKeyDown:e=>{Fu(e)&&this.setState({selectedFavourite:t,showDeletePlaceModal:!0})}},d.default.createElement(p.default,{img:"trash"}))))}),b(this,"renderFavouriteList",()=>{const{isLoading:t}=this.props,{favourites:e}=this.state;return d.default.createElement("div",{className:Mu["favourite-edit-list-container"]},d.default.createElement(v.default,{visible:t},d.default.createElement(i.ReactSortable,{className:Mu["favourite-edit-list"],tag:"ul",list:e,setList:t=>this.setState({favourites:t}),animation:200,handle:`.${Mu["favourite-edit-list-item-left"]}`},e.map((t,e)=>this.renderFavouriteListItem(t,e)))))}),b(this,"renderDeleteFavouriteModal",t=>d.default.createElement(y.default,{headerText:this.translate("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},()=>this.props.handleClose()),isModalOpen:this.state.showDeletePlaceModal,dialogContent:t?`${t.name}: ${t.address}`:"",primaryButtonText:this.translate("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(t),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:this.translate("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),lang:this.props.lang})),b(this,"closeModal",()=>{this.props.handleClose();const t=this.state.favourites.map(t=>lu(t,["chosen","selected"]));Ti(t,this.props.favourites)||this.props.updateFavourites(t)}),b(this,"renderModalContent",()=>{const{fontWeights:t}=this.props,{primary:e,hover:r}=this.props.colors,n={headerText:this.translate("edit-places"),renderList:this.renderFavouriteList},i={"--color":e,"--hover-color":r,"--font-weight-medium":t.medium};return d.default.createElement("div",{style:i},d.default.createElement(Ou,n))}),this.state={favourites:t.favourites,showDeletePlaceModal:!1,selectedFavourite:null}}static getDerivedStateFromProps(t,e){const r=t.favourites,n=e.favourites;return oo(Mn(r,n,Ti))&&oo(Mn(n,r,Ti))?null:(oo(r)&&t.handleClose(),{favourites:r})}render(){const{isMobile:t}=this.props,{showDeletePlaceModal:e,selectedFavourite:r}=this.state;return d.default.createElement(_.default,{appElement:this.props.appElement,contentLabel:this.translate("edit-modal-on-open"),closeButtonLabel:this.translate("close-modal"),variant:t?"large":"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!e&&this.renderModalContent())}}b(Nu,"defaultProps",{lang:"fi",isMobile:!1,colors:u.defaultColors,fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(Nu.propTypes={handleClose:f.default.func.isRequired,updateFavourites:f.default.func.isRequired,deleteFavourite:f.default.func.isRequired,onEditSelected:f.default.func.isRequired,favourites:f.default.arrayOf(f.default.shape({type:f.default.string,address:f.default.string,gtfsId:f.default.string,gid:f.default.string,lat:f.default.number,lon:f.default.number,name:f.default.string,selectedIconId:f.default.string,favouriteId:f.default.string,layer:f.default.string})).isRequired,lang:f.default.string,t:f.default.func.isRequired,appElement:f.default.string.isRequired,isModalOpen:f.default.bool.isRequired,isMobile:f.default.bool,isLoading:f.default.bool.isRequired,colors:f.default.objectOf(f.default.string),fontWeights:f.default.shape({medium:f.default.number})});const Iu=n.withTranslation()(Nu);t.default=t=>d.default.createElement(n.I18nextProvider,{i18n:Pu},d.default.createElement(Iu,t)),Object.defineProperty(t,"__esModule",{value:!0})});
7
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmluZEluZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFcXVhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbkluLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21PbWl0Q2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbnNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pcVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jbG9uZURlZXAuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vZGFsQ29udGVudC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmFOO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICpcbiAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICovXG52YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlV2l0aDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9XG4gIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZURpZmZlcmVuY2U7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJBcnJheTtcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2xpY2U7XG4iLCJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG4iLCJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgLy8gUHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0EteHhqci1tbWp2LTRncGdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLWYyM20tcjNwZi00MnJoXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcblxuICAgIC8vIEFsd2F5cyBibG9jayBcIl9fcHJvdG9fX1wiIGFueXdoZXJlIGluIHRoZSBwYXRoIGlmIGl0J3Mgbm90IGV4cGVjdGVkXG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX19wcm90b19fJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBCbG9jayBjb25zdHJ1Y3Rvci9wcm90b3R5cGUgYXMgbm9uLXRlcm1pbmFsIHRyYXZlcnNhbCBrZXlzIHRvIHByZXZlbnRcbiAgICAvLyBlc2NhcGluZyB0aGUgb2JqZWN0IGdyYXBoIGludG8gYnVpbHQtaW4gY29uc3RydWN0b3JzIGFuZCBwcm90b3R5cGVzLlxuICAgIGlmICgoa2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpICYmIGluZGV4IDwgbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvYmogPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iaiA9PSBudWxsIHx8IGRlbGV0ZSBvYmpbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLCJ2YXIgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAqXG4gKiBfLnVuaXFXaXRoKG9iamVjdHMsIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dXG4gKi9cbmZ1bmN0aW9uIHVuaXFXaXRoKGFycmF5LCBjb21wYXJhdG9yKSB7XG4gIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIHVuZGVmaW5lZCwgY29tcGFyYXRvcikgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmlxV2l0aDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpLFxuICAgIGNyZWF0ZVNldCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVNldCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAqIFwiP1wiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBhbmQgXCJ8XCIgaW4gYHN0cmluZ2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVSZWdFeHA7XG4iLCJ2YXIgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAqIEBzZWUgXy5jbG9uZVxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICogY29uc29sZS5sb2coZGVlcFswXSA9PT0gb2JqZWN0c1swXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURlZXA7XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9tb2RhbC1jb250ZW50LnNjc3MnO1xuXG5jb25zdCBNb2RhbENvbnRlbnQgPSAoeyBoZWFkZXJUZXh0LCByZW5kZXJMaXN0IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWNvbnRhaW5lciddfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LW1vZGFsLWNvbnRlbnQtdG9wJ119PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWhlYWRlciddfT5cbiAgICAgICAgICB7aGVhZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtyZW5kZXJMaXN0KCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Nb2RhbENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBoZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlbmRlckxpc3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbENvbnRlbnQ7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdXb2xsZW4gU2llIGRlbiBGYXZvcml0ZW4gbMO2c2NoZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdMw7ZzY2hlIEZhdm9yaXQ6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnQmVhcmJlaXRlIEZhdm9yaXRlbicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0JlYXJiZWl0ZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdGYXZvcml0ZW4gYmVhcmJlaXRlbi4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1fDpGhsZSBkYXMgU3ltYm9sIGbDvHIgZGllc2VuIE9ydCcsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnU2NobGllw59lIGRlbiBEaWFsb2cnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ1fDpGhsZW4gU2llIGVpbmVuIE5hbWUgZsO8ciBkaWVzZW4gT3J0IChvcHRpb25hbCknLFxuICAgICAgc2F2ZTogJ1NwZWljaGVybicsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdGYXZvcml0IHNwZWljaGVybicsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHBsYWNlPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnRGVsZXRlIHBsYWNlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0VkaXQgcGxhY2VzJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWRpdCBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnRmF2b3VyaXRlIGVkaXRpbmcgbW9kYWwuJyxcbiAgICAgICdjaG9vc2UtaWNvbic6IFwiU2VsZWN0IHRoZSBwbGFjZSdzIGljb25cIixcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdDbG9zZSB0aGUgbW9kYWwnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0dpdmUgdGhlIG5hbWUgYSBwbGFjZSAob3B0aW9uYWwpJyxcbiAgICAgIHNhdmU6ICdTYXZlJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1NhdmUgcGxhY2UnLFxuICAgICAgdXA6ICdNb3ZlIGZhdm91cml0ZSB1cCcsXG4gICAgICBkb3duOiAnTW92ZSBmYXZvdXJpdGUgZG93bicsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnSGFsdWF0a28gcG9pc3RhYSBwYWlrYW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdQb2lzdGEgcGFpa2thOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdNdW9ra2FhIHBhaWtrYWE6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ1N1b3Npa2tpZW4gbXVva2thdXMgbW9kYWFsaS4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1ZhbGl0c2UgcGFpa2FuIGt1dmFrZScsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnU3VsamUgbW9kYWFsaScsXG4gICAgICAnaW5wdXQtcGxhY2Vob2xkZXInOiAnQW5uYSBwYWlrYWxsZSBuaW1pICh2YXBhYWVodG9pbmVuKScsXG4gICAgICBzYXZlOiAnVGFsbGVubmEnLFxuICAgICAgJ3NhdmUtcGxhY2UnOiAnVGFsbGVubmEgcGFpa2thJyxcbiAgICAgIHVwOiAnU2lpcnLDpCBzdW9zaWtraXNpamFpbnRpYSB5bMO2cMOkaW4nLFxuICAgICAgZG93bjogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgYWxhc3DDpGluJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnQ3p5IG5hIHBld25vIGNoY2VzeiB1c3VuxIXEhyB0byBtaWVqc2NlPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVXN1xYQgbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdFZHl0dWogbWllanNjYScsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkeXR1aiBtaWVqc2NlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdNb2RhbCBlZHljamkgdWx1YmlvbnljaC4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1d5YmllcnogaWtvbsSZIG1pZWpzY2EnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1phbWtuaWogbW9kYWwnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ05hZGFqIG5henfEmSBtaWVqc2N1IChvcGNqb25hbG5lKScsXG4gICAgICBzYXZlOiAnWmFwaXN6JyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1phcGlzeiBtaWVqc2NlJyxcbiAgICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgICBkb3duOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIG5pxbxlaicsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnVmlsbCBkdSB0YSBib3J0IHBsYXRzZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdUYSBib3J0IHBsYXRzZW46IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnUmVkaWdlcmEgcGxhdHNlcicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgICAnY2hvb3NlLWljb24nOiAnVsOkbGogcGxhdHNlbnMgaWtvbicsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnU3TDpG5nIG1vZGFsZW4nLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0FuZ2UgcGxhdHNlbnMgbmFtbiAoZnJpdmlsbGlndCknLFxuICAgICAgc2F2ZTogJ1NwYXJhJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1NwYXJhIHBsYXRzJyxcbiAgICAgIHVwOiAnRmx5dHRhIGZhdm9yaXRlbiB1cHDDpXQnLFxuICAgICAgZG93bjogJ0ZseXR0YSBmYXZvcml0ZW4gbmVkw6V0JyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnMnO1xuXG5jb25zdCBpMThuID0gY3JlYXRlSW5zdGFuY2Uoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgLy8gZGVidWc6IHRydWUsXG4gIHJlc291cmNlczogdHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIHJlYWN0OiB7XG4gICAgdXNlU3VzcGVuc2U6IHRydWUsXG4gIH0sXG59KTtcblxuaTE4bi5pbml0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG47XG4iLCIvKiBlc2xpbnQgcmVhY3QvZm9yYmlkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSTE4bmV4dFByb3ZpZGVyLCB3aXRoVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFJlYWN0U29ydGFibGUgfSBmcm9tICdyZWFjdC1zb3J0YWJsZWpzJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBkaWZmZXJlbmNlV2l0aCBmcm9tICdsb2Rhc2gvZGlmZmVyZW5jZVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IG9taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuaW1wb3J0IENvbnRhaW5lclNwaW5uZXIgZnJvbSAnQGhzbC1maS9jb250YWluZXItc3Bpbm5lcic7XG5pbXBvcnQgTW9kYWwgZnJvbSAnQGhzbC1maS9tb2RhbCc7XG5pbXBvcnQgSWNvbiwge1xuICBkZWZhdWx0Q29sb3JzLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IHsgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCBNb2RhbENvbnRlbnQgZnJvbSAnLi9oZWxwZXJzL01vZGFsQ29udGVudCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2hlbHBlcnMvaTE4bic7XG5cbmNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jbGFzcyBGYXZvdXJpdGVFZGl0aW5nTW9kYWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC8qKiBSZXF1aXJlZC4gQ2xvc2UgbW9kYWwuXG4gICAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICAgIGhhbmRsZUNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgdXBkYXRlRmF2b3VyaXRlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKiogUmVxdWlyZWQuXG4gICAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICAgIGRlbGV0ZUZhdm91cml0ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICAvKiogUmVxdWlyZWQuIEZ1bmN0aW9uIHRoYXQgdGFrZXMgc2VsZWN0ZWQgZmF2b3VyaXRlIG9iamVjdCBhcyBwYXJhbWV0ZXIuXG4gICAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICAgIG9uRWRpdFNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC5cbiAgICAgKiBAdHlwZSB7YXJyYXk8b2JqZWN0Pn1cbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGd0ZnNJZFxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBnaWRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gbGF0XG4gICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGxvblxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbGVjdGVkSWNvbklkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGZhdm91cml0ZUlkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyXG4gICAgICovXG4gICAgZmF2b3VyaXRlczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBndGZzSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGdpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgbGF0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIHNlbGVjdGVkSWNvbklkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBmYXZvdXJpdGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgbGF5ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB9KSxcbiAgICApLmlzUmVxdWlyZWQsXG4gICAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBpc01vZGFsT3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIC8qKiBPcHRpb25hbC4gKi9cbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIC8qKiBEZWZhdWx0IHZhbHVlIGlzIDUwMC4gKi9cbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGxhbmc6ICdmaScsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZmF2b3VyaXRlczogcHJvcHMuZmF2b3VyaXRlcyxcbiAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgY29uc3QgbmV4dEZhdm91cml0ZXMgPSBuZXh0UHJvcHMuZmF2b3VyaXRlcztcbiAgICBjb25zdCBwcmV2RmF2b3VyaXRlcyA9IHByZXZTdGF0ZS5mYXZvdXJpdGVzO1xuICAgIGlmIChcbiAgICAgICFpc0VtcHR5KGRpZmZlcmVuY2VXaXRoKG5leHRGYXZvdXJpdGVzLCBwcmV2RmF2b3VyaXRlcywgaXNFcXVhbCkpIHx8XG4gICAgICAhaXNFbXB0eShkaWZmZXJlbmNlV2l0aChwcmV2RmF2b3VyaXRlcywgbmV4dEZhdm91cml0ZXMsIGlzRXF1YWwpKVxuICAgICkge1xuICAgICAgaWYgKGlzRW1wdHkobmV4dEZhdm91cml0ZXMpKSB7XG4gICAgICAgIG5leHRQcm9wcy5oYW5kbGVDbG9zZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmF2b3VyaXRlczogbmV4dEZhdm91cml0ZXMsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyYW5zbGF0ZSA9IChpZCwgb3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnQoaWQsIHtcbiAgICAgIGxuZzogdGhpcy5wcm9wcy5sYW5nLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfTtcblxuICBtb3ZlRmF2b3VyaXRlID0gKGksIGRpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IHsgZmF2b3VyaXRlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAvLyBFZGl0IGNvcHkgb2YgdGhlIGZhdm91cml0ZXMgdG8gYXZvaWQgY2hhbmdpbmcgdGhlIHByb3BzLmZhdm91cml0ZXMgdXNlZCBmb3Igc3RhdGUgaW5pdGlhbGl6YXRpb25cbiAgICBjb25zdCBmYXZvdXJpdGVzQ29weSA9IFsuLi5mYXZvdXJpdGVzXTtcblxuICAgIGNvbnN0IHRtcCA9IGZhdm91cml0ZXNDb3B5W2kgKyBkaXJlY3Rpb25dO1xuICAgIGZhdm91cml0ZXNDb3B5W2kgKyBkaXJlY3Rpb25dID0gZmF2b3VyaXRlc0NvcHlbaV07XG4gICAgZmF2b3VyaXRlc0NvcHlbaV0gPSB0bXA7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgZmF2b3VyaXRlczogZmF2b3VyaXRlc0NvcHkgfSk7XG4gIH07XG5cbiAgcmVuZGVyRmF2b3VyaXRlTGlzdEl0ZW0gPSAoZmF2b3VyaXRlLCBpbmRleCkgPT4ge1xuICAgIGxldCBpY29uSWQgPSAncGxhY2UnO1xuICAgIGlmIChmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQpIHtcbiAgICAgIGNvbnN0IHByZWZpeFBvcyA9IGZhdm91cml0ZS5zZWxlY3RlZEljb25JZC5pbmRleE9mKCdpY29uXycpO1xuICAgICAgaWYgKHByZWZpeFBvcyA+IDApIHtcbiAgICAgICAgaWNvbklkID0gZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkLnN1YnN0cmluZyhwcmVmaXhQb3MgKyA1KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgW25hbWUsIGFkZHJlc3NdID0gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChcbiAgICAgIGZhdm91cml0ZS5uYW1lLFxuICAgICAgZmF2b3VyaXRlLmFkZHJlc3MsXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbSddKX1cbiAgICAgICAga2V5PXtmYXZvdXJpdGUuZmF2b3VyaXRlSWR9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1sZWZ0J119PlxuICAgICAgICAgIHtpbmRleCA+IDAgJiYgKFxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1hcnJvdy1oaWRkZW4nXX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3RoaXMudHJhbnNsYXRlKCd1cCcpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRmF2b3VyaXRlKGluZGV4LCAtMSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICZ1YXJyO1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aW5kZXggPCB0aGlzLnN0YXRlLmZhdm91cml0ZXMubGVuZ3RoIC0gMSAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWFycm93LWhpZGRlbiddfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy50cmFuc2xhdGUoJ2Rvd24nKX1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW92ZUZhdm91cml0ZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICZkYXJyO1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tZHJhZyddfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1lbGxpcHNpcyddfT5cbiAgICAgICAgICAgICAgPEljb24gaW1nPVwiZWxsaXBzaXNcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChcbiAgICAgICAgICAgICAgc3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0taWNvbiddLFxuICAgICAgICAgICAgICBzdHlsZXNbaWNvbklkXSxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPXtpY29uSWR9IGNvbG9yPXt0aGlzLnByb3BzLmNvbG9ycy5wcmltYXJ5fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWNvbnRlbnQnXX0+XG4gICAgICAgICAgPHAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1uYW1lJ119PntuYW1lfTwvcD5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWFkZHJlc3MnXX0+XG4gICAgICAgICAgICB7YWRkcmVzc31cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tcmlnaHQnXX0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy50cmFuc2xhdGUoJ2VkaXQtcGxhY2UtbmFtZScsIHtcbiAgICAgICAgICAgICAgZmF2b3VyaXRlLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVkaXQnXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMucHJvcHMub25FZGl0U2VsZWN0ZWQoZmF2b3VyaXRlKX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLm9uRWRpdFNlbGVjdGVkKGZhdm91cml0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwiZWRpdFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy50cmFuc2xhdGUoJ2RlbGV0ZS1wbGFjZS1uYW1lJywge1xuICAgICAgICAgICAgICBmYXZvdXJpdGUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tcmVtb3ZlJ119XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PlxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogZmF2b3VyaXRlLFxuICAgICAgICAgICAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiB0cnVlLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IGZhdm91cml0ZSxcbiAgICAgICAgICAgICAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGltZz1cInRyYXNoXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICk7XG4gIH07XG5cbiAgcmVuZGVyRmF2b3VyaXRlTGlzdCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGlzTG9hZGluZyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IGZhdm91cml0ZXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtY29udGFpbmVyJ119PlxuICAgICAgICA8Q29udGFpbmVyU3Bpbm5lciB2aXNpYmxlPXtpc0xvYWRpbmd9PlxuICAgICAgICAgIDxSZWFjdFNvcnRhYmxlXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdCddfVxuICAgICAgICAgICAgdGFnPVwidWxcIlxuICAgICAgICAgICAgbGlzdD17ZmF2b3VyaXRlc31cbiAgICAgICAgICAgIHNldExpc3Q9e2l0ZW1zID0+IHRoaXMuc2V0U3RhdGUoeyBmYXZvdXJpdGVzOiBpdGVtcyB9KX1cbiAgICAgICAgICAgIGFuaW1hdGlvbj17MjAwfVxuICAgICAgICAgICAgaGFuZGxlPXtgLiR7c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tbGVmdCddfWB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zhdm91cml0ZXMubWFwKChmYXZvdXJpdGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckZhdm91cml0ZUxpc3RJdGVtKGZhdm91cml0ZSwgaW5kZXgpO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9SZWFjdFNvcnRhYmxlPlxuICAgICAgICA8L0NvbnRhaW5lclNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsID0gZmF2b3VyaXRlID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGhlYWRlclRleHQ9e3RoaXMudHJhbnNsYXRlKCdkZWxldGUtcGxhY2UtaGVhZGVyJyl9XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7IHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLCBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UgfSxcbiAgICAgICAgICAgICgpID0+IHRoaXMucHJvcHMuaGFuZGxlQ2xvc2UoKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaXNNb2RhbE9wZW49e3RoaXMuc3RhdGUuc2hvd0RlbGV0ZVBsYWNlTW9kYWx9XG4gICAgICAgIGRpYWxvZ0NvbnRlbnQ9e1xuICAgICAgICAgIGZhdm91cml0ZSA/IGAke2Zhdm91cml0ZS5uYW1lfTogJHtmYXZvdXJpdGUuYWRkcmVzc31gIDogJydcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2RlbGV0ZScpfVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGVsZXRlRmF2b3VyaXRlKGZhdm91cml0ZSk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCxcbiAgICAgICAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2NhbmNlbCcpfVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZUNsb3NlKCk7XG4gICAgY29uc3Qgb21pdHRlZEZhdm91cml0ZXMgPSB0aGlzLnN0YXRlLmZhdm91cml0ZXMubWFwKGl0ZW0gPT5cbiAgICAgIG9taXQoaXRlbSwgWydjaG9zZW4nLCAnc2VsZWN0ZWQnXSksXG4gICAgKTtcbiAgICBpZiAoIWlzRXF1YWwob21pdHRlZEZhdm91cml0ZXMsIHRoaXMucHJvcHMuZmF2b3VyaXRlcykpIHtcbiAgICAgIHRoaXMucHJvcHMudXBkYXRlRmF2b3VyaXRlcyhvbWl0dGVkRmF2b3VyaXRlcyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlck1vZGFsQ29udGVudCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZvbnRXZWlnaHRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgcHJpbWFyeSwgaG92ZXIgfSA9IHRoaXMucHJvcHMuY29sb3JzO1xuICAgIGNvbnN0IG1vZGFsUHJvcHMgPSB7XG4gICAgICBoZWFkZXJUZXh0OiB0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZXMnKSxcbiAgICAgIHJlbmRlckxpc3Q6IHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdCxcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgJy0tY29sb3InOiBwcmltYXJ5LFxuICAgICAgJy0taG92ZXItY29sb3InOiBob3ZlcixcbiAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxNb2RhbENvbnRlbnQgey4uLm1vZGFsUHJvcHN9IC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGlzTW9iaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2hvd0RlbGV0ZVBsYWNlTW9kYWwsIHNlbGVjdGVkRmF2b3VyaXRlIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICBjb250ZW50TGFiZWw9e3RoaXMudHJhbnNsYXRlKCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgY2xvc2VCdXR0b25MYWJlbD17dGhpcy50cmFuc2xhdGUoJ2Nsb3NlLW1vZGFsJyl9XG4gICAgICAgIHZhcmlhbnQ9e2lzTW9iaWxlID8gJ2xhcmdlJyA6ICdzbWFsbCd9XG4gICAgICAgIGlzT3Blbj17dGhpcy5wcm9wcy5pc01vZGFsT3Blbn1cbiAgICAgICAgb25Dcm9zc0NsaWNrPXt0aGlzLmNsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsKHNlbGVjdGVkRmF2b3VyaXRlKX1cbiAgICAgICAgeyFzaG93RGVsZXRlUGxhY2VNb2RhbCAmJiB0aGlzLnJlbmRlck1vZGFsQ29udGVudCgpfVxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEZhdm91cml0ZUVkaXRpbmdNb2RhbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKFxuICBGYXZvdXJpdGVFZGl0aW5nTW9kYWwsXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiAoXG4gIDxJMThuZXh0UHJvdmlkZXIgaTE4bj17aTE4bn0+XG4gICAgPEZhdm91cml0ZUVkaXRpbmdNb2RhbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gIDwvSTE4bmV4dFByb3ZpZGVyPlxuKTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiYXBwbHkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwia2V5IiwibmV3Q2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCIsIndpbmRvdyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJfZnJlZUdsb2JhbCIsInJlcXVpcmUkJDAiLCJmcmVlU2VsZiIsInNlbGYiLCJyb290IiwiRnVuY3Rpb24iLCJfcm9vdCIsIl9TeW1ib2wiLCJnZXRSYXdUYWciLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJ0b1N0cmluZ1RhZyIsInVuZGVmaW5lZCIsIl9nZXRSYXdUYWciLCJpc093biIsInRhZyIsInVubWFza2VkIiwicmVzdWx0IiwicmVxdWlyZSQkMSIsIm9iamVjdFRvU3RyaW5nIiwiX29iamVjdFRvU3RyaW5nIiwicmVxdWlyZSQkMiIsIl9iYXNlR2V0VGFnIiwiaXNPYmplY3RfMSIsInR5cGUiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3QiLCJpc0Z1bmN0aW9uXzEiLCJ1aWQiLCJjb3JlSnNEYXRhIiwiX2NvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsImtleXMiLCJJRV9QUk9UTyIsIl9pc01hc2tlZCIsImZ1bmMiLCJmdW5jVG9TdHJpbmciLCJfdG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJpc0Z1bmN0aW9uIiwiaXNNYXNrZWQiLCJ0b1NvdXJjZSIsInJlcXVpcmUkJDMiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJyZUlzTmF0aXZlIiwiUmVnRXhwIiwicmVwbGFjZSIsIl9iYXNlSXNOYXRpdmUiLCJ0ZXN0IiwiZ2V0VmFsdWUiLCJfZ2V0VmFsdWUiLCJvYmplY3QiLCJfZ2V0TmF0aXZlIiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiX25hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsIl9oYXNoQ2xlYXIiLCJ0aGlzIiwiX19kYXRhX18iLCJzaXplIiwiaGFzaERlbGV0ZSIsIl9oYXNoRGVsZXRlIiwiaGFzIiwiaGFzaEdldCIsIl9oYXNoR2V0IiwiZGF0YSIsImhhc2hIYXMiLCJfaGFzaEhhcyIsImhhc2hTZXQiLCJfaGFzaFNldCIsInJlcXVpcmUkJDQiLCJIYXNoIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsInNldCIsImdldCIsIl9IYXNoIiwiZXFfMSIsIm90aGVyIiwiZXEiLCJfYXNzb2NJbmRleE9mIiwiYXJyYXkiLCJsaXN0Q2FjaGVDbGVhciIsIl9saXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImFzc29jSW5kZXhPZiIsInNwbGljZSIsIl9saXN0Q2FjaGVEZWxldGUiLCJwb3AiLCJsaXN0Q2FjaGVHZXQiLCJfbGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwiX2xpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIl9saXN0Q2FjaGVTZXQiLCJwdXNoIiwiTGlzdENhY2hlIiwiX0xpc3RDYWNoZSIsIk1hcCIsIl9NYXAiLCJpc0tleWFibGUiLCJfaXNLZXlhYmxlIiwiX2dldE1hcERhdGEiLCJtYXAiLCJtYXBDYWNoZUNsZWFyIiwiX21hcENhY2hlQ2xlYXIiLCJoYXNoIiwic3RyaW5nIiwibWFwQ2FjaGVEZWxldGUiLCJnZXRNYXBEYXRhIiwiX21hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJfbWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIl9tYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiX21hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJfTWFwQ2FjaGUiLCJzZXRDYWNoZUFkZCIsIl9zZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiX3NldENhY2hlSGFzIiwiU2V0Q2FjaGUiLCJ2YWx1ZXMiLCJhZGQiLCJfU2V0Q2FjaGUiLCJiYXNlRmluZEluZGV4IiwiX2Jhc2VGaW5kSW5kZXgiLCJwcmVkaWNhdGUiLCJmcm9tSW5kZXgiLCJmcm9tUmlnaHQiLCJiYXNlSXNOYU4iLCJfYmFzZUlzTmFOIiwic3RyaWN0SW5kZXhPZiIsIl9zdHJpY3RJbmRleE9mIiwiX2Jhc2VJbmRleE9mIiwiYmFzZUluZGV4T2YiLCJfYXJyYXlJbmNsdWRlcyIsIl9hcnJheUluY2x1ZGVzV2l0aCIsImNvbXBhcmF0b3IiLCJfYXJyYXlNYXAiLCJpdGVyYXRlZSIsIl9iYXNlVW5hcnkiLCJfY2FjaGVIYXMiLCJjYWNoZSIsIl9hcnJheVB1c2giLCJvZmZzZXQiLCJpc09iamVjdExpa2VfMSIsImJhc2VJc0FyZ3VtZW50cyIsImlzT2JqZWN0TGlrZSIsIl9iYXNlSXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHNfMSIsImlzQXJyYXlfMSIsImFycmF5UHVzaCIsImlzRmxhdHRlbmFibGUiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiX2lzRmxhdHRlbmFibGUiLCJfYmFzZUZsYXR0ZW4iLCJiYXNlRmxhdHRlbiIsImRlcHRoIiwiaXNTdHJpY3QiLCJpZGVudGl0eV8xIiwiX2FwcGx5IiwidGhpc0FyZyIsImFyZ3MiLCJuYXRpdmVNYXgiLCJNYXRoIiwibWF4IiwiX292ZXJSZXN0Iiwic3RhcnQiLCJ0cmFuc2Zvcm0iLCJvdGhlckFyZ3MiLCJjb25zdGFudCIsImNvbnN0YW50XzEiLCJpZGVudGl0eSIsIl9iYXNlU2V0VG9TdHJpbmciLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsIm5hdGl2ZU5vdyIsIkRhdGUiLCJub3ciLCJfc2hvcnRPdXQiLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsInNldFRvU3RyaW5nIiwiX3NldFRvU3RyaW5nIiwiaXNMZW5ndGhfMSIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2VfMSIsImxhc3RfMSIsImJhc2VEaWZmZXJlbmNlIiwiYXJyYXlJbmNsdWRlcyIsImFycmF5SW5jbHVkZXNXaXRoIiwiYXJyYXlNYXAiLCJiYXNlVW5hcnkiLCJjYWNoZUhhcyIsInJlcXVpcmUkJDUiLCJfYmFzZURpZmZlcmVuY2UiLCJpc0NvbW1vbiIsInZhbHVlc0xlbmd0aCIsIm91dGVyIiwiY29tcHV0ZWQiLCJ2YWx1ZXNJbmRleCIsImJhc2VSZXN0Iiwib3ZlclJlc3QiLCJfYmFzZVJlc3QiLCJpc0FycmF5TGlrZU9iamVjdCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3RfMSIsImxhc3QiLCJkaWZmZXJlbmNlV2l0aCIsImRpZmZlcmVuY2VXaXRoXzEiLCJzdGFja0NsZWFyIiwiX3N0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsIl9zdGFja0RlbGV0ZSIsInN0YWNrR2V0IiwiX3N0YWNrR2V0Iiwic3RhY2tIYXMiLCJfc3RhY2tIYXMiLCJzdGFja1NldCIsIl9zdGFja1NldCIsInBhaXJzIiwiTEFSR0VfQVJSQVlfU0laRSIsIlN0YWNrIiwiX1N0YWNrIiwiYXJyYXlTb21lIiwiX2FycmF5U29tZSIsIl9lcXVhbEFycmF5cyIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiZXF1YWxGdW5jIiwic3RhY2siLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsIlVpbnQ4QXJyYXkiLCJfVWludDhBcnJheSIsIl9zZXRUb0FycmF5IiwiZm9yRWFjaCIsImVxdWFsQXJyYXlzIiwibWFwVG9BcnJheSIsIl9tYXBUb0FycmF5Iiwic2V0VG9BcnJheSIsInN5bWJvbFByb3RvIiwic3ltYm9sVmFsdWVPZiIsInZhbHVlT2YiLCJfZXF1YWxCeVRhZyIsImJ5dGVMZW5ndGgiLCJieXRlT2Zmc2V0IiwiYnVmZmVyIiwibmFtZSIsIm1lc3NhZ2UiLCJjb252ZXJ0Iiwic3RhY2tlZCIsIl9iYXNlR2V0QWxsS2V5cyIsImtleXNGdW5jIiwic3ltYm9sc0Z1bmMiLCJzdHViQXJyYXlfMSIsImFycmF5RmlsdGVyIiwiX2FycmF5RmlsdGVyIiwicmVzSW5kZXgiLCJzdHViQXJyYXkiLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFN5bWJvbHMiLCJzeW1ib2wiLCJzdHViRmFsc2UiLCJzdHViRmFsc2VfMSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJmcmVlUHJvY2VzcyIsInByb2Nlc3MiLCJub2RlVXRpbCIsInR5cGVzIiwicmVxdWlyZSIsImJpbmRpbmciLCJiYXNlSXNUeXBlZEFycmF5IiwidHlwZWRBcnJheVRhZ3MiLCJfYmFzZUlzVHlwZWRBcnJheSIsIm5vZGVJc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXlfMSIsImJhc2VUaW1lcyIsIl9iYXNlVGltZXMiLCJuIiwiaXNJbmRleCIsInJlSXNVaW50IiwiX2lzSW5kZXgiLCJfYXJyYXlMaWtlS2V5cyIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsIl9pc1Byb3RvdHlwZSIsIkN0b3IiLCJfb3ZlckFyZyIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIm92ZXJBcmciLCJfbmF0aXZlS2V5cyIsIl9iYXNlS2V5cyIsImFycmF5TGlrZUtleXMiLCJiYXNlS2V5cyIsImtleXNfMSIsImJhc2VHZXRBbGxLZXlzIiwiZ2V0U3ltYm9scyIsIl9nZXRBbGxLZXlzIiwiU2V0IiwiX1NldCIsIkRhdGFWaWV3IiwiX0RhdGFWaWV3IiwiUHJvbWlzZSIsIl9Qcm9taXNlIiwiV2Vha01hcCIsIl9XZWFrTWFwIiwicmVxdWlyZSQkNiIsIm1hcFRhZyIsInByb21pc2VUYWciLCJzZXRUYWciLCJ3ZWFrTWFwVGFnIiwiZGF0YVZpZXdUYWciLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJnZXRUYWciLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiX2dldFRhZyIsImVxdWFsQnlUYWciLCJlcXVhbE9iamVjdHMiLCJnZXRBbGxLZXlzIiwiX2VxdWFsT2JqZWN0cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqVmFsdWUiLCJvYmpDdG9yIiwib3RoQ3RvciIsInJlcXVpcmUkJDciLCJhcmdzVGFnIiwiYXJyYXlUYWciLCJvYmplY3RUYWciLCJfYmFzZUlzRXF1YWxEZWVwIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJiYXNlSXNFcXVhbCIsImJhc2VJc0VxdWFsRGVlcCIsIl9iYXNlSXNFcXVhbCIsImlzRXF1YWxfMSIsImlzRW1wdHlfMSIsIl9iYXNlQXNzaWduVmFsdWUiLCJiYXNlQXNzaWduVmFsdWUiLCJfYXNzaWduVmFsdWUiLCJhc3NpZ25WYWx1ZSIsIl9jb3B5T2JqZWN0Iiwic291cmNlIiwicHJvcHMiLCJpc05ldyIsIm5ld1ZhbHVlIiwibmF0aXZlS2V5c0luIiwiX25hdGl2ZUtleXNJbiIsIl9iYXNlS2V5c0luIiwiaXNQcm90byIsImJhc2VLZXlzSW4iLCJrZXlzSW5fMSIsImdldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwiX2dldFByb3RvdHlwZSIsIl9nZXRTeW1ib2xzSW4iLCJnZXRTeW1ib2xzSW4iLCJrZXlzSW4iLCJfZ2V0QWxsS2V5c0luIiwiX2Nsb25lQXJyYXlCdWZmZXIiLCJhcnJheUJ1ZmZlciIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZURhdGFWaWV3IiwiX2Nsb25lRGF0YVZpZXciLCJkYXRhVmlldyIsImlzRGVlcCIsImNsb25lUmVnRXhwIiwicmVGbGFncyIsIl9jbG9uZVJlZ0V4cCIsInJlZ2V4cCIsImxhc3RJbmRleCIsImNsb25lU3ltYm9sIiwiX2Nsb25lU3ltYm9sIiwiY2xvbmVUeXBlZEFycmF5IiwiX2Nsb25lVHlwZWRBcnJheSIsInR5cGVkQXJyYXkiLCJfaW5pdENsb25lQnlUYWciLCJiYXNlQ3JlYXRlIiwib2JqZWN0Q3JlYXRlIiwiY3JlYXRlIiwicHJvdG8iLCJfYmFzZUNyZWF0ZSIsIl9pbml0Q2xvbmVPYmplY3QiLCJiYXNlSXNNYXAiLCJfYmFzZUlzTWFwIiwibm9kZUlzTWFwIiwiaXNNYXAiLCJpc01hcF8xIiwiYmFzZUlzU2V0IiwiX2Jhc2VJc1NldCIsIm5vZGVJc1NldCIsImlzU2V0IiwiaXNTZXRfMSIsImFycmF5RWFjaCIsIl9hcnJheUVhY2giLCJiYXNlQXNzaWduIiwiY29weU9iamVjdCIsIl9iYXNlQXNzaWduIiwiYmFzZUFzc2lnbkluIiwiX2Jhc2VBc3NpZ25JbiIsImNsb25lQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJzbGljZSIsImNvcHkiLCJjb3B5QXJyYXkiLCJfY29weUFycmF5IiwiY29weVN5bWJvbHMiLCJfY29weVN5bWJvbHMiLCJjb3B5U3ltYm9sc0luIiwiX2NvcHlTeW1ib2xzSW4iLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsImdldEFsbEtleXNJbiIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJpbml0Q2xvbmVBcnJheSIsIl9pbml0Q2xvbmVBcnJheSIsImlucHV0IiwicmVxdWlyZSQkMTIiLCJpbml0Q2xvbmVCeVRhZyIsInJlcXVpcmUkJDEzIiwiaW5pdENsb25lT2JqZWN0IiwicmVxdWlyZSQkMTQiLCJyZXF1aXJlJCQxNSIsInJlcXVpcmUkJDE2IiwicmVxdWlyZSQkMTciLCJyZXF1aXJlJCQxOCIsInJlcXVpcmUkJDE5IiwicmVxdWlyZSQkMjAiLCJyZXF1aXJlJCQyMSIsImZ1bmNUYWciLCJjbG9uZWFibGVUYWdzIiwiX2Jhc2VDbG9uZSIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImlzRnVuYyIsInN1YlZhbHVlIiwiaXNTeW1ib2xfMSIsIm1lbW9pemUiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiQ2FjaGUiLCJtZW1vaXplXzEiLCJtZW1vaXplQ2FwcGVkIiwiX21lbW9pemVDYXBwZWQiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwic3RyaW5nVG9QYXRoIiwiY2hhckNvZGVBdCIsIm1hdGNoIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJfc3RyaW5nVG9QYXRoIiwiYmFzZVRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUb1N0cmluZyIsIl9iYXNlVG9TdHJpbmciLCJ0b1N0cmluZ18xIiwiaXNLZXkiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwiX2lzS2V5IiwiX2Nhc3RQYXRoIiwiX3RvS2V5IiwiYmFzZUdldCIsImNhc3RQYXRoIiwidG9LZXkiLCJfYmFzZUdldCIsInBhdGgiLCJiYXNlU2xpY2UiLCJfYmFzZVNsaWNlIiwiZW5kIiwiX3BhcmVudCIsImlzUGxhaW5PYmplY3QiLCJvYmplY3RDdG9yU3RyaW5nIiwiaXNQbGFpbk9iamVjdF8xIiwiX2N1c3RvbU9taXRDbG9uZSIsImZsYXR0ZW4iLCJmbGF0dGVuXzEiLCJfZmxhdFJlc3QiLCJiYXNlVW5zZXQiLCJwYXJlbnQiLCJfYmFzZVVuc2V0Iiwib2JqIiwiY3VzdG9tT21pdENsb25lIiwiZmxhdFJlc3QiLCJvbWl0IiwicGF0aHMiLCJDTE9ORV9ERUVQX0ZMQUciLCJvbWl0XzEiLCJub29wIiwibm9vcF8xIiwiY3JlYXRlU2V0IiwiX2NyZWF0ZVNldCIsImJhc2VVbmlxIiwiX2Jhc2VVbmlxIiwic2VlbkluZGV4IiwidW5pcVdpdGhfMSIsInJlUmVnRXhwQ2hhciIsInJlSGFzUmVnRXhwQ2hhciIsImVzY2FwZVJlZ0V4cF8xIiwiY2xvbmVEZWVwXzEiLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImxvY2FsYWRtaW4iLCJhZGRyZXNzIiwibGFzdEluZGV4T2YiLCJzdWJzdHJpbmciLCJnZXRTdG9wQ29kZSIsImlkIiwiY29kZSIsImluZGV4T2YiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwic3BsaXQiLCJlc2NhcGVSZWdFeHAiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwicGxhaW4iLCJsYXllciIsImxhYmVsSWQiLCJzaG9ydE5hbWUiLCJndGZzSWQiLCJtb2RlIiwidG9Mb3dlckNhc2UiLCJsb25nTmFtZSIsImFnZW5jeSIsImxhYmVsIiwiaXRlbSIsImNsb25lRGVlcCIsIk1vZGFsQ29udGVudCIsImhlYWRlclRleHQiLCJyZW5kZXJMaXN0IiwiUmVhY3QiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImlzUmVxdWlyZWQiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJjYW5jZWwiLCJkZWxldGUiLCJzYXZlIiwiZW4iLCJ1cCIsImRvd24iLCJmaSIsInBsIiwic3YiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwiaW5pdCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwiY29uY2F0IiwicHJldmVudERlZmF1bHQiLCJGYXZvdXJpdGVFZGl0aW5nTW9kYWwiLCJDb21wb25lbnQiLCJzdXBlciIsIm9wdGlvbnMiLCJfb2JqZWN0U3ByZWFkIiwibG5nIiwibGFuZyIsImRpcmVjdGlvbiIsImZhdm91cml0ZXMiLCJzdGF0ZSIsImZhdm91cml0ZXNDb3B5IiwidG1wIiwic2V0U3RhdGUiLCJmYXZvdXJpdGUiLCJpY29uSWQiLCJzZWxlY3RlZEljb25JZCIsInByZWZpeFBvcyIsImN4IiwiZmF2b3VyaXRlSWQiLCJ0cmFuc2xhdGUiLCJvbkNsaWNrIiwibW92ZUZhdm91cml0ZSIsIkljb24iLCJpbWciLCJjb2xvciIsImNvbG9ycyIsInByaW1hcnkiLCJyb2xlIiwidGFiSW5kZXgiLCJvbkVkaXRTZWxlY3RlZCIsIm9uS2V5RG93biIsInNlbGVjdGVkRmF2b3VyaXRlIiwic2hvd0RlbGV0ZVBsYWNlTW9kYWwiLCJpc0xvYWRpbmciLCJDb250YWluZXJTcGlubmVyIiwidmlzaWJsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0Iiwic2V0TGlzdCIsIml0ZW1zIiwiYW5pbWF0aW9uIiwiaGFuZGxlIiwicmVuZGVyRmF2b3VyaXRlTGlzdEl0ZW0iLCJEaWFsb2dNb2RhbCIsImhhbmRsZUNsb3NlIiwiaXNNb2RhbE9wZW4iLCJkaWFsb2dDb250ZW50IiwicHJpbWFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsImRlbGV0ZUZhdm91cml0ZSIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwib21pdHRlZEZhdm91cml0ZXMiLCJpc0VxdWFsIiwidXBkYXRlRmF2b3VyaXRlcyIsImZvbnRXZWlnaHRzIiwiaG92ZXIiLCJtb2RhbFByb3BzIiwicmVuZGVyRmF2b3VyaXRlTGlzdCIsIm1lZGl1bSIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInByZXZTdGF0ZSIsIm5leHRGYXZvdXJpdGVzIiwicHJldkZhdm91cml0ZXMiLCJpc0VtcHR5IiwicmVuZGVyIiwiaXNNb2JpbGUiLCJNb2RhbCIsImFwcEVsZW1lbnQiLCJjb250ZW50TGFiZWwiLCJjbG9zZUJ1dHRvbkxhYmVsIiwidmFyaWFudCIsImlzT3BlbiIsIm9uQ3Jvc3NDbGljayIsImNsb3NlTW9kYWwiLCJyZW5kZXJEZWxldGVGYXZvdXJpdGVNb2RhbCIsInJlbmRlck1vZGFsQ29udGVudCIsImRlZmF1bHRDb2xvcnMiLCJhcnJheU9mIiwic2hhcGUiLCJnaWQiLCJsYXQiLCJsb24iLCJib29sIiwib2JqZWN0T2YiLCJGYXZvdXJpdGVFZGl0aW5nTW9kYWxXaXRoVHJhbnNsYXRpb24iLCJ3aXRoVHJhbnNsYXRpb24iLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiJrakNBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVDRk4sU0FBcUJELEVBQUdFLEdBQ3RCLEdBQUksVUFBWVQsRUFBUU8sS0FBT0EsRUFBRyxPQUFPQSxFQUN6QyxJQUFJRyxFQUFJSCxFQUFFTCxPQUFPUyxhQUNqQixRQUFTLElBQU1ELEVBQUcsQ0FDaEIsSUFBSUYsRUFBSUUsRUFBRUUsS0FBS0wsRUFBR0UsR0FBSyxXQUN2QixHQUFJLFVBQVlULEVBQVFRLEdBQUksT0FBT0EsRUFDbkMsTUFBTSxJQUFJSyxVQUFVLCtDQUNyQixDQUNELE9BQVEsV0FBYUosRUFBSUssT0FBU0MsUUFBUVIsRUFDNUMsQ0RQVUksQ0FBWUosRUFBRyxVQUN2QixNQUFPLFVBQVlQLEVBQVFRLEdBQUtBLEVBQUlBLEVBQUksRUFDMUMsQ0VKQSxTQUFTUSxFQUFnQk4sRUFBR0QsRUFBR0YsR0FDN0IsT0FBUUUsRUFBSUgsRUFBY0csTUFBT0MsRUFBSU8sT0FBT0MsZUFBZVIsRUFBR0QsRUFBRyxDQUMvRFUsTUFBT1osRUFDUGEsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFVBQVUsSUFDUFosRUFBRUQsR0FBS0YsRUFBR0csQ0FDakI7Ozs7O2tiQ0RDLFdBR0EsSUFBSWEsRUFBUyxDQUFFLEVBQUNDLGVBRWhCLFNBQVNDLElB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
6
+ */var w,x,O,S,U,E,I,A,k,q,P,F,D,M,R,z,N,T,C,L,J,B,H,$,W,G,V,Y,X,K,Z,Q,tt,et,rt,nt,it,ot,at,ut,st,lt,ct,ft,dt,vt,_t,pt,yt,ht,mt,bt,gt,jt,wt,xt,Ot,St,Ut,Et,It,At,kt,qt,Pt,Ft,Dt,Mt,Rt,zt,Nt,Tt,Ct,Lt,Jt,Bt,Ht,$t,Wt,Gt,Vt,Yt,Xt,Kt,Zt,Qt,te,ee,re,ne,ie,oe,ae,ue,se,le,ce,fe,de,ve,_e,pe,ye,he,me,be,ge,je,we,xe,Oe,Se,Ue,Ee,Ie,Ae,ke,qe,Pe,Fe,De,Me,Re,ze,Ne,Te,Ce,Le,Je,Be,He,$e,We,Ge,Ve,Ye,Xe,Ke,Ze,Qe,tr,er,rr,nr,ir=(g||(g=1,function(t){!function(){var e={}.hasOwnProperty;function r(){for(var t="",e=0;e<arguments.length;e++){var r=arguments[e];r&&(t=i(t,n(r)))}return t}function n(t){if("string"==typeof t||"number"==typeof t)return t;if("object"!=typeof t)return"";if(Array.isArray(t))return r.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes("[native code]"))return t.toString();var n="";for(var o in t)e.call(t,o)&&t[o]&&(n=i(n,o));return n}function i(t,e){return e?t?t+" "+e:t+e:t}t.exports?(r.default=r,t.exports=r):window.classNames=r}()}(j)),j.exports),or=b(ir);function ar(){if(x)return w;x=1;var t="object"==typeof global&&global&&global.Object===Object&&global;return w=t}function ur(){if(S)return O;S=1;var t=ar(),e="object"==typeof self&&self&&self.Object===Object&&self,r=t||e||Function("return this")();return O=r}function sr(){if(E)return U;E=1;var t=ur().Symbol;return U=t}function lr(){if(F)return P;F=1;var t=sr(),e=function(){if(A)return I;A=1;var t=sr(),e=Object.prototype,r=e.hasOwnProperty,n=e.toString,i=t?t.toStringTag:void 0;return I=function(t){var e=r.call(t,i),o=t[i];try{t[i]=void 0;var a=!0}catch(t){}var u=n.call(t);return a&&(e?t[i]=o:delete t[i]),u}}(),r=function(){if(q)return k;q=1;var t=Object.prototype.toString;return k=function(e){return t.call(e)}}(),n=t?t.toStringTag:void 0;return P=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":n&&n in Object(t)?e(t):r(t)}}function cr(){if(M)return D;return M=1,D=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}}function fr(){if(z)return R;z=1;var t=lr(),e=cr();return R=function(r){if(!e(r))return!1;var n=t(r);return"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n}}function dr(){if(L)return C;L=1;var t,e=function(){if(T)return N;T=1;var t=ur()["__core-js_shared__"];return N=t}(),r=(t=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||""))?"Symbol(src)_1."+t:"";return C=function(t){return!!r&&r in t}}function vr(){if(B)return J;B=1;var t=Function.prototype.toString;return J=function(e){if(null!=e){try{return t.call(e)}catch(t){}try{return e+""}catch(t){}}return""}}function _r(){if(Y)return V;Y=1;var t=function(){if($)return H;$=1;var t=fr(),e=dr(),r=cr(),n=vr(),i=/^\[object .+?Constructor\]$/,o=Function.prototype,a=Object.prototype,u=o.toString,s=a.hasOwnProperty,l=RegExp("^"+u.call(s).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");return H=function(o){return!(!r(o)||e(o))&&(t(o)?l:i).test(n(o))}}(),e=G?W:(G=1,W=function(t,e){return null==t?void 0:t[e]});return V=function(r,n){var i=e(r,n);return t(i)?i:void 0}}function pr(){if(K)return X;K=1;var t=_r()(Object,"create");return X=t}function yr(){if(lt)return st;lt=1;var t=function(){if(Q)return Z;Q=1;var t=pr();return Z=function(){this.__data__=t?t(null):{},this.size=0}}(),e=et?tt:(et=1,tt=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}),r=function(){if(nt)return rt;nt=1;var t=pr(),e=Object.prototype.hasOwnProperty;return rt=function(r){var n=this.__data__;if(t){var i=n[r];return"__lodash_hash_undefined__"===i?void 0:i}return e.call(n,r)?n[r]:void 0}}(),n=function(){if(ot)return it;ot=1;var t=pr(),e=Object.prototype.hasOwnProperty;return it=function(r){var n=this.__data__;return t?void 0!==n[r]:e.call(n,r)}}(),i=function(){if(ut)return at;ut=1;var t=pr();return at=function(e,r){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=t&&void 0===r?"__lodash_hash_undefined__":r,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,st=o}function hr(){if(vt)return dt;return vt=1,dt=function(t,e){return t===e||t!=t&&e!=e}}function mr(){if(pt)return _t;pt=1;var t=hr();return _t=function(e,r){for(var n=e.length;n--;)if(t(e[n][0],r))return n;return-1}}function br(){if(St)return Ot;St=1;var t=ft?ct:(ft=1,ct=function(){this.__data__=[],this.size=0}),e=function(){if(ht)return yt;ht=1;var t=mr(),e=Array.prototype.splice;return yt=function(r){var n=this.__data__,i=t(n,r);return!(i<0||(i==n.length-1?n.pop():e.call(n,i,1),--this.size,0))},yt}(),r=function(){if(bt)return mt;bt=1;var t=mr();return mt=function(e){var r=this.__data__,n=t(r,e);return n<0?void 0:r[n][1]},mt}(),n=function(){if(jt)return gt;jt=1;var t=mr();return gt=function(e){return t(this.__data__,e)>-1}}(),i=function(){if(xt)return wt;xt=1;var t=mr();return wt=function(e,r){var n=this.__data__,i=t(n,e);return i<0?(++this.size,n.push([e,r])):n[i][1]=r,this},wt}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Ot=o}function gr(){if(Et)return Ut;Et=1;var t=_r()(ur(),"Map");return Ut=t}function jr(){if(Ft)return Pt;Ft=1;var t=qt?kt:(qt=1,kt=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t});return Pt=function(e,r){var n=e.__data__;return t(r)?n["string"==typeof r?"string":"hash"]:n.map}}function wr(){if(Bt)return Jt;Bt=1;var t=function(){if(At)return It;At=1;var t=yr(),e=br(),r=gr();return It=function(){this.size=0,this.__data__={hash:new t,map:new(r||e),string:new t}}}(),e=function(){if(Mt)return Dt;Mt=1;var t=jr();return Dt=function(e){var r=t(this,e).delete(e);return this.size-=r?1:0,r}}(),r=function(){if(zt)return Rt;zt=1;var t=jr();return Rt=function(e){return t(this,e).get(e)}}(),n=function(){if(Tt)return Nt;Tt=1;var t=jr();return Nt=function(e){return t(this,e).has(e)}}(),i=function(){if(Lt)return Ct;Lt=1;var t=jr();return Ct=function(e,r){var n=t(this,e),i=n.size;return n.set(e,r),this.size+=n.size==i?0:1,this}}();function o(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}return o.prototype.clear=t,o.prototype.delete=e,o.prototype.get=r,o.prototype.has=n,o.prototype.set=i,Jt=o}function xr(){if(Yt)return Vt;Yt=1;var t=wr(),e=$t?Ht:($t=1,Ht=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}),r=Gt?Wt:(Gt=1,Wt=function(t){return this.__data__.has(t)});function n(e){var r=-1,n=null==e?0:e.length;for(this.__data__=new t;++r<n;)this.add(e[r])}return n.prototype.add=n.prototype.push=e,n.prototype.has=r,Vt=n}function Or(){if(ne)return re;ne=1;var t=(Kt||(Kt=1,Xt=function(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}),Xt),e=Qt?Zt:(Qt=1,Zt=function(t){return t!=t}),r=(ee||(ee=1,te=function(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}),te);return re=function(n,i,o){return i==i?r(n,i,o):t(n,e,o)}}function Sr(){if(oe)return ie;oe=1;var t=Or();return ie=function(e,r){return!!(null==e?0:e.length)&&t(e,r,0)>-1}}function Ur(){if(ue)return ae;return ue=1,ae=function(t,e,r){for(var n=-1,i=null==t?0:t.length;++n<i;)if(r(e,t[n]))return!0;return!1},ae}function Er(){if(le)return se;return le=1,se=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i},se}function Ir(){if(fe)return ce;return fe=1,ce=function(t){return function(e){return t(e)}}}function Ar(){if(ve)return de;return ve=1,de=function(t,e){return t.has(e)}}function kr(){if(he)return ye;return he=1,ye=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t},ye}function qr(){if(be)return me;return be=1,me=function(t){return null!=t&&"object"==typeof t}}function Pr(){if(xe)return we;xe=1;var t=function(){if(je)return ge;je=1;var t=lr(),e=qr();return ge=function(r){return e(r)&&"[object Arguments]"==t(r)}}(),e=qr(),r=Object.prototype,n=r.hasOwnProperty,i=r.propertyIsEnumerable,o=t(function(){return arguments}())?t:function(t){return e(t)&&n.call(t,"callee")&&!i.call(t,"callee")};return we=o}function Fr(){if(Se)return Oe;Se=1;var t=Array.isArray;return Oe=t}function Dr(){if(Ae)return Ie;Ae=1;var t=kr(),e=function(){if(Ee)return Ue;Ee=1;var t=sr(),e=Pr(),r=Fr(),n=t?t.isConcatSpreadable:void 0;return Ue=function(t){return r(t)||e(t)||!!(n&&t&&t[n])}}();return Ie=function r(n,i,o,a,u){var s=-1,l=n.length;for(o||(o=e),u||(u=[]);++s<l;){var c=n[s];i>0&&o(c)?i>1?r(c,i-1,o,a,u):t(u,c):a||(u[u.length]=c)}return u},Ie}function Mr(){if(qe)return ke;return qe=1,ke=function(t){return t}}function Rr(){if(Me)return De;Me=1;var t=Fe?Pe:(Fe=1,Pe=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}),e=Math.max;return De=function(r,n,i){return n=e(void 0===n?r.length-1:n,0),function(){for(var o=arguments,a=-1,u=e(o.length-n,0),s=Array(u);++a<u;)s[a]=o[n+a];a=-1;for(var l=Array(n+1);++a<n;)l[a]=o[a];return l[n]=i(s),t(r,this,l)}},De}function zr(){if(Te)return Ne;Te=1;var t=_r(),e=function(){try{var e=t(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();return Ne=e}function Nr(){if(Le)return Ce;Le=1;var t=ze?Re:(ze=1,Re=function(t){return function(){return t}}),e=zr(),r=Mr();return Ce=e?function(r,n){return e(r,"toString",{configurable:!0,enumerable:!1,value:t(n),writable:!0})}:r}function Tr(){if($e)return He;$e=1;var t=Nr(),e=function(){if(Be)return Je;Be=1;var t=Date.now;return Je=function(e){var r=0,n=0;return function(){var i=t(),o=16-(i-n);if(n=i,o>0){if(++r>=800)return arguments[0]}else r=0;return e.apply(void 0,arguments)}},Je}(),r=e(t);return He=r}function Cr(){if(Ye)return Ve;Ye=1;return Ve=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}}function Lr(){if(Ke)return Xe;Ke=1;var t=fr(),e=Cr();return Xe=function(r){return null!=r&&e(r.length)&&!t(r)}}function Jr(){if(er)return tr;return er=1,tr=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}}var Br,Hr,$r,Wr,Gr,Vr,Yr,Xr,Kr,Zr,Qr,tn,en,rn,nn,on,an,un,sn,ln,cn,fn,dn,vn,_n,pn,yn,hn,mn,bn,gn,jn,wn,xn,On=function(){if(nr)return rr;nr=1;var t=function(){if(pe)return _e;pe=1;var t=xr(),e=Sr(),r=Ur(),n=Er(),i=Ir(),o=Ar();return _e=function(a,u,s,l){var c=-1,f=e,d=!0,v=a.length,_=[],p=u.length;if(!v)return _;s&&(u=n(u,i(s))),l?(f=r,d=!1):u.length>=200&&(f=o,d=!1,u=new t(u));t:for(;++c<v;){var y=a[c],h=null==s?y:s(y);if(y=l||0!==y?y:0,d&&h==h){for(var m=p;m--;)if(u[m]===h)continue t;_.push(y)}else f(u,h,l)||_.push(y)}return _},_e}(),e=Dr(),r=function(){if(Ge)return We;Ge=1;var t=Mr(),e=Rr(),r=Tr();return We=function(n,i){return r(e(n,i,t),n+"")}}(),n=function(){if(Qe)return Ze;Qe=1;var t=Lr(),e=qr();return Ze=function(r){return e(r)&&t(r)}}(),i=Jr(),o=r(function(r,o){var a=i(o);return n(a)&&(a=void 0),n(r)?t(r,e(o,1,n,!0),void 0,a):[]});return rr=o}(),Sn=b(On);function Un(){if(tn)return Qr;tn=1;var t=br(),e=function(){if(Hr)return Br;Hr=1;var t=br();return Br=function(){this.__data__=new t,this.size=0}}(),r=Wr?$r:(Wr=1,$r=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}),n=Vr?Gr:(Vr=1,Gr=function(t){return this.__data__.get(t)}),i=Xr?Yr:(Xr=1,Yr=function(t){return this.__data__.has(t)}),o=function(){if(Zr)return Kr;Zr=1;var t=br(),e=gr(),r=wr();return Kr=function(n,i){var o=this.__data__;if(o instanceof t){var a=o.__data__;if(!e||a.length<199)return a.push([n,i]),this.size=++o.size,this;o=this.__data__=new r(a)}return o.set(n,i),this.size=o.size,this}}();function a(e){var r=this.__data__=new t(e);this.size=r.size}return a.prototype.clear=e,a.prototype.delete=r,a.prototype.get=n,a.prototype.has=i,a.prototype.set=o,Qr=a}function En(){if(on)return nn;on=1;var t=xr(),e=(rn||(rn=1,en=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}),en),r=Ar();return nn=function(n,i,o,a,u,s){var l=1&o,c=n.length,f=i.length;if(c!=f&&!(l&&f>c))return!1;var d=s.get(n),v=s.get(i);if(d&&v)return d==i&&v==n;var _=-1,p=!0,y=2&o?new t:void 0;for(s.set(n,i),s.set(i,n);++_<c;){var h=n[_],m=i[_];if(a)var b=l?a(m,h,_,i,n,s):a(h,m,_,n,i,s);if(void 0!==b){if(b)continue;p=!1;break}if(y){if(!e(i,function(t,e){if(!r(y,e)&&(h===t||u(h,t,o,a,s)))return y.push(e)})){p=!1;break}}else if(h!==m&&!u(h,m,o,a,s)){p=!1;break}}return s.delete(n),s.delete(i),p},nn}function In(){if(un)return an;un=1;var t=ur().Uint8Array;return an=t}function An(){if(fn)return cn;return fn=1,cn=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r},cn}function kn(){if(vn)return dn;vn=1;var t=sr(),e=In(),r=hr(),n=En(),i=(ln||(ln=1,sn=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}),sn),o=An(),a=t?t.prototype:void 0,u=a?a.valueOf:void 0;return dn=function(t,a,s,l,c,f,d){switch(s){case"[object DataView]":if(t.byteLength!=a.byteLength||t.byteOffset!=a.byteOffset)return!1;t=t.buffer,a=a.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=a.byteLength||!f(new e(t),new e(a)));case"[object Boolean]":case"[object Date]":case"[object Number]":return r(+t,+a);case"[object Error]":return t.name==a.name&&t.message==a.message;case"[object RegExp]":case"[object String]":return t==a+"";case"[object Map]":var v=i;case"[object Set]":var _=1&l;if(v||(v=o),t.size!=a.size&&!_)return!1;var p=d.get(t);if(p)return p==a;l|=2,d.set(t,a);var y=n(v(t),v(a),l,c,f,d);return d.delete(t),y;case"[object Symbol]":if(u)return u.call(t)==u.call(a)}return!1}}function qn(){if(pn)return _n;pn=1;var t=kr(),e=Fr();return _n=function(r,n,i){var o=n(r);return e(r)?o:t(o,i(r))}}function Pn(){if(bn)return mn;return bn=1,mn=function(){return[]}}function Fn(){if(jn)return gn;jn=1;var t=(hn||(hn=1,yn=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}),yn),e=Pn(),r=Object.prototype.propertyIsEnumerable,n=Object.getOwnPropertySymbols;return gn=n?function(e){return null==e?[]:(e=Object(e),t(n(e),function(t){return r.call(e,t)}))}:e}var Dn,Mn,Rn,zn,Nn,Tn,Cn,Ln={exports:{}};function Jn(){return Rn||(Rn=1,function(t,e){var r=ur(),n=Mn?Dn:(Mn=1,Dn=function(){return!1}),i=e&&!e.nodeType&&e,o=i&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,u=(a?a.isBuffer:void 0)||n;t.exports=u}(Ln,Ln.exports)),Ln.exports}var Bn,Hn,$n,Wn,Gn,Vn,Yn,Xn,Kn,Zn,Qn,ti,ei,ri,ni,ii,oi,ai,ui,si,li,ci,fi,di,vi,_i,pi,yi,hi,mi,bi,gi,ji,wi,xi,Oi={exports:{}};function Si(){return Bn||(Bn=1,function(t,e){var r=ar(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=a}(Oi,Oi.exports)),Oi.exports}function Ui(){if($n)return Hn;$n=1;var t=function(){if(Cn)return Tn;Cn=1;var t=lr(),e=Cr(),r=qr(),n={};return n["[object Float32Array]"]=n["[object Float64Array]"]=n["[object Int8Array]"]=n["[object Int16Array]"]=n["[object Int32Array]"]=n["[object Uint8Array]"]=n["[object Uint8ClampedArray]"]=n["[object Uint16Array]"]=n["[object Uint32Array]"]=!0,n["[object Arguments]"]=n["[object Array]"]=n["[object ArrayBuffer]"]=n["[object Boolean]"]=n["[object DataView]"]=n["[object Date]"]=n["[object Error]"]=n["[object Function]"]=n["[object Map]"]=n["[object Number]"]=n["[object Object]"]=n["[object RegExp]"]=n["[object Set]"]=n["[object String]"]=n["[object WeakMap]"]=!1,Tn=function(i){return r(i)&&e(i.length)&&!!n[t(i)]}}(),e=Ir(),r=Si(),n=r&&r.isTypedArray,i=n?e(n):t;return Hn=i}function Ei(){if(Gn)return Wn;Gn=1;var t=(xn||(xn=1,wn=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}),wn),e=Pr(),r=Fr(),n=Jn(),i=function(){if(Nn)return zn;Nn=1;var t=/^(?:0|[1-9]\d*)$/;return zn=function(e,r){var n=typeof e;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&t.test(e))&&e>-1&&e%1==0&&e<r}}(),o=Ui(),a=Object.prototype.hasOwnProperty;return Wn=function(u,s){var l=r(u),c=!l&&e(u),f=!l&&!c&&n(u),d=!l&&!c&&!f&&o(u),v=l||c||f||d,_=v?t(u.length,String):[],p=_.length;for(var y in u)!s&&!a.call(u,y)||v&&("length"==y||f&&("offset"==y||"parent"==y)||d&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||i(y,p))||_.push(y);return _}}function Ii(){if(Yn)return Vn;Yn=1;var t=Object.prototype;return Vn=function(e){var r=e&&e.constructor;return e===("function"==typeof r&&r.prototype||t)}}function Ai(){if(Kn)return Xn;return Kn=1,Xn=function(t,e){return function(r){return t(e(r))}}}function ki(){if(ei)return ti;ei=1;var t=Ii(),e=function(){if(Qn)return Zn;Qn=1;var t=Ai()(Object.keys,Object);return Zn=t}(),r=Object.prototype.hasOwnProperty;return ti=function(n){if(!t(n))return e(n);var i=[];for(var o in Object(n))r.call(n,o)&&"constructor"!=o&&i.push(o);return i}}function qi(){if(ni)return ri;ni=1;var t=Ei(),e=ki(),r=Lr();return ri=function(n){return r(n)?t(n):e(n)}}function Pi(){if(oi)return ii;oi=1;var t=qn(),e=Fn(),r=qi();return ii=function(n){return t(n,r,e)}}function Fi(){if(vi)return di;vi=1;var t=_r()(ur(),"Set");return di=t}function Di(){if(hi)return yi;hi=1;var t=function(){if(li)return si;li=1;var t=_r()(ur(),"DataView");return si=t}(),e=gr(),r=function(){if(fi)return ci;fi=1;var t=_r()(ur(),"Promise");return ci=t}(),n=Fi(),i=function(){if(pi)return _i;pi=1;var t=_r()(ur(),"WeakMap");return _i=t}(),o=lr(),a=vr(),u="[object Map]",s="[object Promise]",l="[object Set]",c="[object WeakMap]",f="[object DataView]",d=a(t),v=a(e),_=a(r),p=a(n),y=a(i),h=o;return(t&&h(new t(new ArrayBuffer(1)))!=f||e&&h(new e)!=u||r&&h(r.resolve())!=s||n&&h(new n)!=l||i&&h(new i)!=c)&&(h=function(t){var e=o(t),r="[object Object]"==e?t.constructor:void 0,n=r?a(r):"";if(n)switch(n){case d:return f;case v:return u;case _:return s;case p:return l;case y:return c}return e}),yi=h}function Mi(){if(bi)return mi;bi=1;var t=Un(),e=En(),r=kn(),n=function(){if(ui)return ai;ui=1;var t=Pi(),e=Object.prototype.hasOwnProperty;return ai=function(r,n,i,o,a,u){var s=1&i,l=t(r),c=l.length;if(c!=t(n).length&&!s)return!1;for(var f=c;f--;){var d=l[f];if(!(s?d in n:e.call(n,d)))return!1}var v=u.get(r),_=u.get(n);if(v&&_)return v==n&&_==r;var p=!0;u.set(r,n),u.set(n,r);for(var y=s;++f<c;){var h=r[d=l[f]],m=n[d];if(o)var b=s?o(m,h,d,n,r,u):o(h,m,d,r,n,u);if(!(void 0===b?h===m||a(h,m,i,o,u):b)){p=!1;break}y||(y="constructor"==d)}if(p&&!y){var g=r.constructor,j=n.constructor;g==j||!("constructor"in r)||!("constructor"in n)||"function"==typeof g&&g instanceof g&&"function"==typeof j&&j instanceof j||(p=!1)}return u.delete(r),u.delete(n),p},ai}(),i=Di(),o=Fr(),a=Jn(),u=Ui(),s="[object Arguments]",l="[object Array]",c="[object Object]",f=Object.prototype.hasOwnProperty;return mi=function(d,v,_,p,y,h){var m=o(d),b=o(v),g=m?l:i(d),j=b?l:i(v),w=(g=g==s?c:g)==c,x=(j=j==s?c:j)==c,O=g==j;if(O&&a(d)){if(!a(v))return!1;m=!0,w=!1}if(O&&!w)return h||(h=new t),m||u(d)?e(d,v,_,p,y,h):r(d,v,g,_,p,y,h);if(!(1&_)){var S=w&&f.call(d,"__wrapped__"),U=x&&f.call(v,"__wrapped__");if(S||U){var E=S?d.value():d,I=U?v.value():v;return h||(h=new t),y(E,I,_,p,h)}}return!!O&&(h||(h=new t),n(d,v,_,p,y,h))}}var Ri,zi,Ni=b(function(){if(xi)return wi;xi=1;var t=function(){if(ji)return gi;ji=1;var t=Mi(),e=qr();return gi=function r(n,i,o,a,u){return n===i||(null==n||null==i||!e(n)&&!e(i)?n!=n&&i!=i:t(n,i,o,a,r,u))},gi}();return wi=function(e,r){return t(e,r)}}());var Ti,Ci,Li,Ji,Bi,Hi,$i,Wi,Gi,Vi,Yi,Xi,Ki,Zi,Qi,to,eo,ro,no=function(){if(zi)return Ri;zi=1;var t=ki(),e=Di(),r=Pr(),n=Fr(),i=Lr(),o=Jn(),a=Ii(),u=Ui(),s=Object.prototype.hasOwnProperty;return Ri=function(l){if(null==l)return!0;if(i(l)&&(n(l)||"string"==typeof l||"function"==typeof l.splice||o(l)||u(l)||r(l)))return!l.length;var c=e(l);if("[object Map]"==c||"[object Set]"==c)return!l.size;if(a(l))return!t(l).length;for(var f in l)if(s.call(l,f))return!1;return!0}}(),io=b(no);function oo(){if(Ji)return Li;Ji=1;var t=zr();return Li=function(e,r,n){"__proto__"==r&&t?t(e,r,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[r]=n}}function ao(){if(Hi)return Bi;Hi=1;var t=oo(),e=hr(),r=Object.prototype.hasOwnProperty;return Bi=function(n,i,o){var a=n[i];r.call(n,i)&&e(a,o)&&(void 0!==o||i in n)||t(n,i,o)}}function uo(){if(Wi)return $i;Wi=1;var t=ao(),e=oo();return $i=function(r,n,i,o){var a=!i;i||(i={});for(var u=-1,s=n.length;++u<s;){var l=n[u],c=o?o(i[l],r[l],l,i,r):void 0;void 0===c&&(c=r[l]),a?e(i,l,c):t(i,l,c)}return i},$i}function so(){if(Zi)return Ki;Zi=1;var t=cr(),e=Ii(),r=Xi?Yi:(Xi=1,Yi=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}),n=Object.prototype.hasOwnProperty;return Ki=function(i){if(!t(i))return r(i);var o=e(i),a=[];for(var u in i)("constructor"!=u||!o&&n.call(i,u))&&a.push(u);return a}}function lo(){if(to)return Qi;to=1;var t=Ei(),e=so(),r=Lr();return Qi=function(n){return r(n)?t(n,!0):e(n)}}var co,fo,vo,_o,po,yo,ho,mo,bo,go,jo,wo,xo,Oo,So,Uo,Eo,Io,Ao,ko,qo,Po,Fo,Do,Mo,Ro,zo,No,To,Co,Lo,Jo,Bo,Ho,$o,Wo,Go,Vo,Yo,Xo,Ko,Zo,Qo,ta,ea,ra,na,ia,oa,aa,ua,sa,la,ca,fa,da,va,_a,pa,ya,ha,ma,ba,ga,ja,wa,xa,Oa,Sa,Ua,Ea,Ia,Aa,ka,qa,Pa,Fa,Da={exports:{}};function Ma(){if(ho)return yo;ho=1;var t=Ai()(Object.getPrototypeOf,Object);return yo=t}function Ra(){if(bo)return mo;bo=1;var t=kr(),e=Ma(),r=Fn(),n=Pn(),i=Object.getOwnPropertySymbols;return mo=i?function(n){for(var i=[];n;)t(i,r(n)),n=e(n);return i}:n}function za(){if(xo)return wo;xo=1;var t=qn(),e=Ra(),r=lo();return wo=function(n){return t(n,r,e)}}function Na(){if(Eo)return Uo;Eo=1;var t=In();return Uo=function(e){var r=new e.constructor(e.byteLength);return new t(r).set(new t(e)),r}}function Ta(){if(zo)return Ro;zo=1;var t=Na(),e=function(){if(Ao)return Io;Ao=1;var t=Na();return Io=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}}(),r=function(){if(qo)return ko;qo=1;var t=/\w*$/;return ko=function(e){var r=new e.constructor(e.source,t.exec(e));return r.lastIndex=e.lastIndex,r}}(),n=function(){if(Fo)return Po;Fo=1;var t=sr(),e=t?t.prototype:void 0,r=e?e.valueOf:void 0;return Po=function(t){return r?Object(r.call(t)):{}}}(),i=function(){if(Mo)return Do;Mo=1;var t=Na();return Do=function(e,r){var n=r?t(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}}();return Ro=function(o,a,u){var s=o.constructor;switch(a){case"[object ArrayBuffer]":return t(o);case"[object Boolean]":case"[object Date]":return new s(+o);case"[object DataView]":return e(o,u);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return i(o,u);case"[object Map]":case"[object Set]":return new s;case"[object Number]":case"[object String]":return new s(o);case"[object RegExp]":return r(o);case"[object Symbol]":return n(o)}}}function Ca(){if(Lo)return Co;Lo=1;var t=function(){if(To)return No;To=1;var t=cr(),e=Object.create,r=function(){function r(){}return function(n){if(!t(n))return{};if(e)return e(n);r.prototype=n;var i=new r;return r.prototype=void 0,i}}();return No=r}(),e=Ma(),r=Ii();return Co=function(n){return"function"!=typeof n.constructor||r(n)?{}:t(e(n))}}function La(){if($o)return Ho;$o=1;var t=function(){if(Bo)return Jo;Bo=1;var t=Di(),e=qr();return Jo=function(r){return e(r)&&"[object Map]"==t(r)}}(),e=Ir(),r=Si(),n=r&&r.isMap,i=n?e(n):t;return Ho=i}function Ja(){if(Yo)return Vo;Yo=1;var t=function(){if(Go)return Wo;Go=1;var t=Di(),e=qr();return Wo=function(r){return e(r)&&"[object Set]"==t(r)}}(),e=Ir(),r=Si(),n=r&&r.isSet,i=n?e(n):t;return Vo=i}function Ba(){if(Ko)return Xo;Ko=1;var t=Un(),e=(Ci||(Ci=1,Ti=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}),Ti),r=ao(),n=function(){if(Vi)return Gi;Vi=1;var t=uo(),e=qi();return Gi=function(r,n){return r&&t(n,e(n),r)}}(),i=function(){if(ro)return eo;ro=1;var t=uo(),e=lo();return eo=function(r,n){return r&&t(n,e(n),r)}}(),o=(co||(co=1,function(t,e){var r=ur(),n=e&&!e.nodeType&&e,i=n&&t&&!t.nodeType&&t,o=i&&i.exports===n?r.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=a?a(r):new t.constructor(r);return t.copy(n),n}}(Da,Da.exports)),Da.exports),a=(vo||(vo=1,fo=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}),fo),u=function(){if(po)return _o;po=1;var t=uo(),e=Fn();return _o=function(r,n){return t(r,e(r),n)}}(),s=function(){if(jo)return go;jo=1;var t=uo(),e=Ra();return go=function(r,n){return t(r,e(r),n)}}(),l=Pi(),c=za(),f=Di(),d=function(){if(So)return Oo;So=1;var t=Object.prototype.hasOwnProperty;return Oo=function(e){var r=e.length,n=new e.constructor(r);return r&&"string"==typeof e[0]&&t.call(e,"index")&&(n.index=e.index,n.input=e.input),n}}(),v=Ta(),_=Ca(),p=Fr(),y=Jn(),h=La(),m=cr(),b=Ja(),g=qi(),j=lo(),w="[object Arguments]",x="[object Function]",O="[object Object]",S={};return S[w]=S["[object Array]"]=S["[object ArrayBuffer]"]=S["[object DataView]"]=S["[object Boolean]"]=S["[object Date]"]=S["[object Float32Array]"]=S["[object Float64Array]"]=S["[object Int8Array]"]=S["[object Int16Array]"]=S["[object Int32Array]"]=S["[object Map]"]=S["[object Number]"]=S[O]=S["[object RegExp]"]=S["[object Set]"]=S["[object String]"]=S["[object Symbol]"]=S["[object Uint8Array]"]=S["[object Uint8ClampedArray]"]=S["[object Uint16Array]"]=S["[object Uint32Array]"]=!0,S["[object Error]"]=S[x]=S["[object WeakMap]"]=!1,Xo=function U(E,I,A,k,q,P){var F,D=1&I,M=2&I,R=4&I;if(A&&(F=q?A(E,k,q,P):A(E)),void 0!==F)return F;if(!m(E))return E;var z=p(E);if(z){if(F=d(E),!D)return a(E,F)}else{var N=f(E),T=N==x||"[object GeneratorFunction]"==N;if(y(E))return o(E,D);if(N==O||N==w||T&&!q){if(F=M||T?{}:_(E),!D)return M?s(E,i(F,E)):u(E,n(F,E))}else{if(!S[N])return q?E:{};F=v(E,N,D)}}P||(P=new t);var C=P.get(E);if(C)return C;P.set(E,F),b(E)?E.forEach(function(t){F.add(U(t,I,A,t,E,P))}):h(E)&&E.forEach(function(t,e){F.set(e,U(t,I,A,e,E,P))});var L=z?void 0:(R?M?c:l:M?j:g)(E);return e(L||E,function(t,e){L&&(t=E[e=t]),r(F,e,U(t,I,A,e,E,P))}),F},Xo}function Ha(){if(Qo)return Zo;Qo=1;var t=lr(),e=qr();return Zo=function(r){return"symbol"==typeof r||e(r)&&"[object Symbol]"==t(r)}}function $a(){if(na)return ra;na=1;var t=wr();function e(r,n){if("function"!=typeof r||null!=n&&"function"!=typeof n)throw new TypeError("Expected a function");var i=function(){var t=arguments,e=n?n.apply(this,t):t[0],o=i.cache;if(o.has(e))return o.get(e);var a=r.apply(this,t);return i.cache=o.set(e,a)||o,a};return i.cache=new(e.Cache||t),i}return e.Cache=t,ra=e}function Wa(){if(ua)return aa;ua=1;var t=function(){if(oa)return ia;oa=1;var t=$a();return ia=function(e){var r=t(e,function(t){return 500===n.size&&n.clear(),t}),n=r.cache;return r}}(),e=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,r=/\\(\\)?/g,n=t(function(t){var n=[];return 46===t.charCodeAt(0)&&n.push(""),t.replace(e,function(t,e,i,o){n.push(i?o.replace(r,"$1"):e||t)}),n});return aa=n}function Ga(){if(fa)return ca;fa=1;var t=function(){if(la)return sa;la=1;var t=sr(),e=Er(),r=Fr(),n=Ha(),i=t?t.prototype:void 0,o=i?i.toString:void 0;return sa=function t(i){if("string"==typeof i)return i;if(r(i))return e(i,t)+"";if(n(i))return o?o.call(i):"";var a=i+"";return"0"==a&&1/i==-1/0?"-0":a},sa}();return ca=function(e){return null==e?"":t(e)}}function Va(){if(va)return da;va=1;var t=Fr(),e=function(){if(ea)return ta;ea=1;var t=Fr(),e=Ha(),r=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,n=/^\w*$/;return ta=function(i,o){if(t(i))return!1;var a=typeof i;return!("number"!=a&&"symbol"!=a&&"boolean"!=a&&null!=i&&!e(i))||n.test(i)||!r.test(i)||null!=o&&i in Object(o)}}(),r=Wa(),n=Ga();return da=function(i,o){return t(i)?i:e(i,o)?[i]:r(n(i))}}function Ya(){if(pa)return _a;pa=1;var t=Ha();return _a=function(e){if("string"==typeof e||t(e))return e;var r=e+"";return"0"==r&&1/e==-1/0?"-0":r}}function Xa(){if(ja)return ga;ja=1;var t=function(){if(ha)return ya;ha=1;var t=Va(),e=Ya();return ya=function(r,n){for(var i=0,o=(n=t(n,r)).length;null!=r&&i<o;)r=r[e(n[i++])];return i&&i==o?r:void 0},ya}(),e=(ba||(ba=1,ma=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}),ma);return ga=function(r,n){return n.length<2?r:t(r,e(n,0,-1))}}function Ka(){if(Ea)return Ua;Ea=1;var t=function(){if(Sa)return Oa;Sa=1;var t=lr(),e=Ma(),r=qr(),n=Function.prototype,i=Object.prototype,o=n.toString,a=i.hasOwnProperty,u=o.call(Object);return Oa=function(n){if(!r(n)||"[object Object]"!=t(n))return!1;var i=e(n);if(null===i)return!0;var s=a.call(i,"constructor")&&i.constructor;return"function"==typeof s&&s instanceof s&&o.call(s)==u}}();return Ua=function(e){return t(e)?void 0:e}}function Za(){if(qa)return ka;qa=1;var t=function(){if(Aa)return Ia;Aa=1;var t=Dr();return Ia=function(e){return null!=e&&e.length?t(e,1):[]}}(),e=Rr(),r=Tr();return ka=function(n){return r(e(n,void 0,t),n+"")}}var Qa,tu,eu,ru,nu,iu,ou,au,uu=function(){if(Fa)return Pa;Fa=1;var t=Er(),e=Ba(),r=function(){if(xa)return wa;xa=1;var t=Va(),e=Jr(),r=Xa(),n=Ya(),i=Object.prototype.hasOwnProperty;return wa=function(o,a){var u=-1,s=(a=t(a,o)).length;if(!s)return!0;for(;++u<s;){var l=n(a[u]);if("__proto__"===l&&!i.call(o,"__proto__"))return!1;if(("constructor"===l||"prototype"===l)&&u<s-1)return!1}var c=r(o,a);return null==c||delete c[n(e(a))]},wa}(),n=Va(),i=uo(),o=Ka(),a=Za(),u=za(),s=a(function(a,s){var l={};if(null==a)return l;var c=!1;s=t(s,function(t){return t=n(t,a),c||(c=t.length>1),t}),i(a,u(a),l),c&&(l=e(l,7,o));for(var f=s.length;f--;)r(l,s[f]);return l});return Pa=s}(),su=b(uu);function lu(){if(ru)return eu;ru=1;var t=Fi(),e=tu?Qa:(tu=1,Qa=function(){}),r=An(),n=t&&1/r(new t([,-0]))[1]==1/0?function(e){return new t(e)}:e;return eu=n}!function(){if(au)return ou;au=1;var t=function(){if(iu)return nu;iu=1;var t=xr(),e=Sr(),r=Ur(),n=Ar(),i=lu(),o=An();return nu=function(a,u,s){var l=-1,c=e,f=a.length,d=!0,v=[],_=v;if(s)d=!1,c=r;else if(f>=200){var p=u?null:i(a);if(p)return o(p);d=!1,c=n,_=new t}else _=u?[]:v;t:for(;++l<f;){var y=a[l],h=u?u(y):y;if(y=s||0!==y?y:0,d&&h==h){for(var m=_.length;m--;)if(_[m]===h)continue t;u&&_.push(h),v.push(y)}else c(_,h,s)||(_!==v&&_.push(h),v.push(y))}return v},nu}();ou=function(e,r){return r="function"==typeof r?r:void 0,e&&e.length?t(e,void 0,r):[]}}();var cu,fu,du=b($a());var vu,_u,pu=b(function(){if(fu)return cu;fu=1;var t=Ga(),e=/[\\^$.*+?()[\]{}|]/g,r=RegExp(e.source);return cu=function(n){return(n=t(n))&&r.test(n)?n.replace(e,"\\$&"):n}}());var yu=b(function(){if(_u)return vu;_u=1;var t=Ba();return vu=function(e){return t(e,5)}}());const hu=t=>t.localadmin||t.localadmin||t.address&&t.address.lastIndexOf(",")<t.address.length-2&&t.address.substring(t.address.lastIndexOf(",")+2)||"",mu=({id:t,code:e})=>e||(void 0!==t&&void 0!==t.indexOf&&-1!==t.indexOf("#")?t.substring(t.indexOf("#")+1):void 0),bu=(t,e)=>[t||e&&e.split(",")[0],"string"==typeof e?e.replace(new RegExp(`${pu(t)}([ ,]|$)+`),""):""];function gu(t,e){void 0===e&&(e={});var r=e.insertAt;if(t&&"undefined"!=typeof document){var n=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===r&&n.firstChild?n.insertBefore(i,n.firstChild):n.appendChild(i),i.styleSheet?i.styleSheet.cssText=t:i.appendChild(document.createTextNode(t))}}du((t,e=!1)=>{switch(t.layer){case"currentPosition":return[t.labelId,t.address];case"selectFromMap":case"ownLocations":case"back":return[t.labelId];case"favouritePlace":return bu(t.name,t.address);case"favouriteVehicleRentalStation":case"bikestation":return[t.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!e&&t.shortName?[t.gtfsId,t.mode.toLowerCase(),t.longName]:[t.shortName,t.longName,t.agency?t.agency.name:void 0];case"venue":case"address":case"street":return[t.name,t.label.replace(new RegExp(`${pu(t.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return e?[t.name||t.label||t.address&&t.address.split(",")[0],hu(t)]:[t.name,t.id,mu(t),hu(t)];default:return[t.name||t.label||t.address&&t.address.split(",")[0],hu(t)]}},(t,e)=>{const r=yu(t);return r.plain=e,r});var ju="modal-content_favourite-edit-modal-content-container__JU5Rq",wu="modal-content_favourite-edit-modal-content-top__sRkw9",xu="modal-content_favourite-edit-modal-content-header__2X3vh";gu(".modal-content_favourite-edit-modal-content-container__JU5Rq {\n display: flex;\n flex-direction: column;\n}\n.modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 {\n display: flex;\n flex-direction: row;\n width: 100%;\n border-bottom: 1px solid #ddd;\n margin-bottom: 31px;\n}\n@media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 {\n border-bottom: none;\n margin-bottom: 0;\n }\n}\n.modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 .modal-content_favourite-edit-modal-content-header__2X3vh {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: inherit;\n font-size: 18px;\n font-weight: var(--font-weight-medium);\n line-height: normal;\n letter-spacing: -0.6px;\n color: #333;\n margin-bottom: 34px;\n}\n@media screen and (min-width: 768px) {\n .modal-content_favourite-edit-modal-content-container__JU5Rq .modal-content_favourite-edit-modal-content-top__sRkw9 .modal-content_favourite-edit-modal-content-header__2X3vh {\n justify-content: start;\n align-items: center;\n margin-bottom: 26px;\n line-height: 1.33;\n }\n}");const Ou=({headerText:t,renderList:e})=>d.default.createElement("div",{className:ju},d.default.createElement("div",{className:wu},d.default.createElement("div",{className:xu},t)),e());"production"!==process.env.NODE_ENV&&(Ou.propTypes={headerText:f.default.string.isRequired,renderList:f.default.func.isRequired});var Su={"favourite-edit-list-container":"styles_favourite-edit-list-container__vq7ll","favourite-edit-list":"styles_favourite-edit-list__UHS9t","favourite-edit-list-item":"styles_favourite-edit-list-item__EUJUv","favourite-edit-list-item-left":"styles_favourite-edit-list-item-left__IxlaI","favourite-edit-list-arrow-hidden":"styles_favourite-edit-list-arrow-hidden__qRiee","favourite-edit-list-item-drag":"styles_favourite-edit-list-item-drag__s5zvD","favourite-edit-list-item-ellipsis":"styles_favourite-edit-list-item-ellipsis__pOMf4","favourite-edit-list-item-icon":"styles_favourite-edit-list-item-icon__gwDvm",place:"styles_place__ymmqu",home:"styles_home__pPJsU",school:"styles_school__Gq5Lo",sport:"styles_sport__fBWhN",shopping:"styles_shopping__EFuXp",work:"styles_work__fs304","favourite-edit-list-item-content":"styles_favourite-edit-list-item-content__8sO3v","favourite-edit-list-item-name":"styles_favourite-edit-list-item-name__WsY-0","favourite-edit-list-item-address":"styles_favourite-edit-list-item-address__gRY2h","favourite-edit-list-item-right":"styles_favourite-edit-list-item-right__LB9Gt","favourite-edit-list-item-edit":"styles_favourite-edit-list-item-edit__8dTrk","favourite-edit-list-item-remove":"styles_favourite-edit-list-item-remove__61AmT","favourite-edit-list-overlay":"styles_favourite-edit-list-overlay__hKFGc"};gu(".styles_favourite-edit-list-container__vq7ll {\n display: flex;\n position: relative;\n width: 100%;\n}\n@media screen and (min-width: 768px) {\n .styles_favourite-edit-list-container__vq7ll {\n min-height: 286px;\n }\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t {\n display: flex;\n flex-direction: column;\n width: 100%;\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv:not(:first-child) {\n margin-top: 9px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv {\n display: flex;\n flex-direction: row;\n align-items: center;\n background: white;\n margin: 0;\n padding: 0;\n width: 100%;\n min-height: 50px;\n border-radius: 5px;\n border: solid 1px #ddd;\n list-style: none;\n box-sizing: border-box;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI {\n display: flex;\n min-width: 69px;\n height: 100%;\n align-items: center;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-arrow-hidden__qRiee {\n z-index: -999;\n opacity: 0;\n width: 0;\n padding: 0;\n border: 0;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-arrow-hidden__qRiee:focus {\n font-weight: bold;\n z-index: 10;\n opacity: 1;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-drag__s5zvD {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 37px;\n height: 100%;\n cursor: move;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-drag__s5zvD .styles_favourite-edit-list-item-ellipsis__pOMf4 {\n height: 20px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-drag__s5zvD .styles_favourite-edit-list-item-ellipsis__pOMf4 svg {\n fill: #888;\n height: 20px;\n transform: rotate(90deg);\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 24px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm svg {\n position: relative;\n left: -3px;\n top: -1px;\n fill: var(--color);\n width: 22px;\n height: 22px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_place__ymmqu svg {\n fill: var(--color);\n width: 24px;\n height: 24px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_home__pPJsU svg, .styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_school__Gq5Lo svg, .styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_sport__fBWhN svg, .styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_shopping__EFuXp svg {\n fill: var(--color);\n width: 18px;\n height: 18px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-left__IxlaI .styles_favourite-edit-list-item-icon__gwDvm.styles_work__fs304 svg {\n fill: var(--color);\n width: 20px;\n height: 20px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v {\n display: flex;\n flex-direction: column;\n width: calc(100% - 69px - 86px);\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v .styles_favourite-edit-list-item-name__WsY-0 {\n margin: 0;\n font-weight: var(--font-weight-medium);\n color: #333;\n font-size: 15px;\n line-height: 1;\n letter-spacing: -0.6px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v .styles_favourite-edit-list-item-address__gRY2h {\n margin: 3px 0 0;\n color: #666;\n font-size: 12px;\n font-weight: 400;\n line-height: 1;\n letter-spacing: -0.48px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-content__8sO3v .styles_favourite-edit-list-item-address__gRY2h:empty {\n margin-top: 0;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt {\n display: flex;\n min-width: 86px;\n align-items: center;\n justify-content: space-evenly;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-edit__8dTrk {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 22px;\n height: 48px;\n cursor: pointer;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-edit__8dTrk svg {\n fill: #888;\n width: 22px;\n height: 22px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-remove__61AmT {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n width: 18px;\n height: 48px;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list__UHS9t .styles_favourite-edit-list-item__EUJUv .styles_favourite-edit-list-item-right__LB9Gt .styles_favourite-edit-list-item-remove__61AmT svg {\n fill: #888;\n width: 18px;\n height: 20px;\n}\n.styles_favourite-edit-list-container__vq7ll > div {\n width: 100%;\n}\n.styles_favourite-edit-list-container__vq7ll .styles_favourite-edit-list-overlay__hKFGc {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #fff;\n}");const Uu=l.createInstance({fallbackLng:"fi",resources:{de:{translation:{cancel:"Abbrechen",delete:"Löschen","delete-place-header":"Wollen Sie den Favoriten löschen?","delete-place-name":"Lösche Favorit: {{favourite.name}}","edit-places":"Bearbeite Favoriten","edit-place-name":"Bearbeite Favorit: {{favourite.name}}","edit-modal-on-open":"Favoriten bearbeiten.","choose-icon":"Wähle das Symbol für diesen Ort","close-modal":"Schließe den Dialog","input-placeholder":"Wählen Sie einen Name für diesen Ort (optional)",save:"Speichern","save-place":"Favorit speichern"}},en:{translation:{cancel:"Cancel",delete:"Delete","delete-place-header":"Do you want to delete the place?","delete-place-name":"Delete place: {{favourite.name}}","edit-places":"Edit places","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Select the place's icon","close-modal":"Close the modal","input-placeholder":"Give the name a place (optional)",save:"Save","save-place":"Save place",up:"Move favourite up",down:"Move favourite down"}},fi:{translation:{cancel:"Peruuta",delete:"Poista","delete-place-header":"Haluatko poistaa paikan?","delete-place-name":"Poista paikka: {{favourite.name}}","edit-places":"Muokkaa paikkoja","edit-place-name":"Muokkaa paikkaa: {{favourite.name}}","edit-modal-on-open":"Suosikkien muokkaus modaali.","choose-icon":"Valitse paikan kuvake","close-modal":"Sulje modaali","input-placeholder":"Anna paikalle nimi (vapaaehtoinen)",save:"Tallenna","save-place":"Tallenna paikka",up:"Siirrä suosikkisijaintia ylöpäin",down:"Siirrä suosikkisijaintia alaspäin"}},pl:{translation:{cancel:"Anuluj",delete:"Usuń","delete-place-header":"Czy na pewno chcesz usunąć to miejsce?","delete-place-name":"Usuń miejsce: {{favourite.name}}","edit-places":"Edytuj miejsca","edit-place-name":"Edytuj miejsce: {{favourite.name}}","edit-modal-on-open":"Modal edycji ulubionych.","choose-icon":"Wybierz ikonę miejsca","close-modal":"Zamknij modal","input-placeholder":"Nadaj nazwę miejscu (opcjonalne)",save:"Zapisz","save-place":"Zapisz miejsce",up:"Przenieś ulubione wyżej",down:"Przenieś ulubione niżej"}},sv:{translation:{cancel:"Avbryt",delete:"Ta bort","delete-place-header":"Vill du ta bort platsen?","delete-place-name":"Ta bort platsen: {{favourite.name}}","edit-places":"Redigera platser","edit-place-name":"Edit place: {{favourite.name}}","edit-modal-on-open":"Favourite editing modal.","choose-icon":"Välj platsens ikon","close-modal":"Stäng modalen","input-placeholder":"Ange platsens namn (frivilligt)",save:"Spara","save-place":"Spara plats",up:"Flytta favoriten uppåt",down:"Flytta favoriten nedåt"}}},defaultNS:"translation",react:{useSuspense:!0}});function Eu(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}Uu.init();const Iu=t=>{const e=t&&(t.key||t.which||t.keyCode)||"";return!(!e||![13," ","Spacebar"].concat([32,"Enter"]).includes(e))&&(t.preventDefault(),!0)};class Au extends d.default.Component{constructor(t){super(t),m(this,"translate",(t,e)=>this.props.t(t,function(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?Eu(Object(r),!0).forEach(function(e){m(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Eu(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}({lng:this.props.lang},e))),m(this,"moveFavourite",(t,e)=>{const{favourites:r}=this.state,n=[...r],i=n[t+e];n[t+e]=n[t],n[t]=i,this.setState({favourites:n})}),m(this,"renderFavouriteListItem",(t,e)=>{let r="place";if(t.selectedIconId){const e=t.selectedIconId.indexOf("icon_");e>0&&(r=t.selectedIconId.substring(e+5))}const[n,i]=bu(t.name,t.address);return d.default.createElement("li",{className:or(Su["favourite-edit-list-item"]),key:t.favouriteId},d.default.createElement("div",{className:Su["favourite-edit-list-item-left"]},e>0&&d.default.createElement("button",{className:Su["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("up"),onClick:()=>{this.moveFavourite(e,-1)}},"↑"),e<this.state.favourites.length-1&&d.default.createElement("button",{className:Su["favourite-edit-list-arrow-hidden"],type:"button","aria-label":this.translate("down"),onClick:()=>{this.moveFavourite(e,1)}},"↓"),d.default.createElement("div",{className:Su["favourite-edit-list-item-drag"]},d.default.createElement("div",{className:Su["favourite-edit-list-item-ellipsis"]},d.default.createElement(_.default,{img:"ellipsis"}))),d.default.createElement("div",{className:or(Su["favourite-edit-list-item-icon"],Su[r])},d.default.createElement(_.default,{img:r,color:this.props.colors.primary}))),d.default.createElement("div",{className:Su["favourite-edit-list-item-content"]},d.default.createElement("p",{className:Su["favourite-edit-list-item-name"]},n),d.default.createElement("p",{className:Su["favourite-edit-list-item-address"]},i)),d.default.createElement("div",{className:Su["favourite-edit-list-item-right"]},d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("edit-place-name",{favourite:t}),className:Su["favourite-edit-list-item-edit"],onClick:()=>this.props.onEditSelected(t),onKeyDown:e=>{Iu(e)&&this.props.onEditSelected(t)}},d.default.createElement(_.default,{img:"edit"})),d.default.createElement("div",{role:"button",tabIndex:"0","aria-label":this.translate("delete-place-name",{favourite:t}),className:Su["favourite-edit-list-item-remove"],onClick:()=>this.setState({selectedFavourite:t,showDeletePlaceModal:!0}),onKeyDown:e=>{Iu(e)&&this.setState({selectedFavourite:t,showDeletePlaceModal:!0})}},d.default.createElement(_.default,{img:"trash"}))))}),m(this,"renderFavouriteList",()=>{const{isLoading:t}=this.props,{favourites:e}=this.state;return d.default.createElement("div",{className:Su["favourite-edit-list-container"]},d.default.createElement(i.ReactSortable,{className:Su["favourite-edit-list"],tag:"ul",list:e,setList:t=>this.setState({favourites:t}),animation:200,handle:`.${Su["favourite-edit-list-item-left"]}`},e.map((t,e)=>this.renderFavouriteListItem(t,e))),t&&d.default.createElement("div",{className:Su["favourite-edit-list-overlay"]},d.default.createElement(o.Spinner,null)))}),m(this,"renderDeleteFavouriteModal",t=>d.default.createElement(p.default,{headerText:this.translate("delete-place-header"),handleClose:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1},()=>this.props.handleClose()),isModalOpen:this.state.showDeletePlaceModal,dialogContent:t?`${t.name}: ${t.address}`:"",primaryButtonText:this.translate("delete"),primaryButtonOnClick:()=>{this.props.deleteFavourite(t),this.setState({selectedFavourite:null,showDeletePlaceModal:!1})},secondaryButtonText:this.translate("cancel"),secondaryButtonOnClick:()=>this.setState({selectedFavourite:null,showDeletePlaceModal:!1}),lang:this.props.lang})),m(this,"closeModal",()=>{this.props.handleClose();const t=this.state.favourites.map(t=>su(t,["chosen","selected"]));Ni(t,this.props.favourites)||this.props.updateFavourites(t)}),m(this,"renderModalContent",()=>{const{fontWeights:t}=this.props,{primary:e,hover:r}=this.props.colors,n={headerText:this.translate("edit-places"),renderList:this.renderFavouriteList},i={"--color":e,"--hover-color":r,"--font-weight-medium":t.medium};return d.default.createElement("div",{style:i},d.default.createElement(Ou,n))}),this.state={favourites:t.favourites,showDeletePlaceModal:!1,selectedFavourite:null}}static getDerivedStateFromProps(t,e){const r=t.favourites,n=e.favourites;return io(Sn(r,n,Ni))&&io(Sn(n,r,Ni))?null:(io(r)&&t.handleClose(),{favourites:r})}render(){const{isMobile:t}=this.props,{showDeletePlaceModal:e,selectedFavourite:r}=this.state;return d.default.createElement(v.default,{appElement:this.props.appElement,contentLabel:this.translate("edit-modal-on-open"),closeButtonLabel:this.translate("close-modal"),variant:t?"large":"small",isOpen:this.props.isModalOpen,onCrossClick:this.closeModal},this.renderDeleteFavouriteModal(r),!e&&this.renderModalContent())}}m(Au,"defaultProps",{lang:"fi",isMobile:!1,colors:u.defaultColors,fontWeights:{medium:500}}),"production"!==process.env.NODE_ENV&&(Au.propTypes={handleClose:f.default.func.isRequired,updateFavourites:f.default.func.isRequired,deleteFavourite:f.default.func.isRequired,onEditSelected:f.default.func.isRequired,favourites:f.default.arrayOf(f.default.shape({type:f.default.string,address:f.default.string,gtfsId:f.default.string,gid:f.default.string,lat:f.default.number,lon:f.default.number,name:f.default.string,selectedIconId:f.default.string,favouriteId:f.default.string,layer:f.default.string})).isRequired,lang:f.default.string,t:f.default.func.isRequired,appElement:f.default.string.isRequired,isModalOpen:f.default.bool.isRequired,isMobile:f.default.bool,isLoading:f.default.bool.isRequired,colors:f.default.objectOf(f.default.string),fontWeights:f.default.shape({medium:f.default.number})});const ku=n.withTranslation()(Au);t.default=t=>d.default.createElement(n.I18nextProvider,{i18n:Uu},d.default.createElement(ku,t)),Object.defineProperty(t,"__esModule",{value:!0})});
7
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jbGFzc25hbWVzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZnJlZUdsb2JhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb2JqZWN0VG9TdHJpbmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0Z1bmN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9Tb3VyY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXROYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUFkZC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlSGFzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmluZEluZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUluY2x1ZGVzV2l0aC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2FjaGVIYXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzRmxhdHRlbmFibGUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lkZW50aXR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvU3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzTGVuZ3RoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbGFzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZGlmZmVyZW5jZVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZU9iamVjdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNFcXVhbC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnblZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzaWduVmFsdWUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5T2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXNJbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gva2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0U3ltYm9sc0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0QWxsS2V5c0luLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVBcnJheUJ1ZmZlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2luaXRDbG9uZUJ5VGFnLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVEYXRhVmlldy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nsb25lUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jbG9uZVR5cGVkQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVPYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNTZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUVhY2guanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXNzaWduLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUFzc2lnbkluLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY2xvbmVCdWZmZXIuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5U3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcHlTeW1ib2xzSW4uanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbml0Q2xvbmVBcnJheS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3BhcmVudC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jdXN0b21PbWl0Q2xvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzUGxhaW5PYmplY3QuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mbGF0UmVzdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvb21pdC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VVbnNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVNldC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdW5pcVdpdGguanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5pcS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZXNjYXBlUmVnRXhwLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jbG9uZURlZXAuanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vZGFsQ29udGVudC5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKiFcblx0Q29weXJpZ2h0IChjKSAyMDE4IEplZCBXYXRzb24uXG5cdExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXG5cdGh0dHA6Ly9qZWR3YXRzb24uZ2l0aHViLmlvL2NsYXNzbmFtZXNcbiovXG4vKiBnbG9iYWwgZGVmaW5lICovXG5cbihmdW5jdGlvbiAoKSB7XG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgaGFzT3duID0ge30uaGFzT3duUHJvcGVydHk7XG5cblx0ZnVuY3Rpb24gY2xhc3NOYW1lcyAoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSAnJztcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKGFyZykge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3NlcywgcGFyc2VWYWx1ZShhcmcpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIHBhcnNlVmFsdWUgKGFyZykge1xuXHRcdGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuXHRcdFx0cmV0dXJuIGFyZztcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIGFyZyAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdH1cblxuXHRcdGlmIChhcmcudG9TdHJpbmcgIT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgJiYgIWFyZy50b1N0cmluZy50b1N0cmluZygpLmluY2x1ZGVzKCdbbmF0aXZlIGNvZGVdJykpIHtcblx0XHRcdHJldHVybiBhcmcudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHR2YXIgY2xhc3NlcyA9ICcnO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0aWYgKGhhc093bi5jYWxsKGFyZywga2V5KSAmJiBhcmdba2V5XSkge1xuXHRcdFx0XHRjbGFzc2VzID0gYXBwZW5kQ2xhc3MoY2xhc3Nlcywga2V5KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZENsYXNzICh2YWx1ZSwgbmV3Q2xhc3MpIHtcblx0XHRpZiAoIW5ld0NsYXNzKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcblx0XHRpZiAodmFsdWUpIHtcblx0XHRcdHJldHVybiB2YWx1ZSArICcgJyArIG5ld0NsYXNzO1xuXHRcdH1cblx0XG5cdFx0cmV0dXJuIHZhbHVlICsgbmV3Q2xhc3M7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGhhc2hDbGVhciA9IHJlcXVpcmUoJy4vX2hhc2hDbGVhcicpLFxuICAgIGhhc2hEZWxldGUgPSByZXF1aXJlKCcuL19oYXNoRGVsZXRlJyksXG4gICAgaGFzaEdldCA9IHJlcXVpcmUoJy4vX2hhc2hHZXQnKSxcbiAgICBoYXNoSGFzID0gcmVxdWlyZSgnLi9faGFzaEhhcycpLFxuICAgIGhhc2hTZXQgPSByZXF1aXJlKCcuL19oYXNoU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYEhhc2hgLlxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBoYXNoQ2xlYXI7XG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBoYXNoRGVsZXRlO1xuSGFzaC5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDtcbkhhc2gucHJvdG90eXBlLmhhcyA9IGhhc2hIYXM7XG5IYXNoLnByb3RvdHlwZS5zZXQgPSBoYXNoU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhhc2g7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gdGhpcy5oYXMoa2V5KSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXldO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaERlbGV0ZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAobmF0aXZlQ3JlYXRlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGRhdGFba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcbiAgfVxuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpID8gZGF0YVtrZXldIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hHZXQ7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgaGFzaCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICByZXR1cm4gbmF0aXZlQ3JlYXRlID8gKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkKSA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoSGFzO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogU2V0cyB0aGUgaGFzaCBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGhhc2hTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XG4gIGRhdGFba2V5XSA9IChuYXRpdmVDcmVhdGUgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoU2V0O1xuIiwiLyoqXG4gKiBQZXJmb3JtcyBhXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWl2YWxlbnQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoJ2EnLCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uZXEoTmFOLCBOYU4pO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBvdGhlciB8fCAodmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXE7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgaXNLZXlhYmxlID0gcmVxdWlyZSgnLi9faXNLZXlhYmxlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgZGF0YSBmb3IgYG1hcGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XG4gIHJldHVybiBpc0tleWFibGUoa2V5KVxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXG4gICAgOiBkYXRhLm1hcDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXBEYXRhO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgcmV0dXJuICh0eXBlID09ICdzdHJpbmcnIHx8IHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJylcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5YWJsZTtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCJ2YXIgYmFzZUZpbmRJbmRleCA9IHJlcXVpcmUoJy4vX2Jhc2VGaW5kSW5kZXgnKSxcbiAgICBiYXNlSXNOYU4gPSByZXF1aXJlKCcuL19iYXNlSXNOYU4nKSxcbiAgICBzdHJpY3RJbmRleE9mID0gcmVxdWlyZSgnLi9fc3RyaWN0SW5kZXhPZicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmluZGV4T2ZgIHdpdGhvdXQgYGZyb21JbmRleGAgYm91bmRzIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlXG4gICAgPyBzdHJpY3RJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KVxuICAgIDogYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUlzTmFOLCBmcm9tSW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJbmRleE9mO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maW5kSW5kZXhgIGFuZCBgXy5maW5kTGFzdEluZGV4YCB3aXRob3V0XG4gKiBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IGZyb21JbmRleCBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGaW5kSW5kZXgoYXJyYXksIHByZWRpY2F0ZSwgZnJvbUluZGV4LCBmcm9tUmlnaHQpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGluZGV4ID0gZnJvbUluZGV4ICsgKGZyb21SaWdodCA/IDEgOiAtMSk7XG5cbiAgd2hpbGUgKChmcm9tUmlnaHQgPyBpbmRleC0tIDogKytpbmRleCA8IGxlbmd0aCkpIHtcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbmRJbmRleDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYU5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbnVtYmVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYE5hTmAsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmFOO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5kZXhPZmAgd2hpY2ggcGVyZm9ybXMgc3RyaWN0IGVxdWFsaXR5XG4gKiBjb21wYXJpc29ucyBvZiB2YWx1ZXMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggLSAxLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmljdEluZGV4T2Y7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5pbmNsdWRlc2AgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBzcGVjaWZ5aW5nIGFuIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB0YXJnZXQgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHRhcmdldGAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlJbmNsdWRlcyhhcnJheSwgdmFsdWUpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCAwKSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXM7XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZSBgYXJyYXlJbmNsdWRlc2AgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIGNvbXBhcmF0b3IuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IHRhcmdldCBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmF0b3IgVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdGFyZ2V0YCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheUluY2x1ZGVzV2l0aChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChjb21wYXJhdG9yKHZhbHVlLCBhcnJheVtpbmRleF0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5SW5jbHVkZXNXaXRoO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBjYWNoZUhhcyhjYWNoZSwga2V5KSB7XG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYWNoZUhhcztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNGbGF0dGVuYWJsZSA9IHJlcXVpcmUoJy4vX2lzRmxhdHRlbmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mbGF0dGVuYCB3aXRoIHN1cHBvcnQgZm9yIHJlc3RyaWN0aW5nIGZsYXR0ZW5pbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoIFRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3ByZWRpY2F0ZT1pc0ZsYXR0ZW5hYmxlXSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNTdHJpY3RdIFJlc3RyaWN0IHRvIHZhbHVlcyB0aGF0IHBhc3MgYHByZWRpY2F0ZWAgY2hlY2tzLlxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdD1bXV0gVGhlIGluaXRpYWwgcmVzdWx0IHZhbHVlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmxhdHRlbihhcnJheSwgZGVwdGgsIHByZWRpY2F0ZSwgaXNTdHJpY3QsIHJlc3VsdCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBwcmVkaWNhdGUgfHwgKHByZWRpY2F0ZSA9IGlzRmxhdHRlbmFibGUpO1xuICByZXN1bHQgfHwgKHJlc3VsdCA9IFtdKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAoZGVwdGggPiAwICYmIHByZWRpY2F0ZSh2YWx1ZSkpIHtcbiAgICAgIGlmIChkZXB0aCA+IDEpIHtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmxhdHRlbiBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgICAgYmFzZUZsYXR0ZW4odmFsdWUsIGRlcHRoIC0gMSwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5UHVzaChyZXN1bHQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1N0cmljdCkge1xuICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZsYXR0ZW47XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpZGVudGl0eTtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSByZXN0IGFycmF5IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyUmVzdChmdW5jLCBzdGFydCwgdHJhbnNmb3JtKSB7XG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBpbmRleCA9IC0xLFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXG4gICAgICAgIGFycmF5ID0gQXJyYXkobGVuZ3RoKTtcblxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBhcnJheVtpbmRleF0gPSBhcmdzW3N0YXJ0ICsgaW5kZXhdO1xuICAgIH1cbiAgICBpbmRleCA9IC0xO1xuICAgIHZhciBvdGhlckFyZ3MgPSBBcnJheShzdGFydCArIDEpO1xuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcbiAgICB9XG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XG4gICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXMsIG90aGVyQXJncyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb3ZlclJlc3Q7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICB2YXIgZnVuYyA9IGdldE5hdGl2ZShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xuICAgIGZ1bmMoe30sICcnLCB7fSk7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnR5O1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCIvKipcbiAqIEdldHMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmxhc3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBhcnJheVtsZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsYXN0O1xuIiwidmFyIGJhc2VEaWZmZXJlbmNlID0gcmVxdWlyZSgnLi9fYmFzZURpZmZlcmVuY2UnKSxcbiAgICBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyksXG4gICAgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGlzQXJyYXlMaWtlT2JqZWN0ID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZU9iamVjdCcpLFxuICAgIGxhc3QgPSByZXF1aXJlKCcuL2xhc3QnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmRpZmZlcmVuY2VgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGNvbXBhcmF0b3JgXG4gKiB3aGljaCBpcyBpbnZva2VkIHRvIGNvbXBhcmUgZWxlbWVudHMgb2YgYGFycmF5YCB0byBgdmFsdWVzYC4gVGhlIG9yZGVyIGFuZFxuICogcmVmZXJlbmNlcyBvZiByZXN1bHQgdmFsdWVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBmaXJzdCBhcnJheS4gVGhlIGNvbXBhcmF0b3JcbiAqIGlzIGludm9rZWQgd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucHVsbEFsbFdpdGhgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gey4uLkFycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGZpbHRlcmVkIHZhbHVlcy5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dO1xuICpcbiAqIF8uZGlmZmVyZW5jZVdpdGgob2JqZWN0cywgW3sgJ3gnOiAxLCAneSc6IDIgfV0sIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDIsICd5JzogMSB9XVxuICovXG52YXIgZGlmZmVyZW5jZVdpdGggPSBiYXNlUmVzdChmdW5jdGlvbihhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBjb21wYXJhdG9yID0gbGFzdCh2YWx1ZXMpO1xuICBpZiAoaXNBcnJheUxpa2VPYmplY3QoY29tcGFyYXRvcikpIHtcbiAgICBjb21wYXJhdG9yID0gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBpc0FycmF5TGlrZU9iamVjdChhcnJheSlcbiAgICA/IGJhc2VEaWZmZXJlbmNlKGFycmF5LCBiYXNlRmxhdHRlbih2YWx1ZXMsIDEsIGlzQXJyYXlMaWtlT2JqZWN0LCB0cnVlKSwgdW5kZWZpbmVkLCBjb21wYXJhdG9yKVxuICAgIDogW107XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkaWZmZXJlbmNlV2l0aDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBtZXRob2RzIGxpa2UgYF8uZGlmZmVyZW5jZWAgd2l0aG91dCBzdXBwb3J0XG4gKiBmb3IgZXhjbHVkaW5nIG11bHRpcGxlIGFycmF5cyBvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGV4Y2x1ZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWVdIFRoZSBpdGVyYXRlZSBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2NvbXBhcmF0b3JdIFRoZSBjb21wYXJhdG9yIGludm9rZWQgcGVyIGVsZW1lbnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBmaWx0ZXJlZCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VEaWZmZXJlbmNlKGFycmF5LCB2YWx1ZXMsIGl0ZXJhdGVlLCBjb21wYXJhdG9yKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzLFxuICAgICAgaXNDb21tb24gPSB0cnVlLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gW10sXG4gICAgICB2YWx1ZXNMZW5ndGggPSB2YWx1ZXMubGVuZ3RoO1xuXG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoaXRlcmF0ZWUpIHtcbiAgICB2YWx1ZXMgPSBhcnJheU1hcCh2YWx1ZXMsIGJhc2VVbmFyeShpdGVyYXRlZSkpO1xuICB9XG4gIGlmIChjb21wYXJhdG9yKSB7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgICBpc0NvbW1vbiA9IGZhbHNlO1xuICB9XG4gIGVsc2UgaWYgKHZhbHVlcy5sZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIGluY2x1ZGVzID0gY2FjaGVIYXM7XG4gICAgaXNDb21tb24gPSBmYWxzZTtcbiAgICB2YWx1ZXMgPSBuZXcgU2V0Q2FjaGUodmFsdWVzKTtcbiAgfVxuICBvdXRlcjpcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIGNvbXB1dGVkID0gaXRlcmF0ZWUgPT0gbnVsbCA/IHZhbHVlIDogaXRlcmF0ZWUodmFsdWUpO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHZhbHVlc0luZGV4ID0gdmFsdWVzTGVuZ3RoO1xuICAgICAgd2hpbGUgKHZhbHVlc0luZGV4LS0pIHtcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXNJbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWluY2x1ZGVzKHZhbHVlcywgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZURpZmZlcmVuY2U7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXG4gKiBpcyBhbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaXNBcnJheUxpa2UodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlT2JqZWN0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBVaW50OEFycmF5ID0gcm9vdC5VaW50OEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVpbnQ4QXJyYXk7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBzZXRgIHRvIGFuIGFycmF5IG9mIGl0cyB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzZXQgVGhlIHNldCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xuXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvQXJyYXk7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBrZXktdmFsdWUgcGFpcnMuXG4gKi9cbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xuXG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcFRvQXJyYXk7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XG4gKiAvLyA9PiBbW10sIFtdXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJBcnJheTtcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2Ygc3ltYm9scy5cbiAqL1xudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IHN0dWJBcnJheSA6IGZ1bmN0aW9uKG9iamVjdCkge1xuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHJldHVybiBhcnJheUZpbHRlcihuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFN5bWJvbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5maWx0ZXJgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlGaWx0ZXI7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi9fZXF1YWxBcnJheXMnKSxcbiAgICBlcXVhbEJ5VGFnID0gcmVxdWlyZSgnLi9fZXF1YWxCeVRhZycpLFxuICAgIGVxdWFsT2JqZWN0cyA9IHJlcXVpcmUoJy4vX2VxdWFsT2JqZWN0cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcbiAqIHJlZmVyZW5jZXMgdG8gYmUgY29tcGFyZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBvYmpJc0FyciA9IGlzQXJyYXkob2JqZWN0KSxcbiAgICAgIG90aElzQXJyID0gaXNBcnJheShvdGhlciksXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG9iamVjdCksXG4gICAgICBvdGhUYWcgPSBvdGhJc0FyciA/IGFycmF5VGFnIDogZ2V0VGFnKG90aGVyKTtcblxuICBvYmpUYWcgPSBvYmpUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG9ialRhZztcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XG5cbiAgdmFyIG9iaklzT2JqID0gb2JqVGFnID09IG9iamVjdFRhZyxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XG5cbiAgaWYgKGlzU2FtZVRhZyAmJiBpc0J1ZmZlcihvYmplY3QpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihvdGhlcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgb2JqSXNBcnIgPSB0cnVlO1xuICAgIG9iaklzT2JqID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgIHJldHVybiAob2JqSXNBcnIgfHwgaXNUeXBlZEFycmF5KG9iamVjdCkpXG4gICAgICA/IGVxdWFsQXJyYXlzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXG4gICAgICA6IGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgfVxuICBpZiAoIShiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcpKSB7XG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XG5cbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxuICAgICAgICAgIG90aFVud3JhcHBlZCA9IG90aElzV3JhcHBlZCA/IG90aGVyLnZhbHVlKCkgOiBvdGhlcjtcblxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1NhbWVUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgcmV0dXJuIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbERlZXA7XG4iLCJ2YXIgZ2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgb2JqUHJvcHMgPSBnZXRBbGxLZXlzKG9iamVjdCksXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXG4gICAgICBvdGhQcm9wcyA9IGdldEFsbEtleXMob3RoZXIpLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xuXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIG9ialN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAob2JqU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIG9ialN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBvYmplY3Q7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IHRydWU7XG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBvYmplY3QpO1xuXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcbiAgd2hpbGUgKCsraW5kZXggPCBvYmpMZW5ndGgpIHtcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJba2V5XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IChvYmpWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKG9ialZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKVxuICAgICAgICAgIDogY29tcGFyZWRcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2tpcEN0b3IgfHwgKHNraXBDdG9yID0ga2V5ID09ICdjb25zdHJ1Y3RvcicpO1xuICB9XG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XG4gICAgdmFyIG9iakN0b3IgPSBvYmplY3QuY29uc3RydWN0b3IsXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcblxuICAgIC8vIE5vbiBgT2JqZWN0YCBvYmplY3QgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWFsLlxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXG4gICAgICAgICEodHlwZW9mIG9iakN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvYmpDdG9yIGluc3RhbmNlb2Ygb2JqQ3RvciAmJlxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxPYmplY3RzO1xuIiwidmFyIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqXG4gKiBQZXJmb3JtcyBhIGRlZXAgY29tcGFyaXNvbiBiZXR3ZWVuIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlXG4gKiBlcXVpdmFsZW50LlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBjb21wYXJpbmcgYXJyYXlzLCBhcnJheSBidWZmZXJzLCBib29sZWFucyxcbiAqIGRhdGUgb2JqZWN0cywgZXJyb3Igb2JqZWN0cywgbWFwcywgbnVtYmVycywgYE9iamVjdGAgb2JqZWN0cywgcmVnZXhlcyxcbiAqIHNldHMsIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCB0eXBlZCBhcnJheXMuIGBPYmplY3RgIG9iamVjdHMgYXJlIGNvbXBhcmVkXG4gKiBieSB0aGVpciBvd24sIG5vdCBpbmhlcml0ZWQsIGVudW1lcmFibGUgcHJvcGVydGllcy4gRnVuY3Rpb25zIGFuZCBET01cbiAqIG5vZGVzIGFyZSBjb21wYXJlZCBieSBzdHJpY3QgZXF1YWxpdHksIGkuZS4gYD09PWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdhJzogMSB9O1xuICpcbiAqIF8uaXNFcXVhbChvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBvYmplY3QgPT09IG90aGVyO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZSwgb3RoZXIpIHtcbiAgcmV0dXJuIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlcik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFcXVhbDtcbiIsInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsInZhciBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBpc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL2lzVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYW4gZW1wdHkgb2JqZWN0LCBjb2xsZWN0aW9uLCBtYXAsIG9yIHNldC5cbiAqXG4gKiBPYmplY3RzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBubyBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWRcbiAqIHByb3BlcnRpZXMuXG4gKlxuICogQXJyYXktbGlrZSB2YWx1ZXMgc3VjaCBhcyBgYXJndW1lbnRzYCBvYmplY3RzLCBhcnJheXMsIGJ1ZmZlcnMsIHN0cmluZ3MsIG9yXG4gKiBqUXVlcnktbGlrZSBjb2xsZWN0aW9ucyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgbGVuZ3RoYCBvZiBgMGAuXG4gKiBTaW1pbGFybHksIG1hcHMgYW5kIHNldHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYHNpemVgIG9mIGAwYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBlbXB0eSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRW1wdHkobnVsbCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KHRydWUpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSgxKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0VtcHR5KHsgJ2EnOiAxIH0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkgJiZcbiAgICAgIChpc0FycmF5KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlLnNwbGljZSA9PSAnZnVuY3Rpb24nIHx8XG4gICAgICAgIGlzQnVmZmVyKHZhbHVlKSB8fCBpc1R5cGVkQXJyYXkodmFsdWUpIHx8IGlzQXJndW1lbnRzKHZhbHVlKSkpIHtcbiAgICByZXR1cm4gIXZhbHVlLmxlbmd0aDtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKTtcbiAgaWYgKHRhZyA9PSBtYXBUYWcgfHwgdGFnID09IHNldFRhZykge1xuICAgIHJldHVybiAhdmFsdWUuc2l6ZTtcbiAgfVxuICBpZiAoaXNQcm90b3R5cGUodmFsdWUpKSB7XG4gICAgcmV0dXJuICFiYXNlS2V5cyh2YWx1ZSkubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRW1wdHk7XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XG4gKiB2YWx1ZSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIGRlZmluZVByb3BlcnR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAnd3JpdGFibGUnOiB0cnVlXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VBc3NpZ25WYWx1ZTtcbiIsInZhciBiYXNlQXNzaWduVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlQXNzaWduVmFsdWUnKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBc3NpZ25zIGB2YWx1ZWAgdG8gYGtleWAgb2YgYG9iamVjdGAgaWYgdGhlIGV4aXN0aW5nIHZhbHVlIGlzIG5vdCBlcXVpdmFsZW50XG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXG4gKi9cbmZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgZXEob2JqVmFsdWUsIHZhbHVlKSkgfHxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XG4gICAgYmFzZUFzc2lnblZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25WYWx1ZTtcbiIsInZhciBhc3NpZ25WYWx1ZSA9IHJlcXVpcmUoJy4vX2Fzc2lnblZhbHVlJyksXG4gICAgYmFzZUFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnblZhbHVlJyk7XG5cbi8qKlxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3Q9e31dIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XG4gIG9iamVjdCB8fCAob2JqZWN0ID0ge30pO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHByb3BzW2luZGV4XTtcblxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcbiAgICAgID8gY3VzdG9taXplcihvYmplY3Rba2V5XSwgc291cmNlW2tleV0sIGtleSwgb2JqZWN0LCBzb3VyY2UpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgICBpZiAoaXNOZXcpIHtcbiAgICAgIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlPYmplY3Q7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXNJbiA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXNJbicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNJbmAgd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5c0luKG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5c0luKG9iamVjdCk7XG4gIH1cbiAgdmFyIGlzUHJvdG8gPSBpc1Byb3RvdHlwZShvYmplY3QpLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzSW47XG4iLCIvKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbGlrZVxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzSW47XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5c0luID0gcmVxdWlyZSgnLi9fYmFzZUtleXNJbicpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzSW4obmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqL1xuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0LCB0cnVlKSA6IGJhc2VLZXlzSW4ob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzSW47XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgZ2V0UHJvdG90eXBlID0gb3ZlckFyZyhPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UHJvdG90eXBlO1xuIiwidmFyIGFycmF5UHVzaCA9IHJlcXVpcmUoJy4vX2FycmF5UHVzaCcpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAgc3R1YkFycmF5ID0gcmVxdWlyZSgnLi9zdHViQXJyYXknKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9sc0luID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB3aGlsZSAob2JqZWN0KSB7XG4gICAgYXJyYXlQdXNoKHJlc3VsdCwgZ2V0U3ltYm9scyhvYmplY3QpKTtcbiAgICBvYmplY3QgPSBnZXRQcm90b3R5cGUob2JqZWN0KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzSW47XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5c0luKG9iamVjdCkge1xuICByZXR1cm4gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzSW4sIGdldFN5bWJvbHNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5c0luO1xuIiwidmFyIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUFycmF5QnVmZmVyO1xuIiwidmFyIGNsb25lQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19jbG9uZUFycmF5QnVmZmVyJyksXG4gICAgY2xvbmVEYXRhVmlldyA9IHJlcXVpcmUoJy4vX2Nsb25lRGF0YVZpZXcnKSxcbiAgICBjbG9uZVJlZ0V4cCA9IHJlcXVpcmUoJy4vX2Nsb25lUmVnRXhwJyksXG4gICAgY2xvbmVTeW1ib2wgPSByZXF1aXJlKCcuL19jbG9uZVN5bWJvbCcpLFxuICAgIGNsb25lVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Nsb25lVHlwZWRBcnJheScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqXG4gKiBJbml0aWFsaXplcyBhbiBvYmplY3QgY2xvbmUgYmFzZWQgb24gaXRzIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjbG9uaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcbiAqIGBCb29sZWFuYCwgYERhdGVgLCBgRXJyb3JgLCBgTWFwYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBgU2V0YCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdCB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGlzRGVlcCkge1xuICB2YXIgQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxuICAgICAgcmV0dXJuIGNsb25lQXJyYXlCdWZmZXIob2JqZWN0KTtcblxuICAgIGNhc2UgYm9vbFRhZzpcbiAgICBjYXNlIGRhdGVUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7XG5cbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxuICAgICAgcmV0dXJuIGNsb25lRGF0YVZpZXcob2JqZWN0LCBpc0RlZXApO1xuXG4gICAgY2FzZSBmbG9hdDMyVGFnOiBjYXNlIGZsb2F0NjRUYWc6XG4gICAgY2FzZSBpbnQ4VGFnOiBjYXNlIGludDE2VGFnOiBjYXNlIGludDMyVGFnOlxuICAgIGNhc2UgdWludDhUYWc6IGNhc2UgdWludDhDbGFtcGVkVGFnOiBjYXNlIHVpbnQxNlRhZzogY2FzZSB1aW50MzJUYWc6XG4gICAgICByZXR1cm4gY2xvbmVUeXBlZEFycmF5KG9iamVjdCwgaXNEZWVwKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgcmV0dXJuIG5ldyBDdG9yO1xuXG4gICAgY2FzZSBudW1iZXJUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICByZXR1cm4gbmV3IEN0b3Iob2JqZWN0KTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgICAgcmV0dXJuIGNsb25lUmVnRXhwKG9iamVjdCk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHJldHVybiBuZXcgQ3RvcjtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgcmV0dXJuIGNsb25lU3ltYm9sKG9iamVjdCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVCeVRhZztcbiIsInZhciBjbG9uZUFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVBcnJheUJ1ZmZlcicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgZGF0YVZpZXdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YVZpZXcgVGhlIGRhdGEgdmlldyB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgZGF0YSB2aWV3LlxuICovXG5mdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHtcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IGNsb25lQXJyYXlCdWZmZXIoZGF0YVZpZXcuYnVmZmVyKSA6IGRhdGFWaWV3LmJ1ZmZlcjtcbiAgcmV0dXJuIG5ldyBkYXRhVmlldy5jb25zdHJ1Y3RvcihidWZmZXIsIGRhdGFWaWV3LmJ5dGVPZmZzZXQsIGRhdGFWaWV3LmJ5dGVMZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lRGF0YVZpZXc7XG4iLCIvKiogVXNlZCB0byBtYXRjaCBgUmVnRXhwYCBmbGFncyBmcm9tIHRoZWlyIGNvZXJjZWQgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUZsYWdzID0gL1xcdyokLztcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHJlZ2V4cGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWdleHAgVGhlIHJlZ2V4cCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCByZWdleHAuXG4gKi9cbmZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7XG4gIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsb25lUmVnRXhwO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhlIGBzeW1ib2xgIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHN5bWJvbCBUaGUgc3ltYm9sIG9iamVjdCB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCBzeW1ib2wgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHtcbiAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xvbmVTeW1ib2w7XG4iLCJ2YXIgY2xvbmVBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2Nsb25lQXJyYXlCdWZmZXInKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7XG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xuICByZXR1cm4gbmV3IHR5cGVkQXJyYXkuY29uc3RydWN0b3IoYnVmZmVyLCB0eXBlZEFycmF5LmJ5dGVPZmZzZXQsIHR5cGVkQXJyYXkubGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZVR5cGVkQXJyYXk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBnZXRQcm90b3R5cGUgPSByZXF1aXJlKCcuL19nZXRQcm90b3R5cGUnKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBjbG9uZS5cbiAqL1xuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xuICByZXR1cm4gKHR5cGVvZiBvYmplY3QuY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGUob2JqZWN0KSlcbiAgICA/IGJhc2VDcmVhdGUoZ2V0UHJvdG90eXBlKG9iamVjdCkpXG4gICAgOiB7fTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbml0Q2xvbmVPYmplY3Q7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsInZhciBiYXNlSXNNYXAgPSByZXF1aXJlKCcuL19iYXNlSXNNYXAnKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzTWFwID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNNYXA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBNYXBgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTWFwKG5ldyBNYXApO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNNYXAobmV3IFdlYWtNYXApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzTWFwID0gbm9kZUlzTWFwID8gYmFzZVVuYXJ5KG5vZGVJc01hcCkgOiBiYXNlSXNNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXA7XG4iLCJ2YXIgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWFwYCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG1hcCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXAodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSBtYXBUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWFwO1xuIiwidmFyIGJhc2VJc1NldCA9IHJlcXVpcmUoJy4vX2Jhc2VJc1NldCcpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNTZXQgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1NldDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFNldGAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTZXQobmV3IFNldCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1NldChuZXcgV2Vha1NldCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNTZXQgPSBub2RlSXNTZXQgPyBiYXNlVW5hcnkobm9kZUlzU2V0KSA6IGJhc2VJc1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1NldDtcbiIsInZhciBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc2V0VGFnID0gJ1tvYmplY3QgU2V0XSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNTZXRgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc2V0LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1NldCh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBnZXRUYWcodmFsdWUpID09IHNldFRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNTZXQ7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGFycmF5RWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5RWFjaCcpLFxuICAgIGFzc2lnblZhbHVlID0gcmVxdWlyZSgnLi9fYXNzaWduVmFsdWUnKSxcbiAgICBiYXNlQXNzaWduID0gcmVxdWlyZSgnLi9fYmFzZUFzc2lnbicpLFxuICAgIGJhc2VBc3NpZ25JbiA9IHJlcXVpcmUoJy4vX2Jhc2VBc3NpZ25JbicpLFxuICAgIGNsb25lQnVmZmVyID0gcmVxdWlyZSgnLi9fY2xvbmVCdWZmZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKSxcbiAgICBjb3B5U3ltYm9scyA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzJyksXG4gICAgY29weVN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2NvcHlTeW1ib2xzSW4nKSxcbiAgICBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpLFxuICAgIGdldEFsbEtleXNJbiA9IHJlcXVpcmUoJy4vX2dldEFsbEtleXNJbicpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGluaXRDbG9uZUFycmF5ID0gcmVxdWlyZSgnLi9faW5pdENsb25lQXJyYXknKSxcbiAgICBpbml0Q2xvbmVCeVRhZyA9IHJlcXVpcmUoJy4vX2luaXRDbG9uZUJ5VGFnJyksXG4gICAgaW5pdENsb25lT2JqZWN0ID0gcmVxdWlyZSgnLi9faW5pdENsb25lT2JqZWN0JyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzTWFwID0gcmVxdWlyZSgnLi9pc01hcCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU2V0ID0gcmVxdWlyZSgnLi9pc1NldCcpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKSxcbiAgICBrZXlzSW4gPSByZXF1aXJlKCcuL2tleXNJbicpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBjbG9uaW5nLiAqL1xudmFyIENMT05FX0RFRVBfRkxBRyA9IDEsXG4gICAgQ0xPTkVfRkxBVF9GTEFHID0gMixcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIHN1cHBvcnRlZCBieSBgXy5jbG9uZWAuICovXG52YXIgY2xvbmVhYmxlVGFncyA9IHt9O1xuY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID1cbmNsb25lYWJsZVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gY2xvbmVhYmxlVGFnc1tkYXRhVmlld1RhZ10gPVxuY2xvbmVhYmxlVGFnc1tib29sVGFnXSA9IGNsb25lYWJsZVRhZ3NbZGF0ZVRhZ10gPVxuY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tpbnQ4VGFnXSA9IGNsb25lYWJsZVRhZ3NbaW50MTZUYWddID1cbmNsb25lYWJsZVRhZ3NbaW50MzJUYWddID0gY2xvbmVhYmxlVGFnc1ttYXBUYWddID1cbmNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9XG5jbG9uZWFibGVUYWdzW3JlZ2V4cFRhZ10gPSBjbG9uZWFibGVUYWdzW3NldFRhZ10gPVxuY2xvbmVhYmxlVGFnc1tzdHJpbmdUYWddID0gY2xvbmVhYmxlVGFnc1tzeW1ib2xUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID1cbmNsb25lYWJsZVRhZ3NbdWludDE2VGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG5jbG9uZWFibGVUYWdzW2Vycm9yVGFnXSA9IGNsb25lYWJsZVRhZ3NbZnVuY1RhZ10gPVxuY2xvbmVhYmxlVGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNsb25lYCBhbmQgYF8uY2xvbmVEZWVwYCB3aGljaCB0cmFja3NcbiAqIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjbG9uZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gRGVlcCBjbG9uZVxuICogIDIgLSBGbGF0dGVuIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gKiAgNCAtIENsb25lIHN5bWJvbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNsb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleV0gVGhlIGtleSBvZiBgdmFsdWVgLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBwYXJlbnQgb2JqZWN0IG9mIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIG9iamVjdHMgYW5kIHRoZWlyIGNsb25lIGNvdW50ZXJwYXJ0cy5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBjbG9uZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwga2V5LCBvYmplY3QsIHN0YWNrKSB7XG4gIHZhciByZXN1bHQsXG4gICAgICBpc0RlZXAgPSBiaXRtYXNrICYgQ0xPTkVfREVFUF9GTEFHLFxuICAgICAgaXNGbGF0ID0gYml0bWFzayAmIENMT05FX0ZMQVRfRkxBRyxcbiAgICAgIGlzRnVsbCA9IGJpdG1hc2sgJiBDTE9ORV9TWU1CT0xTX0ZMQUc7XG5cbiAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICByZXN1bHQgPSBvYmplY3QgPyBjdXN0b21pemVyKHZhbHVlLCBrZXksIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZSk7XG4gIH1cbiAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKTtcbiAgaWYgKGlzQXJyKSB7XG4gICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUpO1xuICAgIGlmICghaXNEZWVwKSB7XG4gICAgICByZXR1cm4gY29weUFycmF5KHZhbHVlLCByZXN1bHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgICAgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZztcblxuICAgIGlmIChpc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBjbG9uZUJ1ZmZlcih2YWx1ZSwgaXNEZWVwKTtcbiAgICB9XG4gICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgKGlzRnVuYyAmJiAhb2JqZWN0KSkge1xuICAgICAgcmVzdWx0ID0gKGlzRmxhdCB8fCBpc0Z1bmMpID8ge30gOiBpbml0Q2xvbmVPYmplY3QodmFsdWUpO1xuICAgICAgaWYgKCFpc0RlZXApIHtcbiAgICAgICAgcmV0dXJuIGlzRmxhdFxuICAgICAgICAgID8gY29weVN5bWJvbHNJbih2YWx1ZSwgYmFzZUFzc2lnbkluKHJlc3VsdCwgdmFsdWUpKVxuICAgICAgICAgIDogY29weVN5bWJvbHModmFsdWUsIGJhc2VBc3NpZ24ocmVzdWx0LCB2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUgOiB7fTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGluaXRDbG9uZUJ5VGFnKHZhbHVlLCB0YWcsIGlzRGVlcCk7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGFuZCByZXR1cm4gaXRzIGNvcnJlc3BvbmRpbmcgY2xvbmUuXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlKTtcbiAgaWYgKHN0YWNrZWQpIHtcbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuICBzdGFjay5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgaWYgKGlzU2V0KHZhbHVlKSkge1xuICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24oc3ViVmFsdWUpIHtcbiAgICAgIHJlc3VsdC5hZGQoYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdWJWYWx1ZSwgdmFsdWUsIHN0YWNrKSk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoaXNNYXAodmFsdWUpKSB7XG4gICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgICByZXN1bHQuc2V0KGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIGtleXNGdW5jID0gaXNGdWxsXG4gICAgPyAoaXNGbGF0ID8gZ2V0QWxsS2V5c0luIDogZ2V0QWxsS2V5cylcbiAgICA6IChpc0ZsYXQgPyBrZXlzSW4gOiBrZXlzKTtcblxuICB2YXIgcHJvcHMgPSBpc0FyciA/IHVuZGVmaW5lZCA6IGtleXNGdW5jKHZhbHVlKTtcbiAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlLCBmdW5jdGlvbihzdWJWYWx1ZSwga2V5KSB7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBrZXkgPSBzdWJWYWx1ZTtcbiAgICAgIHN1YlZhbHVlID0gdmFsdWVba2V5XTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgcG9wdWxhdGUgY2xvbmUgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleSwgYmFzZUNsb25lKHN1YlZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBrZXksIHZhbHVlLCBzdGFjaykpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ2xvbmU7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGNvcHlPYmplY3QgPSByZXF1aXJlKCcuL19jb3B5T2JqZWN0JyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmFzc2lnbmAgd2l0aG91dCBzdXBwb3J0IGZvciBtdWx0aXBsZSBzb3VyY2VzXG4gKiBvciBgY3VzdG9taXplcmAgZnVuY3Rpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gYmFzZUFzc2lnbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUFzc2lnbjtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGtleXNJbiA9IHJlcXVpcmUoJy4va2V5c0luJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uYXNzaWduSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlc1xuICogb3IgYGN1c3RvbWl6ZXJgIGZ1bmN0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VBc3NpZ25JbihvYmplY3QsIHNvdXJjZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGNvcHlPYmplY3Qoc291cmNlLCBrZXlzSW4oc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXNzaWduSW47XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQsXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXG4gKi9cbmZ1bmN0aW9uIGNsb25lQnVmZmVyKGJ1ZmZlciwgaXNEZWVwKSB7XG4gIGlmIChpc0RlZXApIHtcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XG5cbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZUJ1ZmZlcjtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyk7XG5cbi8qKlxuICogQ29waWVzIG93biBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkge1xuICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5U3ltYm9scztcbiIsInZhciBjb3B5T2JqZWN0ID0gcmVxdWlyZSgnLi9fY29weU9iamVjdCcpLFxuICAgIGdldFN5bWJvbHNJbiA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHNJbicpO1xuXG4vKipcbiAqIENvcGllcyBvd24gYW5kIGluaGVyaXRlZCBzeW1ib2xzIG9mIGBzb3VyY2VgIHRvIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3QgdG8gY29weSBzeW1ib2xzIGZyb20uXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHN5bWJvbHMgdG8uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxuICovXG5mdW5jdGlvbiBjb3B5U3ltYm9sc0luKHNvdXJjZSwgb2JqZWN0KSB7XG4gIHJldHVybiBjb3B5T2JqZWN0KHNvdXJjZSwgZ2V0U3ltYm9sc0luKHNvdXJjZSksIG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weVN5bWJvbHNJbjtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW4gYXJyYXkgY2xvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXG4gKi9cbmZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBuZXcgYXJyYXkuY29uc3RydWN0b3IobGVuZ3RoKTtcblxuICAvLyBBZGQgcHJvcGVydGllcyBhc3NpZ25lZCBieSBgUmVnRXhwI2V4ZWNgLlxuICBpZiAobGVuZ3RoICYmIHR5cGVvZiBhcnJheVswXSA9PSAnc3RyaW5nJyAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGFycmF5LCAnaW5kZXgnKSkge1xuICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4O1xuICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0O1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5pdENsb25lQXJyYXk7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cbnZhciBzeW1ib2xQcm90byA9IFN5bWJvbCA/IFN5bWJvbC5wcm90b3R5cGUgOiB1bmRlZmluZWQsXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xuICAvLyBFeGl0IGVhcmx5IGZvciBzdHJpbmdzIHRvIGF2b2lkIGEgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUgZW52aXJvbm1lbnRzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbnZlcnQgdmFsdWVzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgcmV0dXJuIGFycmF5TWFwKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBzeW1ib2xUb1N0cmluZyA/IHN5bWJvbFRvU3RyaW5nLmNhbGwodmFsdWUpIDogJyc7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUb1N0cmluZztcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpLFxuICAgIGJhc2VTbGljZSA9IHJlcXVpcmUoJy4vX2Jhc2VTbGljZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIHBhcmVudCB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhdGggVGhlIHBhdGggdG8gZ2V0IHRoZSBwYXJlbnQgdmFsdWUgb2YuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGFyZW50IHZhbHVlLlxuICovXG5mdW5jdGlvbiBwYXJlbnQob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBwYXRoLmxlbmd0aCA8IDIgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgYmFzZVNsaWNlKHBhdGgsIDAsIC0xKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyZW50O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uc2xpY2VgIHdpdGhvdXQgYW4gaXRlcmF0ZWUgY2FsbCBndWFyZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHNsaWNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgcG9zaXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2VuZD1hcnJheS5sZW5ndGhdIFRoZSBlbmQgcG9zaXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHNsaWNlIG9mIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VTbGljZShhcnJheSwgc3RhcnQsIGVuZCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAtc3RhcnQgPiBsZW5ndGggPyAwIDogKGxlbmd0aCArIHN0YXJ0KTtcbiAgfVxuICBlbmQgPSBlbmQgPiBsZW5ndGggPyBsZW5ndGggOiBlbmQ7XG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlbmd0aDtcbiAgfVxuICBsZW5ndGggPSBzdGFydCA+IGVuZCA/IDAgOiAoKGVuZCAtIHN0YXJ0KSA+Pj4gMCk7XG4gIHN0YXJ0ID4+Pj0gMDtcblxuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gYXJyYXlbaW5kZXggKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2xpY2U7XG4iLCJ2YXIgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaXNQbGFpbk9iamVjdCcpO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8ub21pdGAgdG8gY3VzdG9taXplIGl0cyBgXy5jbG9uZURlZXBgIHVzZSB0byBvbmx5IGNsb25lIHBsYWluXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHVuY2xvbmVkIHZhbHVlIG9yIGB1bmRlZmluZWRgIHRvIGRlZmVyIGNsb25pbmcgdG8gYF8uY2xvbmVEZWVwYC5cbiAqL1xuZnVuY3Rpb24gY3VzdG9tT21pdENsb25lKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSA/IHVuZGVmaW5lZCA6IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGN1c3RvbU9taXRDbG9uZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGdldFByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2dldFByb3RvdHlwZScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1BsYWluT2JqZWN0O1xuIiwidmFyIGZsYXR0ZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW4nKSxcbiAgICBvdmVyUmVzdCA9IHJlcXVpcmUoJy4vX292ZXJSZXN0JyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIGZsYXR0ZW5zIHRoZSByZXN0IGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGZsYXRSZXN0KGZ1bmMpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHVuZGVmaW5lZCwgZmxhdHRlbiksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdFJlc3Q7XG4iLCJ2YXIgYmFzZUZsYXR0ZW4gPSByZXF1aXJlKCcuL19iYXNlRmxhdHRlbicpO1xuXG4vKipcbiAqIEZsYXR0ZW5zIGBhcnJheWAgYSBzaW5nbGUgbGV2ZWwgZGVlcC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBmbGF0dGVuLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmxhdHRlbmVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmZsYXR0ZW4oWzEsIFsyLCBbMywgWzRdXSwgNV1dKTtcbiAqIC8vID0+IFsxLCAyLCBbMywgWzRdXSwgNV1cbiAqL1xuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIHJldHVybiBsZW5ndGggPyBiYXNlRmxhdHRlbihhcnJheSwgMSkgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuO1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBiYXNlQ2xvbmUgPSByZXF1aXJlKCcuL19iYXNlQ2xvbmUnKSxcbiAgICBiYXNlVW5zZXQgPSByZXF1aXJlKCcuL19iYXNlVW5zZXQnKSxcbiAgICBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgY29weU9iamVjdCA9IHJlcXVpcmUoJy4vX2NvcHlPYmplY3QnKSxcbiAgICBjdXN0b21PbWl0Q2xvbmUgPSByZXF1aXJlKCcuL19jdXN0b21PbWl0Q2xvbmUnKSxcbiAgICBmbGF0UmVzdCA9IHJlcXVpcmUoJy4vX2ZsYXRSZXN0JyksXG4gICAgZ2V0QWxsS2V5c0luID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5c0luJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9GTEFUX0ZMQUcgPSAyLFxuICAgIENMT05FX1NZTUJPTFNfRkxBRyA9IDQ7XG5cbi8qKlxuICogVGhlIG9wcG9zaXRlIG9mIGBfLnBpY2tgOyB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIG9iamVjdCBjb21wb3NlZCBvZiB0aGVcbiAqIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgcGF0aHMgb2YgYG9iamVjdGAgdGhhdCBhcmUgbm90IG9taXR0ZWQuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBgXy5waWNrYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBzb3VyY2Ugb2JqZWN0LlxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gb21pdC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAnMicsICdjJzogMyB9O1xuICpcbiAqIF8ub21pdChvYmplY3QsIFsnYScsICdjJ10pO1xuICogLy8gPT4geyAnYic6ICcyJyB9XG4gKi9cbnZhciBvbWl0ID0gZmxhdFJlc3QoZnVuY3Rpb24ob2JqZWN0LCBwYXRocykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZhbHNlO1xuICBwYXRocyA9IGFycmF5TWFwKHBhdGhzLCBmdW5jdGlvbihwYXRoKSB7XG4gICAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG4gICAgaXNEZWVwIHx8IChpc0RlZXAgPSBwYXRoLmxlbmd0aCA+IDEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9KTtcbiAgY29weU9iamVjdChvYmplY3QsIGdldEFsbEtleXNJbihvYmplY3QpLCByZXN1bHQpO1xuICBpZiAoaXNEZWVwKSB7XG4gICAgcmVzdWx0ID0gYmFzZUNsb25lKHJlc3VsdCwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfRkxBVF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHLCBjdXN0b21PbWl0Q2xvbmUpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXRocy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGJhc2VVbnNldChyZXN1bHQsIHBhdGhzW2xlbmd0aF0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBvbWl0O1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBsYXN0ID0gcmVxdWlyZSgnLi9sYXN0JyksXG4gICAgcGFyZW50ID0gcmVxdWlyZSgnLi9fcGFyZW50JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuc2V0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwcm9wZXJ0eSBwYXRoIHRvIHVuc2V0LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBwcm9wZXJ0eSBpcyBkZWxldGVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbnNldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgLy8gUHJldmVudCBwcm90b3R5cGUgcG9sbHV0aW9uOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9zZWN1cml0eS9hZHZpc29yaWVzL0dIU0EteHhqci1tbWp2LTRncGdcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvc2VjdXJpdHkvYWR2aXNvcmllcy9HSFNBLWYyM20tcjNwZi00MnJoXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcblxuICAgIC8vIEFsd2F5cyBibG9jayBcIl9fcHJvdG9fX1wiIGFueXdoZXJlIGluIHRoZSBwYXRoIGlmIGl0J3Mgbm90IGV4cGVjdGVkXG4gICAgaWYgKGtleSA9PT0gJ19fcHJvdG9fXycgJiYgIWhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX19wcm90b19fJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBCbG9jayBjb25zdHJ1Y3Rvci9wcm90b3R5cGUgYXMgbm9uLXRlcm1pbmFsIHRyYXZlcnNhbCBrZXlzIHRvIHByZXZlbnRcbiAgICAvLyBlc2NhcGluZyB0aGUgb2JqZWN0IGdyYXBoIGludG8gYnVpbHQtaW4gY29uc3RydWN0b3JzIGFuZCBwcm90b3R5cGVzLlxuICAgIGlmICgoa2V5ID09PSAnY29uc3RydWN0b3InIHx8IGtleSA9PT0gJ3Byb3RvdHlwZScpICYmIGluZGV4IDwgbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBvYmogPSBwYXJlbnQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIG9iaiA9PSBudWxsIHx8IGRlbGV0ZSBvYmpbdG9LZXkobGFzdChwYXRoKSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbnNldDtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBub29wID0gcmVxdWlyZSgnLi9ub29wJyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgc2V0IG9iamVjdCBvZiBgdmFsdWVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYWRkIHRvIHRoZSBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgc2V0LlxuICovXG52YXIgY3JlYXRlU2V0ID0gIShTZXQgJiYgKDEgLyBzZXRUb0FycmF5KG5ldyBTZXQoWywtMF0pKVsxXSkgPT0gSU5GSU5JVFkpID8gbm9vcCA6IGZ1bmN0aW9uKHZhbHVlcykge1xuICByZXR1cm4gbmV3IFNldCh2YWx1ZXMpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVTZXQ7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHVuZGVmaW5lZGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLm5vb3ApO1xuICogLy8gPT4gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXVxuICovXG5mdW5jdGlvbiBub29wKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vb3A7XG4iLCJ2YXIgYmFzZVVuaXEgPSByZXF1aXJlKCcuL19iYXNlVW5pcScpO1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8udW5pcWAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY29tcGFyYXRvcmAgd2hpY2hcbiAqIGlzIGludm9rZWQgdG8gY29tcGFyZSBlbGVtZW50cyBvZiBgYXJyYXlgLiBUaGUgb3JkZXIgb2YgcmVzdWx0IHZhbHVlcyBpc1xuICogZGV0ZXJtaW5lZCBieSB0aGUgb3JkZXIgdGhleSBvY2N1ciBpbiB0aGUgYXJyYXkuVGhlIGNvbXBhcmF0b3IgaXMgaW52b2tlZFxuICogd2l0aCB0d28gYXJndW1lbnRzOiAoYXJyVmFsLCBvdGhWYWwpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY29tcGFyYXRvcl0gVGhlIGNvbXBhcmF0b3IgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGR1cGxpY2F0ZSBmcmVlIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICd4JzogMSwgJ3knOiAyIH0sIHsgJ3gnOiAyLCAneSc6IDEgfSwgeyAneCc6IDEsICd5JzogMiB9XTtcbiAqXG4gKiBfLnVuaXFXaXRoKG9iamVjdHMsIF8uaXNFcXVhbCk7XG4gKiAvLyA9PiBbeyAneCc6IDEsICd5JzogMiB9LCB7ICd4JzogMiwgJ3knOiAxIH1dXG4gKi9cbmZ1bmN0aW9uIHVuaXFXaXRoKGFycmF5LCBjb21wYXJhdG9yKSB7XG4gIGNvbXBhcmF0b3IgPSB0eXBlb2YgY29tcGFyYXRvciA9PSAnZnVuY3Rpb24nID8gY29tcGFyYXRvciA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIChhcnJheSAmJiBhcnJheS5sZW5ndGgpID8gYmFzZVVuaXEoYXJyYXksIHVuZGVmaW5lZCwgY29tcGFyYXRvcikgOiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmlxV2l0aDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKSxcbiAgICBhcnJheUluY2x1ZGVzV2l0aCA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXNXaXRoJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpLFxuICAgIGNyZWF0ZVNldCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVNldCcpLFxuICAgIHNldFRvQXJyYXkgPSByZXF1aXJlKCcuL19zZXRUb0FycmF5Jyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5pcUJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlXSBUaGUgaXRlcmF0ZWUgaW52b2tlZCBwZXIgZWxlbWVudC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjb21wYXJhdG9yXSBUaGUgY29tcGFyYXRvciBpbnZva2VkIHBlciBlbGVtZW50LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZHVwbGljYXRlIGZyZWUgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmlxKGFycmF5LCBpdGVyYXRlZSwgY29tcGFyYXRvcikge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGluY2x1ZGVzID0gYXJyYXlJbmNsdWRlcyxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGlzQ29tbW9uID0gdHJ1ZSxcbiAgICAgIHJlc3VsdCA9IFtdLFxuICAgICAgc2VlbiA9IHJlc3VsdDtcblxuICBpZiAoY29tcGFyYXRvcikge1xuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBhcnJheUluY2x1ZGVzV2l0aDtcbiAgfVxuICBlbHNlIGlmIChsZW5ndGggPj0gTEFSR0VfQVJSQVlfU0laRSkge1xuICAgIHZhciBzZXQgPSBpdGVyYXRlZSA/IG51bGwgOiBjcmVhdGVTZXQoYXJyYXkpO1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBzZXRUb0FycmF5KHNldCk7XG4gICAgfVxuICAgIGlzQ29tbW9uID0gZmFsc2U7XG4gICAgaW5jbHVkZXMgPSBjYWNoZUhhcztcbiAgICBzZWVuID0gbmV3IFNldENhY2hlO1xuICB9XG4gIGVsc2Uge1xuICAgIHNlZW4gPSBpdGVyYXRlZSA/IFtdIDogcmVzdWx0O1xuICB9XG4gIG91dGVyOlxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgY29tcHV0ZWQgPSBpdGVyYXRlZSA/IGl0ZXJhdGVlKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgdmFsdWUgPSAoY29tcGFyYXRvciB8fCB2YWx1ZSAhPT0gMCkgPyB2YWx1ZSA6IDA7XG4gICAgaWYgKGlzQ29tbW9uICYmIGNvbXB1dGVkID09PSBjb21wdXRlZCkge1xuICAgICAgdmFyIHNlZW5JbmRleCA9IHNlZW4ubGVuZ3RoO1xuICAgICAgd2hpbGUgKHNlZW5JbmRleC0tKSB7XG4gICAgICAgIGlmIChzZWVuW3NlZW5JbmRleF0gPT09IGNvbXB1dGVkKSB7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpdGVyYXRlZSkge1xuICAgICAgICBzZWVuLnB1c2goY29tcHV0ZWQpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaW5jbHVkZXMoc2VlbiwgY29tcHV0ZWQsIGNvbXBhcmF0b3IpKSB7XG4gICAgICBpZiAoc2VlbiAhPT0gcmVzdWx0KSB7XG4gICAgICAgIHNlZW4ucHVzaChjb21wdXRlZCk7XG4gICAgICB9XG4gICAgICByZXN1bHQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuaXE7XG4iLCJ2YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2csXG4gICAgcmVIYXNSZWdFeHBDaGFyID0gUmVnRXhwKHJlUmVnRXhwQ2hhci5zb3VyY2UpO1xuXG4vKipcbiAqIEVzY2FwZXMgdGhlIGBSZWdFeHBgIHNwZWNpYWwgY2hhcmFjdGVycyBcIl5cIiwgXCIkXCIsIFwiXFxcIiwgXCIuXCIsIFwiKlwiLCBcIitcIixcbiAqIFwiP1wiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBhbmQgXCJ8XCIgaW4gYHN0cmluZ2AuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgZXNjYXBlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZXNjYXBlUmVnRXhwKCdbbG9kYXNoXShodHRwczovL2xvZGFzaC5jb20vKScpO1xuICogLy8gPT4gJ1xcW2xvZGFzaFxcXVxcKGh0dHBzOi8vbG9kYXNoXFwuY29tL1xcKSdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cmluZykge1xuICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuICByZXR1cm4gKHN0cmluZyAmJiByZUhhc1JlZ0V4cENoYXIudGVzdChzdHJpbmcpKVxuICAgID8gc3RyaW5nLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVSZWdFeHA7XG4iLCJ2YXIgYmFzZUNsb25lID0gcmVxdWlyZSgnLi9fYmFzZUNsb25lJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGNsb25pbmcuICovXG52YXIgQ0xPTkVfREVFUF9GTEFHID0gMSxcbiAgICBDTE9ORV9TWU1CT0xTX0ZMQUcgPSA0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uY2xvbmVgIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IGNsb25lcyBgdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZWN1cnNpdmVseSBjbG9uZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBkZWVwIGNsb25lZCB2YWx1ZS5cbiAqIEBzZWUgXy5jbG9uZVxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFt7ICdhJzogMSB9LCB7ICdiJzogMiB9XTtcbiAqXG4gKiB2YXIgZGVlcCA9IF8uY2xvbmVEZWVwKG9iamVjdHMpO1xuICogY29uc29sZS5sb2coZGVlcFswXSA9PT0gb2JqZWN0c1swXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBjbG9uZURlZXAodmFsdWUpIHtcbiAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZSwgQ0xPTkVfREVFUF9GTEFHIHwgQ0xPTkVfU1lNQk9MU19GTEFHKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9uZURlZXA7XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9tb2RhbC1jb250ZW50LnNjc3MnO1xuXG5jb25zdCBNb2RhbENvbnRlbnQgPSAoeyBoZWFkZXJUZXh0LCByZW5kZXJMaXN0IH0pID0+IHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWNvbnRhaW5lciddfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LW1vZGFsLWNvbnRlbnQtdG9wJ119PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1tb2RhbC1jb250ZW50LWhlYWRlciddfT5cbiAgICAgICAgICB7aGVhZGVyVGV4dH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtyZW5kZXJMaXN0KCl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Nb2RhbENvbnRlbnQucHJvcFR5cGVzID0ge1xuICBoZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHJlbmRlckxpc3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2RhbENvbnRlbnQ7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdXb2xsZW4gU2llIGRlbiBGYXZvcml0ZW4gbMO2c2NoZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdMw7ZzY2hlIEZhdm9yaXQ6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnQmVhcmJlaXRlIEZhdm9yaXRlbicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0JlYXJiZWl0ZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdGYXZvcml0ZW4gYmVhcmJlaXRlbi4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1fDpGhsZSBkYXMgU3ltYm9sIGbDvHIgZGllc2VuIE9ydCcsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnU2NobGllw59lIGRlbiBEaWFsb2cnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ1fDpGhsZW4gU2llIGVpbmVuIE5hbWUgZsO8ciBkaWVzZW4gT3J0IChvcHRpb25hbCknLFxuICAgICAgc2F2ZTogJ1NwZWljaGVybicsXG4gICAgICAnc2F2ZS1wbGFjZSc6ICdGYXZvcml0IHNwZWljaGVybicsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgICAnZGVsZXRlLXBsYWNlLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHBsYWNlPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnRGVsZXRlIHBsYWNlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0VkaXQgcGxhY2VzJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnRWRpdCBwbGFjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LW1vZGFsLW9uLW9wZW4nOiAnRmF2b3VyaXRlIGVkaXRpbmcgbW9kYWwuJyxcbiAgICAgICdjaG9vc2UtaWNvbic6IFwiU2VsZWN0IHRoZSBwbGFjZSdzIGljb25cIixcbiAgICAgICdjbG9zZS1tb2RhbCc6ICdDbG9zZSB0aGUgbW9kYWwnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0dpdmUgdGhlIG5hbWUgYSBwbGFjZSAob3B0aW9uYWwpJyxcbiAgICAgIHNhdmU6ICdTYXZlJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1NhdmUgcGxhY2UnLFxuICAgICAgdXA6ICdNb3ZlIGZhdm91cml0ZSB1cCcsXG4gICAgICBkb3duOiAnTW92ZSBmYXZvdXJpdGUgZG93bicsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnSGFsdWF0a28gcG9pc3RhYSBwYWlrYW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdQb2lzdGEgcGFpa2thOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdNdW9ra2FhIHBhaWtrYWE6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ1N1b3Npa2tpZW4gbXVva2thdXMgbW9kYWFsaS4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1ZhbGl0c2UgcGFpa2FuIGt1dmFrZScsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnU3VsamUgbW9kYWFsaScsXG4gICAgICAnaW5wdXQtcGxhY2Vob2xkZXInOiAnQW5uYSBwYWlrYWxsZSBuaW1pICh2YXBhYWVodG9pbmVuKScsXG4gICAgICBzYXZlOiAnVGFsbGVubmEnLFxuICAgICAgJ3NhdmUtcGxhY2UnOiAnVGFsbGVubmEgcGFpa2thJyxcbiAgICAgIHVwOiAnU2lpcnLDpCBzdW9zaWtraXNpamFpbnRpYSB5bMO2cMOkaW4nLFxuICAgICAgZG93bjogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgYWxhc3DDpGluJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgICAgZGVsZXRlOiAnVXN1xYQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnQ3p5IG5hIHBld25vIGNoY2VzeiB1c3VuxIXEhyB0byBtaWVqc2NlPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnVXN1xYQgbWllanNjZToge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdFZHl0dWogbWllanNjYScsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkeXR1aiBtaWVqc2NlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtbW9kYWwtb24tb3Blbic6ICdNb2RhbCBlZHljamkgdWx1YmlvbnljaC4nLFxuICAgICAgJ2Nob29zZS1pY29uJzogJ1d5YmllcnogaWtvbsSZIG1pZWpzY2EnLFxuICAgICAgJ2Nsb3NlLW1vZGFsJzogJ1phbWtuaWogbW9kYWwnLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ05hZGFqIG5henfEmSBtaWVqc2N1IChvcGNqb25hbG5lKScsXG4gICAgICBzYXZlOiAnWmFwaXN6JyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1phcGlzeiBtaWVqc2NlJyxcbiAgICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgICBkb3duOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIG5pxbxlaicsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnVmlsbCBkdSB0YSBib3J0IHBsYXRzZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdUYSBib3J0IHBsYXRzZW46IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnUmVkaWdlcmEgcGxhdHNlcicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1tb2RhbC1vbi1vcGVuJzogJ0Zhdm91cml0ZSBlZGl0aW5nIG1vZGFsLicsXG4gICAgICAnY2hvb3NlLWljb24nOiAnVsOkbGogcGxhdHNlbnMgaWtvbicsXG4gICAgICAnY2xvc2UtbW9kYWwnOiAnU3TDpG5nIG1vZGFsZW4nLFxuICAgICAgJ2lucHV0LXBsYWNlaG9sZGVyJzogJ0FuZ2UgcGxhdHNlbnMgbmFtbiAoZnJpdmlsbGlndCknLFxuICAgICAgc2F2ZTogJ1NwYXJhJyxcbiAgICAgICdzYXZlLXBsYWNlJzogJ1NwYXJhIHBsYXRzJyxcbiAgICAgIHVwOiAnRmx5dHRhIGZhdm9yaXRlbiB1cHDDpXQnLFxuICAgICAgZG93bjogJ0ZseXR0YSBmYXZvcml0ZW4gbmVkw6V0JyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiaW1wb3J0IHsgY3JlYXRlSW5zdGFuY2UgfSBmcm9tICdpMThuZXh0JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi90cmFuc2xhdGlvbnMnO1xuXG5jb25zdCBpMThuID0gY3JlYXRlSW5zdGFuY2Uoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgLy8gZGVidWc6IHRydWUsXG4gIHJlc291cmNlczogdHJhbnNsYXRpb25zLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIHJlYWN0OiB7XG4gICAgdXNlU3VzcGVuc2U6IHRydWUsXG4gIH0sXG59KTtcblxuaTE4bi5pbml0KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG47XG4iLCIvKiBlc2xpbnQgcmVhY3QvZm9yYmlkLXByb3AtdHlwZXM6IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSTE4bmV4dFByb3ZpZGVyLCB3aXRoVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IFJlYWN0U29ydGFibGUgfSBmcm9tICdyZWFjdC1zb3J0YWJsZWpzJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBkaWZmZXJlbmNlV2l0aCBmcm9tICdsb2Rhc2gvZGlmZmVyZW5jZVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IG9taXQgZnJvbSAnbG9kYXNoL29taXQnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJ0Boc2wtZmkvbG9hZGluZy1pbmRpY2F0b3JzJztcbmltcG9ydCBNb2RhbCBmcm9tICdAaHNsLWZpL21vZGFsJztcbmltcG9ydCBJY29uLCB7XG4gIGRlZmF1bHRDb2xvcnMsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgeyBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IE1vZGFsQ29udGVudCBmcm9tICcuL2hlbHBlcnMvTW9kYWxDb250ZW50JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCBpMThuIGZyb20gJy4vaGVscGVycy9pMThuJztcblxuY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNsYXNzIEZhdm91cml0ZUVkaXRpbmdNb2RhbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLyoqIFJlcXVpcmVkLiBDbG9zZSBtb2RhbC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgICB1cGRhdGVGYXZvdXJpdGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgZGVsZXRlRmF2b3VyaXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIC8qKiBSZXF1aXJlZC4gRnVuY3Rpb24gdGhhdCB0YWtlcyBzZWxlY3RlZCBmYXZvdXJpdGUgb2JqZWN0IGFzIHBhcmFtZXRlci5cbiAgICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gICAgb25FZGl0U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgLyoqIFJlcXVpcmVkLlxuICAgICAqIEB0eXBlIHthcnJheTxvYmplY3Q+fVxuICAgICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3NcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ3Rmc0lkXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IGdpZFxuICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsYXRcbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gbG9uXG4gICAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gc2VsZWN0ZWRJY29uSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gZmF2b3VyaXRlSWRcbiAgICAgKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXJcbiAgICAgKi9cbiAgICBmYXZvdXJpdGVzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGd0ZnNJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgZ2lkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgICBsYXllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIH0pLFxuICAgICkuaXNSZXF1aXJlZCxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGlzTW9kYWxPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgY29sb3JzOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgLyoqIE9wdGlvbmFsLiAqL1xuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgLyoqIERlZmF1bHQgdmFsdWUgaXMgNTAwLiAqL1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgbGFuZzogJ2ZpJyxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JzLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBmYXZvdXJpdGVzOiBwcm9wcy5mYXZvdXJpdGVzLFxuICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICBjb25zdCBuZXh0RmF2b3VyaXRlcyA9IG5leHRQcm9wcy5mYXZvdXJpdGVzO1xuICAgIGNvbnN0IHByZXZGYXZvdXJpdGVzID0gcHJldlN0YXRlLmZhdm91cml0ZXM7XG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkoZGlmZmVyZW5jZVdpdGgobmV4dEZhdm91cml0ZXMsIHByZXZGYXZvdXJpdGVzLCBpc0VxdWFsKSkgfHxcbiAgICAgICFpc0VtcHR5KGRpZmZlcmVuY2VXaXRoKHByZXZGYXZvdXJpdGVzLCBuZXh0RmF2b3VyaXRlcywgaXNFcXVhbCkpXG4gICAgKSB7XG4gICAgICBpZiAoaXNFbXB0eShuZXh0RmF2b3VyaXRlcykpIHtcbiAgICAgICAgbmV4dFByb3BzLmhhbmRsZUNsb3NlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmYXZvdXJpdGVzOiBuZXh0RmF2b3VyaXRlcyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJhbnNsYXRlID0gKGlkLCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMudChpZCwge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9O1xuXG4gIG1vdmVGYXZvdXJpdGUgPSAoaSwgZGlyZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBmYXZvdXJpdGVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIC8vIEVkaXQgY29weSBvZiB0aGUgZmF2b3VyaXRlcyB0byBhdm9pZCBjaGFuZ2luZyB0aGUgcHJvcHMuZmF2b3VyaXRlcyB1c2VkIGZvciBzdGF0ZSBpbml0aWFsaXphdGlvblxuICAgIGNvbnN0IGZhdm91cml0ZXNDb3B5ID0gWy4uLmZhdm91cml0ZXNdO1xuXG4gICAgY29uc3QgdG1wID0gZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl07XG4gICAgZmF2b3VyaXRlc0NvcHlbaSArIGRpcmVjdGlvbl0gPSBmYXZvdXJpdGVzQ29weVtpXTtcbiAgICBmYXZvdXJpdGVzQ29weVtpXSA9IHRtcDtcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBmYXZvdXJpdGVzOiBmYXZvdXJpdGVzQ29weSB9KTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0SXRlbSA9IChmYXZvdXJpdGUsIGluZGV4KSA9PiB7XG4gICAgbGV0IGljb25JZCA9ICdwbGFjZSc7XG4gICAgaWYgKGZhdm91cml0ZS5zZWxlY3RlZEljb25JZCkge1xuICAgICAgY29uc3QgcHJlZml4UG9zID0gZmF2b3VyaXRlLnNlbGVjdGVkSWNvbklkLmluZGV4T2YoJ2ljb25fJyk7XG4gICAgICBpZiAocHJlZml4UG9zID4gMCkge1xuICAgICAgICBpY29uSWQgPSBmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQuc3Vic3RyaW5nKHByZWZpeFBvcyArIDUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBbbmFtZSwgYWRkcmVzc10gPSBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKFxuICAgICAgZmF2b3VyaXRlLm5hbWUsXG4gICAgICBmYXZvdXJpdGUuYWRkcmVzcyxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsaVxuICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtJ10pfVxuICAgICAgICBrZXk9e2Zhdm91cml0ZS5mYXZvdXJpdGVJZH1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWxlZnQnXX0+XG4gICAgICAgICAge2luZGV4ID4gMCAmJiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWFycm93LWhpZGRlbiddfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dGhpcy50cmFuc2xhdGUoJ3VwJyl9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVGYXZvdXJpdGUoaW5kZXgsIC0xKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJnVhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpbmRleCA8IHRoaXMuc3RhdGUuZmF2b3VyaXRlcy5sZW5ndGggLSAxICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtYXJyb3ctaGlkZGVuJ119XG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZG93bicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRmF2b3VyaXRlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJmRhcnI7XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1kcmFnJ119PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLWVsbGlwc2lzJ119PlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJlbGxpcHNpc1wiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICBzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1pY29uJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1tpY29uSWRdLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9e3RoaXMucHJvcHMuY29sb3JzLnByaW1hcnl9IC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tY29udGVudCddfT5cbiAgICAgICAgICA8cCBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1pdGVtLW5hbWUnXX0+e25hbWV9PC9wPlxuICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tYWRkcmVzcyddfT5cbiAgICAgICAgICAgIHthZGRyZXNzfVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yaWdodCddfT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZS1uYW1lJywge1xuICAgICAgICAgICAgICBmYXZvdXJpdGUsXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tZWRpdCddfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5wcm9wcy5vbkVkaXRTZWxlY3RlZChmYXZvdXJpdGUpfVxuICAgICAgICAgICAgb25LZXlEb3duPXtlID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25FZGl0U2VsZWN0ZWQoZmF2b3VyaXRlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBpbWc9XCJlZGl0XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYkluZGV4PVwiMFwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0aGlzLnRyYW5zbGF0ZSgnZGVsZXRlLXBsYWNlLW5hbWUnLCB7XG4gICAgICAgICAgICAgIGZhdm91cml0ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QtaXRlbS1yZW1vdmUnXX1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmF2b3VyaXRlOiBmYXZvdXJpdGUsXG4gICAgICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbktleURvd249e2UgPT4ge1xuICAgICAgICAgICAgICBpZiAoaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogZmF2b3VyaXRlLFxuICAgICAgICAgICAgICAgICAgc2hvd0RlbGV0ZVBsYWNlTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgKTtcbiAgfTtcblxuICByZW5kZXJGYXZvdXJpdGVMaXN0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgaXNMb2FkaW5nIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZmF2b3VyaXRlcyB9ID0gdGhpcy5zdGF0ZTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snZmF2b3VyaXRlLWVkaXQtbGlzdC1jb250YWluZXInXX0+XG4gICAgICAgIDxSZWFjdFNvcnRhYmxlXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3QnXX1cbiAgICAgICAgICB0YWc9XCJ1bFwiXG4gICAgICAgICAgbGlzdD17ZmF2b3VyaXRlc31cbiAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB0aGlzLnNldFN0YXRlKHsgZmF2b3VyaXRlczogaXRlbXMgfSl9XG4gICAgICAgICAgYW5pbWF0aW9uPXsyMDB9XG4gICAgICAgICAgaGFuZGxlPXtgLiR7c3R5bGVzWydmYXZvdXJpdGUtZWRpdC1saXN0LWl0ZW0tbGVmdCddfWB9XG4gICAgICAgID5cbiAgICAgICAgICB7ZmF2b3VyaXRlcy5tYXAoKGZhdm91cml0ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckZhdm91cml0ZUxpc3RJdGVtKGZhdm91cml0ZSwgaW5kZXgpO1xuICAgICAgICAgIH0pfVxuICAgICAgICA8L1JlYWN0U29ydGFibGU+XG4gICAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Zhdm91cml0ZS1lZGl0LWxpc3Qtb3ZlcmxheSddfT5cbiAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsID0gZmF2b3VyaXRlID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGhlYWRlclRleHQ9e3RoaXMudHJhbnNsYXRlKCdkZWxldGUtcGxhY2UtaGVhZGVyJyl9XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7IHNlbGVjdGVkRmF2b3VyaXRlOiBudWxsLCBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UgfSxcbiAgICAgICAgICAgICgpID0+IHRoaXMucHJvcHMuaGFuZGxlQ2xvc2UoKSxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgaXNNb2RhbE9wZW49e3RoaXMuc3RhdGUuc2hvd0RlbGV0ZVBsYWNlTW9kYWx9XG4gICAgICAgIGRpYWxvZ0NvbnRlbnQ9e1xuICAgICAgICAgIGZhdm91cml0ZSA/IGAke2Zhdm91cml0ZS5uYW1lfTogJHtmYXZvdXJpdGUuYWRkcmVzc31gIDogJydcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2RlbGV0ZScpfVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvcHMuZGVsZXRlRmF2b3VyaXRlKGZhdm91cml0ZSk7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZTogbnVsbCxcbiAgICAgICAgICAgIHNob3dEZWxldGVQbGFjZU1vZGFsOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dGhpcy50cmFuc2xhdGUoJ2NhbmNlbCcpfVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGU6IG51bGwsXG4gICAgICAgICAgICBzaG93RGVsZXRlUGxhY2VNb2RhbDogZmFsc2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZUNsb3NlKCk7XG4gICAgY29uc3Qgb21pdHRlZEZhdm91cml0ZXMgPSB0aGlzLnN0YXRlLmZhdm91cml0ZXMubWFwKGl0ZW0gPT5cbiAgICAgIG9taXQoaXRlbSwgWydjaG9zZW4nLCAnc2VsZWN0ZWQnXSksXG4gICAgKTtcbiAgICBpZiAoIWlzRXF1YWwob21pdHRlZEZhdm91cml0ZXMsIHRoaXMucHJvcHMuZmF2b3VyaXRlcykpIHtcbiAgICAgIHRoaXMucHJvcHMudXBkYXRlRmF2b3VyaXRlcyhvbWl0dGVkRmF2b3VyaXRlcyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlck1vZGFsQ29udGVudCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGZvbnRXZWlnaHRzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgcHJpbWFyeSwgaG92ZXIgfSA9IHRoaXMucHJvcHMuY29sb3JzO1xuICAgIGNvbnN0IG1vZGFsUHJvcHMgPSB7XG4gICAgICBoZWFkZXJUZXh0OiB0aGlzLnRyYW5zbGF0ZSgnZWRpdC1wbGFjZXMnKSxcbiAgICAgIHJlbmRlckxpc3Q6IHRoaXMucmVuZGVyRmF2b3VyaXRlTGlzdCxcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgJy0tY29sb3InOiBwcmltYXJ5LFxuICAgICAgJy0taG92ZXItY29sb3InOiBob3ZlcixcbiAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIDxNb2RhbENvbnRlbnQgey4uLm1vZGFsUHJvcHN9IC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGlzTW9iaWxlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2hvd0RlbGV0ZVBsYWNlTW9kYWwsIHNlbGVjdGVkRmF2b3VyaXRlIH0gPSB0aGlzLnN0YXRlO1xuICAgIHJldHVybiAoXG4gICAgICA8TW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICBjb250ZW50TGFiZWw9e3RoaXMudHJhbnNsYXRlKCdlZGl0LW1vZGFsLW9uLW9wZW4nKX1cbiAgICAgICAgY2xvc2VCdXR0b25MYWJlbD17dGhpcy50cmFuc2xhdGUoJ2Nsb3NlLW1vZGFsJyl9XG4gICAgICAgIHZhcmlhbnQ9e2lzTW9iaWxlID8gJ2xhcmdlJyA6ICdzbWFsbCd9XG4gICAgICAgIGlzT3Blbj17dGhpcy5wcm9wcy5pc01vZGFsT3Blbn1cbiAgICAgICAgb25Dcm9zc0NsaWNrPXt0aGlzLmNsb3NlTW9kYWx9XG4gICAgICA+XG4gICAgICAgIHt0aGlzLnJlbmRlckRlbGV0ZUZhdm91cml0ZU1vZGFsKHNlbGVjdGVkRmF2b3VyaXRlKX1cbiAgICAgICAgeyFzaG93RGVsZXRlUGxhY2VNb2RhbCAmJiB0aGlzLnJlbmRlck1vZGFsQ29udGVudCgpfVxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEZhdm91cml0ZUVkaXRpbmdNb2RhbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKFxuICBGYXZvdXJpdGVFZGl0aW5nTW9kYWwsXG4pO1xuXG5leHBvcnQgZGVmYXVsdCBwcm9wcyA9PiAoXG4gIDxJMThuZXh0UHJvdmlkZXIgaTE4bj17aTE4bn0+XG4gICAgPEZhdm91cml0ZUVkaXRpbmdNb2RhbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gIDwvSTE4bmV4dFByb3ZpZGVyPlxuKTtcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsImNsYXNzTmFtZXMiLCJjbGFzc2VzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJnIiwiYXBwZW5kQ2xhc3MiLCJwYXJzZVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwiYXBwbHkiLCJ0b1N0cmluZyIsImluY2x1ZGVzIiwia2V5IiwibmV3Q2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwiZGVmYXVsdCIsIndpbmRvdyIsImZyZWVHbG9iYWwiLCJnbG9iYWwiLCJfZnJlZUdsb2JhbCIsInJlcXVpcmUkJDAiLCJmcmVlU2VsZiIsInNlbGYiLCJyb290IiwiRnVuY3Rpb24iLCJfcm9vdCIsIl9TeW1ib2wiLCJnZXRSYXdUYWciLCJvYmplY3RQcm90byIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJ0b1N0cmluZ1RhZyIsInVuZGVmaW5lZCIsIl9nZXRSYXdUYWciLCJpc093biIsInRhZyIsInVubWFza2VkIiwicmVzdWx0IiwicmVxdWlyZSQkMSIsIm9iamVjdFRvU3RyaW5nIiwiX29iamVjdFRvU3RyaW5nIiwicmVxdWlyZSQkMiIsIl9iYXNlR2V0VGFnIiwiaXNPYmplY3RfMSIsInR5cGUiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3QiLCJpc0Z1bmN0aW9uXzEiLCJ1aWQiLCJjb3JlSnNEYXRhIiwiX2NvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsImtleXMiLCJJRV9QUk9UTyIsIl9pc01hc2tlZCIsImZ1bmMiLCJmdW5jVG9TdHJpbmciLCJfdG9Tb3VyY2UiLCJiYXNlSXNOYXRpdmUiLCJpc0Z1bmN0aW9uIiwiaXNNYXNrZWQiLCJ0b1NvdXJjZSIsInJlcXVpcmUkJDMiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJyZUlzTmF0aXZlIiwiUmVnRXhwIiwicmVwbGFjZSIsIl9iYXNlSXNOYXRpdmUiLCJ0ZXN0IiwiZ2V0VmFsdWUiLCJfZ2V0VmFsdWUiLCJvYmplY3QiLCJfZ2V0TmF0aXZlIiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiX25hdGl2ZUNyZWF0ZSIsImhhc2hDbGVhciIsIl9oYXNoQ2xlYXIiLCJ0aGlzIiwiX19kYXRhX18iLCJzaXplIiwiaGFzaERlbGV0ZSIsIl9oYXNoRGVsZXRlIiwiaGFzIiwiaGFzaEdldCIsIl9oYXNoR2V0IiwiZGF0YSIsImhhc2hIYXMiLCJfaGFzaEhhcyIsImhhc2hTZXQiLCJfaGFzaFNldCIsInJlcXVpcmUkJDQiLCJIYXNoIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsInNldCIsImdldCIsIl9IYXNoIiwiZXFfMSIsIm90aGVyIiwiZXEiLCJfYXNzb2NJbmRleE9mIiwiYXJyYXkiLCJsaXN0Q2FjaGVDbGVhciIsIl9saXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImFzc29jSW5kZXhPZiIsInNwbGljZSIsIl9saXN0Q2FjaGVEZWxldGUiLCJwb3AiLCJsaXN0Q2FjaGVHZXQiLCJfbGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwiX2xpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIl9saXN0Q2FjaGVTZXQiLCJwdXNoIiwiTGlzdENhY2hlIiwiX0xpc3RDYWNoZSIsIk1hcCIsIl9NYXAiLCJpc0tleWFibGUiLCJfaXNLZXlhYmxlIiwiX2dldE1hcERhdGEiLCJtYXAiLCJtYXBDYWNoZUNsZWFyIiwiX21hcENhY2hlQ2xlYXIiLCJoYXNoIiwic3RyaW5nIiwibWFwQ2FjaGVEZWxldGUiLCJnZXRNYXBEYXRhIiwiX21hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJfbWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIl9tYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiX21hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJfTWFwQ2FjaGUiLCJzZXRDYWNoZUFkZCIsIl9zZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiX3NldENhY2hlSGFzIiwiU2V0Q2FjaGUiLCJ2YWx1ZXMiLCJhZGQiLCJfU2V0Q2FjaGUiLCJiYXNlRmluZEluZGV4IiwiX2Jhc2VGaW5kSW5kZXgiLCJwcmVkaWNhdGUiLCJmcm9tSW5kZXgiLCJmcm9tUmlnaHQiLCJiYXNlSXNOYU4iLCJfYmFzZUlzTmFOIiwic3RyaWN0SW5kZXhPZiIsIl9zdHJpY3RJbmRleE9mIiwiX2Jhc2VJbmRleE9mIiwiYmFzZUluZGV4T2YiLCJfYXJyYXlJbmNsdWRlcyIsIl9hcnJheUluY2x1ZGVzV2l0aCIsImNvbXBhcmF0b3IiLCJfYXJyYXlNYXAiLCJpdGVyYXRlZSIsIl9iYXNlVW5hcnkiLCJfY2FjaGVIYXMiLCJjYWNoZSIsIl9hcnJheVB1c2giLCJvZmZzZXQiLCJpc09iamVjdExpa2VfMSIsImJhc2VJc0FyZ3VtZW50cyIsImlzT2JqZWN0TGlrZSIsIl9iYXNlSXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImlzQXJndW1lbnRzIiwiaXNBcmd1bWVudHNfMSIsImlzQXJyYXlfMSIsImFycmF5UHVzaCIsImlzRmxhdHRlbmFibGUiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwiX2lzRmxhdHRlbmFibGUiLCJfYmFzZUZsYXR0ZW4iLCJiYXNlRmxhdHRlbiIsImRlcHRoIiwiaXNTdHJpY3QiLCJpZGVudGl0eV8xIiwiX2FwcGx5IiwidGhpc0FyZyIsImFyZ3MiLCJuYXRpdmVNYXgiLCJNYXRoIiwibWF4IiwiX292ZXJSZXN0Iiwic3RhcnQiLCJ0cmFuc2Zvcm0iLCJvdGhlckFyZ3MiLCJjb25zdGFudCIsImNvbnN0YW50XzEiLCJpZGVudGl0eSIsIl9iYXNlU2V0VG9TdHJpbmciLCJiYXNlU2V0VG9TdHJpbmciLCJzaG9ydE91dCIsIm5hdGl2ZU5vdyIsIkRhdGUiLCJub3ciLCJfc2hvcnRPdXQiLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsInNldFRvU3RyaW5nIiwiX3NldFRvU3RyaW5nIiwiaXNMZW5ndGhfMSIsImlzTGVuZ3RoIiwiaXNBcnJheUxpa2VfMSIsImxhc3RfMSIsImJhc2VEaWZmZXJlbmNlIiwiYXJyYXlJbmNsdWRlcyIsImFycmF5SW5jbHVkZXNXaXRoIiwiYXJyYXlNYXAiLCJiYXNlVW5hcnkiLCJjYWNoZUhhcyIsInJlcXVpcmUkJDUiLCJfYmFzZURpZmZlcmVuY2UiLCJpc0NvbW1vbiIsInZhbHVlc0xlbmd0aCIsIm91dGVyIiwiY29tcHV0ZWQiLCJ2YWx1ZXNJbmRleCIsImJhc2VSZXN0Iiwib3ZlclJlc3QiLCJfYmFzZVJlc3QiLCJpc0FycmF5TGlrZU9iamVjdCIsImlzQXJyYXlMaWtlIiwiaXNBcnJheUxpa2VPYmplY3RfMSIsImxhc3QiLCJkaWZmZXJlbmNlV2l0aCIsImRpZmZlcmVuY2VXaXRoXzEiLCJzdGFja0NsZWFyIiwiX3N0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsIl9zdGFja0RlbGV0ZSIsInN0YWNrR2V0IiwiX3N0YWNrR2V0Iiwic3RhY2tIYXMiLCJfc3RhY2tIYXMiLCJzdGFja1NldCIsIl9zdGFja1NldCIsInBhaXJzIiwiTEFSR0VfQVJSQVlfU0laRSIsIlN0YWNrIiwiX1N0YWNrIiwiYXJyYXlTb21lIiwiX2FycmF5U29tZSIsIl9lcXVhbEFycmF5cyIsImJpdG1hc2siLCJjdXN0b21pemVyIiwiZXF1YWxGdW5jIiwic3RhY2siLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsIlVpbnQ4QXJyYXkiLCJfVWludDhBcnJheSIsIl9zZXRUb0FycmF5IiwiZm9yRWFjaCIsImVxdWFsQXJyYXlzIiwibWFwVG9BcnJheSIsIl9tYXBUb0FycmF5Iiwic2V0VG9BcnJheSIsInN5bWJvbFByb3RvIiwic3ltYm9sVmFsdWVPZiIsInZhbHVlT2YiLCJfZXF1YWxCeVRhZyIsImJ5dGVMZW5ndGgiLCJieXRlT2Zmc2V0IiwiYnVmZmVyIiwibmFtZSIsIm1lc3NhZ2UiLCJjb252ZXJ0Iiwic3RhY2tlZCIsIl9iYXNlR2V0QWxsS2V5cyIsImtleXNGdW5jIiwic3ltYm9sc0Z1bmMiLCJzdHViQXJyYXlfMSIsImFycmF5RmlsdGVyIiwiX2FycmF5RmlsdGVyIiwicmVzSW5kZXgiLCJzdHViQXJyYXkiLCJuYXRpdmVHZXRTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiX2dldFN5bWJvbHMiLCJzeW1ib2wiLCJzdHViRmFsc2UiLCJzdHViRmFsc2VfMSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJmcmVlUHJvY2VzcyIsInByb2Nlc3MiLCJub2RlVXRpbCIsInR5cGVzIiwicmVxdWlyZSIsImJpbmRpbmciLCJiYXNlSXNUeXBlZEFycmF5IiwidHlwZWRBcnJheVRhZ3MiLCJfYmFzZUlzVHlwZWRBcnJheSIsIm5vZGVJc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXkiLCJpc1R5cGVkQXJyYXlfMSIsImJhc2VUaW1lcyIsIl9iYXNlVGltZXMiLCJuIiwiaXNJbmRleCIsInJlSXNVaW50IiwiX2lzSW5kZXgiLCJfYXJyYXlMaWtlS2V5cyIsImluaGVyaXRlZCIsImlzQXJyIiwiaXNBcmciLCJpc0J1ZmYiLCJpc1R5cGUiLCJza2lwSW5kZXhlcyIsIl9pc1Byb3RvdHlwZSIsIkN0b3IiLCJfb3ZlckFyZyIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIm92ZXJBcmciLCJfbmF0aXZlS2V5cyIsIl9iYXNlS2V5cyIsImFycmF5TGlrZUtleXMiLCJiYXNlS2V5cyIsImtleXNfMSIsImJhc2VHZXRBbGxLZXlzIiwiZ2V0U3ltYm9scyIsIl9nZXRBbGxLZXlzIiwiU2V0IiwiX1NldCIsIkRhdGFWaWV3IiwiX0RhdGFWaWV3IiwiUHJvbWlzZSIsIl9Qcm9taXNlIiwiV2Vha01hcCIsIl9XZWFrTWFwIiwicmVxdWlyZSQkNiIsIm1hcFRhZyIsInByb21pc2VUYWciLCJzZXRUYWciLCJ3ZWFrTWFwVGFnIiwiZGF0YVZpZXdUYWciLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJnZXRUYWciLCJBcnJheUJ1ZmZlciIsInJlc29sdmUiLCJjdG9yU3RyaW5nIiwiX2dldFRhZyIsImVxdWFsQnlUYWciLCJlcXVhbE9iamVjdHMiLCJnZXRBbGxLZXlzIiwiX2VxdWFsT2JqZWN0cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqVmFsdWUiLCJvYmpDdG9yIiwib3RoQ3RvciIsInJlcXVpcmUkJDciLCJhcmdzVGFnIiwiYXJyYXlUYWciLCJvYmplY3RUYWciLCJfYmFzZUlzRXF1YWxEZWVwIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJiYXNlSXNFcXVhbCIsImJhc2VJc0VxdWFsRGVlcCIsIl9iYXNlSXNFcXVhbCIsImlzRXF1YWxfMSIsImlzRW1wdHlfMSIsIl9iYXNlQXNzaWduVmFsdWUiLCJiYXNlQXNzaWduVmFsdWUiLCJfYXNzaWduVmFsdWUiLCJhc3NpZ25WYWx1ZSIsIl9jb3B5T2JqZWN0Iiwic291cmNlIiwicHJvcHMiLCJpc05ldyIsIm5ld1ZhbHVlIiwibmF0aXZlS2V5c0luIiwiX25hdGl2ZUtleXNJbiIsIl9iYXNlS2V5c0luIiwiaXNQcm90byIsImJhc2VLZXlzSW4iLCJrZXlzSW5fMSIsImdldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwiX2dldFByb3RvdHlwZSIsIl9nZXRTeW1ib2xzSW4iLCJnZXRTeW1ib2xzSW4iLCJrZXlzSW4iLCJfZ2V0QWxsS2V5c0luIiwiX2Nsb25lQXJyYXlCdWZmZXIiLCJhcnJheUJ1ZmZlciIsImNsb25lQXJyYXlCdWZmZXIiLCJjbG9uZURhdGFWaWV3IiwiX2Nsb25lRGF0YVZpZXciLCJkYXRhVmlldyIsImlzRGVlcCIsImNsb25lUmVnRXhwIiwicmVGbGFncyIsIl9jbG9uZVJlZ0V4cCIsInJlZ2V4cCIsImxhc3RJbmRleCIsImNsb25lU3ltYm9sIiwiX2Nsb25lU3ltYm9sIiwiY2xvbmVUeXBlZEFycmF5IiwiX2Nsb25lVHlwZWRBcnJheSIsInR5cGVkQXJyYXkiLCJfaW5pdENsb25lQnlUYWciLCJiYXNlQ3JlYXRlIiwib2JqZWN0Q3JlYXRlIiwiY3JlYXRlIiwicHJvdG8iLCJfYmFzZUNyZWF0ZSIsIl9pbml0Q2xvbmVPYmplY3QiLCJiYXNlSXNNYXAiLCJfYmFzZUlzTWFwIiwibm9kZUlzTWFwIiwiaXNNYXAiLCJpc01hcF8xIiwiYmFzZUlzU2V0IiwiX2Jhc2VJc1NldCIsIm5vZGVJc1NldCIsImlzU2V0IiwiaXNTZXRfMSIsImFycmF5RWFjaCIsIl9hcnJheUVhY2giLCJiYXNlQXNzaWduIiwiY29weU9iamVjdCIsIl9iYXNlQXNzaWduIiwiYmFzZUFzc2lnbkluIiwiX2Jhc2VBc3NpZ25JbiIsImNsb25lQnVmZmVyIiwiYWxsb2NVbnNhZmUiLCJzbGljZSIsImNvcHkiLCJjb3B5QXJyYXkiLCJfY29weUFycmF5IiwiY29weVN5bWJvbHMiLCJfY29weVN5bWJvbHMiLCJjb3B5U3ltYm9sc0luIiwiX2NvcHlTeW1ib2xzSW4iLCJyZXF1aXJlJCQ4IiwicmVxdWlyZSQkOSIsImdldEFsbEtleXNJbiIsInJlcXVpcmUkJDEwIiwicmVxdWlyZSQkMTEiLCJpbml0Q2xvbmVBcnJheSIsIl9pbml0Q2xvbmVBcnJheSIsImlucHV0IiwicmVxdWlyZSQkMTIiLCJpbml0Q2xvbmVCeVRhZyIsInJlcXVpcmUkJDEzIiwiaW5pdENsb25lT2JqZWN0IiwicmVxdWlyZSQkMTQiLCJyZXF1aXJlJCQxNSIsInJlcXVpcmUkJDE2IiwicmVxdWlyZSQkMTciLCJyZXF1aXJlJCQxOCIsInJlcXVpcmUkJDE5IiwicmVxdWlyZSQkMjAiLCJyZXF1aXJlJCQyMSIsImZ1bmNUYWciLCJjbG9uZWFibGVUYWdzIiwiX2Jhc2VDbG9uZSIsImJhc2VDbG9uZSIsImlzRmxhdCIsImlzRnVsbCIsImlzRnVuYyIsInN1YlZhbHVlIiwiaXNTeW1ib2xfMSIsIm1lbW9pemUiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiQ2FjaGUiLCJtZW1vaXplXzEiLCJtZW1vaXplQ2FwcGVkIiwiX21lbW9pemVDYXBwZWQiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwic3RyaW5nVG9QYXRoIiwiY2hhckNvZGVBdCIsIm1hdGNoIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJfc3RyaW5nVG9QYXRoIiwiYmFzZVRvU3RyaW5nIiwiaXNTeW1ib2wiLCJzeW1ib2xUb1N0cmluZyIsIl9iYXNlVG9TdHJpbmciLCJ0b1N0cmluZ18xIiwiaXNLZXkiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwiX2lzS2V5IiwiX2Nhc3RQYXRoIiwiX3RvS2V5IiwiSW5maW5pdHkiLCJiYXNlR2V0IiwiY2FzdFBhdGgiLCJ0b0tleSIsIl9iYXNlR2V0IiwicGF0aCIsImJhc2VTbGljZSIsIl9iYXNlU2xpY2UiLCJlbmQiLCJfcGFyZW50IiwiaXNQbGFpbk9iamVjdCIsIm9iamVjdEN0b3JTdHJpbmciLCJpc1BsYWluT2JqZWN0XzEiLCJfY3VzdG9tT21pdENsb25lIiwiZmxhdHRlbiIsImZsYXR0ZW5fMSIsIl9mbGF0UmVzdCIsImJhc2VVbnNldCIsInBhcmVudCIsIl9iYXNlVW5zZXQiLCJvYmoiLCJjdXN0b21PbWl0Q2xvbmUiLCJmbGF0UmVzdCIsIm9taXQiLCJwYXRocyIsIkNMT05FX0RFRVBfRkxBRyIsIm9taXRfMSIsIm5vb3AiLCJub29wXzEiLCJjcmVhdGVTZXQiLCJfY3JlYXRlU2V0IiwiYmFzZVVuaXEiLCJfYmFzZVVuaXEiLCJzZWVuSW5kZXgiLCJ1bmlxV2l0aF8xIiwicmVSZWdFeHBDaGFyIiwicmVIYXNSZWdFeHBDaGFyIiwiZXNjYXBlUmVnRXhwXzEiLCJjbG9uZURlZXBfMSIsImdldExvY2FsYWRtaW4iLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImFkZHJlc3MiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldFN0b3BDb2RlIiwiaWQiLCJjb2RlIiwiaW5kZXhPZiIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJzcGxpdCIsImVzY2FwZVJlZ0V4cCIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJwbGFpbiIsImxheWVyIiwibGFiZWxJZCIsInNob3J0TmFtZSIsImd0ZnNJZCIsIm1vZGUiLCJ0b0xvd2VyQ2FzZSIsImxvbmdOYW1lIiwiYWdlbmN5IiwibGFiZWwiLCJpdGVtIiwiY2xvbmVEZWVwIiwiTW9kYWxDb250ZW50IiwiaGVhZGVyVGV4dCIsInJlbmRlckxpc3QiLCJSZWFjdCIsImNsYXNzTmFtZSIsInN0eWxlcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImkxOG4iLCJjcmVhdGVJbnN0YW5jZSIsImZhbGxiYWNrTG5nIiwicmVzb3VyY2VzIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImNhbmNlbCIsImRlbGV0ZSIsInNhdmUiLCJlbiIsInVwIiwiZG93biIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJjb25jYXQiLCJwcmV2ZW50RGVmYXVsdCIsIkZhdm91cml0ZUVkaXRpbmdNb2RhbCIsIkNvbXBvbmVudCIsInN1cGVyIiwib3B0aW9ucyIsIl9vYmplY3RTcHJlYWQiLCJsbmciLCJsYW5nIiwiZGlyZWN0aW9uIiwiZmF2b3VyaXRlcyIsInN0YXRlIiwiZmF2b3VyaXRlc0NvcHkiLCJ0bXAiLCJzZXRTdGF0ZSIsImZhdm91cml0ZSIsImljb25JZCIsInNlbGVjdGVkSWNvbklkIiwicHJlZml4UG9zIiwiY3giLCJmYXZvdXJpdGVJZCIsInRyYW5zbGF0ZSIsIm9uQ2xpY2siLCJtb3ZlRmF2b3VyaXRlIiwiSWNvbiIsImltZyIsImNvbG9yIiwiY29sb3JzIiwicHJpbWFyeSIsInJvbGUiLCJ0YWJJbmRleCIsIm9uRWRpdFNlbGVjdGVkIiwib25LZXlEb3duIiwic2VsZWN0ZWRGYXZvdXJpdGUiLCJzaG93RGVsZXRlUGxhY2VNb2RhbCIsImlzTG9hZGluZyIsIlJlYWN0U29ydGFibGUiLCJsaXN0Iiwic2V0TGlzdCIsIml0ZW1zIiwiYW5pbWF0aW9uIiwiaGFuZGxlIiwicmVuZGVyRmF2b3VyaXRlTGlzdEl0ZW0iLCJTcGlubmVyIiwiRGlhbG9nTW9kYWwiLCJoYW5kbGVDbG9zZSIsImlzTW9kYWxPcGVuIiwiZGlhbG9nQ29udGVudCIsInByaW1hcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJkZWxldGVGYXZvdXJpdGUiLCJzZWNvbmRhcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsIm9taXR0ZWRGYXZvdXJpdGVzIiwiaXNFcXVhbCIsInVwZGF0ZUZhdm91cml0ZXMiLCJmb250V2VpZ2h0cyIsImhvdmVyIiwibW9kYWxQcm9wcyIsInJlbmRlckZhdm91cml0ZUxpc3QiLCJtZWRpdW0iLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJuZXh0UHJvcHMiLCJwcmV2U3RhdGUiLCJuZXh0RmF2b3VyaXRlcyIsInByZXZGYXZvdXJpdGVzIiwiaXNFbXB0eSIsInJlbmRlciIsImlzTW9iaWxlIiwiTW9kYWwiLCJhcHBFbGVtZW50IiwiY29udGVudExhYmVsIiwiY2xvc2VCdXR0b25MYWJlbCIsInZhcmlhbnQiLCJpc09wZW4iLCJvbkNyb3NzQ2xpY2siLCJjbG9zZU1vZGFsIiwicmVuZGVyRGVsZXRlRmF2b3VyaXRlTW9kYWwiLCJyZW5kZXJNb2RhbENvbnRlbnQiLCJkZWZhdWx0Q29sb3JzIiwiYXJyYXlPZiIsInNoYXBlIiwiZ2lkIiwibGF0IiwibG9uIiwiYm9vbCIsIm9iamVjdE9mIiwiRmF2b3VyaXRlRWRpdGluZ01vZGFsV2l0aFRyYW5zbGF0aW9uIiwid2l0aFRyYW5zbGF0aW9uIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoieWhDQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2hCLEVBQUksU0FBVUEsR0FDWixPQUFPQSxHQUFLLG1CQUFxQkMsUUFBVUQsRUFBRUcsY0FBZ0JGLFFBQVVELElBQU1DLE9BQU9HLFVBQVksZ0JBQWtCSixDQUNwSCxFQUFHRCxFQUFRQyxFQUNiLENDTkEsU0FBU0ssRUFBY0MsR0FDckIsSUFBSUMsRUNGTixTQUFxQkQsRUFBR0UsR0FDdEIsR0FBSSxVQUFZVCxFQUFRTyxLQUFPQSxFQUFHLE9BQU9BLEVBQ3pDLElBQUlHLEVBQUlILEVBQUVMLE9BQU9TLGFBQ2pCLFFBQUksSUFBV0QsRUFBRyxDQUNoQixJQUFJRixFQUFJRSxFQUFFRSxLQUFLTCxFQUFHRSxHQUNsQixHQUFJLFVBQVlULEVBQVFRLEdBQUksT0FBT0EsRUFDbkMsTUFBTSxJQUFJSyxVQUFVLCtDQUN0QixDQUNBLE9BQVEsV0FBYUosRUFBSUssT0FBU0MsUUFBUVIsRUFDNUMsQ0RQVUksQ0FBWUosRUFBRyxVQUN2QixNQUFPLFVBQVlQLEVBQVFRLEdBQUtBLEVBQUlBLEVBQUksRUFDMUMsQ0VKQSxTQUFTUSxFQUFnQk4sRUFBR0QsRUFBR0YsR0FDN0IsT0FBUUUsRUFBSUgsRUFBY0csTUFBT0MsRUFBSU8sT0FBT0MsZUFBZVIsRUFBR0QsRUFBRyxDQUMvRFUsTUFBT1osRUFDUGEsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLFVBQVUsSUFDUFosRUFBRUQsR0FBS0YsRUFBR0csQ0FDakI7Ozs7O2liQ0RDLFdBR0EsSUFBSWEs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akIsS0FBS3lqQixXQWMvQmtDLFdBQVluQyxFQUFBQSxRQUFVeUcsUUFDcEJ6RyxFQUFBQSxRQUFVMEcsTUFBTSxDQUNkOXFCLEtBQU1va0IsRUFBQUEsUUFBVTVlLE9BQ2hCOGIsUUFBUzhDLEVBQUFBLFFBQVU1ZSxPQUNuQjJkLE9BQVFpQixFQUFBQSxRQUFVNWUsT0FDbEJ1bEIsSUFBSzNHLEVBQUFBLFFBQVU1ZSxPQUNmd2xCLElBQUs1RyxFQUFBQSxRQUFVdkcsT0FDZm9OLElBQUs3RyxFQUFBQSxRQUFVdkcsT0FDZnhPLEtBQU0rVSxFQUFBQSxRQUFVNWUsT0FDaEJzaEIsZUFBZ0IxQyxFQUFBQSxRQUFVNWUsT0FDMUJ5aEIsWUFBYTdDLEVBQUFBLFFBQVU1ZSxPQUN2QndkLE1BQU9vQixFQUFBQSxRQUFVNWUsVUFFbkI2ZSxXQUNGZ0MsS0FBTWpDLEVBQUFBLFFBQVU1ZSxPQUNoQnZKLEVBQUdtb0IsRUFBQUEsUUFBVXhqQixLQUFLeWpCLFdBQ2xCOEYsV0FBWS9GLEVBQUFBLFFBQVU1ZSxPQUFPNmUsV0FDN0JzRSxZQUFhdkUsRUFBQUEsUUFBVThHLEtBQUs3RyxXQUM1QjRGLFNBQVU3RixFQUFBQSxRQUFVOEcsS0FDcEJsRCxVQUFXNUQsRUFBQUEsUUFBVThHLEtBQUs3RyxXQUMxQm1ELE9BQVFwRCxFQUFBQSxRQUFVK0csU0FBUy9HLEVBQUFBLFFBQVU1ZSxRQUVyQzZqQixZQUFhakYsRUFBQUEsUUFBVTBHLE1BQU0sQ0FFM0JyQixPQUFRckYsRUFBQUEsUUFBVXZHLFdBbVJ4QixNQUFNdU4sR0FBdUNDLEVBQUFBLGlCQUFBQSxDQUMzQ3RGLGNBR2E5TyxHQUNiNk0sRUFBQUEsUUFBQXRCLGNBQUM4SSxrQkFBZSxDQUFDaEgsS0FBTUEsSUFDckJSLFVBQUF0QixjQUFDNEksR0FBeUNuVSIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcyXX0=