@ampt/cli 1.1.17 → 1.1.18

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.
package/dist/cli.js CHANGED
@@ -1,4 +1,4 @@
1
- var vWe=Object.create;var bm=Object.defineProperty;var bWe=Object.getOwnPropertyDescriptor;var IWe=Object.getOwnPropertyNames;var _We=Object.getPrototypeOf,CWe=Object.prototype.hasOwnProperty;var xWe=(e,t,r)=>t in e?bm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),jR=(e,t)=>{for(var r in t)bm(e,r,{get:t[r],enumerable:!0})},JM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of IWe(t))!CWe.call(e,i)&&i!==r&&bm(e,i,{get:()=>t[i],enumerable:!(n=bWe(t,i))||n.enumerable});return e};var Ce=(e,t,r)=>(r=e!=null?vWe(_We(e)):{},JM(t||!e||!e.__esModule?bm(r,"default",{value:e,enumerable:!0}):r,e)),XR=e=>JM(bm({},"__esModule",{value:!0}),e);var Cr=(e,t,r)=>(xWe(e,typeof t!="symbol"?t+"":t,r),r),$M=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var Ro=(e,t,r)=>($M(e,t,"read from private field"),r?r.call(e):t.get(e)),Im=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},YR=(e,t,r,n)=>($M(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var SWe,c=ae(()=>{SWe=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};SWe.SENTRY_RELEASE={id:"1.1.17"}});var CI=y((KR,zR)=>{c();(function(e,t){typeof KR=="object"&&typeof zR<"u"?zR.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(KR,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",s="minute",o="hour",a="day",u="week",p="month",d="quarter",h="year",m="date",g="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,I=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,x={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(B){var M=["th","st","nd","rd"],Y=B%100;return"["+B+(M[(Y-20)%10]||M[Y]||M[0])+"]"}},_=function(B,M,Y){var V=String(B);return!V||V.length>=M?B:""+Array(M+1-V.length).join(Y)+B},A={s:_,z:function(B){var M=-B.utcOffset(),Y=Math.abs(M),V=Math.floor(Y/60),q=Y%60;return(M<=0?"+":"-")+_(V,2,"0")+":"+_(q,2,"0")},m:function B(M,Y){if(M.date()<Y.date())return-B(Y,M);var V=12*(Y.year()-M.year())+(Y.month()-M.month()),q=M.clone().add(V,p),te=Y-q<0,z=M.clone().add(V+(te?-1:1),p);return+(-(V+(Y-q)/(te?q-z:z-q))||0)},a:function(B){return B<0?Math.ceil(B)||0:Math.floor(B)},p:function(B){return{M:p,y:h,w:u,d:a,D:m,h:o,m:s,s:i,ms:n,Q:d}[B]||String(B||"").toLowerCase().replace(/s$/,"")},u:function(B){return B===void 0}},E="en",S={};S[E]=x;var w="$isDayjsObject",T=function(B){return B instanceof k||!(!B||!B[w])},D=function B(M,Y,V){var q;if(!M)return E;if(typeof M=="string"){var te=M.toLowerCase();S[te]&&(q=te),Y&&(S[te]=Y,q=te);var z=M.split("-");if(!q&&z.length>1)return B(z[0])}else{var he=M.name;S[he]=M,q=he}return!V&&q&&(E=q),q||!V&&E},L=function(B,M){if(T(B))return B.clone();var Y=typeof M=="object"?M:{};return Y.date=B,Y.args=arguments,new k(Y)},P=A;P.l=D,P.i=T,P.w=function(B,M){return L(B,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var k=function(){function B(Y){this.$L=D(Y.locale,null,!0),this.parse(Y),this.$x=this.$x||Y.x||{},this[w]=!0}var M=B.prototype;return M.parse=function(Y){this.$d=function(V){var q=V.date,te=V.utc;if(q===null)return new Date(NaN);if(P.u(q))return new Date;if(q instanceof Date)return new Date(q);if(typeof q=="string"&&!/Z$/i.test(q)){var z=q.match(v);if(z){var he=z[2]-1||0,fe=(z[7]||"0").substring(0,3);return te?new Date(Date.UTC(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)):new Date(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)}}return new Date(q)}(Y),this.init()},M.init=function(){var Y=this.$d;this.$y=Y.getFullYear(),this.$M=Y.getMonth(),this.$D=Y.getDate(),this.$W=Y.getDay(),this.$H=Y.getHours(),this.$m=Y.getMinutes(),this.$s=Y.getSeconds(),this.$ms=Y.getMilliseconds()},M.$utils=function(){return P},M.isValid=function(){return this.$d.toString()!==g},M.isSame=function(Y,V){var q=L(Y);return this.startOf(V)<=q&&q<=this.endOf(V)},M.isAfter=function(Y,V){return L(Y)<this.startOf(V)},M.isBefore=function(Y,V){return this.endOf(V)<L(Y)},M.$g=function(Y,V,q){return P.u(Y)?this[V]:this.set(q,Y)},M.unix=function(){return Math.floor(this.valueOf()/1e3)},M.valueOf=function(){return this.$d.getTime()},M.startOf=function(Y,V){var q=this,te=!!P.u(V)||V,z=P.p(Y),he=function(gt,lt){var _e=P.w(q.$u?Date.UTC(q.$y,lt,gt):new Date(q.$y,lt,gt),q);return te?_e:_e.endOf(a)},fe=function(gt,lt){return P.w(q.toDate()[gt].apply(q.toDate("s"),(te?[0,0,0,0]:[23,59,59,999]).slice(lt)),q)},Se=this.$W,De=this.$M,Oe=this.$D,Xe="set"+(this.$u?"UTC":"");switch(z){case h:return te?he(1,0):he(31,11);case p:return te?he(1,De):he(0,De+1);case u:var Ze=this.$locale().weekStart||0,Re=(Se<Ze?Se+7:Se)-Ze;return he(te?Oe-Re:Oe+(6-Re),De);case a:case m:return fe(Xe+"Hours",0);case o:return fe(Xe+"Minutes",1);case s:return fe(Xe+"Seconds",2);case i:return fe(Xe+"Milliseconds",3);default:return this.clone()}},M.endOf=function(Y){return this.startOf(Y,!1)},M.$set=function(Y,V){var q,te=P.p(Y),z="set"+(this.$u?"UTC":""),he=(q={},q[a]=z+"Date",q[m]=z+"Date",q[p]=z+"Month",q[h]=z+"FullYear",q[o]=z+"Hours",q[s]=z+"Minutes",q[i]=z+"Seconds",q[n]=z+"Milliseconds",q)[te],fe=te===a?this.$D+(V-this.$W):V;if(te===p||te===h){var Se=this.clone().set(m,1);Se.$d[he](fe),Se.init(),this.$d=Se.set(m,Math.min(this.$D,Se.daysInMonth())).$d}else he&&this.$d[he](fe);return this.init(),this},M.set=function(Y,V){return this.clone().$set(Y,V)},M.get=function(Y){return this[P.p(Y)]()},M.add=function(Y,V){var q,te=this;Y=Number(Y);var z=P.p(V),he=function(De){var Oe=L(te);return P.w(Oe.date(Oe.date()+Math.round(De*Y)),te)};if(z===p)return this.set(p,this.$M+Y);if(z===h)return this.set(h,this.$y+Y);if(z===a)return he(1);if(z===u)return he(7);var fe=(q={},q[s]=t,q[o]=r,q[i]=e,q)[z]||1,Se=this.$d.getTime()+Y*fe;return P.w(Se,this)},M.subtract=function(Y,V){return this.add(-1*Y,V)},M.format=function(Y){var V=this,q=this.$locale();if(!this.isValid())return q.invalidDate||g;var te=Y||"YYYY-MM-DDTHH:mm:ssZ",z=P.z(this),he=this.$H,fe=this.$m,Se=this.$M,De=q.weekdays,Oe=q.months,Xe=q.meridiem,Ze=function(lt,_e,Z,R){return lt&&(lt[_e]||lt(V,te))||Z[_e].slice(0,R)},Re=function(lt){return P.s(he%12||12,lt,"0")},gt=Xe||function(lt,_e,Z){var R=lt<12?"AM":"PM";return Z?R.toLowerCase():R};return te.replace(I,function(lt,_e){return _e||function(Z){switch(Z){case"YY":return String(V.$y).slice(-2);case"YYYY":return P.s(V.$y,4,"0");case"M":return Se+1;case"MM":return P.s(Se+1,2,"0");case"MMM":return Ze(q.monthsShort,Se,Oe,3);case"MMMM":return Ze(Oe,Se);case"D":return V.$D;case"DD":return P.s(V.$D,2,"0");case"d":return String(V.$W);case"dd":return Ze(q.weekdaysMin,V.$W,De,2);case"ddd":return Ze(q.weekdaysShort,V.$W,De,3);case"dddd":return De[V.$W];case"H":return String(he);case"HH":return P.s(he,2,"0");case"h":return Re(1);case"hh":return Re(2);case"a":return gt(he,fe,!0);case"A":return gt(he,fe,!1);case"m":return String(fe);case"mm":return P.s(fe,2,"0");case"s":return String(V.$s);case"ss":return P.s(V.$s,2,"0");case"SSS":return P.s(V.$ms,3,"0");case"Z":return z}return null}(lt)||z.replace(":","")})},M.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},M.diff=function(Y,V,q){var te,z=this,he=P.p(V),fe=L(Y),Se=(fe.utcOffset()-this.utcOffset())*t,De=this-fe,Oe=function(){return P.m(z,fe)};switch(he){case h:te=Oe()/12;break;case p:te=Oe();break;case d:te=Oe()/3;break;case u:te=(De-Se)/6048e5;break;case a:te=(De-Se)/864e5;break;case o:te=De/r;break;case s:te=De/t;break;case i:te=De/e;break;default:te=De}return q?te:P.a(te)},M.daysInMonth=function(){return this.endOf(p).$D},M.$locale=function(){return S[this.$L]},M.locale=function(Y,V){if(!Y)return this.$L;var q=this.clone(),te=D(Y,V,!0);return te&&(q.$L=te),q},M.clone=function(){return P.w(this.$d,this)},M.toDate=function(){return new Date(this.valueOf())},M.toJSON=function(){return this.isValid()?this.toISOString():null},M.toISOString=function(){return this.$d.toISOString()},M.toString=function(){return this.$d.toUTCString()},B}(),F=k.prototype;return L.prototype=F,[["$ms",n],["$s",i],["$m",s],["$H",o],["$W",a],["$M",p],["$y",h],["$D",m]].forEach(function(B){F[B[1]]=function(M){return this.$g(M,B[0],B[1])}}),L.extend=function(B,M){return B.$i||(B(M,k,L),B.$i=!0),L},L.locale=D,L.isDayjs=T,L.unix=function(B){return L(1e3*B)},L.en=S[E],L.Ls=S,L.p={},L})});var QM=y((JR,$R)=>{c();(function(e,t){typeof JR=="object"&&typeof $R<"u"?$R.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})(JR,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function s(a,u,p,d){return n.fromToBase(a,u,p,d)}r.en.relativeTime=i,n.fromToBase=function(a,u,p,d,h){for(var m,g,v,I=p.$locale().relativeTime||i,x=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],_=x.length,A=0;A<_;A+=1){var E=x[A];E.d&&(m=d?r(a).diff(p,E.d,!0):p.diff(a,E.d,!0));var S=(e.rounding||Math.round)(Math.abs(m));if(v=m>0,S<=E.r||!E.r){S<=1&&A>0&&(E=x[A-1]);var w=I[E.l];h&&(S=h(""+S)),g=typeof w=="string"?w.replace("%d",S):w(S,u,E.l,v);break}}if(u)return g;var T=v?I.future:I.past;return typeof T=="function"?T(g):T.replace("%s",g)},n.to=function(a,u){return s(a,u,this,!0)},n.from=function(a,u){return s(a,u,this)};var o=function(a){return a.$u?r.utc():r()};n.toNow=function(a){return this.to(o(this),a)},n.fromNow=function(a){return this.from(o(this),a)}}})});var eU=y((QR,eT)=>{c();(function(e,t){typeof QR=="object"&&typeof eT<"u"?eT.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_updateLocale=t()})(QR,function(){"use strict";return function(e,t,r){r.updateLocale=function(n,i){var s=r.Ls[n];if(s)return(i?Object.keys(i):[]).forEach(function(o){s[o]=i[o]}),s}}})});var rU=y((aUt,tU)=>{"use strict";c();var wWe=/[|\\{}()[\]^$+*?.]/g;tU.exports=function(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(wWe,"\\$&")}});var sU=y((uUt,SI)=>{"use strict";c();var EWe=rU(),{platform:nU}=process,To={tick:"\u2714",cross:"\u2716",star:"\u2605",square:"\u2587",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",play:"\u25B6",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",circleQuestionMark:"?\u20DD",bullet:"\u25CF",dot:"\u2024",line:"\u2500",ellipsis:"\u2026",pointer:"\u276F",pointerSmall:"\u203A",info:"\u2139",warning:"\u26A0",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",heart:"\u2665",nodejs:"\u2B22",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",questionMarkPrefix:"?\u20DD",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneSeventh:"\u2150",oneEighth:"\u215B",oneNinth:"\u2151",oneTenth:"\u2152",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E"},iU={tick:"\u221A",cross:"\xD7",star:"*",square:"\u2588",squareSmall:"[ ]",squareSmallFilled:"[\u2588]",play:"\u25BA",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",circleQuestionMark:"(?)",bullet:"*",dot:".",line:"\u2500",ellipsis:"...",pointer:">",pointerSmall:"\xBB",info:"i",warning:"\u203C",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",heart:To.heart,nodejs:"\u2666",arrowUp:To.arrowUp,arrowDown:To.arrowDown,arrowLeft:To.arrowLeft,arrowRight:To.arrowRight,radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",questionMarkPrefix:"\uFF1F",oneHalf:"1/2",oneThird:"1/3",oneQuarter:"1/4",oneFifth:"1/5",oneSixth:"1/6",oneSeventh:"1/7",oneEighth:"1/8",oneNinth:"1/9",oneTenth:"1/10",twoThirds:"2/3",twoFifths:"2/5",threeQuarters:"3/4",threeFifths:"3/5",threeEighths:"3/8",fourFifths:"4/5",fiveSixths:"5/6",fiveEighths:"5/8",sevenEighths:"7/8"};nU==="linux"&&(To.questionMarkPrefix="?");var xI=nU==="win32"?iU:To,AWe=e=>{if(xI===To)return e;for(let[t,r]of Object.entries(To))r!==xI[t]&&(e=e.replace(new RegExp(EWe(r),"g"),xI[t]));return e};SI.exports=Object.assign(AWe,xI);SI.exports.main=To;SI.exports.windows=iU});var rT=y((pUt,aU)=>{"use strict";c();var oU=require("fs"),tT;function RWe(){try{return oU.statSync("/.dockerenv"),!0}catch{return!1}}function TWe(){try{return oU.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}aU.exports=()=>(tT===void 0&&(tT=RWe()||TWe()),tT)});var lU=y((fUt,nT)=>{"use strict";c();var NWe=require("os"),BWe=require("fs"),cU=rT(),uU=()=>{if(process.platform!=="linux")return!1;if(NWe.release().toLowerCase().includes("microsoft"))return!cU();try{return BWe.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!cU():!1}catch{return!1}};process.env.__IS_WSL_TEST__?nT.exports=uU:nT.exports=uU()});var dU=y((mUt,pU)=>{"use strict";c();pU.exports=(e,t,r)=>{let n=i=>Object.defineProperty(e,t,{value:i,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let i=r();return n(i),i},set(i){n(i)}}),e}});var bU=y((yUt,vU)=>{c();var kWe=require("path"),OWe=require("child_process"),{promises:EI,constants:yU}=require("fs"),wI=lU(),GWe=rT(),sT=dU(),fU=kWe.join(__dirname,"xdg-open"),{platform:ld,arch:hU}=process,FWe=()=>{try{return EI.statSync("/run/.containerenv"),!0}catch{return!1}},iT;function LWe(){return iT===void 0&&(iT=FWe()||GWe()),iT}var ZWe=(()=>{let e="/mnt/",t;return async function(){if(t)return t;let r="/etc/wsl.conf",n=!1;try{await EI.access(r,yU.F_OK),n=!0}catch{}if(!n)return e;let i=await EI.readFile(r,{encoding:"utf8"}),s=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(i);return s?(t=s.groups.mountPoint.trim(),t=t.endsWith("/")?t:`${t}/`,t):e}})(),mU=async(e,t)=>{let r;for(let n of e)try{return await t(n)}catch(i){r=i}throw r},AI=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return mU(e.app,a=>AI({...e,app:a}));let{name:t,arguments:r=[]}=e.app||{};if(r=[...r],Array.isArray(t))return mU(t,a=>AI({...e,app:{name:a,arguments:r}}));let n,i=[],s={};if(ld==="darwin")n="open",e.wait&&i.push("--wait-apps"),e.background&&i.push("--background"),e.newInstance&&i.push("--new"),t&&i.push("-a",t);else if(ld==="win32"||wI&&!LWe()&&!t){let a=await ZWe();n=wI?`${a}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`,i.push("-NoProfile","-NonInteractive","\u2013ExecutionPolicy","Bypass","-EncodedCommand"),wI||(s.windowsVerbatimArguments=!0);let u=["Start"];e.wait&&u.push("-Wait"),t?(u.push(`"\`"${t}\`""`,"-ArgumentList"),e.target&&r.unshift(e.target)):e.target&&u.push(`"${e.target}"`),r.length>0&&(r=r.map(p=>`"\`"${p}\`""`),u.push(r.join(","))),e.target=Buffer.from(u.join(" "),"utf16le").toString("base64")}else{if(t)n=t;else{let a=!__dirname||__dirname==="/",u=!1;try{await EI.access(fU,yU.X_OK),u=!0}catch{}n=process.versions.electron||ld==="android"||a||!u?"xdg-open":fU}r.length>0&&i.push(...r),e.wait||(s.stdio="ignore",s.detached=!0)}e.target&&i.push(e.target),ld==="darwin"&&r.length>0&&i.push("--args",...r);let o=OWe.spawn(n,i,s);return e.wait?new Promise((a,u)=>{o.once("error",u),o.once("close",p=>{if(!e.allowNonzeroExitCode&&p>0){u(new Error(`Exited with code ${p}`));return}a(o)})}):(o.unref(),o)},oT=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return AI({...t,target:e})},WWe=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `name`");let{arguments:r=[]}=t||{};if(r!=null&&!Array.isArray(r))throw new TypeError("Expected `appArguments` as Array type");return AI({...t,app:{name:e,arguments:r}})};function gU(e){if(typeof e=="string"||Array.isArray(e))return e;let{[hU]:t}=e;if(!t)throw new Error(`${hU} is not supported`);return t}function aT({[ld]:e},{wsl:t}){if(t&&wI)return gU(t);if(!e)throw new Error(`${ld} is not supported`);return gU(e)}var RI={};sT(RI,"chrome",()=>aT({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));sT(RI,"firefox",()=>aT({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));sT(RI,"edge",()=>aT({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));oT.apps=RI;oT.openApp=WWe;vU.exports=oT});var _U=y((bUt,IU)=>{"use strict";c();IU.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var cT=y((_Ut,xU)=>{c();var _m=_U(),CU={};for(let e of Object.keys(_m))CU[_m[e]]=e;var qe={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};xU.exports=qe;for(let e of Object.keys(qe)){if(!("channels"in qe[e]))throw new Error("missing channels property: "+e);if(!("labels"in qe[e]))throw new Error("missing channel labels property: "+e);if(qe[e].labels.length!==qe[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=qe[e];delete qe[e].channels,delete qe[e].labels,Object.defineProperty(qe[e],"channels",{value:t}),Object.defineProperty(qe[e],"labels",{value:r})}qe.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(t,r,n),s=Math.max(t,r,n),o=s-i,a,u;s===i?a=0:t===s?a=(r-n)/o:r===s?a=2+(n-t)/o:n===s&&(a=4+(t-r)/o),a=Math.min(a*60,360),a<0&&(a+=360);let p=(i+s)/2;return s===i?u=0:p<=.5?u=o/(s+i):u=o/(2-s-i),[a,u*100,p*100]};qe.rgb.hsv=function(e){let t,r,n,i,s,o=e[0]/255,a=e[1]/255,u=e[2]/255,p=Math.max(o,a,u),d=p-Math.min(o,a,u),h=function(m){return(p-m)/6/d+1/2};return d===0?(i=0,s=0):(s=d/p,t=h(o),r=h(a),n=h(u),o===p?i=n-r:a===p?i=1/3+t-n:u===p&&(i=2/3+r-t),i<0?i+=1:i>1&&(i-=1)),[i*360,s*100,p*100]};qe.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=qe.rgb.hsl(e)[0],s=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[i,s*100,n*100]};qe.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-r,1-n),s=(1-t-i)/(1-i)||0,o=(1-r-i)/(1-i)||0,a=(1-n-i)/(1-i)||0;return[s*100,o*100,a*100,i*100]};function PWe(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}qe.rgb.keyword=function(e){let t=CU[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(_m)){let s=_m[i],o=PWe(e,s);o<r&&(r=o,n=i)}return n};qe.keyword.rgb=function(e){return _m[e]};qe.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let i=t*.4124+r*.3576+n*.1805,s=t*.2126+r*.7152+n*.0722,o=t*.0193+r*.1192+n*.9505;return[i*100,s*100,o*100]};qe.rgb.lab=function(e){let t=qe.rgb.xyz(e),r=t[0],n=t[1],i=t[2];r/=95.047,n/=100,i/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*n-16,o=500*(r-n),a=200*(n-i);return[s,o,a]};qe.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i,s,o;if(r===0)return o=n*255,[o,o,o];n<.5?i=n*(1+r):i=n+r-n*r;let a=2*n-i,u=[0,0,0];for(let p=0;p<3;p++)s=t+1/3*-(p-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(i-a)*6*s:2*s<1?o=i:3*s<2?o=a+(i-a)*(2/3-s)*6:o=a,u[p]=o*255;return u};qe.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=r,s=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,i*=s<=1?s:2-s;let o=(n+r)/2,a=n===0?2*i/(s+i):2*r/(n+r);return[t,a*100,o*100]};qe.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,s=t-Math.floor(t),o=255*n*(1-r),a=255*n*(1-r*s),u=255*n*(1-r*(1-s));switch(n*=255,i){case 0:return[n,u,o];case 1:return[a,n,o];case 2:return[o,n,u];case 3:return[o,a,n];case 4:return[u,o,n];case 5:return[n,o,a]}};qe.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=Math.max(n,.01),s,o;o=(2-r)*n;let a=(2-r)*i;return s=r*i,s/=a<=1?a:2-a,s=s||0,o/=2,[t,s*100,o*100]};qe.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i=r+n,s;i>1&&(r/=i,n/=i);let o=Math.floor(6*t),a=1-n;s=6*t-o,o&1&&(s=1-s);let u=r+s*(a-r),p,d,h;switch(o){default:case 6:case 0:p=a,d=u,h=r;break;case 1:p=u,d=a,h=r;break;case 2:p=r,d=a,h=u;break;case 3:p=r,d=u,h=a;break;case 4:p=u,d=r,h=a;break;case 5:p=a,d=r,h=u;break}return[p*255,d*255,h*255]};qe.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i=e[3]/100,s=1-Math.min(1,t*(1-i)+i),o=1-Math.min(1,r*(1-i)+i),a=1-Math.min(1,n*(1-i)+i);return[s*255,o*255,a*255]};qe.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i,s,o;return i=t*3.2406+r*-1.5372+n*-.4986,s=t*-.9689+r*1.8758+n*.0415,o=t*.0557+r*-.204+n*1.057,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=Math.min(Math.max(0,i),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[i*255,s*255,o*255]};qe.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let i=116*r-16,s=500*(t-r),o=200*(r-n);return[i,s,o]};qe.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],i,s,o;s=(t+16)/116,i=r/500+s,o=s-n/200;let a=s**3,u=i**3,p=o**3;return s=a>.008856?a:(s-16/116)/7.787,i=u>.008856?u:(i-16/116)/7.787,o=p>.008856?p:(o-16/116)/7.787,i*=95.047,s*=100,o*=108.883,[i,s,o]};qe.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],i;i=Math.atan2(n,r)*360/2/Math.PI,i<0&&(i+=360);let o=Math.sqrt(r*r+n*n);return[t,o,i]};qe.lch.lab=function(e){let t=e[0],r=e[1],i=e[2]/360*2*Math.PI,s=r*Math.cos(i),o=r*Math.sin(i);return[t,s,o]};qe.rgb.ansi16=function(e,t=null){let[r,n,i]=e,s=t===null?qe.rgb.hsv(e)[2]:t;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return s===2&&(o+=60),o};qe.hsv.ansi16=function(e){return qe.rgb.ansi16(qe.hsv.rgb(e),e[2])};qe.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};qe.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,i=(t>>1&1)*r*255,s=(t>>2&1)*r*255;return[n,i,s]};qe.ansi256.rgb=function(e){if(e>=232){let s=(e-232)*10+8;return[s,s,s]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[r,n,i]};qe.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};qe.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),i=n>>16&255,s=n>>8&255,o=n&255;return[i,s,o]};qe.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,r),n),s=Math.min(Math.min(t,r),n),o=i-s,a,u;return o<1?a=s/(1-o):a=0,o<=0?u=0:i===t?u=(r-n)/o%6:i===r?u=2+(n-t)/o:u=4+(t-r)/o,u/=6,u%=1,[u*360,o*100,a*100]};qe.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),i=0;return n<1&&(i=(r-.5*n)/(1-n)),[e[0],n*100,i*100]};qe.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,i=0;return n<1&&(i=(r-n)/(1-n)),[e[0],n*100,i*100]};qe.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let i=[0,0,0],s=t%1*6,o=s%1,a=1-o,u=0;switch(Math.floor(s)){case 0:i[0]=1,i[1]=o,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=o;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=o,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return u=(1-r)*n,[(r*i[0]+u)*255,(r*i[1]+u)*255,(r*i[2]+u)*255]};qe.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),i=0;return n>0&&(i=t/n),[e[0],i*100,n*100]};qe.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],i*100,n*100]};qe.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};qe.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,i=n-t,s=0;return i<1&&(s=(n-i)/(1-i)),[e[0],i*100,s*100]};qe.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};qe.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};qe.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};qe.gray.hsl=function(e){return[0,0,e[0]]};qe.gray.hsv=qe.gray.hsl;qe.gray.hwb=function(e){return[0,100,e[0]]};qe.gray.cmyk=function(e){return[0,0,0,e[0]]};qe.gray.lab=function(e){return[e[0],0,0]};qe.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};qe.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var wU=y((xUt,SU)=>{c();var TI=cT();function DWe(){let e={},t=Object.keys(TI);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function qWe(e){let t=DWe(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys(TI[n]);for(let s=i.length,o=0;o<s;o++){let a=i[o],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function VWe(e,t){return function(r){return t(e(r))}}function HWe(e,t){let r=[t[e].parent,e],n=TI[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=VWe(TI[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}SU.exports=function(e){let t=qWe(e),r={},n=Object.keys(t);for(let i=n.length,s=0;s<i;s++){let o=n[s];t[o].parent!==null&&(r[o]=HWe(o,t))}return r}});var AU=y((wUt,EU)=>{c();var uT=cT(),MWe=wU(),pd={},UWe=Object.keys(uT);function jWe(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function XWe(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let i=e(r);if(typeof i=="object")for(let s=i.length,o=0;o<s;o++)i[o]=Math.round(i[o]);return i};return"conversion"in e&&(t.conversion=e.conversion),t}UWe.forEach(e=>{pd[e]={},Object.defineProperty(pd[e],"channels",{value:uT[e].channels}),Object.defineProperty(pd[e],"labels",{value:uT[e].labels});let t=MWe(e);Object.keys(t).forEach(n=>{let i=t[n];pd[e][n]=XWe(i),pd[e][n].raw=jWe(i)})});EU.exports=pd});var OU=y((AUt,kU)=>{"use strict";c();var RU=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,TU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},NU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},NI=e=>e,BU=(e,t,r)=>[e,t,r],dd=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},lT,fd=(e,t,r,n)=>{lT===void 0&&(lT=AU());let i=n?10:0,s={};for(let[o,a]of Object.entries(lT)){let u=o==="ansi16"?"ansi":o;o===t?s[u]=e(r,i):typeof a=="object"&&(s[u]=e(a[t],i))}return s};function YWe(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[i,s]of Object.entries(n))t[i]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},n[i]=t[i],e.set(s[0],s[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",dd(t.color,"ansi",()=>fd(RU,"ansi16",NI,!1)),dd(t.color,"ansi256",()=>fd(TU,"ansi256",NI,!1)),dd(t.color,"ansi16m",()=>fd(NU,"rgb",BU,!1)),dd(t.bgColor,"ansi",()=>fd(RU,"ansi16",NI,!0)),dd(t.bgColor,"ansi256",()=>fd(TU,"ansi256",NI,!0)),dd(t.bgColor,"ansi16m",()=>fd(NU,"rgb",BU,!0)),t}Object.defineProperty(kU,"exports",{enumerable:!0,get:YWe})});var FU=y((TUt,GU)=>{"use strict";c();GU.exports=(e,t=process.argv)=>{let r=e.startsWith("-")?"":e.length===1?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return n!==-1&&(i===-1||n<i)}});var fT=y((BUt,ZU)=>{"use strict";c();var KWe=require("os"),LU=require("tty"),ys=FU(),{env:hn}=process,qc;ys("no-color")||ys("no-colors")||ys("color=false")||ys("color=never")?qc=0:(ys("color")||ys("colors")||ys("color=true")||ys("color=always"))&&(qc=1);"FORCE_COLOR"in hn&&(hn.FORCE_COLOR==="true"?qc=1:hn.FORCE_COLOR==="false"?qc=0:qc=hn.FORCE_COLOR.length===0?1:Math.min(parseInt(hn.FORCE_COLOR,10),3));function pT(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function dT(e,t){if(qc===0)return 0;if(ys("color=16m")||ys("color=full")||ys("color=truecolor"))return 3;if(ys("color=256"))return 2;if(e&&!t&&qc===void 0)return 0;let r=qc||0;if(hn.TERM==="dumb")return r;if(process.platform==="win32"){let n=KWe.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in hn)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in hn)||hn.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in hn)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(hn.TEAMCITY_VERSION)?1:0;if(hn.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in hn){let n=parseInt((hn.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(hn.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(hn.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(hn.TERM)||"COLORTERM"in hn?1:r}function zWe(e){let t=dT(e,e&&e.isTTY);return pT(t)}ZU.exports={supportsColor:zWe,stdout:pT(dT(!0,LU.isatty(1))),stderr:pT(dT(!0,LU.isatty(2)))}});var PU=y((OUt,WU)=>{"use strict";c();var JWe=(e,t,r)=>{let n=e.indexOf(t);if(n===-1)return e;let i=t.length,s=0,o="";do o+=e.substr(s,n-s)+t+r,s=n+i,n=e.indexOf(t,s);while(n!==-1);return o+=e.substr(s),o},$We=(e,t,r,n)=>{let i=0,s="";do{let o=e[n-1]==="\r";s+=e.substr(i,(o?n-1:n)-i)+t+(o?`\r
1
+ var vWe=Object.create;var bm=Object.defineProperty;var bWe=Object.getOwnPropertyDescriptor;var IWe=Object.getOwnPropertyNames;var _We=Object.getPrototypeOf,CWe=Object.prototype.hasOwnProperty;var xWe=(e,t,r)=>t in e?bm(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var y=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),jR=(e,t)=>{for(var r in t)bm(e,r,{get:t[r],enumerable:!0})},JM=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of IWe(t))!CWe.call(e,i)&&i!==r&&bm(e,i,{get:()=>t[i],enumerable:!(n=bWe(t,i))||n.enumerable});return e};var Ce=(e,t,r)=>(r=e!=null?vWe(_We(e)):{},JM(t||!e||!e.__esModule?bm(r,"default",{value:e,enumerable:!0}):r,e)),XR=e=>JM(bm({},"__esModule",{value:!0}),e);var Cr=(e,t,r)=>(xWe(e,typeof t!="symbol"?t+"":t,r),r),$M=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var Ro=(e,t,r)=>($M(e,t,"read from private field"),r?r.call(e):t.get(e)),Im=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},YR=(e,t,r,n)=>($M(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var SWe,c=ae(()=>{SWe=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};SWe.SENTRY_RELEASE={id:"1.1.18"}});var CI=y((KR,zR)=>{c();(function(e,t){typeof KR=="object"&&typeof zR<"u"?zR.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs=t()})(KR,function(){"use strict";var e=1e3,t=6e4,r=36e5,n="millisecond",i="second",s="minute",o="hour",a="day",u="week",p="month",d="quarter",h="year",m="date",g="Invalid Date",v=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,I=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,x={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(B){var M=["th","st","nd","rd"],Y=B%100;return"["+B+(M[(Y-20)%10]||M[Y]||M[0])+"]"}},_=function(B,M,Y){var V=String(B);return!V||V.length>=M?B:""+Array(M+1-V.length).join(Y)+B},A={s:_,z:function(B){var M=-B.utcOffset(),Y=Math.abs(M),V=Math.floor(Y/60),q=Y%60;return(M<=0?"+":"-")+_(V,2,"0")+":"+_(q,2,"0")},m:function B(M,Y){if(M.date()<Y.date())return-B(Y,M);var V=12*(Y.year()-M.year())+(Y.month()-M.month()),q=M.clone().add(V,p),te=Y-q<0,z=M.clone().add(V+(te?-1:1),p);return+(-(V+(Y-q)/(te?q-z:z-q))||0)},a:function(B){return B<0?Math.ceil(B)||0:Math.floor(B)},p:function(B){return{M:p,y:h,w:u,d:a,D:m,h:o,m:s,s:i,ms:n,Q:d}[B]||String(B||"").toLowerCase().replace(/s$/,"")},u:function(B){return B===void 0}},E="en",S={};S[E]=x;var w="$isDayjsObject",T=function(B){return B instanceof k||!(!B||!B[w])},D=function B(M,Y,V){var q;if(!M)return E;if(typeof M=="string"){var te=M.toLowerCase();S[te]&&(q=te),Y&&(S[te]=Y,q=te);var z=M.split("-");if(!q&&z.length>1)return B(z[0])}else{var he=M.name;S[he]=M,q=he}return!V&&q&&(E=q),q||!V&&E},L=function(B,M){if(T(B))return B.clone();var Y=typeof M=="object"?M:{};return Y.date=B,Y.args=arguments,new k(Y)},P=A;P.l=D,P.i=T,P.w=function(B,M){return L(B,{locale:M.$L,utc:M.$u,x:M.$x,$offset:M.$offset})};var k=function(){function B(Y){this.$L=D(Y.locale,null,!0),this.parse(Y),this.$x=this.$x||Y.x||{},this[w]=!0}var M=B.prototype;return M.parse=function(Y){this.$d=function(V){var q=V.date,te=V.utc;if(q===null)return new Date(NaN);if(P.u(q))return new Date;if(q instanceof Date)return new Date(q);if(typeof q=="string"&&!/Z$/i.test(q)){var z=q.match(v);if(z){var he=z[2]-1||0,fe=(z[7]||"0").substring(0,3);return te?new Date(Date.UTC(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)):new Date(z[1],he,z[3]||1,z[4]||0,z[5]||0,z[6]||0,fe)}}return new Date(q)}(Y),this.init()},M.init=function(){var Y=this.$d;this.$y=Y.getFullYear(),this.$M=Y.getMonth(),this.$D=Y.getDate(),this.$W=Y.getDay(),this.$H=Y.getHours(),this.$m=Y.getMinutes(),this.$s=Y.getSeconds(),this.$ms=Y.getMilliseconds()},M.$utils=function(){return P},M.isValid=function(){return this.$d.toString()!==g},M.isSame=function(Y,V){var q=L(Y);return this.startOf(V)<=q&&q<=this.endOf(V)},M.isAfter=function(Y,V){return L(Y)<this.startOf(V)},M.isBefore=function(Y,V){return this.endOf(V)<L(Y)},M.$g=function(Y,V,q){return P.u(Y)?this[V]:this.set(q,Y)},M.unix=function(){return Math.floor(this.valueOf()/1e3)},M.valueOf=function(){return this.$d.getTime()},M.startOf=function(Y,V){var q=this,te=!!P.u(V)||V,z=P.p(Y),he=function(gt,lt){var _e=P.w(q.$u?Date.UTC(q.$y,lt,gt):new Date(q.$y,lt,gt),q);return te?_e:_e.endOf(a)},fe=function(gt,lt){return P.w(q.toDate()[gt].apply(q.toDate("s"),(te?[0,0,0,0]:[23,59,59,999]).slice(lt)),q)},Se=this.$W,De=this.$M,Oe=this.$D,Xe="set"+(this.$u?"UTC":"");switch(z){case h:return te?he(1,0):he(31,11);case p:return te?he(1,De):he(0,De+1);case u:var Ze=this.$locale().weekStart||0,Re=(Se<Ze?Se+7:Se)-Ze;return he(te?Oe-Re:Oe+(6-Re),De);case a:case m:return fe(Xe+"Hours",0);case o:return fe(Xe+"Minutes",1);case s:return fe(Xe+"Seconds",2);case i:return fe(Xe+"Milliseconds",3);default:return this.clone()}},M.endOf=function(Y){return this.startOf(Y,!1)},M.$set=function(Y,V){var q,te=P.p(Y),z="set"+(this.$u?"UTC":""),he=(q={},q[a]=z+"Date",q[m]=z+"Date",q[p]=z+"Month",q[h]=z+"FullYear",q[o]=z+"Hours",q[s]=z+"Minutes",q[i]=z+"Seconds",q[n]=z+"Milliseconds",q)[te],fe=te===a?this.$D+(V-this.$W):V;if(te===p||te===h){var Se=this.clone().set(m,1);Se.$d[he](fe),Se.init(),this.$d=Se.set(m,Math.min(this.$D,Se.daysInMonth())).$d}else he&&this.$d[he](fe);return this.init(),this},M.set=function(Y,V){return this.clone().$set(Y,V)},M.get=function(Y){return this[P.p(Y)]()},M.add=function(Y,V){var q,te=this;Y=Number(Y);var z=P.p(V),he=function(De){var Oe=L(te);return P.w(Oe.date(Oe.date()+Math.round(De*Y)),te)};if(z===p)return this.set(p,this.$M+Y);if(z===h)return this.set(h,this.$y+Y);if(z===a)return he(1);if(z===u)return he(7);var fe=(q={},q[s]=t,q[o]=r,q[i]=e,q)[z]||1,Se=this.$d.getTime()+Y*fe;return P.w(Se,this)},M.subtract=function(Y,V){return this.add(-1*Y,V)},M.format=function(Y){var V=this,q=this.$locale();if(!this.isValid())return q.invalidDate||g;var te=Y||"YYYY-MM-DDTHH:mm:ssZ",z=P.z(this),he=this.$H,fe=this.$m,Se=this.$M,De=q.weekdays,Oe=q.months,Xe=q.meridiem,Ze=function(lt,_e,Z,R){return lt&&(lt[_e]||lt(V,te))||Z[_e].slice(0,R)},Re=function(lt){return P.s(he%12||12,lt,"0")},gt=Xe||function(lt,_e,Z){var R=lt<12?"AM":"PM";return Z?R.toLowerCase():R};return te.replace(I,function(lt,_e){return _e||function(Z){switch(Z){case"YY":return String(V.$y).slice(-2);case"YYYY":return P.s(V.$y,4,"0");case"M":return Se+1;case"MM":return P.s(Se+1,2,"0");case"MMM":return Ze(q.monthsShort,Se,Oe,3);case"MMMM":return Ze(Oe,Se);case"D":return V.$D;case"DD":return P.s(V.$D,2,"0");case"d":return String(V.$W);case"dd":return Ze(q.weekdaysMin,V.$W,De,2);case"ddd":return Ze(q.weekdaysShort,V.$W,De,3);case"dddd":return De[V.$W];case"H":return String(he);case"HH":return P.s(he,2,"0");case"h":return Re(1);case"hh":return Re(2);case"a":return gt(he,fe,!0);case"A":return gt(he,fe,!1);case"m":return String(fe);case"mm":return P.s(fe,2,"0");case"s":return String(V.$s);case"ss":return P.s(V.$s,2,"0");case"SSS":return P.s(V.$ms,3,"0");case"Z":return z}return null}(lt)||z.replace(":","")})},M.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},M.diff=function(Y,V,q){var te,z=this,he=P.p(V),fe=L(Y),Se=(fe.utcOffset()-this.utcOffset())*t,De=this-fe,Oe=function(){return P.m(z,fe)};switch(he){case h:te=Oe()/12;break;case p:te=Oe();break;case d:te=Oe()/3;break;case u:te=(De-Se)/6048e5;break;case a:te=(De-Se)/864e5;break;case o:te=De/r;break;case s:te=De/t;break;case i:te=De/e;break;default:te=De}return q?te:P.a(te)},M.daysInMonth=function(){return this.endOf(p).$D},M.$locale=function(){return S[this.$L]},M.locale=function(Y,V){if(!Y)return this.$L;var q=this.clone(),te=D(Y,V,!0);return te&&(q.$L=te),q},M.clone=function(){return P.w(this.$d,this)},M.toDate=function(){return new Date(this.valueOf())},M.toJSON=function(){return this.isValid()?this.toISOString():null},M.toISOString=function(){return this.$d.toISOString()},M.toString=function(){return this.$d.toUTCString()},B}(),F=k.prototype;return L.prototype=F,[["$ms",n],["$s",i],["$m",s],["$H",o],["$W",a],["$M",p],["$y",h],["$D",m]].forEach(function(B){F[B[1]]=function(M){return this.$g(M,B[0],B[1])}}),L.extend=function(B,M){return B.$i||(B(M,k,L),B.$i=!0),L},L.locale=D,L.isDayjs=T,L.unix=function(B){return L(1e3*B)},L.en=S[E],L.Ls=S,L.p={},L})});var QM=y((JR,$R)=>{c();(function(e,t){typeof JR=="object"&&typeof $R<"u"?$R.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_relativeTime=t()})(JR,function(){"use strict";return function(e,t,r){e=e||{};var n=t.prototype,i={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function s(a,u,p,d){return n.fromToBase(a,u,p,d)}r.en.relativeTime=i,n.fromToBase=function(a,u,p,d,h){for(var m,g,v,I=p.$locale().relativeTime||i,x=e.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],_=x.length,A=0;A<_;A+=1){var E=x[A];E.d&&(m=d?r(a).diff(p,E.d,!0):p.diff(a,E.d,!0));var S=(e.rounding||Math.round)(Math.abs(m));if(v=m>0,S<=E.r||!E.r){S<=1&&A>0&&(E=x[A-1]);var w=I[E.l];h&&(S=h(""+S)),g=typeof w=="string"?w.replace("%d",S):w(S,u,E.l,v);break}}if(u)return g;var T=v?I.future:I.past;return typeof T=="function"?T(g):T.replace("%s",g)},n.to=function(a,u){return s(a,u,this,!0)},n.from=function(a,u){return s(a,u,this)};var o=function(a){return a.$u?r.utc():r()};n.toNow=function(a){return this.to(o(this),a)},n.fromNow=function(a){return this.from(o(this),a)}}})});var eU=y((QR,eT)=>{c();(function(e,t){typeof QR=="object"&&typeof eT<"u"?eT.exports=t():typeof define=="function"&&define.amd?define(t):(e=typeof globalThis<"u"?globalThis:e||self).dayjs_plugin_updateLocale=t()})(QR,function(){"use strict";return function(e,t,r){r.updateLocale=function(n,i){var s=r.Ls[n];if(s)return(i?Object.keys(i):[]).forEach(function(o){s[o]=i[o]}),s}}})});var rU=y((aUt,tU)=>{"use strict";c();var wWe=/[|\\{}()[\]^$+*?.]/g;tU.exports=function(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(wWe,"\\$&")}});var sU=y((uUt,SI)=>{"use strict";c();var EWe=rU(),{platform:nU}=process,To={tick:"\u2714",cross:"\u2716",star:"\u2605",square:"\u2587",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",play:"\u25B6",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",circleQuestionMark:"?\u20DD",bullet:"\u25CF",dot:"\u2024",line:"\u2500",ellipsis:"\u2026",pointer:"\u276F",pointerSmall:"\u203A",info:"\u2139",warning:"\u26A0",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",heart:"\u2665",nodejs:"\u2B22",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",questionMarkPrefix:"?\u20DD",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneSeventh:"\u2150",oneEighth:"\u215B",oneNinth:"\u2151",oneTenth:"\u2152",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E"},iU={tick:"\u221A",cross:"\xD7",star:"*",square:"\u2588",squareSmall:"[ ]",squareSmallFilled:"[\u2588]",play:"\u25BA",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",circleQuestionMark:"(?)",bullet:"*",dot:".",line:"\u2500",ellipsis:"...",pointer:">",pointerSmall:"\xBB",info:"i",warning:"\u203C",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",heart:To.heart,nodejs:"\u2666",arrowUp:To.arrowUp,arrowDown:To.arrowDown,arrowLeft:To.arrowLeft,arrowRight:To.arrowRight,radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",questionMarkPrefix:"\uFF1F",oneHalf:"1/2",oneThird:"1/3",oneQuarter:"1/4",oneFifth:"1/5",oneSixth:"1/6",oneSeventh:"1/7",oneEighth:"1/8",oneNinth:"1/9",oneTenth:"1/10",twoThirds:"2/3",twoFifths:"2/5",threeQuarters:"3/4",threeFifths:"3/5",threeEighths:"3/8",fourFifths:"4/5",fiveSixths:"5/6",fiveEighths:"5/8",sevenEighths:"7/8"};nU==="linux"&&(To.questionMarkPrefix="?");var xI=nU==="win32"?iU:To,AWe=e=>{if(xI===To)return e;for(let[t,r]of Object.entries(To))r!==xI[t]&&(e=e.replace(new RegExp(EWe(r),"g"),xI[t]));return e};SI.exports=Object.assign(AWe,xI);SI.exports.main=To;SI.exports.windows=iU});var rT=y((pUt,aU)=>{"use strict";c();var oU=require("fs"),tT;function RWe(){try{return oU.statSync("/.dockerenv"),!0}catch{return!1}}function TWe(){try{return oU.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}aU.exports=()=>(tT===void 0&&(tT=RWe()||TWe()),tT)});var lU=y((fUt,nT)=>{"use strict";c();var NWe=require("os"),BWe=require("fs"),cU=rT(),uU=()=>{if(process.platform!=="linux")return!1;if(NWe.release().toLowerCase().includes("microsoft"))return!cU();try{return BWe.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!cU():!1}catch{return!1}};process.env.__IS_WSL_TEST__?nT.exports=uU:nT.exports=uU()});var dU=y((mUt,pU)=>{"use strict";c();pU.exports=(e,t,r)=>{let n=i=>Object.defineProperty(e,t,{value:i,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let i=r();return n(i),i},set(i){n(i)}}),e}});var bU=y((yUt,vU)=>{c();var kWe=require("path"),OWe=require("child_process"),{promises:EI,constants:yU}=require("fs"),wI=lU(),GWe=rT(),sT=dU(),fU=kWe.join(__dirname,"xdg-open"),{platform:ld,arch:hU}=process,FWe=()=>{try{return EI.statSync("/run/.containerenv"),!0}catch{return!1}},iT;function LWe(){return iT===void 0&&(iT=FWe()||GWe()),iT}var ZWe=(()=>{let e="/mnt/",t;return async function(){if(t)return t;let r="/etc/wsl.conf",n=!1;try{await EI.access(r,yU.F_OK),n=!0}catch{}if(!n)return e;let i=await EI.readFile(r,{encoding:"utf8"}),s=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(i);return s?(t=s.groups.mountPoint.trim(),t=t.endsWith("/")?t:`${t}/`,t):e}})(),mU=async(e,t)=>{let r;for(let n of e)try{return await t(n)}catch(i){r=i}throw r},AI=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return mU(e.app,a=>AI({...e,app:a}));let{name:t,arguments:r=[]}=e.app||{};if(r=[...r],Array.isArray(t))return mU(t,a=>AI({...e,app:{name:a,arguments:r}}));let n,i=[],s={};if(ld==="darwin")n="open",e.wait&&i.push("--wait-apps"),e.background&&i.push("--background"),e.newInstance&&i.push("--new"),t&&i.push("-a",t);else if(ld==="win32"||wI&&!LWe()&&!t){let a=await ZWe();n=wI?`${a}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${process.env.SYSTEMROOT}\\System32\\WindowsPowerShell\\v1.0\\powershell`,i.push("-NoProfile","-NonInteractive","\u2013ExecutionPolicy","Bypass","-EncodedCommand"),wI||(s.windowsVerbatimArguments=!0);let u=["Start"];e.wait&&u.push("-Wait"),t?(u.push(`"\`"${t}\`""`,"-ArgumentList"),e.target&&r.unshift(e.target)):e.target&&u.push(`"${e.target}"`),r.length>0&&(r=r.map(p=>`"\`"${p}\`""`),u.push(r.join(","))),e.target=Buffer.from(u.join(" "),"utf16le").toString("base64")}else{if(t)n=t;else{let a=!__dirname||__dirname==="/",u=!1;try{await EI.access(fU,yU.X_OK),u=!0}catch{}n=process.versions.electron||ld==="android"||a||!u?"xdg-open":fU}r.length>0&&i.push(...r),e.wait||(s.stdio="ignore",s.detached=!0)}e.target&&i.push(e.target),ld==="darwin"&&r.length>0&&i.push("--args",...r);let o=OWe.spawn(n,i,s);return e.wait?new Promise((a,u)=>{o.once("error",u),o.once("close",p=>{if(!e.allowNonzeroExitCode&&p>0){u(new Error(`Exited with code ${p}`));return}a(o)})}):(o.unref(),o)},oT=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return AI({...t,target:e})},WWe=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `name`");let{arguments:r=[]}=t||{};if(r!=null&&!Array.isArray(r))throw new TypeError("Expected `appArguments` as Array type");return AI({...t,app:{name:e,arguments:r}})};function gU(e){if(typeof e=="string"||Array.isArray(e))return e;let{[hU]:t}=e;if(!t)throw new Error(`${hU} is not supported`);return t}function aT({[ld]:e},{wsl:t}){if(t&&wI)return gU(t);if(!e)throw new Error(`${ld} is not supported`);return gU(e)}var RI={};sT(RI,"chrome",()=>aT({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));sT(RI,"firefox",()=>aT({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));sT(RI,"edge",()=>aT({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));oT.apps=RI;oT.openApp=WWe;vU.exports=oT});var _U=y((bUt,IU)=>{"use strict";c();IU.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var cT=y((_Ut,xU)=>{c();var _m=_U(),CU={};for(let e of Object.keys(_m))CU[_m[e]]=e;var qe={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};xU.exports=qe;for(let e of Object.keys(qe)){if(!("channels"in qe[e]))throw new Error("missing channels property: "+e);if(!("labels"in qe[e]))throw new Error("missing channel labels property: "+e);if(qe[e].labels.length!==qe[e].channels)throw new Error("channel and label counts mismatch: "+e);let{channels:t,labels:r}=qe[e];delete qe[e].channels,delete qe[e].labels,Object.defineProperty(qe[e],"channels",{value:t}),Object.defineProperty(qe[e],"labels",{value:r})}qe.rgb.hsl=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(t,r,n),s=Math.max(t,r,n),o=s-i,a,u;s===i?a=0:t===s?a=(r-n)/o:r===s?a=2+(n-t)/o:n===s&&(a=4+(t-r)/o),a=Math.min(a*60,360),a<0&&(a+=360);let p=(i+s)/2;return s===i?u=0:p<=.5?u=o/(s+i):u=o/(2-s-i),[a,u*100,p*100]};qe.rgb.hsv=function(e){let t,r,n,i,s,o=e[0]/255,a=e[1]/255,u=e[2]/255,p=Math.max(o,a,u),d=p-Math.min(o,a,u),h=function(m){return(p-m)/6/d+1/2};return d===0?(i=0,s=0):(s=d/p,t=h(o),r=h(a),n=h(u),o===p?i=n-r:a===p?i=1/3+t-n:u===p&&(i=2/3+r-t),i<0?i+=1:i>1&&(i-=1)),[i*360,s*100,p*100]};qe.rgb.hwb=function(e){let t=e[0],r=e[1],n=e[2],i=qe.rgb.hsl(e)[0],s=1/255*Math.min(t,Math.min(r,n));return n=1-1/255*Math.max(t,Math.max(r,n)),[i,s*100,n*100]};qe.rgb.cmyk=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.min(1-t,1-r,1-n),s=(1-t-i)/(1-i)||0,o=(1-r-i)/(1-i)||0,a=(1-n-i)/(1-i)||0;return[s*100,o*100,a*100,i*100]};function PWe(e,t){return(e[0]-t[0])**2+(e[1]-t[1])**2+(e[2]-t[2])**2}qe.rgb.keyword=function(e){let t=CU[e];if(t)return t;let r=1/0,n;for(let i of Object.keys(_m)){let s=_m[i],o=PWe(e,s);o<r&&(r=o,n=i)}return n};qe.keyword.rgb=function(e){return _m[e]};qe.rgb.xyz=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255;t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,r=r>.04045?((r+.055)/1.055)**2.4:r/12.92,n=n>.04045?((n+.055)/1.055)**2.4:n/12.92;let i=t*.4124+r*.3576+n*.1805,s=t*.2126+r*.7152+n*.0722,o=t*.0193+r*.1192+n*.9505;return[i*100,s*100,o*100]};qe.rgb.lab=function(e){let t=qe.rgb.xyz(e),r=t[0],n=t[1],i=t[2];r/=95.047,n/=100,i/=108.883,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*n-16,o=500*(r-n),a=200*(n-i);return[s,o,a]};qe.hsl.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i,s,o;if(r===0)return o=n*255,[o,o,o];n<.5?i=n*(1+r):i=n+r-n*r;let a=2*n-i,u=[0,0,0];for(let p=0;p<3;p++)s=t+1/3*-(p-1),s<0&&s++,s>1&&s--,6*s<1?o=a+(i-a)*6*s:2*s<1?o=i:3*s<2?o=a+(i-a)*(2/3-s)*6:o=a,u[p]=o*255;return u};qe.hsl.hsv=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=r,s=Math.max(n,.01);n*=2,r*=n<=1?n:2-n,i*=s<=1?s:2-s;let o=(n+r)/2,a=n===0?2*i/(s+i):2*r/(n+r);return[t,a*100,o*100]};qe.hsv.rgb=function(e){let t=e[0]/60,r=e[1]/100,n=e[2]/100,i=Math.floor(t)%6,s=t-Math.floor(t),o=255*n*(1-r),a=255*n*(1-r*s),u=255*n*(1-r*(1-s));switch(n*=255,i){case 0:return[n,u,o];case 1:return[a,n,o];case 2:return[o,n,u];case 3:return[o,a,n];case 4:return[u,o,n];case 5:return[n,o,a]}};qe.hsv.hsl=function(e){let t=e[0],r=e[1]/100,n=e[2]/100,i=Math.max(n,.01),s,o;o=(2-r)*n;let a=(2-r)*i;return s=r*i,s/=a<=1?a:2-a,s=s||0,o/=2,[t,s*100,o*100]};qe.hwb.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100,i=r+n,s;i>1&&(r/=i,n/=i);let o=Math.floor(6*t),a=1-n;s=6*t-o,o&1&&(s=1-s);let u=r+s*(a-r),p,d,h;switch(o){default:case 6:case 0:p=a,d=u,h=r;break;case 1:p=u,d=a,h=r;break;case 2:p=r,d=a,h=u;break;case 3:p=r,d=u,h=a;break;case 4:p=u,d=r,h=a;break;case 5:p=a,d=r,h=u;break}return[p*255,d*255,h*255]};qe.cmyk.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i=e[3]/100,s=1-Math.min(1,t*(1-i)+i),o=1-Math.min(1,r*(1-i)+i),a=1-Math.min(1,n*(1-i)+i);return[s*255,o*255,a*255]};qe.xyz.rgb=function(e){let t=e[0]/100,r=e[1]/100,n=e[2]/100,i,s,o;return i=t*3.2406+r*-1.5372+n*-.4986,s=t*-.9689+r*1.8758+n*.0415,o=t*.0557+r*-.204+n*1.057,i=i>.0031308?1.055*i**(1/2.4)-.055:i*12.92,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,i=Math.min(Math.max(0,i),1),s=Math.min(Math.max(0,s),1),o=Math.min(Math.max(0,o),1),[i*255,s*255,o*255]};qe.xyz.lab=function(e){let t=e[0],r=e[1],n=e[2];t/=95.047,r/=100,n/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,r=r>.008856?r**(1/3):7.787*r+16/116,n=n>.008856?n**(1/3):7.787*n+16/116;let i=116*r-16,s=500*(t-r),o=200*(r-n);return[i,s,o]};qe.lab.xyz=function(e){let t=e[0],r=e[1],n=e[2],i,s,o;s=(t+16)/116,i=r/500+s,o=s-n/200;let a=s**3,u=i**3,p=o**3;return s=a>.008856?a:(s-16/116)/7.787,i=u>.008856?u:(i-16/116)/7.787,o=p>.008856?p:(o-16/116)/7.787,i*=95.047,s*=100,o*=108.883,[i,s,o]};qe.lab.lch=function(e){let t=e[0],r=e[1],n=e[2],i;i=Math.atan2(n,r)*360/2/Math.PI,i<0&&(i+=360);let o=Math.sqrt(r*r+n*n);return[t,o,i]};qe.lch.lab=function(e){let t=e[0],r=e[1],i=e[2]/360*2*Math.PI,s=r*Math.cos(i),o=r*Math.sin(i);return[t,s,o]};qe.rgb.ansi16=function(e,t=null){let[r,n,i]=e,s=t===null?qe.rgb.hsv(e)[2]:t;if(s=Math.round(s/50),s===0)return 30;let o=30+(Math.round(i/255)<<2|Math.round(n/255)<<1|Math.round(r/255));return s===2&&(o+=60),o};qe.hsv.ansi16=function(e){return qe.rgb.ansi16(qe.hsv.rgb(e),e[2])};qe.rgb.ansi256=function(e){let t=e[0],r=e[1],n=e[2];return t===r&&r===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(r/255*5)+Math.round(n/255*5)};qe.ansi16.rgb=function(e){let t=e%10;if(t===0||t===7)return e>50&&(t+=3.5),t=t/10.5*255,[t,t,t];let r=(~~(e>50)+1)*.5,n=(t&1)*r*255,i=(t>>1&1)*r*255,s=(t>>2&1)*r*255;return[n,i,s]};qe.ansi256.rgb=function(e){if(e>=232){let s=(e-232)*10+8;return[s,s,s]}e-=16;let t,r=Math.floor(e/36)/5*255,n=Math.floor((t=e%36)/6)/5*255,i=t%6/5*255;return[r,n,i]};qe.rgb.hex=function(e){let r=(((Math.round(e[0])&255)<<16)+((Math.round(e[1])&255)<<8)+(Math.round(e[2])&255)).toString(16).toUpperCase();return"000000".substring(r.length)+r};qe.hex.rgb=function(e){let t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];let r=t[0];t[0].length===3&&(r=r.split("").map(a=>a+a).join(""));let n=parseInt(r,16),i=n>>16&255,s=n>>8&255,o=n&255;return[i,s,o]};qe.rgb.hcg=function(e){let t=e[0]/255,r=e[1]/255,n=e[2]/255,i=Math.max(Math.max(t,r),n),s=Math.min(Math.min(t,r),n),o=i-s,a,u;return o<1?a=s/(1-o):a=0,o<=0?u=0:i===t?u=(r-n)/o%6:i===r?u=2+(n-t)/o:u=4+(t-r)/o,u/=6,u%=1,[u*360,o*100,a*100]};qe.hsl.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=r<.5?2*t*r:2*t*(1-r),i=0;return n<1&&(i=(r-.5*n)/(1-n)),[e[0],n*100,i*100]};qe.hsv.hcg=function(e){let t=e[1]/100,r=e[2]/100,n=t*r,i=0;return n<1&&(i=(r-n)/(1-n)),[e[0],n*100,i*100]};qe.hcg.rgb=function(e){let t=e[0]/360,r=e[1]/100,n=e[2]/100;if(r===0)return[n*255,n*255,n*255];let i=[0,0,0],s=t%1*6,o=s%1,a=1-o,u=0;switch(Math.floor(s)){case 0:i[0]=1,i[1]=o,i[2]=0;break;case 1:i[0]=a,i[1]=1,i[2]=0;break;case 2:i[0]=0,i[1]=1,i[2]=o;break;case 3:i[0]=0,i[1]=a,i[2]=1;break;case 4:i[0]=o,i[1]=0,i[2]=1;break;default:i[0]=1,i[1]=0,i[2]=a}return u=(1-r)*n,[(r*i[0]+u)*255,(r*i[1]+u)*255,(r*i[2]+u)*255]};qe.hcg.hsv=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t),i=0;return n>0&&(i=t/n),[e[0],i*100,n*100]};qe.hcg.hsl=function(e){let t=e[1]/100,n=e[2]/100*(1-t)+.5*t,i=0;return n>0&&n<.5?i=t/(2*n):n>=.5&&n<1&&(i=t/(2*(1-n))),[e[0],i*100,n*100]};qe.hcg.hwb=function(e){let t=e[1]/100,r=e[2]/100,n=t+r*(1-t);return[e[0],(n-t)*100,(1-n)*100]};qe.hwb.hcg=function(e){let t=e[1]/100,n=1-e[2]/100,i=n-t,s=0;return i<1&&(s=(n-i)/(1-i)),[e[0],i*100,s*100]};qe.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]};qe.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]};qe.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]};qe.gray.hsl=function(e){return[0,0,e[0]]};qe.gray.hsv=qe.gray.hsl;qe.gray.hwb=function(e){return[0,100,e[0]]};qe.gray.cmyk=function(e){return[0,0,0,e[0]]};qe.gray.lab=function(e){return[e[0],0,0]};qe.gray.hex=function(e){let t=Math.round(e[0]/100*255)&255,n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n};qe.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}});var wU=y((xUt,SU)=>{c();var TI=cT();function DWe(){let e={},t=Object.keys(TI);for(let r=t.length,n=0;n<r;n++)e[t[n]]={distance:-1,parent:null};return e}function qWe(e){let t=DWe(),r=[e];for(t[e].distance=0;r.length;){let n=r.pop(),i=Object.keys(TI[n]);for(let s=i.length,o=0;o<s;o++){let a=i[o],u=t[a];u.distance===-1&&(u.distance=t[n].distance+1,u.parent=n,r.unshift(a))}}return t}function VWe(e,t){return function(r){return t(e(r))}}function HWe(e,t){let r=[t[e].parent,e],n=TI[t[e].parent][e],i=t[e].parent;for(;t[i].parent;)r.unshift(t[i].parent),n=VWe(TI[t[i].parent][i],n),i=t[i].parent;return n.conversion=r,n}SU.exports=function(e){let t=qWe(e),r={},n=Object.keys(t);for(let i=n.length,s=0;s<i;s++){let o=n[s];t[o].parent!==null&&(r[o]=HWe(o,t))}return r}});var AU=y((wUt,EU)=>{c();var uT=cT(),MWe=wU(),pd={},UWe=Object.keys(uT);function jWe(e){let t=function(...r){let n=r[0];return n==null?n:(n.length>1&&(r=n),e(r))};return"conversion"in e&&(t.conversion=e.conversion),t}function XWe(e){let t=function(...r){let n=r[0];if(n==null)return n;n.length>1&&(r=n);let i=e(r);if(typeof i=="object")for(let s=i.length,o=0;o<s;o++)i[o]=Math.round(i[o]);return i};return"conversion"in e&&(t.conversion=e.conversion),t}UWe.forEach(e=>{pd[e]={},Object.defineProperty(pd[e],"channels",{value:uT[e].channels}),Object.defineProperty(pd[e],"labels",{value:uT[e].labels});let t=MWe(e);Object.keys(t).forEach(n=>{let i=t[n];pd[e][n]=XWe(i),pd[e][n].raw=jWe(i)})});EU.exports=pd});var OU=y((AUt,kU)=>{"use strict";c();var RU=(e,t)=>(...r)=>`\x1B[${e(...r)+t}m`,TU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};5;${n}m`},NU=(e,t)=>(...r)=>{let n=e(...r);return`\x1B[${38+t};2;${n[0]};${n[1]};${n[2]}m`},NI=e=>e,BU=(e,t,r)=>[e,t,r],dd=(e,t,r)=>{Object.defineProperty(e,t,{get:()=>{let n=r();return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0}),n},enumerable:!0,configurable:!0})},lT,fd=(e,t,r,n)=>{lT===void 0&&(lT=AU());let i=n?10:0,s={};for(let[o,a]of Object.entries(lT)){let u=o==="ansi16"?"ansi":o;o===t?s[u]=e(r,i):typeof a=="object"&&(s[u]=e(a[t],i))}return s};function YWe(){let e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.gray=t.color.blackBright,t.bgColor.bgGray=t.bgColor.bgBlackBright,t.color.grey=t.color.blackBright,t.bgColor.bgGrey=t.bgColor.bgBlackBright;for(let[r,n]of Object.entries(t)){for(let[i,s]of Object.entries(n))t[i]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},n[i]=t[i],e.set(s[0],s[1]);Object.defineProperty(t,r,{value:n,enumerable:!1})}return Object.defineProperty(t,"codes",{value:e,enumerable:!1}),t.color.close="\x1B[39m",t.bgColor.close="\x1B[49m",dd(t.color,"ansi",()=>fd(RU,"ansi16",NI,!1)),dd(t.color,"ansi256",()=>fd(TU,"ansi256",NI,!1)),dd(t.color,"ansi16m",()=>fd(NU,"rgb",BU,!1)),dd(t.bgColor,"ansi",()=>fd(RU,"ansi16",NI,!0)),dd(t.bgColor,"ansi256",()=>fd(TU,"ansi256",NI,!0)),dd(t.bgColor,"ansi16m",()=>fd(NU,"rgb",BU,!0)),t}Object.defineProperty(kU,"exports",{enumerable:!0,get:YWe})});var FU=y((TUt,GU)=>{"use strict";c();GU.exports=(e,t=process.argv)=>{let r=e.startsWith("-")?"":e.length===1?"-":"--",n=t.indexOf(r+e),i=t.indexOf("--");return n!==-1&&(i===-1||n<i)}});var fT=y((BUt,ZU)=>{"use strict";c();var KWe=require("os"),LU=require("tty"),ys=FU(),{env:hn}=process,qc;ys("no-color")||ys("no-colors")||ys("color=false")||ys("color=never")?qc=0:(ys("color")||ys("colors")||ys("color=true")||ys("color=always"))&&(qc=1);"FORCE_COLOR"in hn&&(hn.FORCE_COLOR==="true"?qc=1:hn.FORCE_COLOR==="false"?qc=0:qc=hn.FORCE_COLOR.length===0?1:Math.min(parseInt(hn.FORCE_COLOR,10),3));function pT(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function dT(e,t){if(qc===0)return 0;if(ys("color=16m")||ys("color=full")||ys("color=truecolor"))return 3;if(ys("color=256"))return 2;if(e&&!t&&qc===void 0)return 0;let r=qc||0;if(hn.TERM==="dumb")return r;if(process.platform==="win32"){let n=KWe.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in hn)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in hn)||hn.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in hn)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(hn.TEAMCITY_VERSION)?1:0;if(hn.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in hn){let n=parseInt((hn.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(hn.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(hn.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(hn.TERM)||"COLORTERM"in hn?1:r}function zWe(e){let t=dT(e,e&&e.isTTY);return pT(t)}ZU.exports={supportsColor:zWe,stdout:pT(dT(!0,LU.isatty(1))),stderr:pT(dT(!0,LU.isatty(2)))}});var PU=y((OUt,WU)=>{"use strict";c();var JWe=(e,t,r)=>{let n=e.indexOf(t);if(n===-1)return e;let i=t.length,s=0,o="";do o+=e.substr(s,n-s)+t+r,s=n+i,n=e.indexOf(t,s);while(n!==-1);return o+=e.substr(s),o},$We=(e,t,r,n)=>{let i=0,s="";do{let o=e[n-1]==="\r";s+=e.substr(i,(o?n-1:n)-i)+t+(o?`\r
2
2
  `:`
3
3
  `)+r,i=n+1,n=e.indexOf(`
4
4
  `,i)}while(n!==-1);return s+=e.substr(i),s};WU.exports={stringReplaceAll:JWe,stringEncaseCRLFWithFirstIndex:$We}});var MU=y((FUt,HU)=>{"use strict";c();var QWe=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,DU=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,ePe=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,tPe=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,rPe=new Map([["n",`
@@ -152,7 +152,7 @@ Error:`,i)}}function dpt(){return rpt.onCLS(e=>{Ay("cls",{metric:e}),Coe=e})}fun
152
152
  `;let u=Rdt.parseProxyResponse(i);i.write(`${a}\r
153
153
  `);let{connect:p,buffered:d}=await u;if(t.emit("proxyConnect",p),this.emit("proxyConnect",p,t),p.statusCode===200){if(t.once("socket",Tdt),r.secureEndpoint){Zy("Upgrading socket connection to TLS");let m=r.servername||r.host;return oae.connect({...aae(r,"host","path","port"),socket:i,servername:Ly.isIP(m)?void 0:m})}return i}i.destroy();let h=new Ly.Socket({writable:!1});return h.readable=!0,t.once("socket",m=>{Zy("Replaying proxy buffer for failed request"),m.push(d),m.push(null)}),h}};aS.__initStatic();function Tdt(e){e.resume()}function aae(e,...t){let r={},n;for(n in e)t.includes(n)||(r[n]=e[n]);return r}fL.HttpsProxyAgent=aS});var gL=y(mL=>{c();var{_nullishCoalesce:hL}=ge();Object.defineProperty(mL,"__esModule",{value:!0});var Ndt=require("http"),Bdt=require("https"),kdt=require("stream"),lae=require("url"),Odt=require("zlib"),uae=St(),Gdt=ge(),Fdt=cae(),Ldt=1024*32;function Zdt(e){return new kdt.Readable({read(){this.push(e),this.push(null)}})}function Wdt(e){let t;try{t=new lae.URL(e.url)}catch{return Gdt.consoleSandbox(()=>{console.warn("[@sentry/node]: Invalid dsn or tunnel option, will not send any events. The tunnel option must be a full URL when used.")}),uae.createTransport(e,()=>Promise.resolve({}))}let r=t.protocol==="https:",n=Pdt(t,e.proxy||(r?process.env.https_proxy:void 0)||process.env.http_proxy),i=r?Bdt:Ndt,s=e.keepAlive===void 0?!1:e.keepAlive,o=n?new Fdt.HttpsProxyAgent(n):new i.Agent({keepAlive:s,maxSockets:30,timeout:2e3}),a=Ddt(e,hL(e.httpModule,()=>i),o);return uae.createTransport(e,a)}function Pdt(e,t){let{no_proxy:r}=process.env;if(!(r&&r.split(",").some(i=>e.host.endsWith(i)||e.hostname.endsWith(i))))return t}function Ddt(e,t,r){let{hostname:n,pathname:i,port:s,protocol:o,search:a}=new lae.URL(e.url);return function(p){return new Promise((d,h)=>{let m=Zdt(p.body),g={...e.headers};p.body.length>Ldt&&(g["content-encoding"]="gzip",m=m.pipe(Odt.createGzip()));let v=t.request({method:"POST",agent:r,headers:g,hostname:n,path:`${i}${a}`,port:s,protocol:o,ca:e.caCerts},I=>{I.on("data",()=>{}),I.on("end",()=>{}),I.setEncoding("utf8");let x=hL(I.headers["retry-after"],()=>null),_=hL(I.headers["x-sentry-rate-limits"],()=>null);d({statusCode:I.statusCode,headers:{"retry-after":x,"x-sentry-rate-limits":Array.isArray(_)?_[0]:_}})});v.on("error",h),m.pipe(v)})}}mL.makeNodeTransport=Wdt});var lp=y(yL=>{c();Object.defineProperty(yL,"__esModule",{value:!0});var qdt=ge(),Vdt=qdt.parseSemver(process.versions.node);yL.NODE_VERSION=Vdt});var fae=y(vL=>{c();var{_optionalChain:Hdt}=ge();Object.defineProperty(vL,"__esModule",{value:!0});var pae=require("domain"),pp=St();function dae(){return pae.active}function Mdt(){let e=dae();if(e)return pp.ensureHubOnCarrier(e),pp.getHubFromCarrier(e)}function Udt(e){let t={};return pp.ensureHubOnCarrier(t,e),pp.getHubFromCarrier(t)}function jdt(e,t){let r=dae();if(r&&Hdt([t,"optionalAccess",o=>o.reuseExisting]))return e();let n=pae.create(),i=r?pp.getHubFromCarrier(r):void 0,s=Udt(i);return pp.setHubOnCarrier(n,s),n.bind(()=>e())()}function Xdt(){pp.setAsyncContextStrategy({getCurrentHub:Mdt,runWithAsyncContext:jdt})}vL.setDomainAsyncContextStrategy=Xdt});var hae=y(IL=>{c();var{_optionalChain:Ydt}=ge();Object.defineProperty(IL,"__esModule",{value:!0});var bL=St(),Kdt=require("async_hooks"),cS;function zdt(){cS||(cS=new Kdt.AsyncLocalStorage);function e(){return cS.getStore()}function t(n){let i={};return bL.ensureHubOnCarrier(i,n),bL.getHubFromCarrier(i)}function r(n,i){let s=e();if(s&&Ydt([i,"optionalAccess",a=>a.reuseExisting]))return n();let o=t(s);return cS.run(o,()=>n())}bL.setAsyncContextStrategy({getCurrentHub:e,runWithAsyncContext:r})}IL.setHooksAsyncContextStrategy=zdt});var mae=y(_L=>{c();Object.defineProperty(_L,"__esModule",{value:!0});var Jdt=lp(),$dt=fae(),Qdt=hae();function eft(){Jdt.NODE_VERSION.major>=14?Qdt.setHooksAsyncContextStrategy():$dt.setDomainAsyncContextStrategy()}_L.setNodeAsyncContextStrategy=eft});var pS=y(lS=>{c();Object.defineProperty(lS,"__esModule",{value:!0});var tft=require("util"),uS=St(),gae=ge(),yae="Console",rft=()=>({name:yae,setupOnce(){},setup(e){gae.addConsoleInstrumentationHandler(({args:t,level:r})=>{uS.getClient()===e&&uS.addBreadcrumb({category:"console",level:gae.severityLevelFromString(r),message:tft.format.apply(void 0,t)},{input:[...t],level:r})})}}),vae=uS.defineIntegration(rft),nft=uS.convertIntegrationFnToClass(yae,vae);lS.Console=nft;lS.consoleIntegration=vae});var dS=y(fp=>{c();var{_optionalChain:dp}=ge();Object.defineProperty(fp,"__esModule",{value:!0});var ift=require("child_process"),Iae=require("fs"),Gs=require("os"),sft=require("path"),_ae=require("util"),Cae=St(),xae=_ae.promisify(Iae.readFile),Sae=_ae.promisify(Iae.readdir),wae="Context",oft=(e={})=>{let t,r={app:!0,os:!0,device:!0,culture:!0,cloudResource:!0,...e};async function n(s){t===void 0&&(t=i());let o=cft(await t);return s.contexts={...s.contexts,app:{...o.app,...dp([s,"access",a=>a.contexts,"optionalAccess",a=>a.app])},os:{...o.os,...dp([s,"access",a=>a.contexts,"optionalAccess",a=>a.os])},device:{...o.device,...dp([s,"access",a=>a.contexts,"optionalAccess",a=>a.device])},culture:{...o.culture,...dp([s,"access",a=>a.contexts,"optionalAccess",a=>a.culture])},cloud_resource:{...o.cloud_resource,...dp([s,"access",a=>a.contexts,"optionalAccess",a=>a.cloud_resource])}},s}async function i(){let s={};if(r.os&&(s.os=await uft()),r.app&&(s.app=pft()),r.device&&(s.device=Aae(r.device)),r.culture){let o=lft();o&&(s.culture=o)}return r.cloudResource&&(s.cloud_resource=yft()),s}return{name:wae,setupOnce(){},processEvent(s){return n(s)}}},Eae=Cae.defineIntegration(oft),aft=Cae.convertIntegrationFnToClass(wae,Eae);function cft(e){return dp([e,"optionalAccess",t=>t.app,"optionalAccess",t=>t.app_memory])&&(e.app.app_memory=process.memoryUsage().rss),dp([e,"optionalAccess",t=>t.device,"optionalAccess",t=>t.free_memory])&&(e.device.free_memory=Gs.freemem()),e}async function uft(){let e=Gs.platform();switch(e){case"darwin":return mft();case"linux":return gft();default:return{name:dft[e]||e,version:Gs.release()}}}function lft(){try{if(typeof process.versions.icu!="string")return;let e=new Date(9e8);if(new Intl.DateTimeFormat("es",{month:"long"}).format(e)==="enero"){let r=Intl.DateTimeFormat().resolvedOptions();return{locale:r.locale,timezone:r.timeZone}}}catch{}}function pft(){let e=process.memoryUsage().rss;return{app_start_time:new Date(Date.now()-process.uptime()*1e3).toISOString(),app_memory:e}}function Aae(e){let t={},r;try{r=Gs.uptime&&Gs.uptime()}catch{}if(typeof r=="number"&&(t.boot_time=new Date(Date.now()-r*1e3).toISOString()),t.arch=Gs.arch(),(e===!0||e.memory)&&(t.memory_size=Gs.totalmem(),t.free_memory=Gs.freemem()),e===!0||e.cpu){let n=Gs.cpus();if(n&&n.length){let i=n[0];t.processor_count=n.length,t.cpu_description=i.model,t.processor_frequency=i.speed}}return t}var dft={aix:"IBM AIX",freebsd:"FreeBSD",openbsd:"OpenBSD",sunos:"SunOS",win32:"Windows"},fft=[{name:"fedora-release",distros:["Fedora"]},{name:"redhat-release",distros:["Red Hat Linux","Centos"]},{name:"redhat_version",distros:["Red Hat Linux"]},{name:"SuSE-release",distros:["SUSE Linux"]},{name:"lsb-release",distros:["Ubuntu Linux","Arch Linux"]},{name:"debian_version",distros:["Debian"]},{name:"debian_release",distros:["Debian"]},{name:"arch-release",distros:["Arch Linux"]},{name:"gentoo-release",distros:["Gentoo Linux"]},{name:"novell-release",distros:["SUSE Linux"]},{name:"alpine-release",distros:["Alpine Linux"]}],hft={alpine:e=>e,arch:e=>sa(/distrib_release=(.*)/,e),centos:e=>sa(/release ([^ ]+)/,e),debian:e=>e,fedora:e=>sa(/release (..)/,e),mint:e=>sa(/distrib_release=(.*)/,e),red:e=>sa(/release ([^ ]+)/,e),suse:e=>sa(/VERSION = (.*)\n/,e),ubuntu:e=>sa(/distrib_release=(.*)/,e)};function sa(e,t){let r=e.exec(t);return r?r[1]:void 0}async function mft(){let e={kernel_version:Gs.release(),name:"Mac OS X",version:`10.${Number(Gs.release().split(".")[0])-4}`};try{let t=await new Promise((r,n)=>{ift.execFile("/usr/bin/sw_vers",(i,s)=>{if(i){n(i);return}r(s)})});e.name=sa(/^ProductName:\s+(.*)$/m,t),e.version=sa(/^ProductVersion:\s+(.*)$/m,t),e.build=sa(/^BuildVersion:\s+(.*)$/m,t)}catch{}return e}function bae(e){return e.split(" ")[0].toLowerCase()}async function gft(){let e={kernel_version:Gs.release(),name:"Linux"};try{let t=await Sae("/etc"),r=fft.find(a=>t.includes(a.name));if(!r)return e;let n=sft.join("/etc",r.name),i=(await xae(n,{encoding:"utf-8"})).toLowerCase(),{distros:s}=r;e.name=s.find(a=>i.indexOf(bae(a))>=0)||s[0];let o=bae(e.name);e.version=hft[o](i)}catch{}return e}function yft(){return process.env.VERCEL?{"cloud.provider":"vercel","cloud.region":process.env.VERCEL_REGION}:process.env.AWS_REGION?{"cloud.provider":"aws","cloud.region":process.env.AWS_REGION,"cloud.platform":process.env.AWS_EXECUTION_ENV}:process.env.GCP_PROJECT?{"cloud.provider":"gcp"}:process.env.ALIYUN_REGION_ID?{"cloud.provider":"alibaba_cloud","cloud.region":process.env.ALIYUN_REGION_ID}:process.env.WEBSITE_SITE_NAME&&process.env.REGION_NAME?{"cloud.provider":"azure","cloud.region":process.env.REGION_NAME}:process.env.IBM_CLOUD_REGION?{"cloud.provider":"ibm_cloud","cloud.region":process.env.IBM_CLOUD_REGION}:process.env.TENCENTCLOUD_REGION?{"cloud.provider":"tencent_cloud","cloud.region":process.env.TENCENTCLOUD_REGION,"cloud.account.id":process.env.TENCENTCLOUD_APPID,"cloud.availability_zone":process.env.TENCENTCLOUD_ZONE}:process.env.NETLIFY?{"cloud.provider":"netlify"}:process.env.FLY_REGION?{"cloud.provider":"fly.io","cloud.region":process.env.FLY_REGION}:process.env.DYNO?{"cloud.provider":"heroku"}:void 0}fp.Context=aft;fp.getDeviceContext=Aae;fp.nodeContextIntegration=Eae;fp.readDirAsync=Sae;fp.readFileAsync=xae});var mS=y(hS=>{c();var{_optionalChain:CL}=ge();Object.defineProperty(hS,"__esModule",{value:!0});var vft=require("fs"),Rae=St(),Tae=ge(),fS=new Tae.LRUMap(100),bft=7,Nae="ContextLines";function Ift(e){return new Promise((t,r)=>{vft.readFile(e,"utf8",(n,i)=>{n?r(n):t(i)})})}var _ft=(e={})=>{let t=e.frameContextLines!==void 0?e.frameContextLines:bft;return{name:Nae,setupOnce(){},processEvent(r){return xft(r,t)}}},Bae=Rae.defineIntegration(_ft),Cft=Rae.convertIntegrationFnToClass(Nae,Bae);async function xft(e,t){let r={},n=[];if(t>0&&CL([e,"access",i=>i.exception,"optionalAccess",i=>i.values])){for(let i of e.exception.values)if(CL([i,"access",s=>s.stacktrace,"optionalAccess",s=>s.frames]))for(let s=i.stacktrace.frames.length-1;s>=0;s--){let o=i.stacktrace.frames[s];o.filename&&!r[o.filename]&&!fS.get(o.filename)&&(n.push(wft(o.filename)),r[o.filename]=1)}}if(n.length>0&&await Promise.all(n),t>0&&CL([e,"access",i=>i.exception,"optionalAccess",i=>i.values]))for(let i of e.exception.values)i.stacktrace&&i.stacktrace.frames&&await Sft(i.stacktrace.frames,t);return e}function Sft(e,t){for(let r of e)if(r.filename&&r.context_line===void 0){let n=fS.get(r.filename);if(n)try{Tae.addContextToFrame(n,r,t)}catch{}}}async function wft(e){let t=fS.get(e);if(t===null)return null;if(t!==void 0)return t;let r=null;try{r=(await Ift(e)).split(`
154
154
  `)}catch{}return fS.set(e,r),r}hS.ContextLines=Cft;hS.contextLinesIntegration=Bae});var Wy=y(xL=>{c();Object.defineProperty(xL,"__esModule",{value:!0});var Eft=typeof __SENTRY_DEBUG__>"u"||__SENTRY_DEBUG__;xL.DEBUG_BUILD=Eft});var Gae=y(hp=>{c();var{_optionalChain:oa}=ge();Object.defineProperty(hp,"__esModule",{value:!0});var SL=require("url"),Aft=lp();function Rft(e){let{protocol:t,hostname:r,port:n}=Oae(e),i=e.path?e.path:"/";return`${t}//${r}${n}${i}`}function kae(e){let{protocol:t,hostname:r,port:n}=Oae(e),i=e.pathname||"/",s=e.auth?Tft(e.auth):"";return`${t}//${s}${r}${n}${i}`}function Tft(e){let[t,r]=e.split(":");return`${t?"[Filtered]":""}:${r?"[Filtered]":""}@`}function Nft(e,t,r){if(!e)return e;let[n,i]=e.split(" ");return t.host&&!t.protocol&&(t.protocol=oa([r,"optionalAccess",s=>s.agent,"optionalAccess",s=>s.protocol]),i=kae(t)),oa([i,"optionalAccess",s=>s.startsWith,"call",s=>s("///")])&&(i=i.slice(2)),`${n} ${i}`}function wL(e){let t={protocol:e.protocol,hostname:typeof e.hostname=="string"&&e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:`${e.pathname||""}${e.search||""}`,href:e.href};return e.port!==""&&(t.port=Number(e.port)),(e.username||e.password)&&(t.auth=`${e.username}:${e.password}`),t}function Bft(e,t){let r,n;if(typeof t[t.length-1]=="function"&&(r=t.pop()),typeof t[0]=="string")n=wL(new SL.URL(t[0]));else if(t[0]instanceof SL.URL)n=wL(t[0]);else{n=t[0];try{let i=new SL.URL(n.path||"",`${n.protocol||"http:"}//${n.hostname}`);n={pathname:i.pathname,search:i.search,hash:i.hash,...n}}catch{}}return t.length===2&&(n={...n,...t[1]}),n.protocol===void 0&&(Aft.NODE_VERSION.major>8?n.protocol=oa([oa([e,"optionalAccess",i=>i.globalAgent]),"optionalAccess",i=>i.protocol])||oa([n.agent,"optionalAccess",i=>i.protocol])||oa([n._defaultAgent,"optionalAccess",i=>i.protocol]):n.protocol=oa([n.agent,"optionalAccess",i=>i.protocol])||oa([n._defaultAgent,"optionalAccess",i=>i.protocol])||oa([oa([e,"optionalAccess",i=>i.globalAgent]),"optionalAccess",i=>i.protocol])),r?[n,r]:[n]}function Oae(e){let t=e.protocol||"",r=e.hostname||e.host||"",n=!e.port||e.port===80||e.port===443||/^(.*):(\d+)$/.test(r)?"":`:${e.port}`;return{protocol:t,hostname:r,port:n}}hp.cleanSpanDescription=Nft;hp.extractRawUrl=Rft;hp.extractUrl=kae;hp.normalizeRequestArgs=Bft;hp.urlToOptions=wL});var gS=y(rh=>{c();var{_optionalChain:eh}=ge();Object.defineProperty(rh,"__esModule",{value:!0});var Yn=St(),$i=ge(),EL=Wy(),kft=lp(),Py=Gae(),Oft=(e={})=>{let{breadcrumbs:t,tracing:r,shouldCreateSpanForRequest:n}=e,i={breadcrumbs:t,tracing:r===!1?!1:$i.dropUndefinedKeys({enableIfHasTracingEnabled:r===!0?void 0:!0,shouldCreateSpanForRequest:n})};return new th(i)},Gft=Yn.defineIntegration(Oft),th=class e{static __initStatic(){this.id="Http"}__init(){this.name=e.id}constructor(t={}){e.prototype.__init.call(this),this._breadcrumbs=typeof t.breadcrumbs>"u"?!0:t.breadcrumbs,this._tracing=t.tracing?t.tracing===!0?{}:t.tracing:void 0}setupOnce(t,r){let n=eh([r,"call",p=>p(),"access",p=>p.getClient,"call",p=>p(),"optionalAccess",p=>p.getOptions,"call",p=>p()]),i=Lae(this._tracing,n);if(!this._breadcrumbs&&!i)return;if(n&&n.instrumenter!=="sentry"){EL.DEBUG_BUILD&&$i.logger.log("HTTP Integration is skipped because of instrumenter configuration.");return}let s=Zae(i,this._tracing,n),o=eh([n,"optionalAccess",p=>p.tracePropagationTargets])||eh([this,"access",p=>p._tracing,"optionalAccess",p=>p.tracePropagationTargets]),a=require("http"),u=Fae(a,this._breadcrumbs,s,o);if($i.fill(a,"get",u),$i.fill(a,"request",u),kft.NODE_VERSION.major>8){let p=require("https"),d=Fae(p,this._breadcrumbs,s,o);$i.fill(p,"get",d),$i.fill(p,"request",d)}}};th.__initStatic();function Fae(e,t,r,n){let i=new $i.LRUMap(100),s=new $i.LRUMap(100),o=p=>{if(r===void 0)return!0;let d=i.get(p);if(d!==void 0)return d;let h=r(p);return i.set(p,h),h},a=p=>{if(n===void 0)return!0;let d=s.get(p);if(d!==void 0)return d;let h=$i.stringMatchesSomePattern(p,n);return s.set(p,h),h};function u(p,d,h,m){Yn.getCurrentHub().getIntegration(th)&&Yn.addBreadcrumb({category:"http",data:{status_code:m&&m.statusCode,...d},type:"http"},{event:p,request:h,response:m})}return function(d){return function(...m){let g=Py.normalizeRequestArgs(e,m),v=g[0],I=Py.extractRawUrl(v),x=Py.extractUrl(v),_=Yn.getClient();if(Yn.isSentryRequestUrl(x,_))return d.apply(e,g);let A=Yn.getCurrentScope(),E=Yn.getIsolationScope(),S=Yn.getActiveSpan(),w=Lft(x,v),T=o(I)?eh([S,"optionalAccess",D=>D.startChild,"call",D=>D({op:"http.client",origin:"auto.http.node.http",description:`${w["http.method"]} ${w.url}`,data:w})]):void 0;if(_&&a(I)){let{traceId:D,spanId:L,sampled:P,dsc:k}={...E.getPropagationContext(),...A.getPropagationContext()},F=T?Yn.spanToTraceHeader(T):$i.generateSentryTraceHeader(D,L,P),B=$i.dynamicSamplingContextToSentryBaggageHeader(k||(T?Yn.getDynamicSamplingContextFromSpan(T):Yn.getDynamicSamplingContextFromClient(D,_,A)));Fft(v,x,F,B)}else EL.DEBUG_BUILD&&$i.logger.log(`[Tracing] Not adding sentry-trace header to outgoing request (${x}) due to mismatching tracePropagationTargets option.`);return d.apply(e,g).once("response",function(D){let L=this;t&&u("response",w,L,D),T&&(D.statusCode&&Yn.setHttpStatus(T,D.statusCode),T.updateName(Py.cleanSpanDescription(Yn.spanToJSON(T).description||"",v,L)||""),T.end())}).once("error",function(){let D=this;t&&u("error",w,D),T&&(Yn.setHttpStatus(T,500),T.updateName(Py.cleanSpanDescription(Yn.spanToJSON(T).description||"",v,D)||""),T.end())})}}}function Fft(e,t,r,n){(e.headers||{})["sentry-trace"]||(EL.DEBUG_BUILD&&$i.logger.log(`[Tracing] Adding sentry-trace header ${r} to outgoing request to "${t}": `),e.headers={...e.headers,"sentry-trace":r,...n&&n.length>0&&{baggage:Zft(e,n)}})}function Lft(e,t){let r=t.method||"GET",n={url:e,"http.method":r};return t.hash&&(n["http.fragment"]=t.hash.substring(1)),t.search&&(n["http.query"]=t.search.substring(1)),n}function Zft(e,t){if(!e.headers||!e.headers.baggage)return t;if(t){if(Array.isArray(e.headers.baggage))return[...e.headers.baggage,t]}else return e.headers.baggage;return[e.headers.baggage,t]}function Lae(e,t){return e===void 0?!1:e.enableIfHasTracingEnabled?Yn.hasTracingEnabled(t):!0}function Zae(e,t,r){return e?eh([t,"optionalAccess",i=>i.shouldCreateSpanForRequest])||eh([r,"optionalAccess",i=>i.shouldCreateSpanForRequest]):()=>!1}rh.Http=th;rh._getShouldCreateSpanForRequest=Zae;rh._shouldCreateSpans=Lae;rh.httpIntegration=Gft});var Pae=y(mp=>{c();Object.defineProperty(mp,"__esModule",{value:!0});function Wft(e,t,r){let n=0,i=5,s=0;return setInterval(()=>{s===0?n>e&&(i*=2,r(i),i>86400&&(i=86400),s=i):(s-=1,s===0&&t()),n=0},1e3).unref(),()=>{n+=1}}function AL(e){return e!==void 0&&(e.length===0||e==="?"||e==="<anonymous>")}function Pft(e,t){return e===t||AL(e)&&AL(t)}function Wae(e){if(e!==void 0)return e.slice(-10).reduce((t,r)=>`${t},${r.function},${r.lineno},${r.colno}`,"")}function Dft(e,t){if(t!==void 0)return Wae(e(t,1))}mp.createRateLimiter=Wft;mp.functionNamesMatch=Pft;mp.hashFrames=Wae;mp.hashFromStack=Dft;mp.isAnonymous=AL});var Vae=y(Dy=>{c();var{_optionalChain:Er}=ge();Object.defineProperty(Dy,"__esModule",{value:!0});var TL=St(),yS=ge(),qft=lp(),vS=Pae();function NL(e){let t=[],r=!1;function n(o){t=[],!r&&(r=!0,e(o))}t.push(n);function i(o){t.push(o)}function s(o){let a=t.pop()||n;try{a(o)}catch{n(o)}}return{add:i,next:s}}var RL=class{constructor(){let{Session:t}=require("inspector");this._session=new t}configureAndConnect(t,r){this._session.connect(),this._session.on("Debugger.paused",n=>{t(n,()=>{this._session.post("Debugger.resume")})}),this._session.post("Debugger.enable"),this._session.post("Debugger.setPauseOnExceptions",{state:r?"all":"uncaught"})}setPauseOnExceptions(t){this._session.post("Debugger.setPauseOnExceptions",{state:t?"all":"uncaught"})}getLocalVariables(t,r){this._getProperties(t,n=>{let{add:i,next:s}=NL(r);for(let o of n)if(Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.objectId])&&Er([o,"optionalAccess",a=>a.value,"access",a=>a.className])==="Array"){let a=o.value.objectId;i(u=>this._unrollArray(a,o.name,u,s))}else if(Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.objectId])&&Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.className])==="Object"){let a=o.value.objectId;i(u=>this._unrollObject(a,o.name,u,s))}else(Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.value])||Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.description]))&&i(a=>this._unrollOther(o,a,s));s({})})}_getProperties(t,r){this._session.post("Runtime.getProperties",{objectId:t,ownProperties:!0},(n,i)=>{r(n?[]:i.result)})}_unrollArray(t,r,n,i){this._getProperties(t,s=>{n[r]=s.filter(o=>o.name!=="length"&&!isNaN(parseInt(o.name,10))).sort((o,a)=>parseInt(o.name,10)-parseInt(a.name,10)).map(o=>Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.value])),i(n)})}_unrollObject(t,r,n,i){this._getProperties(t,s=>{n[r]=s.map(o=>[o.name,Er([o,"optionalAccess",a=>a.value,"optionalAccess",a=>a.value])]).reduce((o,[a,u])=>(o[a]=u,o),{}),i(n)})}_unrollOther(t,r,n){Er([t,"optionalAccess",i=>i.value,"optionalAccess",i=>i.value])?r[t.name]=t.value.value:Er([t,"optionalAccess",i=>i.value,"optionalAccess",i=>i.description])&&Er([t,"optionalAccess",i=>i.value,"optionalAccess",i=>i.type])!=="function"&&(r[t.name]=`<${t.value.description}>`),n(r)}};function Vft(){try{return new RL}catch{return}}var Dae="LocalVariables",Hft=(e={},t=Vft())=>{let r=new yS.LRUMap(20),n,i=!1;function s(u,{params:{reason:p,data:d,callFrames:h}},m){if(p!=="exception"&&p!=="promiseRejection"){m();return}Er([n,"optionalCall",x=>x()]);let g=vS.hashFromStack(u,Er([d,"optionalAccess",x=>x.description]));if(g==null){m();return}let{add:v,next:I}=NL(x=>{r.set(g,x),m()});for(let x=0;x<Math.min(h.length,5);x++){let{scopeChain:_,functionName:A,this:E}=h[x],S=_.find(T=>T.type==="local"),w=E.className==="global"||!E.className?A:`${E.className}.${A}`;if(Er([S,"optionalAccess",T=>T.object,"access",T=>T.objectId])===void 0)v(T=>{T[x]={function:w},I(T)});else{let T=S.object.objectId;v(D=>Er([t,"optionalAccess",L=>L.getLocalVariables,"call",L=>L(T,P=>{D[x]={function:w,vars:P},I(D)})]))}}I([])}function o(u){let p=vS.hashFrames(Er([u,"optionalAccess",m=>m.stacktrace,"optionalAccess",m=>m.frames]));if(p===void 0)return;let d=r.remove(p);if(d===void 0)return;let h=Er([u,"access",m=>m.stacktrace,"optionalAccess",m=>m.frames,"optionalAccess",m=>m.length])||0;for(let m=0;m<h;m++){let g=h-m-1;if(!Er([u,"optionalAccess",v=>v.stacktrace,"optionalAccess",v=>v.frames,"optionalAccess",v=>v[g]])||!d[m])break;d[m].vars===void 0||u.stacktrace.frames[g].in_app===!1||!vS.functionNamesMatch(u.stacktrace.frames[g].function,d[m].function)||(u.stacktrace.frames[g].vars=d[m].vars)}}function a(u){for(let p of Er([u,"optionalAccess",d=>d.exception,"optionalAccess",d=>d.values])||[])o(p);return u}return{name:Dae,setupOnce(){let u=TL.getClient(),p=Er([u,"optionalAccess",d=>d.getOptions,"call",d=>d()]);if(t&&Er([p,"optionalAccess",d=>d.includeLocalVariables])){if(qft.NODE_VERSION.major<18){yS.logger.log("The `LocalVariables` integration is only supported on Node >= v18.");return}let h=e.captureAllExceptions!==!1;if(t.configureAndConnect((m,g)=>s(p.stackParser,m,g),h),h){let m=e.maxExceptionsPerSecond||50;n=vS.createRateLimiter(m,()=>{yS.logger.log("Local variables rate-limit lifted."),Er([t,"optionalAccess",g=>g.setPauseOnExceptions,"call",g=>g(!0)])},g=>{yS.logger.log(`Local variables rate-limit exceeded. Disabling capturing of caught exceptions for ${g} seconds.`),Er([t,"optionalAccess",v=>v.setPauseOnExceptions,"call",v=>v(!1)])})}i=!0}},processEvent(u){return i?a(u):u},_getCachedFramesCount(){return r.size},_getFirstCachedFrame(){return r.values()[0]}}},qae=TL.defineIntegration(Hft),Mft=TL.convertIntegrationFnToClass(Dae,qae);Dy.LocalVariablesSync=Mft;Dy.createCallbackList=NL;Dy.localVariablesSyncIntegration=qae});var IS=y(bS=>{c();Object.defineProperty(bS,"__esModule",{value:!0});var Hae=Vae(),Uft=Hae.LocalVariablesSync,jft=Hae.localVariablesSyncIntegration;bS.LocalVariables=Uft;bS.localVariablesIntegration=jft});var CS=y(_S=>{c();Object.defineProperty(_S,"__esModule",{value:!0});var Mae=require("fs"),Uae=require("path"),jae=St(),BL,Xae="Modules";function Xft(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function Yft(){let e=require.main&&require.main.paths||[],t=Xft(),r={},n={};return t.forEach(i=>{let s=i,o=()=>{let a=s;if(s=Uae.dirname(a),!s||a===s||n[a])return;if(e.indexOf(s)<0)return o();let u=Uae.join(a,"package.json");if(n[a]=!0,!Mae.existsSync(u))return o();try{let p=JSON.parse(Mae.readFileSync(u,"utf8"));r[p.name]=p.version}catch{}};o()}),r}function Kft(){return BL||(BL=Yft()),BL}var zft=()=>({name:Xae,setupOnce(){},processEvent(e){return e.modules={...e.modules,...Kft()},e}}),Yae=jae.defineIntegration(zft),Jft=jae.convertIntegrationFnToClass(Xae,Yae);_S.Modules=Jft;_S.modulesIntegration=Yae});var GL=y(OL=>{c();Object.defineProperty(OL,"__esModule",{value:!0});var $ft=St(),xS=ge(),kL=Wy(),Qft=2e3;function eht(e){xS.consoleSandbox(()=>{console.error(e)});let t=$ft.getClient();t===void 0&&(kL.DEBUG_BUILD&&xS.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1));let r=t.getOptions(),n=r&&r.shutdownTimeout&&r.shutdownTimeout>0&&r.shutdownTimeout||Qft;t.close(n).then(i=>{i||kL.DEBUG_BUILD&&xS.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)},i=>{kL.DEBUG_BUILD&&xS.logger.error(i)})}OL.logAndExitProcess=eht});var wS=y(qy=>{c();Object.defineProperty(qy,"__esModule",{value:!0});var SS=St(),tht=ge(),rht=Wy(),Kae=GL(),zae="OnUncaughtException",nht=(e={})=>{let t={exitEvenIfOtherHandlersAreRegistered:!0,...e};return{name:zae,setupOnce(){},setup(r){global.process.on("uncaughtException",$ae(r,t))}}},Jae=SS.defineIntegration(nht),iht=SS.convertIntegrationFnToClass(zae,Jae);function $ae(e,t){let n=!1,i=!1,s=!1,o,a=e.getOptions();return Object.assign(u=>{let p=Kae.logAndExitProcess;t.onFatalError?p=t.onFatalError:a.onFatalError&&(p=a.onFatalError);let h=global.process.listeners("uncaughtException").reduce((g,v)=>v.name==="domainUncaughtExceptionClear"||v.tag&&v.tag==="sentry_tracingErrorCallback"||v._errorHandler?g:g+1,0)===0,m=t.exitEvenIfOtherHandlersAreRegistered||h;n?m&&(s?(rht.DEBUG_BUILD&&tht.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),Kae.logAndExitProcess(u)):i||(i=!0,setTimeout(()=>{s||(s=!0,p(o,u))},2e3))):(o=u,n=!0,SS.getClient()===e&&SS.captureException(u,{originalException:u,captureContext:{level:"fatal"},mechanism:{handled:!1,type:"onuncaughtexception"}}),!s&&m&&(s=!0,p(u)))},{_errorHandler:!0})}qy.OnUncaughtException=iht;qy.makeErrorHandler=$ae;qy.onUncaughtExceptionIntegration=Jae});var AS=y(Vy=>{c();Object.defineProperty(Vy,"__esModule",{value:!0});var ES=St(),Qae=ge(),sht=GL(),ece="OnUnhandledRejection",oht=(e={})=>{let t=e.mode||"warn";return{name:ece,setupOnce(){},setup(r){global.process.on("unhandledRejection",rce(r,{mode:t}))}}},tce=ES.defineIntegration(oht),aht=ES.convertIntegrationFnToClass(ece,tce);function rce(e,t){return function(n,i){ES.getClient()===e&&(ES.captureException(n,{originalException:i,captureContext:{extra:{unhandledPromiseRejection:!0}},mechanism:{handled:!1,type:"onunhandledrejection"}}),cht(n,t))}}function cht(e,t){let r="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";t.mode==="warn"?Qae.consoleSandbox(()=>{console.warn(r),console.error(e&&e.stack?e.stack:e)}):t.mode==="strict"&&(Qae.consoleSandbox(()=>{console.warn(r)}),sht.logAndExitProcess(e))}Vy.OnUnhandledRejection=aht;Vy.makeUnhandledPromiseHandler=rce;Vy.onUnhandledRejectionIntegration=tce});var RS=y(Hy=>{c();Object.defineProperty(Hy,"__esModule",{value:!0});var uht=require("http"),lht=require("url"),nce=St(),nh=ge(),ice="Spotlight",pht=(e={})=>{let t={sidecarUrl:e.sidecarUrl||"http://localhost:8969/stream"};return{name:ice,setupOnce(){},setup(r){typeof process=="object"&&process.env&&process.env.NODE_ENV!=="development"&&nh.logger.warn("[Spotlight] It seems you're not in dev mode. Do you really want to have Spotlight enabled?"),fht(r,t)}}},sce=nce.defineIntegration(pht),dht=nce.convertIntegrationFnToClass(ice,sce);function fht(e,t){let r=hht(t.sidecarUrl);if(!r)return;let n=0;if(typeof e.on!="function"){nh.logger.warn("[Spotlight] Cannot connect to spotlight due to missing method on SDK client (`client.on`)");return}e.on("beforeEnvelope",i=>{if(n>3){nh.logger.warn("[Spotlight] Disabled Sentry -> Spotlight integration due to too many failed requests");return}let s=nh.serializeEnvelope(i),a=oce()({method:"POST",path:r.pathname,hostname:r.hostname,port:r.port,headers:{"Content-Type":"application/x-sentry-envelope"}},u=>{u.on("data",()=>{}),u.on("end",()=>{}),u.setEncoding("utf8")});a.on("error",()=>{n++,nh.logger.warn("[Spotlight] Failed to send envelope to Spotlight Sidecar")}),a.write(s),a.end()})}function hht(e){try{return new lht.URL(`${e}`)}catch{nh.logger.warn(`[Spotlight] Invalid sidecar URL: ${e}`);return}}function oce(){let{request:e}=uht;return mht(e)?e.__sentry_original__:e}function mht(e){return"__sentry_original__"in e}Hy.Spotlight=dht;Hy.getNativeHttpRequest=oce;Hy.spotlightIntegration=sce});var NS=y(aa=>{c();var{_optionalChain:TS}=ge();Object.defineProperty(aa,"__esModule",{value:!0});var Jr=St(),gp=ge(),ght=lp();aa.ChannelName=void 0;(function(e){let t="undici:request:create";e.RequestCreate=t;let r="undici:request:headers";e.RequestEnd=r;let n="undici:request:error";e.RequestError=n})(aa.ChannelName||(aa.ChannelName={}));var yht=e=>new My(e),vht=Jr.defineIntegration(yht),My=class e{static __initStatic(){this.id="Undici"}__init(){this.name=e.id}__init2(){this._createSpanUrlMap=new gp.LRUMap(100)}__init3(){this._headersUrlMap=new gp.LRUMap(100)}constructor(t={}){e.prototype.__init.call(this),e.prototype.__init2.call(this),e.prototype.__init3.call(this),e.prototype.__init4.call(this),e.prototype.__init5.call(this),e.prototype.__init6.call(this),this._options={breadcrumbs:t.breadcrumbs===void 0?!0:t.breadcrumbs,tracing:t.tracing,shouldCreateSpanForRequest:t.shouldCreateSpanForRequest}}setupOnce(t){if(ght.NODE_VERSION.major<16)return;let r;try{r=require("diagnostics_channel")}catch{}!r||!r.subscribe||(r.subscribe(aa.ChannelName.RequestCreate,this._onRequestCreate),r.subscribe(aa.ChannelName.RequestEnd,this._onRequestEnd),r.subscribe(aa.ChannelName.RequestError,this._onRequestError))}_shouldCreateSpan(t){if(this._options.tracing===!1||this._options.tracing===void 0&&!Jr.hasTracingEnabled())return!1;if(this._options.shouldCreateSpanForRequest===void 0)return!0;let r=this._createSpanUrlMap.get(t);if(r!==void 0)return r;let n=this._options.shouldCreateSpanForRequest(t);return this._createSpanUrlMap.set(t,n),n}__init4(){this._onRequestCreate=t=>{if(!TS([Jr.getClient,"call",h=>h(),"optionalAccess",h=>h.getIntegration,"call",h=>h(e)]))return;let{request:r}=t,n=r.origin?r.origin.toString()+r.path:r.path,i=Jr.getClient();if(!i||Jr.isSentryRequestUrl(n,i)||r.__sentry_span__!==void 0)return;let s=i.getOptions(),o=Jr.getCurrentScope(),a=Jr.getIsolationScope(),u=Jr.getActiveSpan(),p=this._shouldCreateSpan(n)?Iht(u,r,n):void 0;if(p&&(r.__sentry_span__=p),(h=>{if(s.tracePropagationTargets===void 0)return!0;let m=this._headersUrlMap.get(h);if(m!==void 0)return m;let g=gp.stringMatchesSomePattern(h,s.tracePropagationTargets);return this._headersUrlMap.set(h,g),g})(n)){let{traceId:h,spanId:m,sampled:g,dsc:v}={...a.getPropagationContext(),...o.getPropagationContext()},I=p?Jr.spanToTraceHeader(p):gp.generateSentryTraceHeader(h,m,g),x=gp.dynamicSamplingContextToSentryBaggageHeader(v||(p?Jr.getDynamicSamplingContextFromSpan(p):Jr.getDynamicSamplingContextFromClient(h,i,o)));bht(r,I,x)}}}__init5(){this._onRequestEnd=t=>{if(!TS([Jr.getClient,"call",o=>o(),"optionalAccess",o=>o.getIntegration,"call",o=>o(e)]))return;let{request:r,response:n}=t,i=r.origin?r.origin.toString()+r.path:r.path;if(Jr.isSentryRequestUrl(i,Jr.getClient()))return;let s=r.__sentry_span__;s&&(Jr.setHttpStatus(s,n.statusCode),s.end()),this._options.breadcrumbs&&Jr.addBreadcrumb({category:"http",data:{method:r.method,status_code:n.statusCode,url:i},type:"http"},{event:"response",request:r,response:n})}}__init6(){this._onRequestError=t=>{if(!TS([Jr.getClient,"call",s=>s(),"optionalAccess",s=>s.getIntegration,"call",s=>s(e)]))return;let{request:r}=t,n=r.origin?r.origin.toString()+r.path:r.path;if(Jr.isSentryRequestUrl(n,Jr.getClient()))return;let i=r.__sentry_span__;i&&(i.setStatus("internal_error"),i.end()),this._options.breadcrumbs&&Jr.addBreadcrumb({category:"http",data:{method:r.method,url:n},level:"error",type:"http"},{event:"error",request:r})}}};My.__initStatic();function bht(e,t,r){let n;Array.isArray(e.headers)?n=e.headers.some(i=>i==="sentry-trace"):n=e.headers.split(`\r
155
- `).some(s=>s.startsWith("sentry-trace:")),!n&&(e.addHeader("sentry-trace",t),r&&e.addHeader("baggage",r))}function Iht(e,t,r){let n=gp.parseUrl(r),i=t.method||"GET",s={"http.method":i};return n.search&&(s["http.query"]=n.search),n.hash&&(s["http.fragment"]=n.hash),TS([e,"optionalAccess",o=>o.startChild,"call",o=>o({op:"http.client",origin:"auto.http.node.undici",description:`${i} ${gp.getSanitizedUrlString(n)}`,data:s})])}aa.Undici=My;aa.nativeNodeFetchintegration=vht});var LL=y(FL=>{c();Object.defineProperty(FL,"__esModule",{value:!0});var ace=require("path"),_ht=ge();function cce(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function Cht(e=process.argv[1]?_ht.dirname(process.argv[1]):process.cwd(),t=ace.sep==="\\"){let r=t?cce(e):e;return n=>{if(!n)return;let i=t?cce(n):n,{dir:s,base:o,ext:a}=ace.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,a.length*-1)),s||(s=".");let u=s.lastIndexOf("/node_modules");if(u>-1)return`${s.slice(u+14).replace(/\//g,".")}:${o}`;if(s.startsWith(r)){let p=s.slice(r.length+1).replace(/\//g,".");return p&&(p+=":"),p+=o,p}return o}}FL.createGetModuleFromFilename=Cht});var ZL=y(wu=>{c();var{_optionalChain:xht}=ge();Object.defineProperty(wu,"__esModule",{value:!0});var Fs=St(),yp=ge(),Sht=mae(),wht=uL(),Eht=pS(),Aht=dS(),Rht=mS(),Tht=gS(),Nht=IS(),Bht=CS(),kht=wS(),Oht=AS(),Ght=RS(),Fht=NS(),Lht=LL(),Zht=gL(),uce=[Fs.inboundFiltersIntegration(),Fs.functionToStringIntegration(),Fs.linkedErrorsIntegration(),Fs.requestDataIntegration(),Eht.consoleIntegration(),Tht.httpIntegration(),Fht.nativeNodeFetchintegration(),kht.onUncaughtExceptionIntegration(),Oht.onUnhandledRejectionIntegration(),Rht.contextLinesIntegration(),Nht.localVariablesIntegration(),Aht.nodeContextIntegration(),Bht.modulesIntegration()];function lce(e){let t=Fs.getMainCarrier(),r=xht([t,"access",n=>n.__SENTRY__,"optionalAccess",n=>n.integrations])||[];return[...uce,...r]}function Wht(e={}){Sht.setNodeAsyncContextStrategy(),e.defaultIntegrations===void 0&&(e.defaultIntegrations=lce()),e.dsn===void 0&&process.env.SENTRY_DSN&&(e.dsn=process.env.SENTRY_DSN);let t=process.env.SENTRY_TRACES_SAMPLE_RATE;if(e.tracesSampleRate===void 0&&t){let n=parseFloat(t);isFinite(n)&&(e.tracesSampleRate=n)}if(e.release===void 0){let n=pce();n!==void 0?e.release=n:e.autoSessionTracking=!1}e.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(e.environment=process.env.SENTRY_ENVIRONMENT),e.autoSessionTracking===void 0&&e.dsn!==void 0&&(e.autoSessionTracking=!0),e.instrumenter===void 0&&(e.instrumenter="sentry");let r={...e,stackParser:yp.stackParserFromStackParserOptions(e.stackParser||dce),integrations:Fs.getIntegrationsToSetup(e),transport:e.transport||Zht.makeNodeTransport};if(Fs.initAndBind(e.clientClass||wht.NodeClient,r),e.autoSessionTracking&&Dht(),qht(),e.spotlight){let n=Fs.getClient();if(n&&n.addIntegration){let i=n.getOptions().integrations;for(let s of i)n.addIntegration(s);n.addIntegration(Ght.spotlightIntegration({sidecarUrl:typeof e.spotlight=="string"?e.spotlight:void 0}))}}}function Pht(e){if(e===void 0)return!1;let t=e&&e.getOptions();return t&&t.autoSessionTracking!==void 0?t.autoSessionTracking:!1}function pce(e){return process.env.SENTRY_RELEASE?process.env.SENTRY_RELEASE:yp.GLOBAL_OBJ.SENTRY_RELEASE&&yp.GLOBAL_OBJ.SENTRY_RELEASE.id?yp.GLOBAL_OBJ.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||e}var dce=yp.createStackParser(yp.nodeStackLineParser(Lht.createGetModuleFromFilename()));function Dht(){Fs.startSession(),process.on("beforeExit",()=>{let e=Fs.getIsolationScope().getSession();e&&!["exited","crashed"].includes(e.status)&&Fs.endSession()})}function qht(){let e=(process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase();if(!["false","n","no","off","0"].includes(e)){let t=process.env.SENTRY_TRACE,r=process.env.SENTRY_BAGGAGE,n=yp.propagationContextFromHeaders(t,r);Fs.getCurrentScope().setPropagationContext(n)}}wu.defaultIntegrations=uce;wu.defaultStackParser=dce;wu.getDefaultIntegrations=lce;wu.getSentryRelease=pce;wu.init=Wht;wu.isAutoSessionTrackingEnabled=Pht});var fce=y(PL=>{c();Object.defineProperty(PL,"__esModule",{value:!0});var BS=require("fs"),WL=require("path");function Vht(e){let t=WL.resolve(e);if(!BS.existsSync(t))throw new Error(`Cannot read contents of ${t}. Directory does not exist.`);if(!BS.statSync(t).isDirectory())throw new Error(`Cannot read contents of ${t}, because it is not a directory.`);let r=n=>BS.readdirSync(n).reduce((i,s)=>{let o=WL.join(n,s);return BS.statSync(o).isDirectory()?i.concat(r(o)):(i.push(o),i)},[]);return r(t).map(n=>WL.relative(t,n))}PL.deepReadDirSync=Vht});var mce=y(hce=>{c();hce.base64WorkerScript="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi8KLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwoKLyoqCiAqIEhlbHBlciB0byBkZWN5Y2xlIGpzb24gb2JqZWN0cwogKi8KZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7CiAgY29uc3QgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nOwogIGNvbnN0IGlubmVyID0gaGFzV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiBbXTsKICBmdW5jdGlvbiBtZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaWYgKGlubmVyLmhhcyhvYmopKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaW5uZXIuYWRkKG9iaik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGlubmVyW2ldOwogICAgICBpZiAodmFsdWUgPT09IG9iaikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpbm5lci5wdXNoKG9iaik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiB1bm1lbW9pemUob2JqKSB7CiAgICBpZiAoaGFzV2Vha1NldCkgewogICAgICBpbm5lci5kZWxldGUob2JqKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikgewogICAgICAgICAgaW5uZXIuc3BsaWNlKGksIDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC4KICoKICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uCiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcwogKiAtIFdoZW4gc3RyaW5naWZ5aW5nLCBjYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZAogKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdAogKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvY2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnMKICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb24KICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXQKICogLSBPcHRpb25hbGx5IGxpbWl0cyBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheQogKgogKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gZGVwdGggVGhlIG1heCBkZXB0aCB0byB3aGljaCB0byBub3JtYWxpemUgdGhlIG9iamVjdC4gKEFueXRoaW5nIGRlZXBlciBzdHJpbmdpZmllZCB3aG9sZS4pCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvcgogKiBvYmplY3QgaW4gdGhlIG5vcm1hbGxpemVkIG91dHB1dC4KICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYCIqKm5vbi1zZXJpYWxpemFibGUqKiJgIGlmIGFueSBlcnJvcnMgYXJlIHRocm93biBkdXJpbmcgbm9ybWFsaXphdGlvbi4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55CmZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dCwgZGVwdGggPSAxMDAsIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHkpIHsKICB0cnkgewogICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleQogICAgcmV0dXJuIHZpc2l0KCcnLCBpbnB1dCwgZGVwdGgsIG1heFByb3BlcnRpZXMpOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTsKICB9Cn0KCi8qKgogKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdAogKgogKiBAcGFyYW0ga2V5IFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbm9kZQogKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZAogKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmcKICovCmZ1bmN0aW9uIHZpc2l0KAogIGtleSwKICB2YWx1ZSwKICBkZXB0aCA9ICtJbmZpbml0eSwKICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LAogIG1lbW8gPSBtZW1vQnVpbGRlcigpLAopIHsKICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87CgogIC8vIEdldCB0aGUgc2ltcGxlIGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0CiAgaWYgKAogICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcQogICAgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSAmJiAhaXNOYU4kMSh2YWx1ZSkpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlWYWx1ZShrZXksIHZhbHVlKTsKCiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYCJbb2JqZWN0IFhYWFhdImAuCiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS4KICBpZiAoIXN0cmluZ2lmaWVkLnN0YXJ0c1dpdGgoJ1tvYmplY3QgJykpIHsKICAgIHJldHVybiBzdHJpbmdpZmllZDsKICB9CgogIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS4KCiAgLy8gRG8gbm90IG5vcm1hbGl6ZSBvYmplY3RzIHRoYXQgd2Uga25vdyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhlCiAgLy8gIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fIiBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSB1c2VkIHNwYXJpbmdseSBhbmQgb25seSBzaG91bGQgb25seSBiZSBzZXQgb24gb2JqZWN0cyB0aGF0CiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHsKICAgIHJldHVybiB2YWx1ZSA7CiAgfQoKICAvLyBXZSBjYW4gc2V0IGBfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX19gIG9uIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBmcm9tIHRoZXJlCiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLgogIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS4KICBjb25zdCByZW1haW5pbmdEZXB0aCA9CiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJwogICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKQogICAgICA6IGRlcHRoOwoKICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoCiAgaWYgKHJlbWFpbmluZ0RlcHRoID09PSAwKSB7CiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAiW29iamVjdCBYWFhYXSJgLiBDbGVhbiBpdCB1cCBzbyBpdCdzIGp1c3QgYCJbWFhYWF0iYC4KICAgIHJldHVybiBzdHJpbmdpZmllZC5yZXBsYWNlKCdvYmplY3QgJywgJycpOwogIH0KCiAgLy8gSWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2UuIElmIG5vdCwgbm90ZSB0aGF0IHdlJ3JlIHNlZWluZyBpdCBub3cuCiAgaWYgKG1lbW9pemUodmFsdWUpKSB7CiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7CiAgfQoKICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvbgogIGNvbnN0IHZhbHVlV2l0aFRvSlNPTiA9IHZhbHVlIDsKICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7CiAgICB0cnkgewogICAgICBjb25zdCBqc29uVmFsdWUgPSB2YWx1ZVdpdGhUb0pTT04udG9KU09OKCk7CiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpCiAgICB9CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgZWl0aGVyIGhhdmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LCB3ZSBoYXZlbid0IHNlZW4gaXQgYmVmb3JlLCBhbmQgd2UncmUgZ29pbmcgdG8gcmVjdXJzZQogIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoCiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LgogIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9KSA7CiAgbGV0IG51bUFkZGVkID0gMDsKCiAgLy8gQmVmb3JlIHdlIGJlZ2luLCBjb252ZXJ0YEVycm9yYCBhbmRgRXZlbnRgIGluc3RhbmNlcyBpbnRvIHBsYWluIG9iamVjdHMsIHNpbmNlIHNvbWUgb2YgZWFjaCBvZiB0aGVpciByZWxldmFudAogIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC4KICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApOwoKICBmb3IgKGNvbnN0IHZpc2l0S2V5IGluIHZpc2l0YWJsZSkgewogICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi4KICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChudW1BZGRlZCA+PSBtYXhQcm9wZXJ0aWVzKSB7CiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2RlcwogICAgY29uc3QgdmlzaXRWYWx1ZSA9IHZpc2l0YWJsZVt2aXNpdEtleV07CiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pOwoKICAgIG51bUFkZGVkKys7CiAgfQoKICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2UKICB1bm1lbW9pemUodmFsdWUpOwoKICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzCiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KCi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi8KLyoqCiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuCiAqCiAqIE5vdCBtZWFudCB0byBiZSB1c2VkIG9uIHNpbXBsZSBwcmltaXRpdmVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYXMgaXQgd2lsbCwgZm9yIGV4YW1wbGUsIHR1cm4KICogdGhlIG51bWJlciAxMjMxIGludG8gIltPYmplY3QgTnVtYmVyXSIsIG5vciBvbiBgbnVsbGAsIGFzIGl0IHdpbGwgdGhyb3cuCiAqCiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5CiAqIEByZXR1cm5zIEEgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHZhbHVlCiAqLwpmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSgKICBrZXksCiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvcgogIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvCiAgdmFsdWUsCikgewogIHRyeSB7CiAgICBpZiAoa2V5ID09PSAnZG9tYWluJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSApLl9ldmVudHMpIHsKICAgICAgcmV0dXJuICdbRG9tYWluXSc7CiAgICB9CgogICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJzsKICAgIH0KCiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdAogICAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCgogICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHsKICAgICAgcmV0dXJuICdbR2xvYmFsXSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHsKICAgICAgcmV0dXJuICdbV2luZG93XSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7CiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7CiAgICB9CgogICAgaWYgKGlzVnVlVmlld01vZGVsKHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJzsKICAgIH0KCiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neQogICAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7CiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiAnW05hTl0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykgewogICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7CiAgICB9CgogICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb24KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7CiAgICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGtub2NrZWQgb3V0IGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBhbmQgdGhlIHByaW1pdGl2ZXMsIGFsbCB3ZSBoYXZlIGxlZnQgYXJlIG9iamVjdHMuIFNpbXBseSBjYXN0aW5nCiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXMKICAgIC8vIGAiW29iamVjdCBPYmplY3RdImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLAogICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS4KICAgIGNvbnN0IG9iak5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpOwoKICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzCiAgICBpZiAoL15IVE1MKFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkgewogICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gOwogICAgfQoKICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDsKICB9Cn0KLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovCgpmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpIHsKICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpOwoKICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnOwp9CgovKioKICogTm9ybWFsaXplcyBVUkxzIGluIGV4Y2VwdGlvbnMgYW5kIHN0YWNrdHJhY2VzIHRvIGEgYmFzZSBwYXRoIHNvIFNlbnRyeSBjYW4gZmluZ2VycHJpbnQKICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC4KICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHsKICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoCiAgICAvLyBCYWNrc2xhc2ggdG8gZm9yd2FyZAogICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICdcXCQmJyk7CgogIGxldCBuZXdVcmwgPSB1cmw7CiAgdHJ5IHsKICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpOwogIH0gY2F0Y2ggKF9PbykgewogICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3MKICB9CiAgcmV0dXJuICgKICAgIG5ld1VybAogICAgICAucmVwbGFjZSgvXFwvZywgJy8nKQogICAgICAucmVwbGFjZSgvd2VicGFjazpcLz8vZywgJycpIC8vIFJlbW92ZSBpbnRlcm1lZGlhdGUgYmFzZSBwYXRoCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IKICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpCiAgKTsKfQoKLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0CgovLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvbgovLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLgpjb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxTKzpcXHxcLz8pKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteL1xcXSs/fCkoXC5bXi4vXFxdKnwpKSg/OlsvXFxdKikkLzsKLyoqIEpTRG9jICovCmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkgewogIC8vIFRydW5jYXRlIGZpbGVzIG5hbWVzIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgdG8gYXZvaWQgcmVnZXggZG9zCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg3MzcjZGlzY3Vzc2lvbl9yMTI4NTcxOTE3MgogIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7CiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKHRydW5jYXRlZCk7CiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTsKfQoKLyoqIEpTRG9jICovCmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTsKICBjb25zdCByb290ID0gcmVzdWx0WzBdOwogIGxldCBkaXIgPSByZXN1bHRbMV07CgogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgIHJldHVybiAnLic7CiAgfQoKICBpZiAoZGlyKSB7CiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaAogICAgZGlyID0gZGlyLnNsaWNlKDAsIGRpci5sZW5ndGggLSAxKTsKICB9CgogIHJldHVybiByb290ICsgZGlyOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi8KCi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi8KdmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHsKICAvKiogUGVuZGluZyAqLwogIGNvbnN0IFBFTkRJTkcgPSAwOyBTdGF0ZXNbU3RhdGVzWyJQRU5ESU5HIl0gPSBQRU5ESU5HXSA9ICJQRU5ESU5HIjsKICAvKiogUmVzb2x2ZWQgLyBPSyAqLwogIGNvbnN0IFJFU09MVkVEID0gMTsgU3RhdGVzW1N0YXRlc1siUkVTT0xWRUQiXSA9IFJFU09MVkVEXSA9ICJSRVNPTFZFRCI7CiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi8KICBjb25zdCBSRUpFQ1RFRCA9IDI7IFN0YXRlc1tTdGF0ZXNbIlJFSkVDVEVEIl0gPSBSRUpFQ1RFRF0gPSAiUkVKRUNURUQiOwp9KShTdGF0ZXMgfHwgKFN0YXRlcyA9IHt9KSk7CgovLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudAoKLyoqCiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuCiAqCiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlc29sdmVkU3luY1Byb21pc2UodmFsdWUpIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4gewogICAgcmVzb2x2ZSh2YWx1ZSk7CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlamVjdGVkU3luY1Byb21pc2UocmVhc29uKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7CiAgICByZWplY3QocmVhc29uKTsKICB9KTsKfQoKLyoqCiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZQogKiBidXQgaXMgbm90IGFzeW5jIGludGVybmFsbHkKICovCmNsYXNzIFN5bmNQcm9taXNlIHsKCiAgIGNvbnN0cnVjdG9yKAogICAgZXhlY3V0b3IsCiAgKSB7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0NC5jYWxsKHRoaXMpOwogICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORzsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgdHJ5IHsKICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5fcmVqZWN0KGUpOwogICAgfQogIH0KCiAgLyoqIEpTRG9jICovCiAgIHRoZW4oCiAgICBvbmZ1bGZpbGxlZCwKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbCiAgICAgICAgZmFsc2UsCiAgICAgICAgcmVzdWx0ID0+IHsKICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHsKICAgICAgICAgICAgLy8gVE9ETzogwq9cXyjjg4QpXy/CrwogICAgICAgICAgICAvLyBUT0RPOiBGSVhNRQogICAgICAgICAgICByZXNvbHZlKHJlc3VsdCApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICBdKTsKICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBjYXRjaCgKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpOwogIH0KCiAgLyoqIEpTRG9jICovCiAgIGZpbmFsbHkob25maW5hbGx5KSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IHZhbDsKICAgICAgbGV0IGlzUmVqZWN0ZWQ7CgogICAgICByZXR1cm4gdGhpcy50aGVuKAogICAgICAgIHZhbHVlID0+IHsKICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgaWYgKG9uZmluYWxseSkgewogICAgICAgICAgICBvbmZpbmFsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlYXNvbiA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKICAgICAgICAgIHZhbCA9IHJlYXNvbjsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoaXNSZWplY3RlZCkgewogICAgICAgICAgcmVqZWN0KHZhbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXNvbHZlKHZhbCApOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRVNPTFZFRCwgdmFsdWUpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDIoKSB7dGhpcy5fcmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQzKCkge3RoaXMuX3NldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkgewogICAgICB2b2lkICh2YWx1ZSApLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwoKICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4gewogICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpOwogICAgdGhpcy5faGFuZGxlcnMgPSBbXTsKCiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gewogICAgICBpZiAoaGFuZGxlclswXSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVTT0xWRUQpIHsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzCiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApOwogICAgICB9CgogICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkgewogICAgICAgIGhhbmRsZXJbMl0odGhpcy5fdmFsdWUpOwogICAgICB9CgogICAgICBoYW5kbGVyWzBdID0gdHJ1ZTsKICAgIH0pOwogIH07fQp9CgovKioKICogQ3JlYXRlcyBhbiBuZXcgUHJvbWlzZUJ1ZmZlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbWl0CiAqIEBwYXJhbSBsaW1pdCBtYXggbnVtYmVyIG9mIHByb21pc2VzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCiAqLwpmdW5jdGlvbiBtYWtlUHJvbWlzZUJ1ZmZlcihsaW1pdCkgewogIGNvbnN0IGJ1ZmZlciA9IFtdOwoKICBmdW5jdGlvbiBpc1JlYWR5KCkgewogICAgcmV0dXJuIGxpbWl0ID09PSB1bmRlZmluZWQgfHwgYnVmZmVyLmxlbmd0aCA8IGxpbWl0OwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS4KICAgKgogICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD4KICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gcmVtb3ZlKHRhc2spIHsKICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTsKICB9CgogIC8qKgogICAqIEFkZCBhIHByb21pc2UgKHJlcHJlc2VudGluZyBhbiBpbi1mbGlnaHQgYWN0aW9uKSB0byB0aGUgcXVldWUsIGFuZCBzZXQgaXQgdG8gcmVtb3ZlIGl0c2VsZiBvbiBmdWxmaWxsbWVudC4KICAgKgogICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6CiAgICogICAgICAgIFByb21pc2VMaWtlPFQ+YCwgYnV0IHVuZGVyIHRoYXQgbW9kZWwsIFByb21pc2VzIHdlcmUgaW5zdGFudGx5IGNyZWF0ZWQgb24gdGhlIGNhbGwtc2l0ZSBhbmQgdGhlaXIgZXhlY3V0b3IKICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnkKICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlcgogICAqICAgICAgICBsaW1pdCBjaGVjay4KICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS4KICAgKi8KICBmdW5jdGlvbiBhZGQodGFza1Byb2R1Y2VyKSB7CiAgICBpZiAoIWlzUmVhZHkoKSkgewogICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7CiAgICB9CgogICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWUKICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTsKICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHsKICAgICAgYnVmZmVyLnB1c2godGFzayk7CiAgICB9CiAgICB2b2lkIHRhc2sKICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKQogICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWAKICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndAogICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pCiAgICAgIC50aGVuKG51bGwsICgpID0+CiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi4KICAgICAgICB9KSwKICAgICAgKTsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgLyoqCiAgICogV2FpdCBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlIG9yIGZvciB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yCiAgICogbm90IHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHRoZSBxdWV1ZSB0byBkcmFpbiBiZWZvcmUgcmVzb2x2aW5nIHRvCiAgICogYHRydWVgLgogICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZAogICAqIGBmYWxzZWAgb3RoZXJ3aXNlCiAgICovCiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDsKCiAgICAgIGlmICghY291bnRlcikgewogICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpOwogICAgICB9CgogICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KQogICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGltZW91dCAmJiB0aW1lb3V0ID4gMCkgewogICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfQogICAgICB9LCB0aW1lb3V0KTsKCiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgCiAgICAgIGJ1ZmZlci5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHsKICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpOwogICAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICByZXR1cm4gewogICAgJDogYnVmZmVyLAogICAgYWRkLAogICAgZHJhaW4sCiAgfTsKfQoKY29uc3QgT05FX1NFQ09ORF9JTl9NUyA9IDEwMDA7CgovKioKICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9CiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLgogKi8KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgdGhlIERhdGUgQVBJLgogKgogKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuCiAqLwpmdW5jdGlvbiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCkgewogIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUzsKfQoKLyoqCiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90CiAqIHN1cHBvcnQgdGhlIEFQSS4KICoKICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLgogKi8KZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7CiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7CiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7CiAgICByZXR1cm4gZGF0ZVRpbWVzdGFtcEluU2Vjb25kczsKICB9CgogIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0bwogIC8vIHVzaW5nIERhdGUubm93KCkgdG8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgdGltZS4KICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gPT0gdW5kZWZpbmVkID8gYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luIDogcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKCiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnQKICAvLyB3YWxsIGNsb2NrIHRpbWUgKGFjdHVhbCBVTklYIHRpbWVzdGFtcCksIHdlIG5lZWQgdG8gYWRkIHRoZSBzdGFydGluZyB0aW1lIG9yaWdpbiBhbmQgdGhlIGN1cnJlbnQgdGltZSBlbGFwc2VkLgogIC8vCiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZQogIC8vIHdhbGwgY2xvY2sgdGltZSwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAgdG8gYmUgaW5hY2N1cmF0ZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0byBkZXRlY3QgYW5kCiAgLy8gY29ycmVjdCBmb3IgdGhpcy4KICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAKICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vY29udGVudC9pc3N1ZXMvNDcxMwogIC8vIFNlZTogaHR0cHM6Ly9kZXYudG8vbm9hbXIvd2hlbi1hLW1pbGxpc2Vjb25kLWlzLW5vdC1hLW1pbGxpc2Vjb25kLTNoNgogIHJldHVybiAoKSA9PiB7CiAgICByZXR1cm4gKHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSkgLyBPTkVfU0VDT05EX0lOX01TOwogIH07Cn0KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGUKICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuCiAqCiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcwogKiBhc2xlZXAuIFRoaXMgY3JlYXRlcyBhIHNrZXcgYmV0d2VlbiBgZGF0ZVRpbWVzdGFtcEluU2Vjb25kc2AgYW5kIGB0aW1lc3RhbXBJblNlY29uZHNgLiBUaGUKICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuCiAqLwpjb25zdCB0aW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpOwoKLyoqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGUKICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS4KICovCigoKSA9PiB7CiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvcgogIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW4KICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuCgogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwOwogIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7CgogIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IHRpbWVPcmlnaW5EZWx0YSA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykKICAgIDogdGhyZXNob2xkOwogIGNvbnN0IHRpbWVPcmlnaW5Jc1JlbGlhYmxlID0gdGltZU9yaWdpbkRlbHRhIDwgdGhyZXNob2xkOwoKICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpbgogIC8vIGlzIG5vdCBhcyB3aWRlbHkgc3VwcG9ydGVkLiBOYW1lbHksIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXMgdW5kZWZpbmVkIGluIFNhZmFyaSBhcyBvZiB3cml0aW5nLgogIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5cwogIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZQogIC8vIERhdGUgQVBJLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OwogIGNvbnN0IGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOwogIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkCiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkOwogIGNvbnN0IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUgPSBuYXZpZ2F0aW9uU3RhcnREZWx0YSA8IHRocmVzaG9sZDsKCiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHsKICAgIC8vIFVzZSB0aGUgbW9yZSByZWxpYWJsZSB0aW1lIG9yaWdpbgogICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkgewogICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYXZpZ2F0aW9uU3RhcnQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlTm93Owp9KSgpOwoKLyoqCiAqIENyZWF0ZXMgYW4gZW52ZWxvcGUuCiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb24KICogc28gdGhhdCB0aGUgZW52ZWxvcGUgdHlwZXMgcmVzb2x2ZSBjb3JyZWN0bHkuCiAqLwpmdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7CiAgcmV0dXJuIFtoZWFkZXJzLCBpdGVtc10gOwp9CgovKioKICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBhbmQgaXRlbSB0eXBlcyBvZiBhbiBlbnZlbG9wZS4KICogKFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBjcmVhdGVkIGJlY2F1c2Ugd29ya2luZyB3aXRoIGVudmVsb3BlIHR5cGVzIGlzIHBhaW5mdWwgYXQgdGhlIG1vbWVudCkKICoKICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KICovCmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oCiAgZW52ZWxvcGUsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IGVudmVsb3BlSXRlbXMgPSBlbnZlbG9wZVsxXTsKCiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykgewogICAgY29uc3QgZW52ZWxvcGVJdGVtVHlwZSA9IGVudmVsb3BlSXRlbVswXS50eXBlOwogICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguCiAqLwpmdW5jdGlvbiBlbmNvZGVVVEY4KGlucHV0LCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTsKICByZXR1cm4gdXRmOC5lbmNvZGUoaW5wdXQpOwp9CgovKioKICogU2VyaWFsaXplcyBhbiBlbnZlbG9wZS4KICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlLCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IFtlbnZIZWFkZXJzLCBpdGVtc10gPSBlbnZlbG9wZTsKCiAgLy8gSW5pdGlhbGx5IHdlIGNvbnN0cnVjdCBvdXIgZW52ZWxvcGUgYXMgYSBzdHJpbmcgYW5kIG9ubHkgY29udmVydCB0byBiaW5hcnkgY2h1bmtzIGlmIHdlIGVuY291bnRlciBiaW5hcnkgZGF0YQogIGxldCBwYXJ0cyA9IEpTT04uc3RyaW5naWZ5KGVudkhlYWRlcnMpOwoKICBmdW5jdGlvbiBhcHBlbmQobmV4dCkgewogICAgaWYgKHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycpIHsKICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLnB1c2godHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChuZXh0LCB0ZXh0RW5jb2RlcikgOiBuZXh0KTsKICAgIH0KICB9CgogIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgY29uc3QgW2l0ZW1IZWFkZXJzLCBwYXlsb2FkXSA9IGl0ZW07CgogICAgYXBwZW5kKGBcbiR7SlNPTi5zdHJpbmdpZnkoaXRlbUhlYWRlcnMpfVxuYCk7CgogICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJyB8fCBwYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBhcHBlbmQocGF5bG9hZCk7CiAgICB9IGVsc2UgewogICAgICBsZXQgc3RyaW5naWZpZWRQYXlsb2FkOwogICAgICB0cnkgewogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSW4gY2FzZSwgZGVzcGl0ZSBhbGwgb3VyIGVmZm9ydHMgdG8ga2VlcCBgcGF5bG9hZGAgY2lyY3VsYXItZGVwZW5kZW5jeS1mcmVlLCBgSlNPTi5zdHJpbmlmeSgpYCBzdGlsbAogICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYQogICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBidXQgaW4gdGhpcyBjYXNlIGEgcGVyZm9ybWFuY2UgaGl0IGlzIGJldHRlciB0aGFuIHRocm93aW5nLgogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7CiAgICAgIH0KICAgICAgYXBwZW5kKHN0cmluZ2lmaWVkUGF5bG9hZCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7Cn0KCmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykgewogIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVycy5yZWR1Y2UoKGFjYywgYnVmKSA9PiBhY2MgKyBidWYubGVuZ3RoLCAwKTsKCiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7CiAgfQoKICByZXR1cm4gbWVyZ2VkOwp9Cgpjb25zdCBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVAgPSB7CiAgc2Vzc2lvbjogJ3Nlc3Npb24nLAogIHNlc3Npb25zOiAnc2Vzc2lvbicsCiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLAogIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLAogIGV2ZW50OiAnZXJyb3InLAogIGNsaWVudF9yZXBvcnQ6ICdpbnRlcm5hbCcsCiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JywKICBwcm9maWxlOiAncHJvZmlsZScsCiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JywKICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JywKICBjaGVja19pbjogJ21vbml0b3InLAogIGZlZWRiYWNrOiAnZmVlZGJhY2snLAogIHNwYW46ICdzcGFuJywKICAvLyBUT0RPOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgd2UgaGF2ZSBhIHByb3BlciBkYXRhIGNhdGVnb3J5IGZvciBtZXRyaWNzCiAgc3RhdHNkOiAndW5rbm93bicsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovCmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7CiAgaWYgKCFtZXRhZGF0YU9yRXZlbnQgfHwgIW1ldGFkYXRhT3JFdmVudC5zZGspIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBtZXRhZGF0YU9yRXZlbnQuc2RrOwogIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTsKfQoKLyoqCiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWwKICogTm90ZTogVGhpcyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgcGFja2FnZSB0byBtYWtlIGl0IGF2YWlsYWJsZSBpbiBSZXBsYXkKICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKAogIGV2ZW50LAogIHNka0luZm8sCiAgdHVubmVsLAogIGRzbiwKKSB7CiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSAmJiBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDsKICByZXR1cm4gewogICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkICwKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHsKICAgICAgdHJhY2U6IGRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSwKICAgIH0pLAogIH07Cn0KCi8vIEludGVudGlvbmFsbHkga2VlcGluZyB0aGUga2V5IGJyb2FkLCBhcyB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHdoYXQgcmF0ZSBsaW1pdCBoZWFkZXJzIGdldCByZXR1cm5lZCBmcm9tIGJhY2tlbmQKCmNvbnN0IERFRkFVTFRfUkVUUllfQUZURVIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHMKCi8qKgogKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWUKICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXIKICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wCiAqCiAqLwpmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7CiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApOwogIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7CiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwOwogIH0KCiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApOwogIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHsKICAgIHJldHVybiBoZWFkZXJEYXRlIC0gbm93OwogIH0KCiAgcmV0dXJuIERFRkFVTFRfUkVUUllfQUZURVI7Cn0KCi8qKgogKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLgogKiBJbiBjYXNlIG5vIGNhdGVnb3J5LXNwZWNpZmljIGxpbWl0IGlzIHNldCBidXQgYSBnZW5lcmFsIHJhdGUgbGltaXQgYWNyb3NzIGFsbCBjYXRlZ29yaWVzIGlzIGFjdGl2ZSwKICogdGhhdCB0aW1lIGlzIHJldHVybmVkLgogKgogKiBAcmV0dXJuIHRoZSB0aW1lIGluIG1zIHRoYXQgdGhlIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIG9yIDAgaWYgdGhlcmUncyBubyBhY3RpdmUgcmF0ZSBsaW1pdC4KICovCmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgewogIHJldHVybiBsaW1pdHNbY2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGNhdGVnb3J5LCBub3cgPSBEYXRlLm5vdygpKSB7CiAgcmV0dXJuIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgPiBub3c7Cn0KCi8qKgogKiBVcGRhdGUgcmF0ZWxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuCiAqCiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuCiAqLwpmdW5jdGlvbiB1cGRhdGVSYXRlTGltaXRzKAogIGxpbWl0cywKICB7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSwKICBub3cgPSBEYXRlLm5vdygpLAopIHsKICBjb25zdCB1cGRhdGVkUmF0ZUxpbWl0cyA9IHsKICAgIC4uLmxpbWl0cywKICB9OwoKICAvLyAiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iCiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMvZ2V0CiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddOwogIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107CgogIGlmIChyYXRlTGltaXRIZWFkZXIpIHsKICAgIC8qKgogICAgICogcmF0ZSBsaW1pdCBoZWFkZXJzIGFyZSBvZiB0aGUgZm9ybQogICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uCiAgICAgKiB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPHJldHJ5X2FmdGVyPjogPGNhdGVnb3JpZXM+OiA8c2NvcGU+OiA8cmVhc29uX2NvZGU+CiAgICAgKiB3aGVyZQogICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzCiAgICAgKiAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybQogICAgICogICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uCiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREsKICAgICAqICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSAib3JnX3F1b3RhIiAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKi8KICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmF0ZUxpbWl0SGVhZGVyLnRyaW0oKS5zcGxpdCgnLCcpKSB7CiAgICAgIGNvbnN0IFtyZXRyeUFmdGVyLCBjYXRlZ29yaWVzXSA9IGxpbWl0LnNwbGl0KCc6JywgMik7CiAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlciwgMTApOwogICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0CiAgICAgIGlmICghY2F0ZWdvcmllcykgewogICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIGRlbGF5OwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7CiAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QgdG8gYSBKU09OIG9iamVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN0cnVjdHVyZS4KICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvbgogKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZAogKgogKiBAcmV0dXJucyBhIEpTT04gb2JqZWN0IG9mIHRoZSBwYXNzZWQgc2Vzc2lvbgogKi8KZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7CiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCwKICAgIGluaXQ6IHNlc3Npb24uaW5pdCwKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3IKICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksCiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHN0YXR1czogc2Vzc2lvbi5zdGF0dXMsCiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLAogICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLAogICAgZHVyYXRpb246IHNlc3Npb24uZHVyYXRpb24sCiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLAogICAgYXR0cnM6IHsKICAgICAgcmVsZWFzZTogc2Vzc2lvbi5yZWxlYXNlLAogICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCwKICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsCiAgICAgIHVzZXJfYWdlbnQ6IHNlc3Npb24udXNlckFnZW50LAogICAgfSwKICB9KTsKfQoKLyoqCiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS4KICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS4KICoqLwpmdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykgewogIGlmICghc2RrSW5mbykgewogICAgcmV0dXJuIGV2ZW50OwogIH0KICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307CiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7CiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247CiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldOwogIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTsKICByZXR1cm4gZXZlbnQ7Cn0KCi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovCmZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSgKICBzZXNzaW9uLAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7CiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgfTsKCiAgY29uc3QgZW52ZWxvcGVJdGVtID0KICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTsKCiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pOwp9CgovKioKICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuCiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKAogIGV2ZW50LAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKCiAgLyoKICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuCiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLAogICAgYW5kIHdlJ2QgaGF2ZSB0byBhZGp1dCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LgogICAgV2Ugd2FudCB0byBhdm9pZCBjYXN0aW5nIHRoaXMgYXJvdW5kLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gYnVncyAoZS5nLiB3aGVuIHdlIGFkZCBhbm90aGVyIHR5cGUpCiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuCiAgKi8KICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09ICdyZXBsYXlfZXZlbnQnID8gZXZlbnQudHlwZSA6ICdldmVudCc7CgogIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspOwoKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pOwoKICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvCiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXkKICAvLyBoYXZlIHRlbXBvcmFyaWx5IGFkZGVkLCBldGMuIEV2ZW4gaWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGJlIHVzaW5nIGl0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgbGV0J3Mgbm90IGdldCByaWQKICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pCiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTsKCiAgY29uc3QgZXZlbnRJdGVtID0gW3sgdHlwZTogZXZlbnRUeXBlIH0sIGV2ZW50XTsKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7Cn0KCmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JzsKCi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi8KZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikgewogIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7CiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJzsKICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7Cn0KCi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovCmZ1bmN0aW9uIF9nZXRJbmdlc3RFbmRwb2ludChkc24pIHsKICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gOwp9CgovKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi8KZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykgewogIHJldHVybiB1cmxFbmNvZGUoewogICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTcyLgogICAgc2VudHJ5X2tleTogZHNuLnB1YmxpY0tleSwKICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNlbnRyeV9jbGllbnQ6IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YCB9KSwKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLgogKi8KZnVuY3Rpb24gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgKICBkc24sCiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3cKICAvLyBvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30gYXMgQ2xpZW50T3B0aW9ucywKICB0dW5uZWxPck9wdGlvbnMgPSB7fSAsCikgewogIC8vIFRPRE8gKHY4KTogVXNlIHRoaXMgY29kZSBpbnN0ZWFkCiAgLy8gY29uc3QgeyB0dW5uZWwsIF9tZXRhZGF0YSA9IHt9IH0gPSBvcHRpb25zOwogIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gOwoKICBjb25zdCB0dW5uZWwgPSB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHR1bm5lbE9yT3B0aW9ucyA6IHR1bm5lbE9yT3B0aW9ucy50dW5uZWw7CiAgY29uc3Qgc2RrSW5mbyA9CiAgICB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyB8fCAhdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YSA/IHVuZGVmaW5lZCA6IHR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEuc2RrOwoKICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDsKfQoKY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSAzMDsKCi8qKgogKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgCiAqCiAqIEBwYXJhbSBvcHRpb25zCiAqIEBwYXJhbSBtYWtlUmVxdWVzdAogKi8KZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KAogIG9wdGlvbnMsCiAgbWFrZVJlcXVlc3QsCiAgYnVmZmVyID0gbWFrZVByb21pc2VCdWZmZXIoCiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsCiAgKSwKKSB7CiAgbGV0IHJhdGVMaW1pdHMgPSB7fTsKICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7CgogIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHsKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdOwoKICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGUKICAgIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgIGNvbnN0IGVudmVsb3BlSXRlbURhdGFDYXRlZ29yeSA9IGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKTsKICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5KSkgewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQoJ3JhdGVsaW1pdF9iYWNrb2ZmJywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5LCBldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFNraXAgc2VuZGluZyBpZiBlbnZlbG9wZSBpcyBlbXB0eSBhZnRlciBmaWx0ZXJpbmcgb3V0IHJhdGUgbGltaXRlZCBldmVudHMKICAgIGlmIChmaWx0ZXJlZEVudmVsb3BlSXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZVswXSwgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zICk7CgogICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGUKICAgIGNvbnN0IHJlY29yZEVudmVsb3BlTG9zcyA9IChyZWFzb24pID0+IHsKICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShmaWx0ZXJlZEVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4gewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSksIGV2ZW50KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IHJlcXVlc3RUYXNrID0gKCkgPT4KICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKAogICAgICAgIHJlc3BvbnNlID0+IHsKICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgb24gTk9LIHJlc3BvbnNlcywgYnV0IHdlIHdhbnQgdG8gYXQgbGVhc3QgbG9nIHRoZW0KICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7CiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApOwogICAgICAgICAgfQoKICAgICAgICAgIHJhdGVMaW1pdHMgPSB1cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTsKICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9LAogICAgICAgIGVycm9yID0+IHsKICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbigKICAgICAgcmVzdWx0ID0+IHJlc3VsdCwKICAgICAgZXJyb3IgPT4gewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7CiAgICAgICAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpOwogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCdxdWV1ZV9vdmVyZmxvdycpOwogICAgICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9LAogICAgKTsKICB9CgogIC8vIFdlIHVzZSB0aGlzIHRvIGlkZW50aWZpZnkgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUgYmFzZSB0cmFuc3BvcnQKICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIGFnYWluIGFzIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0CiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTsKCiAgcmV0dXJuIHsKICAgIHNlbmQsCiAgICBmbHVzaCwKICB9Owp9CgpmdW5jdGlvbiBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKSB7CiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDsKfQoKLyoqIG5vcm1hbGl6ZXMgV2luZG93cyBwYXRocyAqLwpmdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgcmV0dXJuIHBhdGgKICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeAogICAgLnJlcGxhY2UoL1xcL2csICcvJyk7IC8vIHJlcGxhY2UgYWxsIGBcYCBpbnN0YW5jZXMgd2l0aCBgL2AKfQoKLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqLwpmdW5jdGlvbiBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoCiAgYmFzZVBhdGggPSBwcm9jZXNzLmFyZ3ZbMV0gPyBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiBwcm9jZXNzLmN3ZCgpLAogIGlzV2luZG93cyA9IHNlcCA9PT0gJ1xcJywKKSB7CiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDsKCiAgcmV0dXJuIChmaWxlbmFtZSkgPT4gewogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gaXNXaW5kb3dzID8gbm9ybWFsaXplV2luZG93c1BhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWU7CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgbGV0IHsgZGlyLCBiYXNlOiBmaWxlLCBleHQgfSA9IHBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7CgogICAgaWYgKGV4dCA9PT0gJy5qcycgfHwgZXh0ID09PSAnLm1qcycgfHwgZXh0ID09PSAnLmNqcycpIHsKICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTsKICAgIH0KCiAgICBpZiAoIWRpcikgewogICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgZGlyID0gJy4nOwogICAgfQoKICAgIGNvbnN0IG4gPSBkaXIubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMnKTsKICAgIGlmIChuID4gLTEpIHsKICAgICAgcmV0dXJuIGAke2Rpci5zbGljZShuICsgMTQpLnJlcGxhY2UoL1wvL2csICcuJyl9OiR7ZmlsZX1gOwogICAgfQoKICAgIC8vIExldCdzIHNlZSBpZiBpdCdzIGEgcGFydCBvZiB0aGUgbWFpbiBtb2R1bGUKICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2UKICAgIGlmIChkaXIuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHsKICAgICAgbGV0IG1vZHVsZU5hbWUgPSBkaXIuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoICsgMSkucmVwbGFjZSgvXC8vZywgJy4nKTsKCiAgICAgIGlmIChtb2R1bGVOYW1lKSB7CiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7CiAgICAgIH0KICAgICAgbW9kdWxlTmFtZSArPSBmaWxlOwoKICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CiAgICB9CgogICAgcmV0dXJuIGZpbGU7CiAgfTsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZSQyKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0vKioKICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Ub29UYWxsTmF0ZS9wcm94eS1hZ2VudHMvdHJlZS9iMTMzMjk1ZmQxNmY2NDc1NTc4YjZiMTViZDliNGUzM2VjYjBkMGI3CiAqIFdpdGggdGhlIGZvbGxvd2luZyBsaWNlbmNlOgogKgogKiAoVGhlIE1JVCBMaWNlbnNlKQogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTmF0aGFuIFJhamxpY2ggPG5hdGhhbkB0b290YWxsbmF0ZS5uZXQ+KgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoqCiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLioKICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdBZ2VudEJhc2VJbnRlcm5hbFN0YXRlJyk7CgpjbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQgewoKICAvLyBTZXQgYnkgYGh0dHAuQWdlbnRgIC0gbWlzc2luZyBmcm9tIGBAdHlwZXMvbm9kZWAKCiAgY29uc3RydWN0b3Iob3B0cykgewogICAgc3VwZXIob3B0cyk7CiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9OwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LgogICAqLwogIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykgewogICAgaWYgKG9wdGlvbnMpIHsKICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpcwogICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgInBhc3NpbmcgdGhyb3VnaCIgdG8gdGhpcyBpbnN0YW5jZS4KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcwogICAgICBpZiAodHlwZW9mIChvcHRpb25zICkuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50OwogICAgICB9CgogICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpcwogICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMCiAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbGx5LCBpZiBubyBgcHJvdG9jb2xgIHByb3BlcnR5IHdhcyBzZXQsIHRoZW4gZmFsbCBiYWNrIHRvCiAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0bwogICAgLy8gZGV0ZWN0IHRoZSAiaHR0cHMiIG1vZHVsZS4KICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpOwogICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdGFjay5zcGxpdCgnXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpOwogIH0KCiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHsKICAgIGNvbnN0IGNvbm5lY3RPcHRzID0gewogICAgICAuLi5vcHRpb25zLAogICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLAogICAgfTsKICAgIFByb21pc2UucmVzb2x2ZSgpCiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSkKICAgICAgLnRoZW4oc29ja2V0ID0+IHsKICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkgewogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTsKICAgICAgICB9CiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgCiAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpOwogICAgICB9LCBjYik7CiAgfQoKICBjcmVhdGVDb25uZWN0aW9uKCkgewogICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDsKICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7CiAgICBpZiAoIXNvY2tldCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgZ2V0IGRlZmF1bHRQb3J0KCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCwgKCkgPT4gKCAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpKTsKICB9CgogIHNldCBkZWZhdWx0UG9ydCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2OwogICAgfQogIH0KCiAgZ2V0IHByb3RvY29sKCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCwgKCkgPT4gKCAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKSk7CiAgfQoKICBzZXQgcHJvdG9jb2wodikgewogICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7CiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIGRlYnVnJDEoLi4uYXJncykgewogIGxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZV0nLCAuLi5hcmdzKTsKfQoKZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0CiAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiAiMjAwIgogICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlCiAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi4KICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDsKICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTsKCiAgICBmdW5jdGlvbiByZWFkKCkgewogICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTsKICAgICAgaWYgKGIpIG9uZGF0YShiKTsKICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTsKICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgZGVidWckMSgnb25lbmQnKTsKICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVycm9yICVvJywgZXJyKTsKICAgICAgcmVqZWN0KGVycik7CiAgICB9CgogICAgZnVuY3Rpb24gb25kYXRhKGIpIHsKICAgICAgYnVmZmVycy5wdXNoKGIpOwogICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoOwoKICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpOwogICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcclxuXHJcbicpOwoKICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHsKICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZwogICAgICAgIGRlYnVnJDEoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7CiAgICAgICAgcmVhZCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcclxuJyk7CiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7CiAgICAgIGlmICghZmlyc3RMaW5lKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTsKICAgICAgfQogICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpOwogICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdOwogICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpOwogICAgICBjb25zdCBoZWFkZXJzID0ge307CiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7CiAgICAgICAgaWYgKCFoZWFkZXIpIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpOwogICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke2hlYWRlcn0iYCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTsKICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkgewogICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRlYnVnJDEoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTsKICAgICAgY2xlYW51cCgpOwogICAgICByZXNvbHZlKHsKICAgICAgICBjb25uZWN0OiB7CiAgICAgICAgICBzdGF0dXNDb2RlLAogICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgfSwKICAgICAgICBidWZmZXJlZCwKICAgICAgfSk7CiAgICB9CgogICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpOwogICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7CgogICAgcmVhZCgpOwogIH0pOwp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDEobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbiQxKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CgpmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50XScsIC4uLmFyZ3MpOwp9CgovKioKICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvCiAqIHRoZSBzcGVjaWZpZWQgIkhUVFAocykgcHJveHkgc2VydmVyIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy4KICoKICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZQogKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsCiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZQogKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLgogKgogKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlCiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAqLwpjbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBBZ2VudCB7CiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9CgogIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgVVJMKHByb3h5KSA6IHByb3h5OwogICAgdGhpcy5wcm94eUhlYWRlcnMgPSBfbnVsbGlzaENvYWxlc2NlJDEoX29wdGlvbmFsQ2hhaW4kMShbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7CiAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpOwoKICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzCiAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csICcnKTsKICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnQgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKSA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODA7CiAgICB0aGlzLmNvbm5lY3RPcHRzID0gewogICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yCiAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSwKICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSwKICAgICAgaG9zdCwKICAgICAgcG9ydCwKICAgIH07CiAgfQoKICAvKioKICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYQogICAqIG5ldyBIVFRQIHJlcXVlc3QuCiAgICovCiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHsKICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7CgogICAgaWYgKCFvcHRzLmhvc3QpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci4KICAgIGxldCBzb2NrZXQ7CiAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0OwogICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7CiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cywKICAgICAgICBzZXJ2ZXJuYW1lOiBzZXJ2ZXJuYW1lICYmIG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpOwogICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTsKICAgIH0KCiAgICBjb25zdCBoZWFkZXJzID0KICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTsKICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0OwogICAgbGV0IHBheWxvYWQgPSBgQ09OTkVDVCAke2hvc3R9OiR7b3B0cy5wb3J0fSBIVFRQLzEuMVxyXG5gOwoKICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuCiAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHsKICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gOwogICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDsKICAgIH0KCiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gOwoKICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJzsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkgewogICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XHJcbmA7CiAgICB9CgogICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTsKCiAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cclxuYCk7CgogICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7CiAgICByZXEuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50CiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlcwogICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpOwoKICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkgewogICAgICByZXEub25jZSgnc29ja2V0JywgcmVzdW1lKTsKCiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7CiAgICAgICAgLy8gVGhlIHByb3h5IGlzIGNvbm5lY3RpbmcgdG8gYSBUTFMgc2VydmVyLCBzbyB1cGdyYWRlCiAgICAgICAgLy8gdGhpcyBzb2NrZXQgY29ubmVjdGlvbiB0byBhIFRMUyBjb25uZWN0aW9uLgogICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7CiAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZSB8fCBvcHRzLmhvc3Q7CiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KHsKICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksCiAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICBzZXJ2ZXJuYW1lOiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFAKICAgIC8vIGhlYWRlciAiZGF0YSIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpcwogICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGUKICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLgoKICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyAiZmFrZSIgc29ja2V0IGlzIHJldHVybmVkCiAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0CiAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlcgogICAgLy8gc2Vuc2l0aXZlIGRhdGEpLgogICAgLy8KICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyCiAgICBzb2NrZXQuZGVzdHJveSgpOwoKICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTsKICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlOwoKICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlICJzb2NrZXQiIGV2ZW50IHRvIHJlLXBsYXkgdGhlICJkYXRhIiBldmVudHMuCiAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHsKICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7CiAgICAgIC8vIFJlcGxheSB0aGUgImJ1ZmZlcmVkIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXQKICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IKICAgICAgLy8gdGhlIHVzZXIuCiAgICAgIHMucHVzaChidWZmZXJlZCk7CiAgICAgIHMucHVzaChudWxsKTsKICAgIH0pOwoKICAgIHJldHVybiBmYWtlU29ja2V0OwogIH0KfSBIdHRwc1Byb3h5QWdlbnQuX19pbml0U3RhdGljKCk7CgpmdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7CiAgc29ja2V0LnJlc3VtZSgpOwp9CgpmdW5jdGlvbiBvbWl0KAogIG9iaiwKICAuLi5rZXlzCikKCiB7CiAgY29uc3QgcmV0ID0ge30KCjsKICBsZXQga2V5OwogIGZvciAoa2V5IGluIG9iaikgewogICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHsKICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9Ci8vIEVzdGltYXRlZCBtYXhpbXVtIHNpemUgZm9yIHJlYXNvbmFibGUgc3RhbmRhbG9uZSBldmVudApjb25zdCBHWklQX1RIUkVTSE9MRCA9IDEwMjQgKiAzMjsKCi8qKgogKiBHZXRzIGEgc3RyZWFtIGZyb20gYSBVaW50OEFycmF5IG9yIHN0cmluZwogKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMAogKi8KZnVuY3Rpb24gc3RyZWFtRnJvbUJvZHkoYm9keSkgewogIHJldHVybiBuZXcgUmVhZGFibGUoewogICAgcmVhZCgpIHsKICAgICAgdGhpcy5wdXNoKGJvZHkpOwogICAgICB0aGlzLnB1c2gobnVsbCk7CiAgICB9LAogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIFRyYW5zcG9ydCB0aGF0IHVzZXMgbmF0aXZlIHRoZSBuYXRpdmUgJ2h0dHAnIGFuZCAnaHR0cHMnIG1vZHVsZXMgdG8gc2VuZCBldmVudHMgdG8gU2VudHJ5LgogKi8KZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykgewogIGxldCB1cmxTZWdtZW50czsKCiAgdHJ5IHsKICAgIHVybFNlZ21lbnRzID0gbmV3IFVSTChvcHRpb25zLnVybCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgJ1tAc2VudHJ5L25vZGVdOiBJbnZhbGlkIGRzbiBvciB0dW5uZWwgb3B0aW9uLCB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMuIFRoZSB0dW5uZWwgb3B0aW9uIG11c3QgYmUgYSBmdWxsIFVSTCB3aGVuIHVzZWQuJywKICAgICAgKTsKICAgIH0pOwogICAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTsKICB9CgogIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CgogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YAogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgY29uc3QgcHJveHkgPSBhcHBseU5vUHJveHlPcHRpb24oCiAgICB1cmxTZWdtZW50cywKICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSwKICApOwoKICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDsKICBjb25zdCBrZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zLmtlZXBBbGl2ZTsKCiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZQogIC8vIHZlcnNpb25zKD49IDgpIGFzIHRoZXkgaGFkIG1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIGl0OiAjMjU1NQogIGNvbnN0IGFnZW50ID0gcHJveHkKICAgID8gKG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHkpICkKICAgIDogbmV3IG5hdGl2ZUh0dHBNb2R1bGUuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pOwoKICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7CiAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpOwp9CgovKioKICogSG9ub3JzIHRoZSBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uCiAqCiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uCiAqIEBwYXJhbSBwcm94eSBUaGUgY2xpZW50IGNvbmZpZ3VyZWQgcHJveHkuCiAqIEByZXR1cm5zIEEgcHJveHkgdGhlIHRyYW5zcG9ydCBzaG91bGQgdXNlLgogKi8KZnVuY3Rpb24gYXBwbHlOb1Byb3h5T3B0aW9uKHRyYW5zcG9ydFVybFNlZ21lbnRzLCBwcm94eSkgewogIGNvbnN0IHsgbm9fcHJveHkgfSA9IHByb2Nlc3MuZW52OwoKICBjb25zdCB1cmxJc0V4ZW1wdEZyb21Qcm94eSA9CiAgICBub19wcm94eSAmJgogICAgbm9fcHJveHkKICAgICAgLnNwbGl0KCcsJykKICAgICAgLnNvbWUoCiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLAogICAgICApOwoKICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBwcm94eTsKICB9Cn0KCi8qKgogKiBDcmVhdGVzIGEgUmVxdWVzdEV4ZWN1dG9yIHRvIGJlIHVzZWQgd2l0aCBgY3JlYXRlVHJhbnNwb3J0YC4KICovCmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RFeGVjdXRvcigKICBvcHRpb25zLAogIGh0dHBNb2R1bGUsCiAgYWdlbnQsCikgewogIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICByZXR1cm4gZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVxdWVzdCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IGJvZHkgPSBzdHJlYW1Gcm9tQm9keShyZXF1ZXN0LmJvZHkpOwoKICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07CgogICAgICBpZiAocmVxdWVzdC5ib2R5Lmxlbmd0aCA+IEdaSVBfVEhSRVNIT0xEKSB7CiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnOwogICAgICAgIGJvZHkgPSBib2R5LnBpcGUoY3JlYXRlR3ppcCgpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYWdlbnQsCiAgICAgICAgICBoZWFkZXJzLAogICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLAogICAgICAgICAgcG9ydCwKICAgICAgICAgIHByb3RvY29sLAogICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cywKICAgICAgICB9LAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7CgogICAgICAgICAgLy8gIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC4iCiAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVycwogICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10sICgpID0+ICggbnVsbCkpOwogICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpOwoKICAgICAgICAgIHJlc29sdmUoewogICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLAogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpOwogICAgICBib2R5LnBpcGUocmVxKTsKICAgIH0pOwogIH07Cn0KCmZ1bmN0aW9uIF9vcHRpb25hbENoYWluKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CmNvbnN0IG9wdGlvbnMgPSB3b3JrZXJEYXRhOwpsZXQgc2Vzc2lvbjsKbGV0IGhhc1NlbnRBbnJFdmVudCA9IGZhbHNlOwoKZnVuY3Rpb24gbG9nKG1zZykgewogIGlmIChvcHRpb25zLmRlYnVnKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgY29uc29sZS5sb2coYFtBTlIgV29ya2VyXSAke21zZ31gKTsKICB9Cn0KCmNvbnN0IHVybCA9IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgob3B0aW9ucy5kc24pOwpjb25zdCB0cmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydCh7CiAgdXJsLAogIHJlY29yZERyb3BwZWRFdmVudDogKCkgPT4gewogICAgLy8KICB9LAp9KTsKCmFzeW5jIGZ1bmN0aW9uIHNlbmRBYm5vcm1hbFNlc3Npb24oKSB7CiAgLy8gb2Ygd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uIHBhc3NlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgc2VuZCBpdCBhcyBhYm5vcm1hbAogIGlmIChzZXNzaW9uKSB7CiAgICBsb2coJ1NlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbicpOwogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCB7IHN0YXR1czogJ2Fibm9ybWFsJywgYWJub3JtYWxfbWVjaGFuaXNtOiAnYW5yX2ZvcmVncm91bmQnIH0pOwoKICAgIGNvbnN0IGVudmVsb3BlID0gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKHNlc3Npb24sIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAgIC8vIExvZyB0aGUgZW52ZWxvcGUgc28gdG8gYWlkIGluIHRlc3RpbmcKICAgIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICAgIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKCiAgICB0cnkgewogICAgICAvLyBOb3RpZnkgdGhlIG1haW4gcHJvY2VzcyB0aGF0IHRoZSBzZXNzaW9uIGhhcyBlbmRlZCBzbyB0aGUgc2Vzc2lvbiBjYW4gYmUgY2xlYXJlZCBmcm9tIHRoZSBzY29wZQogICAgICBfb3B0aW9uYWxDaGFpbihbcGFyZW50UG9ydCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucG9zdE1lc3NhZ2UsICdjYWxsJywgXzMgPT4gXzMoJ3Nlc3Npb24tZW5kZWQnKV0pOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBpZ25vcmUKICAgIH0KICB9Cn0KCmxvZygnU3RhcnRlZCcpOwoKZnVuY3Rpb24gcHJlcGFyZVN0YWNrRnJhbWVzKHN0YWNrRnJhbWVzKSB7CiAgaWYgKCFzdGFja0ZyYW1lcykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIC8vIFN0cmlwIFNlbnRyeSBmcmFtZXMgYW5kIHJldmVyc2UgdGhlIHN0YWNrIGZyYW1lcyBzbyB0aGV5IGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgogIGNvbnN0IHN0cmlwcGVkRnJhbWVzID0gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrRnJhbWVzKTsKCiAgLy8gSWYgd2UgaGF2ZSBhbiBhcHAgcm9vdCBwYXRoLCByZXdyaXRlIHRoZSBmaWxlbmFtZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGFwcCByb290CiAgaWYgKG9wdGlvbnMuYXBwUm9vdFBhdGgpIHsKICAgIGZvciAoY29uc3QgZnJhbWUgb2Ygc3RyaXBwZWRGcmFtZXMpIHsKICAgICAgaWYgKCFmcmFtZS5maWxlbmFtZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmcmFtZS5maWxlbmFtZSA9IG5vcm1hbGl6ZVVybFRvQmFzZShmcmFtZS5maWxlbmFtZSwgb3B0aW9ucy5hcHBSb290UGF0aCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3RyaXBwZWRGcmFtZXM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNlbmRBbnJFdmVudChmcmFtZXMsIHRyYWNlQ29udGV4dCkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogeyAuLi5vcHRpb25zLmNvbnRleHRzLCB0cmFjZTogdHJhY2VDb250ZXh0IH0sCiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsCiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCwKICAgIGRpc3Q6IG9wdGlvbnMuZGlzdCwKICAgIHBsYXRmb3JtOiAnbm9kZScsCiAgICBsZXZlbDogJ2Vycm9yJywKICAgIGV4Y2VwdGlvbjogewogICAgICB2YWx1ZXM6IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAnQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nJywKICAgICAgICAgIHZhbHVlOiBgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7b3B0aW9ucy5hbnJUaHJlc2hvbGR9IG1zYCwKICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzOiBwcmVwYXJlU3RhY2tGcmFtZXMoZnJhbWVzKSB9LAogICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBVSSBkb2Vzbid0IHNheSAnQ3Jhc2hlZCBpbicgZm9yIHRoZSBzdGFjayB0cmFjZQogICAgICAgICAgbWVjaGFuaXNtOiB7IHR5cGU6ICdBTlInIH0sCiAgICAgICAgfSwKICAgICAgXSwKICAgIH0sCiAgICB0YWdzOiBvcHRpb25zLnN0YXRpY1RhZ3MsCiAgfTsKCiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCBvcHRpb25zLmRzbiwgb3B0aW9ucy5zZGtNZXRhZGF0YSk7CiAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICBhd2FpdCB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7CiAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKDIwMDApOwoKICAvLyBEZWxheSBmb3IgNSBzZWNvbmRzIHNvIHRoYXQgc3RkaW8gY2FuIGZsdXNoIGluIHRoZSBtYWluIGV2ZW50IGxvb3AgZXZlciByZXN0YXJ0cy4KICAvLyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbG9nZ2luZy9kZWJ1Z2dpbmcgaXNzdWVzLgogIHNldFRpbWVvdXQoKCkgPT4gewogICAgcHJvY2Vzcy5leGl0KDApOwogIH0sIDUwMDApOwp9CgpsZXQgZGVidWdnZXJQYXVzZTsKCmlmIChvcHRpb25zLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgbG9nKCdDb25uZWN0aW5nIHRvIGRlYnVnZ2VyJyk7CgogIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpIDsKICBzZXNzaW9uLmNvbm5lY3RUb01haW5UaHJlYWQoKTsKCiAgbG9nKCdDb25uZWN0ZWQgdG8gZGVidWdnZXInKTsKCiAgLy8gQ29sbGVjdCBzY3JpcHRJZCAtPiB1cmwgbWFwIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWxlbmFtZXMgbGF0ZXIKICBjb25zdCBzY3JpcHRzID0gbmV3IE1hcCgpOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBldmVudCA9PiB7CiAgICBzY3JpcHRzLnNldChldmVudC5wYXJhbXMuc2NyaXB0SWQsIGV2ZW50LnBhcmFtcy51cmwpOwogIH0pOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7CiAgICBpZiAoZXZlbnQucGFyYW1zLnJlYXNvbiAhPT0gJ290aGVyJykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdHJ5IHsKICAgICAgbG9nKCdEZWJ1Z2dlciBwYXVzZWQnKTsKCiAgICAgIC8vIGNvcHkgdGhlIGZyYW1lcwogICAgICBjb25zdCBjYWxsRnJhbWVzID0gWy4uLmV2ZW50LnBhcmFtcy5jYWxsRnJhbWVzXTsKCiAgICAgIGNvbnN0IGdldE1vZHVsZU5hbWUgPSBvcHRpb25zLmFwcFJvb3RQYXRoID8gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKG9wdGlvbnMuYXBwUm9vdFBhdGgpIDogKCkgPT4gdW5kZWZpbmVkOwogICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGNhbGxGcmFtZXMubWFwKGZyYW1lID0+CiAgICAgICAgY2FsbEZyYW1lVG9TdGFja0ZyYW1lKGZyYW1lLCBzY3JpcHRzLmdldChmcmFtZS5sb2NhdGlvbi5zY3JpcHRJZCksIGdldE1vZHVsZU5hbWUpLAogICAgICApOwoKICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgaW4gdGhlIGN1cnJlbnRseSBwYXVzZWQgY29udGV4dAogICAgICBzZXNzaW9uLnBvc3QoCiAgICAgICAgJ1J1bnRpbWUuZXZhbHVhdGUnLAogICAgICAgIHsKICAgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudCBzY29wZQogICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgJ2NvbnN0IGN0eCA9IF9fU0VOVFJZX18uaHViLmdldFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7IGN0eC50cmFjZUlkICsgIi0iICsgY3R4LnNwYW5JZCArICItIiArIGN0eC5wYXJlbnRTcGFuSWQnLAogICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciB0aGUgZGVidWdnZXIgaWYgdGhpcyBjYXVzZXMgYW4gZXJyb3IKICAgICAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIChfLCBwYXJhbSkgPT4gewogICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcmFtICYmIHBhcmFtLnJlc3VsdCA/IChwYXJhbS5yZXN1bHQudmFsdWUgKSA6ICctLSc7CiAgICAgICAgICBjb25zdCBbdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkXSA9IHRyYWNlSWQuc3BsaXQoJy0nKSA7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBfb3B0aW9uYWxDaGFpbihbdHJhY2VfaWQsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80Lmxlbmd0aF0pICYmIF9vcHRpb25hbENoYWluKFtzcGFuX2lkLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5sZW5ndGhdKSA/IHsgdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkIH0gOiB1bmRlZmluZWQ7CiAgICAgICAgICBzZW5kQW5yRXZlbnQoc3RhY2tGcmFtZXMsIGNvbnRleHQpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZC4nKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwogICAgICB0aHJvdyBlOwogICAgfQogIH0pOwoKICBkZWJ1Z2dlclBhdXNlID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5lbmFibGUnLCAoKSA9PiB7CiAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5wYXVzZScpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBjcmVhdGVIclRpbWVyKCkgewogIC8vIFRPRE8gKHY4KTogV2UgY2FuIHVzZSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSBhZnRlciB3ZSBkcm9wIG5vZGUgdjgKICBsZXQgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwoKICByZXR1cm4gewogICAgZ2V0VGltZU1zOiAoKSA9PiB7CiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vU2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShsYXN0UG9sbCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNlY29uZHMgKiAxZTMgKyBuYW5vU2Vjb25kcyAvIDFlNik7CiAgICB9LAogICAgcmVzZXQ6ICgpID0+IHsKICAgICAgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVvdXQoKSB7CiAgbG9nKCdXYXRjaGRvZyB0aW1lb3V0Jyk7CgogIGlmIChkZWJ1Z2dlclBhdXNlKSB7CiAgICBsb2coJ1BhdXNpbmcgZGVidWdnZXIgdG8gY2FwdHVyZSBzdGFjayB0cmFjZScpOwogICAgZGVidWdnZXJQYXVzZSgpOwogIH0gZWxzZSB7CiAgICBsb2coJ0NhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UnKTsKICAgIHNlbmRBbnJFdmVudCgpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LicpOwogICAgfSk7CiAgfQp9Cgpjb25zdCB7IHBvbGwgfSA9IHdhdGNoZG9nVGltZXIoY3JlYXRlSHJUaW1lciwgb3B0aW9ucy5wb2xsSW50ZXJ2YWwsIG9wdGlvbnMuYW5yVGhyZXNob2xkLCB3YXRjaGRvZ1RpbWVvdXQpOwoKX29wdGlvbmFsQ2hhaW4oW3BhcmVudFBvcnQsICdvcHRpb25hbEFjY2VzcycsIF82ID0+IF82Lm9uLCAnY2FsbCcsIF83ID0+IF83KCdtZXNzYWdlJywgKG1zZykgPT4gewogIGlmIChtc2cuc2Vzc2lvbikgewogICAgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKG1zZy5zZXNzaW9uKTsKICB9CgogIHBvbGwoKTsKfSldKTs="});var GS=y((OS,bce)=>{c();var{_optionalChain:Hht,_optionalChainDelete:gce}=ge();Object.defineProperty(OS,"__esModule",{value:!0});var Mht=require("url"),kS=St(),VL=ge(),DL=lp(),Uht=mce(),jht=50,Xht=5e3;function qL(e,...t){VL.logger.log(`[ANR] ${e}`,...t)}function Yht(){return VL.dynamicRequire(bce,"worker_threads")}async function Kht(e){let t={message:"ANR"},r={};for(let n of e.getEventProcessors()){if(t===null)break;t=await n(t,r)}return Hht([t,"optionalAccess",n=>n.contexts])||{}}var yce="Anr",zht=(e={})=>({name:yce,setupOnce(){},setup(t){if(DL.NODE_VERSION.major<16||DL.NODE_VERSION.major===16&&DL.NODE_VERSION.minor<17)throw new Error("ANR detection requires Node 16.17.0 or later");setImmediate(()=>$ht(t,e))}}),vce=kS.defineIntegration(zht),Jht=kS.convertIntegrationFnToClass(yce,vce);async function $ht(e,t){let r=await Kht(e),n=e.getDsn();if(!n)return;gce([r,"access",d=>d.app,"optionalAccess",d=>delete d.app_memory]),gce([r,"access",d=>d.device,"optionalAccess",d=>delete d.free_memory]);let i=e.getOptions(),s=e.getSdkMetadata()||{};s.sdk&&(s.sdk.integrations=i.integrations.map(d=>d.name));let o={debug:VL.logger.isEnabled(),dsn:n,environment:i.environment||"production",release:i.release,dist:i.dist,sdkMetadata:s,appRootPath:t.appRootPath,pollInterval:t.pollInterval||jht,anrThreshold:t.anrThreshold||Xht,captureStackTrace:!!t.captureStackTrace,staticTags:t.staticTags||{},contexts:r};if(o.captureStackTrace){let d=require("inspector");d.url()||d.open(0)}let{Worker:a}=Yht(),u=new a(new Mht.URL(`data:application/javascript;base64,${Uht.base64WorkerScript}`),{workerData:o});process.on("exit",()=>{u.terminate()});let p=setInterval(()=>{try{let d=kS.getCurrentScope().getSession(),h=d?{...d,toJSON:void 0}:void 0;u.postMessage({session:h})}catch{}},o.pollInterval);p.unref(),u.on("message",d=>{d==="session-ended"&&(qL("ANR event sent from ANR worker. Clearing session in this thread."),kS.getCurrentScope().setSession(void 0))}),u.once("error",d=>{clearInterval(p),qL("ANR worker error",d)}),u.once("exit",d=>{clearInterval(p),qL("ANR worker exit",d)}),u.unref()}OS.Anr=Jht;OS.anrIntegration=vce});var Ice=y(HL=>{c();Object.defineProperty(HL,"__esModule",{value:!0});var Qht=St(),emt=GS();function tmt(e){let t=Qht.getClient();return new emt.Anr(e).setup(t),Promise.resolve()}HL.enableAnrDetection=tmt});var Cce=y(FS=>{c();Object.defineProperty(FS,"__esModule",{value:!0});var _ce=ge();function rmt(e,t){return _ce.extractRequestData(e,{include:t})}function nmt(e,t,r={}){return _ce.addRequestDataToEvent(e,t,{include:r})}FS.extractRequestData=rmt;FS.parseRequest=nmt});var Sce=y(Au=>{c();var{_optionalChain:ih}=ge();Object.defineProperty(Au,"__esModule",{value:!0});var pr=St(),Eu=ge(),imt=Wy(),LS=ZL(),xce=Cce();function smt(){return function(t,r,n){let i=ih([pr.getClient,"call",d=>d(),"optionalAccess",d=>d.getOptions,"call",d=>d()]);if(!i||i.instrumenter!=="sentry"||ih([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="OPTIONS"||ih([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="HEAD")return n();let s=t.headers&&Eu.isString(t.headers["sentry-trace"])?t.headers["sentry-trace"]:void 0,o=ih([t,"access",d=>d.headers,"optionalAccess",d=>d.baggage]);if(!pr.hasTracingEnabled(i))return n();let[a,u]=Eu.extractPathForTransaction(t,{path:!0,method:!0}),p=pr.continueTrace({sentryTrace:s,baggage:o},d=>pr.startTransaction({name:a,op:"http.server",origin:"auto.http.node.tracingHandler",...d,data:{[pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:u},metadata:{...d.metadata,request:t}},{request:Eu.extractRequestData(t)}));pr.getCurrentScope().setSpan(p),r.__sentry_transaction=p,r.once("finish",()=>{setImmediate(()=>{Eu.addRequestDataToTransaction(p,t),pr.setHttpStatus(p,r.statusCode),p.end()})}),n()}}function omt(e={}){let t;if("include"in e)t={include:e.include};else{let{ip:r,request:n,transaction:i,user:s}=e;(r||n||i||s)&&(t={include:Eu.dropUndefinedKeys({ip:r,request:n,transaction:i,user:s})})}return t}function amt(e){let t=omt(e),r=pr.getClient();if(r&&LS.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();let n=pr.getCurrentScope();n.getSession()&&n.setSession()}return function(i,s,o){if(e&&e.flushTimeout&&e.flushTimeout>0){let a=s.end;s.end=function(u,p,d){pr.flush(e.flushTimeout).then(()=>{a.call(this,u,p,d)}).then(null,h=>{imt.DEBUG_BUILD&&Eu.logger.error(h),a.call(this,u,p,d)})}}pr.runWithAsyncContext(()=>{let a=pr.getCurrentScope();a.setSDKProcessingMetadata({request:i,requestDataOptionsFromExpressHandler:t});let u=pr.getClient();LS.isAutoSessionTrackingEnabled(u)&&a.setRequestSession({status:"ok"}),s.once("finish",()=>{let p=pr.getClient();LS.isAutoSessionTrackingEnabled(p)&&setImmediate(()=>{p&&p._captureRequestSession&&p._captureRequestSession()})}),o()})}}function cmt(e){let t=e.status||e.statusCode||e.status_code||e.output&&e.output.statusCode;return t?parseInt(t,10):500}function umt(e){return cmt(e)>=500}function lmt(e){return function(r,n,i,s){if((e&&e.shouldHandleError||umt)(r)){pr.withScope(a=>{a.setSDKProcessingMetadata({request:n});let u=i.__sentry_transaction;u&&!pr.getActiveSpan()&&a.setSpan(u);let p=pr.getClient();if(p&&LS.isAutoSessionTrackingEnabled(p)&&p._sessionFlusher!==void 0){let m=a.getRequestSession();m&&m.status!==void 0&&(m.status="crashed")}let d=pr.captureException(r,{mechanism:{type:"middleware",handled:!1}});i.sentry=d,s(r)});return}s(r)}}function pmt(e={}){return function({path:t,type:r,next:n,rawInput:i}){let s=ih([pr.getClient,"call",p=>p(),"optionalAccess",p=>p.getOptions,"call",p=>p()]),o=pr.getCurrentScope().getTransaction();if(o){o.updateName(`trpc/${t}`),o.setAttribute(pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),o.op="rpc.server";let p={procedure_type:r};(e.attachRpcInput!==void 0?e.attachRpcInput:ih([s,"optionalAccess",d=>d.sendDefaultPii]))&&(p.input=Eu.normalize(i)),o.setContext("trpc",p)}function a(p){p.ok||pr.captureException(p.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}let u;try{u=n()}catch(p){throw pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),p}return Eu.isThenable(u)?Promise.resolve(u).then(p=>{a(p)},p=>{pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}):a(u),u}}Au.extractRequestData=xce.extractRequestData;Au.parseRequest=xce.parseRequest;Au.errorHandler=lmt;Au.requestHandler=amt;Au.tracingHandler=smt;Au.trpcMiddleware=pmt});var ML=y(sh=>{c();Object.defineProperty(sh,"__esModule",{value:!0});var Bi=St(),Ace=ge();function wce(e){return e&&e.statusCode!==void 0}function dmt(e){return e&&e.isBoom!==void 0}function fmt(e){return e&&e.error!==void 0}function Ece(e){Bi.captureException(e,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}var Rce={name:"SentryHapiErrorPlugin",version:Bi.SDK_VERSION,register:async function(e){e.events.on("request",(r,n)=>{let i=Bi.getActiveTransaction();r.response&&dmt(r.response)?Ece(r.response):fmt(n)&&Ece(n.error),i&&(i.setStatus("internal_error"),i.end())})}},Tce={name:"SentryHapiTracingPlugin",version:Bi.SDK_VERSION,register:async function(e){let t=e;t.ext("onPreHandler",(r,n)=>{let i=Bi.continueTrace({sentryTrace:r.headers["sentry-trace"]||void 0,baggage:r.headers.baggage||void 0},s=>Bi.startTransaction({...s,op:"hapi.request",name:r.route.path,description:`${r.route.method} ${r.path}`}));return Bi.getCurrentScope().setSpan(i),n.continue}),t.ext("onPreResponse",(r,n)=>{let i=Bi.getActiveTransaction();if(r.response&&wce(r.response)&&i){let s=r.response;s.header("sentry-trace",Bi.spanToTraceHeader(i));let o=Ace.dynamicSamplingContextToSentryBaggageHeader(Bi.getDynamicSamplingContextFromSpan(i));o&&s.header("baggage",o)}return n.continue}),t.ext("onPostHandler",(r,n)=>{let i=Bi.getActiveTransaction();return i&&(r.response&&wce(r.response)&&Bi.setHttpStatus(i,r.response.statusCode),i.end()),n.continue})}},Nce="Hapi",hmt=(e={})=>{let t=e.server;return{name:Nce,setupOnce(){t&&Ace.fill(t,"start",r=>async function(){return await this.register(Tce),await this.register(Rce),r.apply(this)})}}},Bce=Bi.defineIntegration(hmt),mmt=Bi.convertIntegrationFnToClass(Nce,Bce);sh.Hapi=mmt;sh.hapiErrorPlugin=Rce;sh.hapiIntegration=Bce;sh.hapiTracingPlugin=Tce});var kce=y(ui=>{c();Object.defineProperty(ui,"__esModule",{value:!0});var gmt=pS(),ymt=gS(),vmt=wS(),bmt=AS(),Imt=CS(),_mt=mS(),Cmt=dS(),xmt=St(),Smt=IS(),wmt=NS(),Emt=RS(),Amt=GS(),Rmt=ML();ui.Console=gmt.Console;ui.Http=ymt.Http;ui.OnUncaughtException=vmt.OnUncaughtException;ui.OnUnhandledRejection=bmt.OnUnhandledRejection;ui.Modules=Imt.Modules;ui.ContextLines=_mt.ContextLines;ui.Context=Cmt.Context;ui.RequestData=xmt.RequestData;ui.LocalVariables=Smt.LocalVariables;ui.Undici=wmt.Undici;ui.Spotlight=Emt.Spotlight;ui.Anr=Amt.Anr;ui.Hapi=Rmt.Hapi});var Oce=y(lc=>{c();Object.defineProperty(lc,"__esModule",{value:!0});var vp=sL();lc.Apollo=vp.Apollo;lc.Express=vp.Express;lc.GraphQL=vp.GraphQL;lc.Mongo=vp.Mongo;lc.Mysql=vp.Mysql;lc.Postgres=vp.Postgres;lc.Prisma=vp.Prisma});var ZS=y(UL=>{c();Object.defineProperty(UL,"__esModule",{value:!0});var Tmt=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function Nmt(e){return Tmt.reduce((t,[r,n])=>t.replace(new RegExp(r,"gi"),n),e)}UL.replaceCronNames=Nmt});var Zce=y(jL=>{c();Object.defineProperty(jL,"__esModule",{value:!0});var Gce=St(),Fce=ZS(),Lce="Automatic instrumentation of CronJob only supports crontab string";function Bmt(e,t){let r=!1;return new Proxy(e,{construct(n,i){let[s,o,a,u,p,...d]=i;if(typeof s!="string")throw new Error(Lce);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let h=Fce.replaceCronNames(s);function m(g,v){return Gce.withMonitor(t,()=>o(g,v),{schedule:{type:"crontab",value:h},...p?{timeZone:p}:{}})}return new n(s,m,a,u,p,...d)},get(n,i){return i==="from"?s=>{let{cronTime:o,onTick:a,timeZone:u}=s;if(typeof o!="string")throw new Error(Lce);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let p=Fce.replaceCronNames(o);return s.onTick=(d,h)=>Gce.withMonitor(t,()=>a(d,h),{schedule:{type:"crontab",value:p},...u?{timeZone:u}:{}}),n.from(s)}:n[i]}})}jL.instrumentCron=Bmt});var Pce=y(XL=>{c();var{_optionalChain:Wce}=ge();Object.defineProperty(XL,"__esModule",{value:!0});var kmt=St(),Omt=ZS();function Gmt(e){return new Proxy(e,{get(t,r){return r==="schedule"&&t.schedule?new Proxy(t.schedule,{apply(n,i,s){let[o,,a]=s;if(!Wce([a,"optionalAccess",u=>u.name]))throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return kmt.withMonitor(a.name,()=>n.apply(i,s),{schedule:{type:"crontab",value:Omt.replaceCronNames(o)},timezone:Wce([a,"optionalAccess",u=>u.timezone])})}}):t[r]}})}XL.instrumentNodeCron=Gmt});var Dce=y(YL=>{c();Object.defineProperty(YL,"__esModule",{value:!0});var Fmt=St(),Lmt=ZS();function Zmt(e){return new Proxy(e,{get(t,r){return r==="scheduleJob"?new Proxy(t.scheduleJob,{apply(n,i,s){let[o,a]=s;if(typeof o!="string"||typeof a!="string")throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");let u=o,p=a;return Fmt.withMonitor(u,()=>n.apply(i,s),{schedule:{type:"crontab",value:Lmt.replaceCronNames(p)}})}}):t[r]}})}YL.instrumentNodeSchedule=Zmt});var Uce=y(ve=>{c();Object.defineProperty(ve,"__esModule",{value:!0});var Fe=St(),Wmt=eae(),Pmt=uL(),Dmt=gL(),Uy=ZL(),KL=ge(),qmt=fce(),qce=LL(),Vmt=Ice(),Hmt=Sce(),Mmt=kce(),Umt=Oce(),jmt=pS(),Xmt=wS(),Ymt=AS(),Kmt=CS(),zmt=mS(),Jmt=dS(),$mt=IS(),Qmt=RS(),egt=GS(),Vce=ML(),Hce=NS(),Mce=gS(),tgt=Zce(),rgt=Pce(),ngt=Dce(),igt=qce.createGetModuleFromFilename(),sgt={...Fe.Integrations,...Mmt,...Umt},ogt={instrumentCron:tgt.instrumentCron,instrumentNodeCron:rgt.instrumentNodeCron,instrumentNodeSchedule:ngt.instrumentNodeSchedule};ve.Hub=Fe.Hub;ve.SDK_VERSION=Fe.SDK_VERSION;ve.SEMANTIC_ATTRIBUTE_SENTRY_OP=Fe.SEMANTIC_ATTRIBUTE_SENTRY_OP;ve.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=Fe.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN;ve.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE;ve.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE;ve.Scope=Fe.Scope;ve.addBreadcrumb=Fe.addBreadcrumb;ve.addEventProcessor=Fe.addEventProcessor;ve.addGlobalEventProcessor=Fe.addGlobalEventProcessor;ve.addIntegration=Fe.addIntegration;ve.captureCheckIn=Fe.captureCheckIn;ve.captureEvent=Fe.captureEvent;ve.captureException=Fe.captureException;ve.captureMessage=Fe.captureMessage;ve.captureSession=Fe.captureSession;ve.close=Fe.close;ve.configureScope=Fe.configureScope;ve.continueTrace=Fe.continueTrace;ve.createTransport=Fe.createTransport;ve.endSession=Fe.endSession;ve.extractTraceparentData=Fe.extractTraceparentData;ve.flush=Fe.flush;ve.functionToStringIntegration=Fe.functionToStringIntegration;ve.getActiveSpan=Fe.getActiveSpan;ve.getActiveTransaction=Fe.getActiveTransaction;ve.getClient=Fe.getClient;ve.getCurrentHub=Fe.getCurrentHub;ve.getCurrentScope=Fe.getCurrentScope;ve.getGlobalScope=Fe.getGlobalScope;ve.getHubFromCarrier=Fe.getHubFromCarrier;ve.getIsolationScope=Fe.getIsolationScope;ve.getSpanStatusFromHttpCode=Fe.getSpanStatusFromHttpCode;ve.inboundFiltersIntegration=Fe.inboundFiltersIntegration;ve.isInitialized=Fe.isInitialized;ve.lastEventId=Fe.lastEventId;ve.linkedErrorsIntegration=Fe.linkedErrorsIntegration;ve.makeMain=Fe.makeMain;ve.metrics=Fe.metrics;ve.parameterize=Fe.parameterize;ve.requestDataIntegration=Fe.requestDataIntegration;ve.runWithAsyncContext=Fe.runWithAsyncContext;ve.setContext=Fe.setContext;ve.setCurrentClient=Fe.setCurrentClient;ve.setExtra=Fe.setExtra;ve.setExtras=Fe.setExtras;ve.setHttpStatus=Fe.setHttpStatus;ve.setMeasurement=Fe.setMeasurement;ve.setTag=Fe.setTag;ve.setTags=Fe.setTags;ve.setUser=Fe.setUser;ve.spanStatusfromHttpCode=Fe.spanStatusfromHttpCode;ve.startActiveSpan=Fe.startActiveSpan;ve.startInactiveSpan=Fe.startInactiveSpan;ve.startSession=Fe.startSession;ve.startSpan=Fe.startSpan;ve.startSpanManual=Fe.startSpanManual;ve.startTransaction=Fe.startTransaction;ve.trace=Fe.trace;ve.withActiveSpan=Fe.withActiveSpan;ve.withIsolationScope=Fe.withIsolationScope;ve.withMonitor=Fe.withMonitor;ve.withScope=Fe.withScope;ve.autoDiscoverNodePerformanceMonitoringIntegrations=Wmt.autoDiscoverNodePerformanceMonitoringIntegrations;ve.NodeClient=Pmt.NodeClient;ve.makeNodeTransport=Dmt.makeNodeTransport;ve.defaultIntegrations=Uy.defaultIntegrations;ve.defaultStackParser=Uy.defaultStackParser;ve.getDefaultIntegrations=Uy.getDefaultIntegrations;ve.getSentryRelease=Uy.getSentryRelease;ve.init=Uy.init;ve.DEFAULT_USER_INCLUDES=KL.DEFAULT_USER_INCLUDES;ve.addRequestDataToEvent=KL.addRequestDataToEvent;ve.extractRequestData=KL.extractRequestData;ve.deepReadDirSync=qmt.deepReadDirSync;ve.createGetModuleFromFilename=qce.createGetModuleFromFilename;ve.enableAnrDetection=Vmt.enableAnrDetection;ve.Handlers=Hmt;ve.consoleIntegration=jmt.consoleIntegration;ve.onUncaughtExceptionIntegration=Xmt.onUncaughtExceptionIntegration;ve.onUnhandledRejectionIntegration=Ymt.onUnhandledRejectionIntegration;ve.modulesIntegration=Kmt.modulesIntegration;ve.contextLinesIntegration=zmt.contextLinesIntegration;ve.nodeContextIntegration=Jmt.nodeContextIntegration;ve.localVariablesIntegration=$mt.localVariablesIntegration;ve.spotlightIntegration=Qmt.spotlightIntegration;ve.anrIntegration=egt.anrIntegration;ve.hapiErrorPlugin=Vce.hapiErrorPlugin;ve.hapiIntegration=Vce.hapiIntegration;ve.Undici=Hce.Undici;ve.nativeNodeFetchintegration=Hce.nativeNodeFetchintegration;ve.Http=Mce.Http;ve.httpIntegration=Mce.httpIntegration;ve.Integrations=sgt;ve.cron=ogt;ve.getModuleFromFilename=igt});var oh=y((Oar,agt)=>{agt.exports={name:"@ampt/cli",version:"1.1.17",description:"Ampt command line interface",main:"./dist/index.js",types:"./types/index.d.ts",engines:{node:">=16.0.0 <21.0.0"},publishConfig:{access:"public"},bin:{ampt:"./bin/bin"},scripts:{prepublishOnly:"npm run build",build:"node esbuild.mjs",watch:"node esbuild.mjs --watch",test:'LOG_LEVEL=silent AWS_REGION=us-east-1 NODE_OPTIONS="--no-warnings --experimental-vm-modules" jest',eslint:"eslint .",prettier:"prettier --check .",typecheck:"tsc -b ."},author:"Ampt Inc <hello@getampt.com>",license:"Apache-2.0",optionalDependencies:{fsevents:"~2.3.2"},babel:{presets:["@babel/preset-typescript"]},devDependencies:{"@astrojs/webapi":"^1.1.1","@sentry/esbuild-plugin":"^2.16.0","@sentry/node":"^7.107.0","@types/express":"^4.17.13","@types/http-proxy":"^1.17.8","@types/write-file-atomic":"^4.0.0","@types/ws":"^8.5.3","adm-zip":"^0.5.5","ansi-escapes":"^4.3.1",axios:"^1.6.5","axios-retry":"^4.0.0",chalk:"^4.1.0","child-process-ext":"^2.1.1",chokidar:"^3.5.0",chunk:"^0.0.3",dayjs:"^1.10.4",debounce:"^1.2.1",del:"^6.0.0",figures:"^3.2.0","fs-extra":"^9.0.1","get-port":"^5.0.0","git-list-updated":"^1.2.1","github-release-from-cc-changelog":"^2.2.0","http-proxy":"^1.18.1",ignore:"^5.2.0","is-git-url":"^1.0.0","is-installed-globally":"^0.4.0","it-parallel":"^2.0.1","jwt-decode":"^3.1.2",keypress:"^0.2.1","lz4-wasm-nodejs":"^0.9.2",minimist:"^1.2.5","node-emoji":"^1.10.0","node-resolve":"^1.3.4","normalize-path":"^3.0.0",open:"^8.2.0","parse-packagejson-name":"^1.0.1",pluralize:"^8.0.0",ramda:"^0.27.2",semver:"^5.7.1","strip-ansi":"^6.0.0",terminate:"^2.5.0","tree-kill":"^1.2.2",ulid:"^2.3.0",which:"^2.0.2","write-file-atomic":"^4.0.2"},dependencies:{esbuild:"^0.19.5",joycon:"^3.1.1",pirates:"^4.0.6","source-map-support":"^0.5.21","tsconfig-paths":"^4.2.0"}}});var jce,An,cgt,ugt,jy,zL,Wt,ua=ae(()=>{"use strict";c();jce=Ce(Dte()),An=Ce(Uce());dr();ah();({version:cgt}=oh()),ugt=()=>{var e;return(process.env.AMPT_STAGE==="prod"||((e=process.env.AMPT_ENDPOINT)==null?void 0:e.endsWith("ampt.dev")))&&!process.env.JEST_WORKER_ID};ugt()&&An.init({release:cgt,dsn:"https://5f27cbf3265a475abff6b7999ae73179@o1265020.ingest.us.sentry.io/6448443",tracesSampleRate:.5});zL=class{constructor(){Cr(this,"orgName");Cr(this,"user");Cr(this,"config");Im(this,jy,(0,jce.ulid)());Cr(this,"auth");Cr(this,"captureException",t=>{ca.error({err:t},"captureException"),An==null||An.captureException(t)})}getSessionId(){return Ro(this,jy)}loadAmptConfig(){this.config=JL(),ca.debug({config:this.config},"loadAmptConfig")}getLoggedInUser(){var t;if(this.config||this.loadAmptConfig(),this.config&&((t=this.config)!=null&&t.userId)){let{sessions:r}=this.config,n=r==null?void 0:r[this.config.userId];if(n!=null&&n.accessToken&&(this.auth={accessToken:n.accessToken}),n&&n.username&&n.refreshToken)return{userId:this.config.userId,username:n.username,name:n.name,email:n.email,expiresAt:n.expiresAt,refreshToken:n.refreshToken,accessToken:n.accessToken}}return null}saveConfig(t){this.config={...this.config,...t},$L(this.config)}updateLogin(t){if(this.config){let r=this.getLoggedInUser();if(r&&r.userId){let n=Date.now()+t.expiresIn*1e3,{userId:i,username:s,name:o,email:a,refreshToken:u}=r;this.saveConfig({userId:i,sessions:{[i]:{userId:i,username:s,name:o,email:a,refreshToken:u,accessToken:t.accessToken,expiresAt:n}}})}}}storeToken(t,r){this.auth={accessToken:t},this.updateLogin({accessToken:t,expiresIn:r})}writeUpdateCheck(){let t=Math.round(Date.now()/1e3);this.config&&this.saveConfig({...this.config,meta:{...this.config.meta,last_update_check:t}})}shouldCheckForCliUpdate(){var t;if(this.config){let r=(t=this.config.meta)==null?void 0:t.last_update_check,n=Math.round(Date.now()/1e3);return!r||n-r>60*60*24}return!0}setUser(t){this.user=t,An==null||An.setUser({userId:t.userId,username:t.username,email:t.email,fullName:t.name,userAgeDays:t.userAgeDays,auth0Id:t.auth0Id})}onLogin(t,r){if(t){let{refreshToken:n,accessToken:i,expiresIn:s}=r,o=Date.now()+s*1e3;this.saveConfig({userId:t.userId,meta:{created_at:Math.round(Date.now()/1e3)},sessions:{[t.userId]:{userId:t.userId,username:t.username,name:t.name,email:t.email,refreshToken:n,accessToken:i,expiresAt:o}}}),ca.debug({userName:t.username},"saved config file"),this.setUser(t),ca.debug({userName:t.username},"set user in session")}}shouldPromptTutorial(){var t,r,n,i,s,o,a,u,p;if((t=this.user)!=null&&t.preferences){let d=((n=(r=this.user)==null?void 0:r.preferences)==null?void 0:n.connectedCount)>=3,h=((i=this.user)==null?void 0:i.userAgeDays)&&((s=this.user)==null?void 0:s.userAgeDays)>30;return{showTutorial:((a=(o=this.user)==null?void 0:o.preferences)==null?void 0:a.showTutorial)===void 0?!0:(p=(u=this.user)==null?void 0:u.preferences)==null?void 0:p.showTutorial,allowDismiss:h?!0:d}}return{showTutorial:!1,allowDismiss:!1}}setSentryContext(t){let r={...t,sessionId:Ro(this,jy)};An==null||An.setTags(r),An==null||An.setContext("cli-session",r)}async flushSentry(){return An==null?void 0:An.flush()}};jy=new WeakMap;Wt=new zL});var WS,PS,Ru,QL,Ae,ca,ah=ae(()=>{"use strict";c();WS=Ce(Wte()),PS=Ce(require("path")),Ru=Ce(yl());ua();QL=class{logger;enabled;logFilePath;logToConsole;pinoArgs;pinoDestination;initLogDestination(){try{(0,Ru.removeSync)(this.logFilePath)}catch(t){process.env.AMPT_DEBUG&&console.error("Error removing log file: ",t)}finally{if(this.enabled)try{(0,Ru.ensureFileSync)(this.logFilePath)}catch{this.enabled=!1}}this.pinoDestination=this.enabled&&!this.logToConsole?WS.default.destination({dest:this.logFilePath,sync:process.platform!=="win32"}):void 0}constructor(){this.enabled=!process.env.AMPT_DISABLE_LOGS,this.logFilePath=process.env.AMPT_LOG_DIR||PS.default.join(process.cwd(),".ampt","logs"),this.logToConsole=process.env.AMPT_LOG_TO_CONSOLE==="true",this.initLogDestination(),this.pinoArgs={enabled:this.enabled,level:process.env.AMPT_LOG_LEVEL||"info",mixin:()=>({sessionId:Wt.getSessionId()}),redact:{remove:!0,paths:["credentials","accessKey","token","idToken","refreshToken","accessToken"]}},this.logger=(0,WS.default)(this.pinoArgs,this.pinoDestination)}disable(){this.enabled=!1}enable(){this.enabled=!0;let t=PS.default.join(process.cwd(),".ampt");this.logFilePath=process.env.AMPT_LOG_DIR||PS.default.join(t,"logs"),(0,Ru.existsSync)(t)||(0,Ru.mkdirSync)(t),this.initLogDestination(),this.pinoArgs={...this.pinoArgs,enabled:this.enabled},this.logger=(0,WS.default)(this.pinoArgs,this.pinoDestination)}child(t){return this.logger.child(t)}debug(...t){this.enabled&&this.logger.debug(...t)}warn(...t){this.enabled&&this.logger.warn(...t)}error(...t){this.enabled&&this.logger.error(...t)}info(...t){this.enabled&&this.logger.info(...t)}fatal(...t){this.enabled&&this.logger.fatal(...t)}trace(...t){this.enabled&&this.logger.trace(...t)}},Ae=new QL,ca=Ae});var Yce,Xce,lgt,eZ,tZ,$e,Kar,rZ=ae(()=>{"use strict";c();Yce=Ce(require("https"));Z0();A7();ah();ua();({version:Xce}=oh()),lgt=new Yce.default.Agent({keepAlive:!0}),eZ=class e{axios;static config(){return{apiEndpoint:process.env.AMPT_ENDPOINT,apiKey:process.env.AMPT_API_KEY}}constructor(){this.axios=Wo.create({httpsAgent:lgt}),W0(this.axios,{retries:10,retryDelay:W0.exponentialDelay,retryCondition:t=>{var s;let r=t.response&&t.response.status||"unknown",n=t.response&&t.response.data&&t.response.data.message||"unknown",i=W0.isNetworkOrIdempotentRequestError(t)&&r!==500||r===429||r===503;return i&&ca.debug({status:r,message:n,response:(s=t.response)==null?void 0:s.data},"retryable request error"),i}}),this.axios.defaults.headers.common={},this.axios.defaults.headers.put={},this.axios.defaults.headers.get={}}async request(t={}){var I,x,_,A,E,S,w,T,D,L,P,k,F,B;let{apiEndpoint:r,apiKey:n}=e.config(),i=t.root||r,s=(I=Wt.auth)==null?void 0:I.accessToken,{method:o="POST",params:a,headers:u={},body:p,endpoint:d}=t,{url:h=`${i}${d}`,responseType:m}=t;n&&h.startsWith(r)?u.Authorization=`Basic ${n}`:s&&h.startsWith(r)&&(u.Authorization=`Bearer ${s}`),p&&d&&(u["Content-Type"]="application/json");let g=Wt.getSessionId();d&&(u["User-Agent"]=`ampt-cli/${Xce}`,u["ampt-version"]=Xce,u["ampt-session-id"]=g);let v={url:h,method:o,headers:u,params:a,data:p,maxContentLength:1/0,maxBodyLength:1/0,onUploadProgress:t.onUploadProgress};m&&(v.responseType=m);try{return ca.debug({method:o,url:h,sessionId:g},"request"),(await this.axios(v)).data}catch(M){if(((x=M.response)==null?void 0:x.status)===403&&((A=(_=M.response)==null?void 0:_.data)==null?void 0:A.code)==="EXPIRED_TOKEN")return ca.debug({status:M.response.status,code:M.response.data.code},"Token expired, refreshing"),await((E=Wt.user)==null?void 0:E.refreshAccessToken()),this.request(t);if(((S=M.response)==null?void 0:S.status)===403){let Y=new Error("Forbidden");throw Y.message="You do not have permission to access this resource.",Y.name="ForbiddenError",Y}if(((w=M.response)==null?void 0:w.status)===404)return;if(((T=M.response)==null?void 0:T.status)===409){let Y=new Error("Conflict");throw Y.message="Conflict",Y.name="ConflictError",Y}if(ca.error({status:(D=M.response)==null?void 0:D.status,data:(L=M.response)==null?void 0:L.data},"request error"),M.response&&M.response.data){let Y=new Error(M.response.data.message||M.response.data);throw(P=M.response.data.message)!=null&&P.includes("Request Entity Too Large")?(Y.message="Your code size is too large. Try reducing it by adding to .deployignore",Y.name="EntityTooLargeError"):(k=M.response.data.message)!=null&&k.includes("User disabled")?(Y.message=M.response.data.detail||"Your account has been disabled. Please contact support@getampt.com for more information.",Y.name="UserDisabledError"):(F=M.response.data.message)!=null&&F.includes("App limit reached")?(Y.message="You have reached your Organization's app limit. Please upgrade your plan or delete an app.",Y.name="AppLimitReachedError"):(B=M.response.data.message)!=null&&B.includes("Instance limit reached")?(Y.message="You have reached your Organization's environment limit. Please upgrade your plan or delete an environment.",Y.name="EnvironmentLimitReachedError"):Y.name=M.response.data.name||null,Y.statusCode=M.response.data.statusCode||M.response.status||null,Y}throw M}}},tZ=new eZ,$e=tZ.request.bind(tZ),Kar=tZ.request});var Kce,zce=ae(()=>{"use strict";c();Kce=async(e,t)=>{let r,n=new Promise(i=>{r=setTimeout(()=>i(null),t)});return Promise.race([e,n]).then(i=>(clearTimeout(r),i))}});var DS,Jce=ae(()=>{"use strict";c();DS=e=>e?e===0?"less than a second":e===1?"1 second":`${e} seconds`:"a few seconds"});var Tu,nZ=ae(()=>{"use strict";c();Tu=async e=>new Promise(t=>setTimeout(t,e).unref())});var fr,iZ,sZ=ae(()=>{"use strict";c();dr();ua();fr=e=>{(async()=>{let{eventName:t,eventData:r={}}=e,n=Wt.orgName;if(!n){Ae.warn({eventName:t},"Could not send report - no org name found");return}try{await $e({method:"POST",body:{eventName:t,eventData:{...r,shell:!0}},endpoint:`/orgs/${n}/analytics`})}catch(i){Wt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()},iZ=fr});async function qS(e){try{let t="https://ampt.dev/public/templates/manifest-tags.json",{data:r}=await Wo.get(t);return r.filter(n=>n.tags.includes("starter"))}catch(t){return process.env.AMPT_DEBUG&&e.logError(t),[]}}var oZ=ae(()=>{"use strict";c();Z0()});var aZ,$ce,cZ=ae(()=>{"use strict";c();aZ=e=>{try{return process.kill(e,0)}catch(t){return t.code==="EPERM"}},$ce=aZ});async function VS(e,t){let r=e.eventNames(),n=new Map;for(let i of r)n.set(i,e.listeners(i));try{return await t()}finally{e.removeAllListeners();for(let i of r)for(let s of n.get(i))e.on(i,s)}}var Qce=ae(()=>{"use strict";c()});function eue(e){e=e.trim();let t=0,r=null,n=null,i=null,s=[];for(let o=0;o<e.length;o++){if(r=n,n=e.charAt(o),n===" "&&!i){r!==" "&&t++;continue}if(n===i){i=null;continue}else if((n==="'"||n==='"')&&!i){i=n;continue}s[t]||(s[t]=""),s[t]+=n}return s}var tue=ae(()=>{"use strict";c()});var rue=ae(()=>{"use strict";c()});var nue=y((ch,Xy)=>{c();(function(){var e,t="4.17.21",r=200,n="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",s="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",a=500,u="__lodash_placeholder__",p=1,d=2,h=4,m=1,g=2,v=1,I=2,x=4,_=8,A=16,E=32,S=64,w=128,T=256,D=512,L=30,P="...",k=800,F=16,B=1,M=2,Y=3,V=1/0,q=9007199254740991,te=17976931348623157e292,z=0/0,he=4294967295,fe=he-1,Se=he>>>1,De=[["ary",w],["bind",v],["bindKey",I],["curry",_],["curryRight",A],["flip",D],["partial",E],["partialRight",S],["rearg",T]],Oe="[object Arguments]",Xe="[object Array]",Ze="[object AsyncFunction]",Re="[object Boolean]",gt="[object Date]",lt="[object DOMException]",_e="[object Error]",Z="[object Function]",R="[object GeneratorFunction]",ne="[object Map]",J="[object Number]",rt="[object Null]",ze="[object Object]",Yt="[object Promise]",Ir="[object Proxy]",Yr="[object RegExp]",We="[object Set]",$t="[object String]",xn="[object Symbol]",Yp="[object Undefined]",xo="[object WeakMap]",Uu="[object WeakSet]",So="[object ArrayBuffer]",G="[object DataView]",j="[object Float32Array]",K="[object Float64Array]",oe="[object Int8Array]",pe="[object Int16Array]",Te="[object Int32Array]",st="[object Uint8Array]",bt="[object Uint8ClampedArray]",tn="[object Uint16Array]",Pi="[object Uint32Array]",Gr=/\b__p \+= '';/g,Qe=/\b(__p \+=) '' \+/g,Ys=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Rb=/&(?:amp|lt|gt|quot|#39);/g,Kp=/[&<>"']/g,Tb=RegExp(Rb.source),Nb=RegExp(Kp.source),em=/<%-([\s\S]+?)%>/g,Di=/<%([\s\S]+?)%>/g,tm=/<%=([\s\S]+?)%>/g,rm=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Bb=/^\w*$/,nm=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ju=/[\\^$.*+?()[\]{}|]/g,zp=RegExp(ju.source),Xu=/^\s+/,kb=/\s/,Ob=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,$1e=/\{\n\/\* \[wrapped with (.+)\] \*/,Q1e=/,? & /,e2e=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,t2e=/[()=,{}\[\]\/\s]/,r2e=/\\(\\)?/g,n2e=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,wV=/\w*$/,i2e=/^[-+]0x[0-9a-f]+$/i,s2e=/^0b[01]+$/i,o2e=/^\[object .+?Constructor\]$/,a2e=/^0o[0-7]+$/i,c2e=/^(?:0|[1-9]\d*)$/,u2e=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Gb=/($^)/,l2e=/['\n\r\u2028\u2029\\]/g,Fb="\\ud800-\\udfff",p2e="\\u0300-\\u036f",d2e="\\ufe20-\\ufe2f",f2e="\\u20d0-\\u20ff",EV=p2e+d2e+f2e,AV="\\u2700-\\u27bf",RV="a-z\\xdf-\\xf6\\xf8-\\xff",h2e="\\xac\\xb1\\xd7\\xf7",m2e="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",g2e="\\u2000-\\u206f",y2e=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",TV="A-Z\\xc0-\\xd6\\xd8-\\xde",NV="\\ufe0e\\ufe0f",BV=h2e+m2e+g2e+y2e,LA="['\u2019]",v2e="["+Fb+"]",kV="["+BV+"]",Lb="["+EV+"]",OV="\\d+",b2e="["+AV+"]",GV="["+RV+"]",FV="[^"+Fb+BV+OV+AV+RV+TV+"]",ZA="\\ud83c[\\udffb-\\udfff]",I2e="(?:"+Lb+"|"+ZA+")",LV="[^"+Fb+"]",WA="(?:\\ud83c[\\udde6-\\uddff]){2}",PA="[\\ud800-\\udbff][\\udc00-\\udfff]",Jp="["+TV+"]",ZV="\\u200d",WV="(?:"+GV+"|"+FV+")",_2e="(?:"+Jp+"|"+FV+")",PV="(?:"+LA+"(?:d|ll|m|re|s|t|ve))?",DV="(?:"+LA+"(?:D|LL|M|RE|S|T|VE))?",qV=I2e+"?",VV="["+NV+"]?",C2e="(?:"+ZV+"(?:"+[LV,WA,PA].join("|")+")"+VV+qV+")*",x2e="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",S2e="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",HV=VV+qV+C2e,w2e="(?:"+[b2e,WA,PA].join("|")+")"+HV,E2e="(?:"+[LV+Lb+"?",Lb,WA,PA,v2e].join("|")+")",A2e=RegExp(LA,"g"),R2e=RegExp(Lb,"g"),DA=RegExp(ZA+"(?="+ZA+")|"+E2e+HV,"g"),T2e=RegExp([Jp+"?"+GV+"+"+PV+"(?="+[kV,Jp,"$"].join("|")+")",_2e+"+"+DV+"(?="+[kV,Jp+WV,"$"].join("|")+")",Jp+"?"+WV+"+"+PV,Jp+"+"+DV,S2e,x2e,OV,w2e].join("|"),"g"),N2e=RegExp("["+ZV+Fb+EV+NV+"]"),B2e=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,k2e=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],O2e=-1,ar={};ar[j]=ar[K]=ar[oe]=ar[pe]=ar[Te]=ar[st]=ar[bt]=ar[tn]=ar[Pi]=!0,ar[Oe]=ar[Xe]=ar[So]=ar[Re]=ar[G]=ar[gt]=ar[_e]=ar[Z]=ar[ne]=ar[J]=ar[ze]=ar[Yr]=ar[We]=ar[$t]=ar[xo]=!1;var nr={};nr[Oe]=nr[Xe]=nr[So]=nr[G]=nr[Re]=nr[gt]=nr[j]=nr[K]=nr[oe]=nr[pe]=nr[Te]=nr[ne]=nr[J]=nr[ze]=nr[Yr]=nr[We]=nr[$t]=nr[xn]=nr[st]=nr[bt]=nr[tn]=nr[Pi]=!0,nr[_e]=nr[Z]=nr[xo]=!1;var G2e={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},F2e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},L2e={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},Z2e={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},W2e=parseFloat,P2e=parseInt,MV=typeof global=="object"&&global&&global.Object===Object&&global,D2e=typeof self=="object"&&self&&self.Object===Object&&self,dn=MV||D2e||Function("return this")(),qA=typeof ch=="object"&&ch&&!ch.nodeType&&ch,Yu=qA&&typeof Xy=="object"&&Xy&&!Xy.nodeType&&Xy,UV=Yu&&Yu.exports===qA,VA=UV&&MV.process,us=function(){try{var $=Yu&&Yu.require&&Yu.require("util").types;return $||VA&&VA.binding&&VA.binding("util")}catch{}}(),jV=us&&us.isArrayBuffer,XV=us&&us.isDate,YV=us&&us.isMap,KV=us&&us.isRegExp,zV=us&&us.isSet,JV=us&&us.isTypedArray;function qi($,ce,se){switch(se.length){case 0:return $.call(ce);case 1:return $.call(ce,se[0]);case 2:return $.call(ce,se[0],se[1]);case 3:return $.call(ce,se[0],se[1],se[2])}return $.apply(ce,se)}function q2e($,ce,se,Be){for(var ot=-1,Ft=$==null?0:$.length;++ot<Ft;){var rn=$[ot];ce(Be,rn,se(rn),$)}return Be}function ls($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be&&ce($[se],se,$)!==!1;);return $}function V2e($,ce){for(var se=$==null?0:$.length;se--&&ce($[se],se,$)!==!1;);return $}function $V($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(!ce($[se],se,$))return!1;return!0}function Bc($,ce){for(var se=-1,Be=$==null?0:$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];ce(rn,se,$)&&(Ft[ot++]=rn)}return Ft}function Zb($,ce){var se=$==null?0:$.length;return!!se&&$p($,ce,0)>-1}function HA($,ce,se){for(var Be=-1,ot=$==null?0:$.length;++Be<ot;)if(se(ce,$[Be]))return!0;return!1}function ur($,ce){for(var se=-1,Be=$==null?0:$.length,ot=Array(Be);++se<Be;)ot[se]=ce($[se],se,$);return ot}function kc($,ce){for(var se=-1,Be=ce.length,ot=$.length;++se<Be;)$[ot+se]=ce[se];return $}function MA($,ce,se,Be){var ot=-1,Ft=$==null?0:$.length;for(Be&&Ft&&(se=$[++ot]);++ot<Ft;)se=ce(se,$[ot],ot,$);return se}function H2e($,ce,se,Be){var ot=$==null?0:$.length;for(Be&&ot&&(se=$[--ot]);ot--;)se=ce(se,$[ot],ot,$);return se}function UA($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(ce($[se],se,$))return!0;return!1}var M2e=jA("length");function U2e($){return $.split("")}function j2e($){return $.match(e2e)||[]}function QV($,ce,se){var Be;return se($,function(ot,Ft,rn){if(ce(ot,Ft,rn))return Be=Ft,!1}),Be}function Wb($,ce,se,Be){for(var ot=$.length,Ft=se+(Be?1:-1);Be?Ft--:++Ft<ot;)if(ce($[Ft],Ft,$))return Ft;return-1}function $p($,ce,se){return ce===ce?ike($,ce,se):Wb($,eH,se)}function X2e($,ce,se,Be){for(var ot=se-1,Ft=$.length;++ot<Ft;)if(Be($[ot],ce))return ot;return-1}function eH($){return $!==$}function tH($,ce){var se=$==null?0:$.length;return se?YA($,ce)/se:z}function jA($){return function(ce){return ce==null?e:ce[$]}}function XA($){return function(ce){return $==null?e:$[ce]}}function rH($,ce,se,Be,ot){return ot($,function(Ft,rn,Qt){se=Be?(Be=!1,Ft):ce(se,Ft,rn,Qt)}),se}function Y2e($,ce){var se=$.length;for($.sort(ce);se--;)$[se]=$[se].value;return $}function YA($,ce){for(var se,Be=-1,ot=$.length;++Be<ot;){var Ft=ce($[Be]);Ft!==e&&(se=se===e?Ft:se+Ft)}return se}function KA($,ce){for(var se=-1,Be=Array($);++se<$;)Be[se]=ce(se);return Be}function K2e($,ce){return ur(ce,function(se){return[se,$[se]]})}function nH($){return $&&$.slice(0,aH($)+1).replace(Xu,"")}function Vi($){return function(ce){return $(ce)}}function zA($,ce){return ur(ce,function(se){return $[se]})}function im($,ce){return $.has(ce)}function iH($,ce){for(var se=-1,Be=$.length;++se<Be&&$p(ce,$[se],0)>-1;);return se}function sH($,ce){for(var se=$.length;se--&&$p(ce,$[se],0)>-1;);return se}function z2e($,ce){for(var se=$.length,Be=0;se--;)$[se]===ce&&++Be;return Be}var J2e=XA(G2e),$2e=XA(F2e);function Q2e($){return"\\"+Z2e[$]}function eke($,ce){return $==null?e:$[ce]}function Qp($){return N2e.test($)}function tke($){return B2e.test($)}function rke($){for(var ce,se=[];!(ce=$.next()).done;)se.push(ce.value);return se}function JA($){var ce=-1,se=Array($.size);return $.forEach(function(Be,ot){se[++ce]=[ot,Be]}),se}function oH($,ce){return function(se){return $(ce(se))}}function Oc($,ce){for(var se=-1,Be=$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];(rn===ce||rn===u)&&($[se]=u,Ft[ot++]=se)}return Ft}function Pb($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=Be}),se}function nke($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=[Be,Be]}),se}function ike($,ce,se){for(var Be=se-1,ot=$.length;++Be<ot;)if($[Be]===ce)return Be;return-1}function ske($,ce,se){for(var Be=se+1;Be--;)if($[Be]===ce)return Be;return Be}function ed($){return Qp($)?ake($):M2e($)}function Ks($){return Qp($)?cke($):U2e($)}function aH($){for(var ce=$.length;ce--&&kb.test($.charAt(ce)););return ce}var oke=XA(L2e);function ake($){for(var ce=DA.lastIndex=0;DA.test($);)++ce;return ce}function cke($){return $.match(DA)||[]}function uke($){return $.match(T2e)||[]}var lke=function $(ce){ce=ce==null?dn:Gc.defaults(dn.Object(),ce,Gc.pick(dn,k2e));var se=ce.Array,Be=ce.Date,ot=ce.Error,Ft=ce.Function,rn=ce.Math,Qt=ce.Object,$A=ce.RegExp,pke=ce.String,ps=ce.TypeError,Db=se.prototype,dke=Ft.prototype,td=Qt.prototype,qb=ce["__core-js_shared__"],Vb=dke.toString,Dt=td.hasOwnProperty,fke=0,cH=function(){var l=/[^.]+$/.exec(qb&&qb.keys&&qb.keys.IE_PROTO||"");return l?"Symbol(src)_1."+l:""}(),Hb=td.toString,hke=Vb.call(Qt),mke=dn._,gke=$A("^"+Vb.call(Dt).replace(ju,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Mb=UV?ce.Buffer:e,Fc=ce.Symbol,Ub=ce.Uint8Array,uH=Mb?Mb.allocUnsafe:e,jb=oH(Qt.getPrototypeOf,Qt),lH=Qt.create,pH=td.propertyIsEnumerable,Xb=Db.splice,dH=Fc?Fc.isConcatSpreadable:e,sm=Fc?Fc.iterator:e,Ku=Fc?Fc.toStringTag:e,Yb=function(){try{var l=el(Qt,"defineProperty");return l({},"",{}),l}catch{}}(),yke=ce.clearTimeout!==dn.clearTimeout&&ce.clearTimeout,vke=Be&&Be.now!==dn.Date.now&&Be.now,bke=ce.setTimeout!==dn.setTimeout&&ce.setTimeout,Kb=rn.ceil,zb=rn.floor,QA=Qt.getOwnPropertySymbols,Ike=Mb?Mb.isBuffer:e,fH=ce.isFinite,_ke=Db.join,Cke=oH(Qt.keys,Qt),nn=rn.max,Wn=rn.min,xke=Be.now,Ske=ce.parseInt,hH=rn.random,wke=Db.reverse,eR=el(ce,"DataView"),om=el(ce,"Map"),tR=el(ce,"Promise"),rd=el(ce,"Set"),am=el(ce,"WeakMap"),cm=el(Qt,"create"),Jb=am&&new am,nd={},Eke=tl(eR),Ake=tl(om),Rke=tl(tR),Tke=tl(rd),Nke=tl(am),$b=Fc?Fc.prototype:e,um=$b?$b.valueOf:e,mH=$b?$b.toString:e;function O(l){if(Rr(l)&&!pt(l)&&!(l instanceof _t)){if(l instanceof ds)return l;if(Dt.call(l,"__wrapped__"))return gM(l)}return new ds(l)}var id=function(){function l(){}return function(f){if(!_r(f))return{};if(lH)return lH(f);l.prototype=f;var b=new l;return l.prototype=e,b}}();function Qb(){}function ds(l,f){this.__wrapped__=l,this.__actions__=[],this.__chain__=!!f,this.__index__=0,this.__values__=e}O.templateSettings={escape:em,evaluate:Di,interpolate:tm,variable:"",imports:{_:O}},O.prototype=Qb.prototype,O.prototype.constructor=O,ds.prototype=id(Qb.prototype),ds.prototype.constructor=ds;function _t(l){this.__wrapped__=l,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=he,this.__views__=[]}function Bke(){var l=new _t(this.__wrapped__);return l.__actions__=mi(this.__actions__),l.__dir__=this.__dir__,l.__filtered__=this.__filtered__,l.__iteratees__=mi(this.__iteratees__),l.__takeCount__=this.__takeCount__,l.__views__=mi(this.__views__),l}function kke(){if(this.__filtered__){var l=new _t(this);l.__dir__=-1,l.__filtered__=!0}else l=this.clone(),l.__dir__*=-1;return l}function Oke(){var l=this.__wrapped__.value(),f=this.__dir__,b=pt(l),C=f<0,N=b?l.length:0,W=UOe(0,N,this.__views__),U=W.start,X=W.end,Q=X-U,le=C?X:U-1,de=this.__iteratees__,ye=de.length,Ee=0,He=Wn(Q,this.__takeCount__);if(!b||!C&&N==Q&&He==Q)return PH(l,this.__actions__);var et=[];e:for(;Q--&&Ee<He;){le+=f;for(var mt=-1,tt=l[le];++mt<ye;){var It=de[mt],Et=It.iteratee,Ui=It.type,ri=Et(tt);if(Ui==M)tt=ri;else if(!ri){if(Ui==B)continue e;break e}}et[Ee++]=tt}return et}_t.prototype=id(Qb.prototype),_t.prototype.constructor=_t;function zu(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Gke(){this.__data__=cm?cm(null):{},this.size=0}function Fke(l){var f=this.has(l)&&delete this.__data__[l];return this.size-=f?1:0,f}function Lke(l){var f=this.__data__;if(cm){var b=f[l];return b===o?e:b}return Dt.call(f,l)?f[l]:e}function Zke(l){var f=this.__data__;return cm?f[l]!==e:Dt.call(f,l)}function Wke(l,f){var b=this.__data__;return this.size+=this.has(l)?0:1,b[l]=cm&&f===e?o:f,this}zu.prototype.clear=Gke,zu.prototype.delete=Fke,zu.prototype.get=Lke,zu.prototype.has=Zke,zu.prototype.set=Wke;function wa(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Pke(){this.__data__=[],this.size=0}function Dke(l){var f=this.__data__,b=eI(f,l);if(b<0)return!1;var C=f.length-1;return b==C?f.pop():Xb.call(f,b,1),--this.size,!0}function qke(l){var f=this.__data__,b=eI(f,l);return b<0?e:f[b][1]}function Vke(l){return eI(this.__data__,l)>-1}function Hke(l,f){var b=this.__data__,C=eI(b,l);return C<0?(++this.size,b.push([l,f])):b[C][1]=f,this}wa.prototype.clear=Pke,wa.prototype.delete=Dke,wa.prototype.get=qke,wa.prototype.has=Vke,wa.prototype.set=Hke;function Ea(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Mke(){this.size=0,this.__data__={hash:new zu,map:new(om||wa),string:new zu}}function Uke(l){var f=dI(this,l).delete(l);return this.size-=f?1:0,f}function jke(l){return dI(this,l).get(l)}function Xke(l){return dI(this,l).has(l)}function Yke(l,f){var b=dI(this,l),C=b.size;return b.set(l,f),this.size+=b.size==C?0:1,this}Ea.prototype.clear=Mke,Ea.prototype.delete=Uke,Ea.prototype.get=jke,Ea.prototype.has=Xke,Ea.prototype.set=Yke;function Ju(l){var f=-1,b=l==null?0:l.length;for(this.__data__=new Ea;++f<b;)this.add(l[f])}function Kke(l){return this.__data__.set(l,o),this}function zke(l){return this.__data__.has(l)}Ju.prototype.add=Ju.prototype.push=Kke,Ju.prototype.has=zke;function zs(l){var f=this.__data__=new wa(l);this.size=f.size}function Jke(){this.__data__=new wa,this.size=0}function $ke(l){var f=this.__data__,b=f.delete(l);return this.size=f.size,b}function Qke(l){return this.__data__.get(l)}function eOe(l){return this.__data__.has(l)}function tOe(l,f){var b=this.__data__;if(b instanceof wa){var C=b.__data__;if(!om||C.length<r-1)return C.push([l,f]),this.size=++b.size,this;b=this.__data__=new Ea(C)}return b.set(l,f),this.size=b.size,this}zs.prototype.clear=Jke,zs.prototype.delete=$ke,zs.prototype.get=Qke,zs.prototype.has=eOe,zs.prototype.set=tOe;function gH(l,f){var b=pt(l),C=!b&&rl(l),N=!b&&!C&&Dc(l),W=!b&&!C&&!N&&cd(l),U=b||C||N||W,X=U?KA(l.length,pke):[],Q=X.length;for(var le in l)(f||Dt.call(l,le))&&!(U&&(le=="length"||N&&(le=="offset"||le=="parent")||W&&(le=="buffer"||le=="byteLength"||le=="byteOffset")||Na(le,Q)))&&X.push(le);return X}function yH(l){var f=l.length;return f?l[dR(0,f-1)]:e}function rOe(l,f){return fI(mi(l),$u(f,0,l.length))}function nOe(l){return fI(mi(l))}function rR(l,f,b){(b!==e&&!Js(l[f],b)||b===e&&!(f in l))&&Aa(l,f,b)}function lm(l,f,b){var C=l[f];(!(Dt.call(l,f)&&Js(C,b))||b===e&&!(f in l))&&Aa(l,f,b)}function eI(l,f){for(var b=l.length;b--;)if(Js(l[b][0],f))return b;return-1}function iOe(l,f,b,C){return Lc(l,function(N,W,U){f(C,N,b(N),U)}),C}function vH(l,f){return l&&Eo(f,fn(f),l)}function sOe(l,f){return l&&Eo(f,yi(f),l)}function Aa(l,f,b){f=="__proto__"&&Yb?Yb(l,f,{configurable:!0,enumerable:!0,value:b,writable:!0}):l[f]=b}function nR(l,f){for(var b=-1,C=f.length,N=se(C),W=l==null;++b<C;)N[b]=W?e:ZR(l,f[b]);return N}function $u(l,f,b){return l===l&&(b!==e&&(l=l<=b?l:b),f!==e&&(l=l>=f?l:f)),l}function fs(l,f,b,C,N,W){var U,X=f&p,Q=f&d,le=f&h;if(b&&(U=N?b(l,C,N,W):b(l)),U!==e)return U;if(!_r(l))return l;var de=pt(l);if(de){if(U=XOe(l),!X)return mi(l,U)}else{var ye=Pn(l),Ee=ye==Z||ye==R;if(Dc(l))return VH(l,X);if(ye==ze||ye==Oe||Ee&&!N){if(U=Q||Ee?{}:aM(l),!X)return Q?LOe(l,sOe(U,l)):FOe(l,vH(U,l))}else{if(!nr[ye])return N?l:{};U=YOe(l,ye,X)}}W||(W=new zs);var He=W.get(l);if(He)return He;W.set(l,U),LM(l)?l.forEach(function(tt){U.add(fs(tt,f,b,tt,l,W))}):GM(l)&&l.forEach(function(tt,It){U.set(It,fs(tt,f,b,It,l,W))});var et=le?Q?xR:CR:Q?yi:fn,mt=de?e:et(l);return ls(mt||l,function(tt,It){mt&&(It=tt,tt=l[It]),lm(U,It,fs(tt,f,b,It,l,W))}),U}function oOe(l){var f=fn(l);return function(b){return bH(b,l,f)}}function bH(l,f,b){var C=b.length;if(l==null)return!C;for(l=Qt(l);C--;){var N=b[C],W=f[N],U=l[N];if(U===e&&!(N in l)||!W(U))return!1}return!0}function IH(l,f,b){if(typeof l!="function")throw new ps(i);return ym(function(){l.apply(e,b)},f)}function pm(l,f,b,C){var N=-1,W=Zb,U=!0,X=l.length,Q=[],le=f.length;if(!X)return Q;b&&(f=ur(f,Vi(b))),C?(W=HA,U=!1):f.length>=r&&(W=im,U=!1,f=new Ju(f));e:for(;++N<X;){var de=l[N],ye=b==null?de:b(de);if(de=C||de!==0?de:0,U&&ye===ye){for(var Ee=le;Ee--;)if(f[Ee]===ye)continue e;Q.push(de)}else W(f,ye,C)||Q.push(de)}return Q}var Lc=XH(wo),_H=XH(sR,!0);function aOe(l,f){var b=!0;return Lc(l,function(C,N,W){return b=!!f(C,N,W),b}),b}function tI(l,f,b){for(var C=-1,N=l.length;++C<N;){var W=l[C],U=f(W);if(U!=null&&(X===e?U===U&&!Mi(U):b(U,X)))var X=U,Q=W}return Q}function cOe(l,f,b,C){var N=l.length;for(b=ht(b),b<0&&(b=-b>N?0:N+b),C=C===e||C>N?N:ht(C),C<0&&(C+=N),C=b>C?0:WM(C);b<C;)l[b++]=f;return l}function CH(l,f){var b=[];return Lc(l,function(C,N,W){f(C,N,W)&&b.push(C)}),b}function Sn(l,f,b,C,N){var W=-1,U=l.length;for(b||(b=zOe),N||(N=[]);++W<U;){var X=l[W];f>0&&b(X)?f>1?Sn(X,f-1,b,C,N):kc(N,X):C||(N[N.length]=X)}return N}var iR=YH(),xH=YH(!0);function wo(l,f){return l&&iR(l,f,fn)}function sR(l,f){return l&&xH(l,f,fn)}function rI(l,f){return Bc(f,function(b){return Ba(l[b])})}function Qu(l,f){f=Wc(f,l);for(var b=0,C=f.length;l!=null&&b<C;)l=l[Ao(f[b++])];return b&&b==C?l:e}function SH(l,f,b){var C=f(l);return pt(l)?C:kc(C,b(l))}function ei(l){return l==null?l===e?Yp:rt:Ku&&Ku in Qt(l)?MOe(l):nGe(l)}function oR(l,f){return l>f}function uOe(l,f){return l!=null&&Dt.call(l,f)}function lOe(l,f){return l!=null&&f in Qt(l)}function pOe(l,f,b){return l>=Wn(f,b)&&l<nn(f,b)}function aR(l,f,b){for(var C=b?HA:Zb,N=l[0].length,W=l.length,U=W,X=se(W),Q=1/0,le=[];U--;){var de=l[U];U&&f&&(de=ur(de,Vi(f))),Q=Wn(de.length,Q),X[U]=!b&&(f||N>=120&&de.length>=120)?new Ju(U&&de):e}de=l[0];var ye=-1,Ee=X[0];e:for(;++ye<N&&le.length<Q;){var He=de[ye],et=f?f(He):He;if(He=b||He!==0?He:0,!(Ee?im(Ee,et):C(le,et,b))){for(U=W;--U;){var mt=X[U];if(!(mt?im(mt,et):C(l[U],et,b)))continue e}Ee&&Ee.push(et),le.push(He)}}return le}function dOe(l,f,b,C){return wo(l,function(N,W,U){f(C,b(N),W,U)}),C}function dm(l,f,b){f=Wc(f,l),l=pM(l,f);var C=l==null?l:l[Ao(ms(f))];return C==null?e:qi(C,l,b)}function wH(l){return Rr(l)&&ei(l)==Oe}function fOe(l){return Rr(l)&&ei(l)==So}function hOe(l){return Rr(l)&&ei(l)==gt}function fm(l,f,b,C,N){return l===f?!0:l==null||f==null||!Rr(l)&&!Rr(f)?l!==l&&f!==f:mOe(l,f,b,C,fm,N)}function mOe(l,f,b,C,N,W){var U=pt(l),X=pt(f),Q=U?Xe:Pn(l),le=X?Xe:Pn(f);Q=Q==Oe?ze:Q,le=le==Oe?ze:le;var de=Q==ze,ye=le==ze,Ee=Q==le;if(Ee&&Dc(l)){if(!Dc(f))return!1;U=!0,de=!1}if(Ee&&!de)return W||(W=new zs),U||cd(l)?iM(l,f,b,C,N,W):VOe(l,f,Q,b,C,N,W);if(!(b&m)){var He=de&&Dt.call(l,"__wrapped__"),et=ye&&Dt.call(f,"__wrapped__");if(He||et){var mt=He?l.value():l,tt=et?f.value():f;return W||(W=new zs),N(mt,tt,b,C,W)}}return Ee?(W||(W=new zs),HOe(l,f,b,C,N,W)):!1}function gOe(l){return Rr(l)&&Pn(l)==ne}function cR(l,f,b,C){var N=b.length,W=N,U=!C;if(l==null)return!W;for(l=Qt(l);N--;){var X=b[N];if(U&&X[2]?X[1]!==l[X[0]]:!(X[0]in l))return!1}for(;++N<W;){X=b[N];var Q=X[0],le=l[Q],de=X[1];if(U&&X[2]){if(le===e&&!(Q in l))return!1}else{var ye=new zs;if(C)var Ee=C(le,de,Q,l,f,ye);if(!(Ee===e?fm(de,le,m|g,C,ye):Ee))return!1}}return!0}function EH(l){if(!_r(l)||$Oe(l))return!1;var f=Ba(l)?gke:o2e;return f.test(tl(l))}function yOe(l){return Rr(l)&&ei(l)==Yr}function vOe(l){return Rr(l)&&Pn(l)==We}function bOe(l){return Rr(l)&&bI(l.length)&&!!ar[ei(l)]}function AH(l){return typeof l=="function"?l:l==null?vi:typeof l=="object"?pt(l)?NH(l[0],l[1]):TH(l):KM(l)}function uR(l){if(!gm(l))return Cke(l);var f=[];for(var b in Qt(l))Dt.call(l,b)&&b!="constructor"&&f.push(b);return f}function IOe(l){if(!_r(l))return rGe(l);var f=gm(l),b=[];for(var C in l)C=="constructor"&&(f||!Dt.call(l,C))||b.push(C);return b}function lR(l,f){return l<f}function RH(l,f){var b=-1,C=gi(l)?se(l.length):[];return Lc(l,function(N,W,U){C[++b]=f(N,W,U)}),C}function TH(l){var f=wR(l);return f.length==1&&f[0][2]?uM(f[0][0],f[0][1]):function(b){return b===l||cR(b,l,f)}}function NH(l,f){return AR(l)&&cM(f)?uM(Ao(l),f):function(b){var C=ZR(b,l);return C===e&&C===f?WR(b,l):fm(f,C,m|g)}}function nI(l,f,b,C,N){l!==f&&iR(f,function(W,U){if(N||(N=new zs),_r(W))_Oe(l,f,U,b,nI,C,N);else{var X=C?C(TR(l,U),W,U+"",l,f,N):e;X===e&&(X=W),rR(l,U,X)}},yi)}function _Oe(l,f,b,C,N,W,U){var X=TR(l,b),Q=TR(f,b),le=U.get(Q);if(le){rR(l,b,le);return}var de=W?W(X,Q,b+"",l,f,U):e,ye=de===e;if(ye){var Ee=pt(Q),He=!Ee&&Dc(Q),et=!Ee&&!He&&cd(Q);de=Q,Ee||He||et?pt(X)?de=X:Fr(X)?de=mi(X):He?(ye=!1,de=VH(Q,!0)):et?(ye=!1,de=HH(Q,!0)):de=[]:vm(Q)||rl(Q)?(de=X,rl(X)?de=PM(X):(!_r(X)||Ba(X))&&(de=aM(Q))):ye=!1}ye&&(U.set(Q,de),N(de,Q,C,W,U),U.delete(Q)),rR(l,b,de)}function BH(l,f){var b=l.length;if(b)return f+=f<0?b:0,Na(f,b)?l[f]:e}function kH(l,f,b){f.length?f=ur(f,function(W){return pt(W)?function(U){return Qu(U,W.length===1?W[0]:W)}:W}):f=[vi];var C=-1;f=ur(f,Vi(Je()));var N=RH(l,function(W,U,X){var Q=ur(f,function(le){return le(W)});return{criteria:Q,index:++C,value:W}});return Y2e(N,function(W,U){return GOe(W,U,b)})}function COe(l,f){return OH(l,f,function(b,C){return WR(l,C)})}function OH(l,f,b){for(var C=-1,N=f.length,W={};++C<N;){var U=f[C],X=Qu(l,U);b(X,U)&&hm(W,Wc(U,l),X)}return W}function xOe(l){return function(f){return Qu(f,l)}}function pR(l,f,b,C){var N=C?X2e:$p,W=-1,U=f.length,X=l;for(l===f&&(f=mi(f)),b&&(X=ur(l,Vi(b)));++W<U;)for(var Q=0,le=f[W],de=b?b(le):le;(Q=N(X,de,Q,C))>-1;)X!==l&&Xb.call(X,Q,1),Xb.call(l,Q,1);return l}function GH(l,f){for(var b=l?f.length:0,C=b-1;b--;){var N=f[b];if(b==C||N!==W){var W=N;Na(N)?Xb.call(l,N,1):mR(l,N)}}return l}function dR(l,f){return l+zb(hH()*(f-l+1))}function SOe(l,f,b,C){for(var N=-1,W=nn(Kb((f-l)/(b||1)),0),U=se(W);W--;)U[C?W:++N]=l,l+=b;return U}function fR(l,f){var b="";if(!l||f<1||f>q)return b;do f%2&&(b+=l),f=zb(f/2),f&&(l+=l);while(f);return b}function yt(l,f){return NR(lM(l,f,vi),l+"")}function wOe(l){return yH(ud(l))}function EOe(l,f){var b=ud(l);return fI(b,$u(f,0,b.length))}function hm(l,f,b,C){if(!_r(l))return l;f=Wc(f,l);for(var N=-1,W=f.length,U=W-1,X=l;X!=null&&++N<W;){var Q=Ao(f[N]),le=b;if(Q==="__proto__"||Q==="constructor"||Q==="prototype")return l;if(N!=U){var de=X[Q];le=C?C(de,Q,X):e,le===e&&(le=_r(de)?de:Na(f[N+1])?[]:{})}lm(X,Q,le),X=X[Q]}return l}var FH=Jb?function(l,f){return Jb.set(l,f),l}:vi,AOe=Yb?function(l,f){return Yb(l,"toString",{configurable:!0,enumerable:!1,value:DR(f),writable:!0})}:vi;function ROe(l){return fI(ud(l))}function hs(l,f,b){var C=-1,N=l.length;f<0&&(f=-f>N?0:N+f),b=b>N?N:b,b<0&&(b+=N),N=f>b?0:b-f>>>0,f>>>=0;for(var W=se(N);++C<N;)W[C]=l[C+f];return W}function TOe(l,f){var b;return Lc(l,function(C,N,W){return b=f(C,N,W),!b}),!!b}function iI(l,f,b){var C=0,N=l==null?C:l.length;if(typeof f=="number"&&f===f&&N<=Se){for(;C<N;){var W=C+N>>>1,U=l[W];U!==null&&!Mi(U)&&(b?U<=f:U<f)?C=W+1:N=W}return N}return hR(l,f,vi,b)}function hR(l,f,b,C){var N=0,W=l==null?0:l.length;if(W===0)return 0;f=b(f);for(var U=f!==f,X=f===null,Q=Mi(f),le=f===e;N<W;){var de=zb((N+W)/2),ye=b(l[de]),Ee=ye!==e,He=ye===null,et=ye===ye,mt=Mi(ye);if(U)var tt=C||et;else le?tt=et&&(C||Ee):X?tt=et&&Ee&&(C||!He):Q?tt=et&&Ee&&!He&&(C||!mt):He||mt?tt=!1:tt=C?ye<=f:ye<f;tt?N=de+1:W=de}return Wn(W,fe)}function LH(l,f){for(var b=-1,C=l.length,N=0,W=[];++b<C;){var U=l[b],X=f?f(U):U;if(!b||!Js(X,Q)){var Q=X;W[N++]=U===0?0:U}}return W}function ZH(l){return typeof l=="number"?l:Mi(l)?z:+l}function Hi(l){if(typeof l=="string")return l;if(pt(l))return ur(l,Hi)+"";if(Mi(l))return mH?mH.call(l):"";var f=l+"";return f=="0"&&1/l==-V?"-0":f}function Zc(l,f,b){var C=-1,N=Zb,W=l.length,U=!0,X=[],Q=X;if(b)U=!1,N=HA;else if(W>=r){var le=f?null:DOe(l);if(le)return Pb(le);U=!1,N=im,Q=new Ju}else Q=f?[]:X;e:for(;++C<W;){var de=l[C],ye=f?f(de):de;if(de=b||de!==0?de:0,U&&ye===ye){for(var Ee=Q.length;Ee--;)if(Q[Ee]===ye)continue e;f&&Q.push(ye),X.push(de)}else N(Q,ye,b)||(Q!==X&&Q.push(ye),X.push(de))}return X}function mR(l,f){return f=Wc(f,l),l=pM(l,f),l==null||delete l[Ao(ms(f))]}function WH(l,f,b,C){return hm(l,f,b(Qu(l,f)),C)}function sI(l,f,b,C){for(var N=l.length,W=C?N:-1;(C?W--:++W<N)&&f(l[W],W,l););return b?hs(l,C?0:W,C?W+1:N):hs(l,C?W+1:0,C?N:W)}function PH(l,f){var b=l;return b instanceof _t&&(b=b.value()),MA(f,function(C,N){return N.func.apply(N.thisArg,kc([C],N.args))},b)}function gR(l,f,b){var C=l.length;if(C<2)return C?Zc(l[0]):[];for(var N=-1,W=se(C);++N<C;)for(var U=l[N],X=-1;++X<C;)X!=N&&(W[N]=pm(W[N]||U,l[X],f,b));return Zc(Sn(W,1),f,b)}function DH(l,f,b){for(var C=-1,N=l.length,W=f.length,U={};++C<N;){var X=C<W?f[C]:e;b(U,l[C],X)}return U}function yR(l){return Fr(l)?l:[]}function vR(l){return typeof l=="function"?l:vi}function Wc(l,f){return pt(l)?l:AR(l,f)?[l]:mM(Zt(l))}var NOe=yt;function Pc(l,f,b){var C=l.length;return b=b===e?C:b,!f&&b>=C?l:hs(l,f,b)}var qH=yke||function(l){return dn.clearTimeout(l)};function VH(l,f){if(f)return l.slice();var b=l.length,C=uH?uH(b):new l.constructor(b);return l.copy(C),C}function bR(l){var f=new l.constructor(l.byteLength);return new Ub(f).set(new Ub(l)),f}function BOe(l,f){var b=f?bR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.byteLength)}function kOe(l){var f=new l.constructor(l.source,wV.exec(l));return f.lastIndex=l.lastIndex,f}function OOe(l){return um?Qt(um.call(l)):{}}function HH(l,f){var b=f?bR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.length)}function MH(l,f){if(l!==f){var b=l!==e,C=l===null,N=l===l,W=Mi(l),U=f!==e,X=f===null,Q=f===f,le=Mi(f);if(!X&&!le&&!W&&l>f||W&&U&&Q&&!X&&!le||C&&U&&Q||!b&&Q||!N)return 1;if(!C&&!W&&!le&&l<f||le&&b&&N&&!C&&!W||X&&b&&N||!U&&N||!Q)return-1}return 0}function GOe(l,f,b){for(var C=-1,N=l.criteria,W=f.criteria,U=N.length,X=b.length;++C<U;){var Q=MH(N[C],W[C]);if(Q){if(C>=X)return Q;var le=b[C];return Q*(le=="desc"?-1:1)}}return l.index-f.index}function UH(l,f,b,C){for(var N=-1,W=l.length,U=b.length,X=-1,Q=f.length,le=nn(W-U,0),de=se(Q+le),ye=!C;++X<Q;)de[X]=f[X];for(;++N<U;)(ye||N<W)&&(de[b[N]]=l[N]);for(;le--;)de[X++]=l[N++];return de}function jH(l,f,b,C){for(var N=-1,W=l.length,U=-1,X=b.length,Q=-1,le=f.length,de=nn(W-X,0),ye=se(de+le),Ee=!C;++N<de;)ye[N]=l[N];for(var He=N;++Q<le;)ye[He+Q]=f[Q];for(;++U<X;)(Ee||N<W)&&(ye[He+b[U]]=l[N++]);return ye}function mi(l,f){var b=-1,C=l.length;for(f||(f=se(C));++b<C;)f[b]=l[b];return f}function Eo(l,f,b,C){var N=!b;b||(b={});for(var W=-1,U=f.length;++W<U;){var X=f[W],Q=C?C(b[X],l[X],X,b,l):e;Q===e&&(Q=l[X]),N?Aa(b,X,Q):lm(b,X,Q)}return b}function FOe(l,f){return Eo(l,ER(l),f)}function LOe(l,f){return Eo(l,sM(l),f)}function oI(l,f){return function(b,C){var N=pt(b)?q2e:iOe,W=f?f():{};return N(b,l,Je(C,2),W)}}function sd(l){return yt(function(f,b){var C=-1,N=b.length,W=N>1?b[N-1]:e,U=N>2?b[2]:e;for(W=l.length>3&&typeof W=="function"?(N--,W):e,U&&ti(b[0],b[1],U)&&(W=N<3?e:W,N=1),f=Qt(f);++C<N;){var X=b[C];X&&l(f,X,C,W)}return f})}function XH(l,f){return function(b,C){if(b==null)return b;if(!gi(b))return l(b,C);for(var N=b.length,W=f?N:-1,U=Qt(b);(f?W--:++W<N)&&C(U[W],W,U)!==!1;);return b}}function YH(l){return function(f,b,C){for(var N=-1,W=Qt(f),U=C(f),X=U.length;X--;){var Q=U[l?X:++N];if(b(W[Q],Q,W)===!1)break}return f}}function ZOe(l,f,b){var C=f&v,N=mm(l);function W(){var U=this&&this!==dn&&this instanceof W?N:l;return U.apply(C?b:this,arguments)}return W}function KH(l){return function(f){f=Zt(f);var b=Qp(f)?Ks(f):e,C=b?b[0]:f.charAt(0),N=b?Pc(b,1).join(""):f.slice(1);return C[l]()+N}}function od(l){return function(f){return MA(XM(jM(f).replace(A2e,"")),l,"")}}function mm(l){return function(){var f=arguments;switch(f.length){case 0:return new l;case 1:return new l(f[0]);case 2:return new l(f[0],f[1]);case 3:return new l(f[0],f[1],f[2]);case 4:return new l(f[0],f[1],f[2],f[3]);case 5:return new l(f[0],f[1],f[2],f[3],f[4]);case 6:return new l(f[0],f[1],f[2],f[3],f[4],f[5]);case 7:return new l(f[0],f[1],f[2],f[3],f[4],f[5],f[6])}var b=id(l.prototype),C=l.apply(b,f);return _r(C)?C:b}}function WOe(l,f,b){var C=mm(l);function N(){for(var W=arguments.length,U=se(W),X=W,Q=ad(N);X--;)U[X]=arguments[X];var le=W<3&&U[0]!==Q&&U[W-1]!==Q?[]:Oc(U,Q);if(W-=le.length,W<b)return eM(l,f,aI,N.placeholder,e,U,le,e,e,b-W);var de=this&&this!==dn&&this instanceof N?C:l;return qi(de,this,U)}return N}function zH(l){return function(f,b,C){var N=Qt(f);if(!gi(f)){var W=Je(b,3);f=fn(f),b=function(X){return W(N[X],X,N)}}var U=l(f,b,C);return U>-1?N[W?f[U]:U]:e}}function JH(l){return Ta(function(f){var b=f.length,C=b,N=ds.prototype.thru;for(l&&f.reverse();C--;){var W=f[C];if(typeof W!="function")throw new ps(i);if(N&&!U&&pI(W)=="wrapper")var U=new ds([],!0)}for(C=U?C:b;++C<b;){W=f[C];var X=pI(W),Q=X=="wrapper"?SR(W):e;Q&&RR(Q[0])&&Q[1]==(w|_|E|T)&&!Q[4].length&&Q[9]==1?U=U[pI(Q[0])].apply(U,Q[3]):U=W.length==1&&RR(W)?U[X]():U.thru(W)}return function(){var le=arguments,de=le[0];if(U&&le.length==1&&pt(de))return U.plant(de).value();for(var ye=0,Ee=b?f[ye].apply(this,le):de;++ye<b;)Ee=f[ye].call(this,Ee);return Ee}})}function aI(l,f,b,C,N,W,U,X,Q,le){var de=f&w,ye=f&v,Ee=f&I,He=f&(_|A),et=f&D,mt=Ee?e:mm(l);function tt(){for(var It=arguments.length,Et=se(It),Ui=It;Ui--;)Et[Ui]=arguments[Ui];if(He)var ri=ad(tt),ji=z2e(Et,ri);if(C&&(Et=UH(Et,C,N,He)),W&&(Et=jH(Et,W,U,He)),It-=ji,He&&It<le){var Lr=Oc(Et,ri);return eM(l,f,aI,tt.placeholder,b,Et,Lr,X,Q,le-It)}var $s=ye?b:this,Oa=Ee?$s[l]:l;return It=Et.length,X?Et=iGe(Et,X):et&&It>1&&Et.reverse(),de&&Q<It&&(Et.length=Q),this&&this!==dn&&this instanceof tt&&(Oa=mt||mm(Oa)),Oa.apply($s,Et)}return tt}function $H(l,f){return function(b,C){return dOe(b,l,f(C),{})}}function cI(l,f){return function(b,C){var N;if(b===e&&C===e)return f;if(b!==e&&(N=b),C!==e){if(N===e)return C;typeof b=="string"||typeof C=="string"?(b=Hi(b),C=Hi(C)):(b=ZH(b),C=ZH(C)),N=l(b,C)}return N}}function IR(l){return Ta(function(f){return f=ur(f,Vi(Je())),yt(function(b){var C=this;return l(f,function(N){return qi(N,C,b)})})})}function uI(l,f){f=f===e?" ":Hi(f);var b=f.length;if(b<2)return b?fR(f,l):f;var C=fR(f,Kb(l/ed(f)));return Qp(f)?Pc(Ks(C),0,l).join(""):C.slice(0,l)}function POe(l,f,b,C){var N=f&v,W=mm(l);function U(){for(var X=-1,Q=arguments.length,le=-1,de=C.length,ye=se(de+Q),Ee=this&&this!==dn&&this instanceof U?W:l;++le<de;)ye[le]=C[le];for(;Q--;)ye[le++]=arguments[++X];return qi(Ee,N?b:this,ye)}return U}function QH(l){return function(f,b,C){return C&&typeof C!="number"&&ti(f,b,C)&&(b=C=e),f=ka(f),b===e?(b=f,f=0):b=ka(b),C=C===e?f<b?1:-1:ka(C),SOe(f,b,C,l)}}function lI(l){return function(f,b){return typeof f=="string"&&typeof b=="string"||(f=gs(f),b=gs(b)),l(f,b)}}function eM(l,f,b,C,N,W,U,X,Q,le){var de=f&_,ye=de?U:e,Ee=de?e:U,He=de?W:e,et=de?e:W;f|=de?E:S,f&=~(de?S:E),f&x||(f&=~(v|I));var mt=[l,f,N,He,ye,et,Ee,X,Q,le],tt=b.apply(e,mt);return RR(l)&&dM(tt,mt),tt.placeholder=C,fM(tt,l,f)}function _R(l){var f=rn[l];return function(b,C){if(b=gs(b),C=C==null?0:Wn(ht(C),292),C&&fH(b)){var N=(Zt(b)+"e").split("e"),W=f(N[0]+"e"+(+N[1]+C));return N=(Zt(W)+"e").split("e"),+(N[0]+"e"+(+N[1]-C))}return f(b)}}var DOe=rd&&1/Pb(new rd([,-0]))[1]==V?function(l){return new rd(l)}:HR;function tM(l){return function(f){var b=Pn(f);return b==ne?JA(f):b==We?nke(f):K2e(f,l(f))}}function Ra(l,f,b,C,N,W,U,X){var Q=f&I;if(!Q&&typeof l!="function")throw new ps(i);var le=C?C.length:0;if(le||(f&=~(E|S),C=N=e),U=U===e?U:nn(ht(U),0),X=X===e?X:ht(X),le-=N?N.length:0,f&S){var de=C,ye=N;C=N=e}var Ee=Q?e:SR(l),He=[l,f,b,C,N,de,ye,W,U,X];if(Ee&&tGe(He,Ee),l=He[0],f=He[1],b=He[2],C=He[3],N=He[4],X=He[9]=He[9]===e?Q?0:l.length:nn(He[9]-le,0),!X&&f&(_|A)&&(f&=~(_|A)),!f||f==v)var et=ZOe(l,f,b);else f==_||f==A?et=WOe(l,f,X):(f==E||f==(v|E))&&!N.length?et=POe(l,f,b,C):et=aI.apply(e,He);var mt=Ee?FH:dM;return fM(mt(et,He),l,f)}function rM(l,f,b,C){return l===e||Js(l,td[b])&&!Dt.call(C,b)?f:l}function nM(l,f,b,C,N,W){return _r(l)&&_r(f)&&(W.set(f,l),nI(l,f,e,nM,W),W.delete(f)),l}function qOe(l){return vm(l)?e:l}function iM(l,f,b,C,N,W){var U=b&m,X=l.length,Q=f.length;if(X!=Q&&!(U&&Q>X))return!1;var le=W.get(l),de=W.get(f);if(le&&de)return le==f&&de==l;var ye=-1,Ee=!0,He=b&g?new Ju:e;for(W.set(l,f),W.set(f,l);++ye<X;){var et=l[ye],mt=f[ye];if(C)var tt=U?C(mt,et,ye,f,l,W):C(et,mt,ye,l,f,W);if(tt!==e){if(tt)continue;Ee=!1;break}if(He){if(!UA(f,function(It,Et){if(!im(He,Et)&&(et===It||N(et,It,b,C,W)))return He.push(Et)})){Ee=!1;break}}else if(!(et===mt||N(et,mt,b,C,W))){Ee=!1;break}}return W.delete(l),W.delete(f),Ee}function VOe(l,f,b,C,N,W,U){switch(b){case G:if(l.byteLength!=f.byteLength||l.byteOffset!=f.byteOffset)return!1;l=l.buffer,f=f.buffer;case So:return!(l.byteLength!=f.byteLength||!W(new Ub(l),new Ub(f)));case Re:case gt:case J:return Js(+l,+f);case _e:return l.name==f.name&&l.message==f.message;case Yr:case $t:return l==f+"";case ne:var X=JA;case We:var Q=C&m;if(X||(X=Pb),l.size!=f.size&&!Q)return!1;var le=U.get(l);if(le)return le==f;C|=g,U.set(l,f);var de=iM(X(l),X(f),C,N,W,U);return U.delete(l),de;case xn:if(um)return um.call(l)==um.call(f)}return!1}function HOe(l,f,b,C,N,W){var U=b&m,X=CR(l),Q=X.length,le=CR(f),de=le.length;if(Q!=de&&!U)return!1;for(var ye=Q;ye--;){var Ee=X[ye];if(!(U?Ee in f:Dt.call(f,Ee)))return!1}var He=W.get(l),et=W.get(f);if(He&&et)return He==f&&et==l;var mt=!0;W.set(l,f),W.set(f,l);for(var tt=U;++ye<Q;){Ee=X[ye];var It=l[Ee],Et=f[Ee];if(C)var Ui=U?C(Et,It,Ee,f,l,W):C(It,Et,Ee,l,f,W);if(!(Ui===e?It===Et||N(It,Et,b,C,W):Ui)){mt=!1;break}tt||(tt=Ee=="constructor")}if(mt&&!tt){var ri=l.constructor,ji=f.constructor;ri!=ji&&"constructor"in l&&"constructor"in f&&!(typeof ri=="function"&&ri instanceof ri&&typeof ji=="function"&&ji instanceof ji)&&(mt=!1)}return W.delete(l),W.delete(f),mt}function Ta(l){return NR(lM(l,e,bM),l+"")}function CR(l){return SH(l,fn,ER)}function xR(l){return SH(l,yi,sM)}var SR=Jb?function(l){return Jb.get(l)}:HR;function pI(l){for(var f=l.name+"",b=nd[f],C=Dt.call(nd,f)?b.length:0;C--;){var N=b[C],W=N.func;if(W==null||W==l)return N.name}return f}function ad(l){var f=Dt.call(O,"placeholder")?O:l;return f.placeholder}function Je(){var l=O.iteratee||qR;return l=l===qR?AH:l,arguments.length?l(arguments[0],arguments[1]):l}function dI(l,f){var b=l.__data__;return JOe(f)?b[typeof f=="string"?"string":"hash"]:b.map}function wR(l){for(var f=fn(l),b=f.length;b--;){var C=f[b],N=l[C];f[b]=[C,N,cM(N)]}return f}function el(l,f){var b=eke(l,f);return EH(b)?b:e}function MOe(l){var f=Dt.call(l,Ku),b=l[Ku];try{l[Ku]=e;var C=!0}catch{}var N=Hb.call(l);return C&&(f?l[Ku]=b:delete l[Ku]),N}var ER=QA?function(l){return l==null?[]:(l=Qt(l),Bc(QA(l),function(f){return pH.call(l,f)}))}:MR,sM=QA?function(l){for(var f=[];l;)kc(f,ER(l)),l=jb(l);return f}:MR,Pn=ei;(eR&&Pn(new eR(new ArrayBuffer(1)))!=G||om&&Pn(new om)!=ne||tR&&Pn(tR.resolve())!=Yt||rd&&Pn(new rd)!=We||am&&Pn(new am)!=xo)&&(Pn=function(l){var f=ei(l),b=f==ze?l.constructor:e,C=b?tl(b):"";if(C)switch(C){case Eke:return G;case Ake:return ne;case Rke:return Yt;case Tke:return We;case Nke:return xo}return f});function UOe(l,f,b){for(var C=-1,N=b.length;++C<N;){var W=b[C],U=W.size;switch(W.type){case"drop":l+=U;break;case"dropRight":f-=U;break;case"take":f=Wn(f,l+U);break;case"takeRight":l=nn(l,f-U);break}}return{start:l,end:f}}function jOe(l){var f=l.match($1e);return f?f[1].split(Q1e):[]}function oM(l,f,b){f=Wc(f,l);for(var C=-1,N=f.length,W=!1;++C<N;){var U=Ao(f[C]);if(!(W=l!=null&&b(l,U)))break;l=l[U]}return W||++C!=N?W:(N=l==null?0:l.length,!!N&&bI(N)&&Na(U,N)&&(pt(l)||rl(l)))}function XOe(l){var f=l.length,b=new l.constructor(f);return f&&typeof l[0]=="string"&&Dt.call(l,"index")&&(b.index=l.index,b.input=l.input),b}function aM(l){return typeof l.constructor=="function"&&!gm(l)?id(jb(l)):{}}function YOe(l,f,b){var C=l.constructor;switch(f){case So:return bR(l);case Re:case gt:return new C(+l);case G:return BOe(l,b);case j:case K:case oe:case pe:case Te:case st:case bt:case tn:case Pi:return HH(l,b);case ne:return new C;case J:case $t:return new C(l);case Yr:return kOe(l);case We:return new C;case xn:return OOe(l)}}function KOe(l,f){var b=f.length;if(!b)return l;var C=b-1;return f[C]=(b>1?"& ":"")+f[C],f=f.join(b>2?", ":" "),l.replace(Ob,`{
155
+ `).some(s=>s.startsWith("sentry-trace:")),!n&&(e.addHeader("sentry-trace",t),r&&e.addHeader("baggage",r))}function Iht(e,t,r){let n=gp.parseUrl(r),i=t.method||"GET",s={"http.method":i};return n.search&&(s["http.query"]=n.search),n.hash&&(s["http.fragment"]=n.hash),TS([e,"optionalAccess",o=>o.startChild,"call",o=>o({op:"http.client",origin:"auto.http.node.undici",description:`${i} ${gp.getSanitizedUrlString(n)}`,data:s})])}aa.Undici=My;aa.nativeNodeFetchintegration=vht});var LL=y(FL=>{c();Object.defineProperty(FL,"__esModule",{value:!0});var ace=require("path"),_ht=ge();function cce(e){return e.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}function Cht(e=process.argv[1]?_ht.dirname(process.argv[1]):process.cwd(),t=ace.sep==="\\"){let r=t?cce(e):e;return n=>{if(!n)return;let i=t?cce(n):n,{dir:s,base:o,ext:a}=ace.posix.parse(i);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,a.length*-1)),s||(s=".");let u=s.lastIndexOf("/node_modules");if(u>-1)return`${s.slice(u+14).replace(/\//g,".")}:${o}`;if(s.startsWith(r)){let p=s.slice(r.length+1).replace(/\//g,".");return p&&(p+=":"),p+=o,p}return o}}FL.createGetModuleFromFilename=Cht});var ZL=y(wu=>{c();var{_optionalChain:xht}=ge();Object.defineProperty(wu,"__esModule",{value:!0});var Fs=St(),yp=ge(),Sht=mae(),wht=uL(),Eht=pS(),Aht=dS(),Rht=mS(),Tht=gS(),Nht=IS(),Bht=CS(),kht=wS(),Oht=AS(),Ght=RS(),Fht=NS(),Lht=LL(),Zht=gL(),uce=[Fs.inboundFiltersIntegration(),Fs.functionToStringIntegration(),Fs.linkedErrorsIntegration(),Fs.requestDataIntegration(),Eht.consoleIntegration(),Tht.httpIntegration(),Fht.nativeNodeFetchintegration(),kht.onUncaughtExceptionIntegration(),Oht.onUnhandledRejectionIntegration(),Rht.contextLinesIntegration(),Nht.localVariablesIntegration(),Aht.nodeContextIntegration(),Bht.modulesIntegration()];function lce(e){let t=Fs.getMainCarrier(),r=xht([t,"access",n=>n.__SENTRY__,"optionalAccess",n=>n.integrations])||[];return[...uce,...r]}function Wht(e={}){Sht.setNodeAsyncContextStrategy(),e.defaultIntegrations===void 0&&(e.defaultIntegrations=lce()),e.dsn===void 0&&process.env.SENTRY_DSN&&(e.dsn=process.env.SENTRY_DSN);let t=process.env.SENTRY_TRACES_SAMPLE_RATE;if(e.tracesSampleRate===void 0&&t){let n=parseFloat(t);isFinite(n)&&(e.tracesSampleRate=n)}if(e.release===void 0){let n=pce();n!==void 0?e.release=n:e.autoSessionTracking=!1}e.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(e.environment=process.env.SENTRY_ENVIRONMENT),e.autoSessionTracking===void 0&&e.dsn!==void 0&&(e.autoSessionTracking=!0),e.instrumenter===void 0&&(e.instrumenter="sentry");let r={...e,stackParser:yp.stackParserFromStackParserOptions(e.stackParser||dce),integrations:Fs.getIntegrationsToSetup(e),transport:e.transport||Zht.makeNodeTransport};if(Fs.initAndBind(e.clientClass||wht.NodeClient,r),e.autoSessionTracking&&Dht(),qht(),e.spotlight){let n=Fs.getClient();if(n&&n.addIntegration){let i=n.getOptions().integrations;for(let s of i)n.addIntegration(s);n.addIntegration(Ght.spotlightIntegration({sidecarUrl:typeof e.spotlight=="string"?e.spotlight:void 0}))}}}function Pht(e){if(e===void 0)return!1;let t=e&&e.getOptions();return t&&t.autoSessionTracking!==void 0?t.autoSessionTracking:!1}function pce(e){return process.env.SENTRY_RELEASE?process.env.SENTRY_RELEASE:yp.GLOBAL_OBJ.SENTRY_RELEASE&&yp.GLOBAL_OBJ.SENTRY_RELEASE.id?yp.GLOBAL_OBJ.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||process.env.CF_PAGES_COMMIT_SHA||e}var dce=yp.createStackParser(yp.nodeStackLineParser(Lht.createGetModuleFromFilename()));function Dht(){Fs.startSession(),process.on("beforeExit",()=>{let e=Fs.getIsolationScope().getSession();e&&!["exited","crashed"].includes(e.status)&&Fs.endSession()})}function qht(){let e=(process.env.SENTRY_USE_ENVIRONMENT||"").toLowerCase();if(!["false","n","no","off","0"].includes(e)){let t=process.env.SENTRY_TRACE,r=process.env.SENTRY_BAGGAGE,n=yp.propagationContextFromHeaders(t,r);Fs.getCurrentScope().setPropagationContext(n)}}wu.defaultIntegrations=uce;wu.defaultStackParser=dce;wu.getDefaultIntegrations=lce;wu.getSentryRelease=pce;wu.init=Wht;wu.isAutoSessionTrackingEnabled=Pht});var fce=y(PL=>{c();Object.defineProperty(PL,"__esModule",{value:!0});var BS=require("fs"),WL=require("path");function Vht(e){let t=WL.resolve(e);if(!BS.existsSync(t))throw new Error(`Cannot read contents of ${t}. Directory does not exist.`);if(!BS.statSync(t).isDirectory())throw new Error(`Cannot read contents of ${t}, because it is not a directory.`);let r=n=>BS.readdirSync(n).reduce((i,s)=>{let o=WL.join(n,s);return BS.statSync(o).isDirectory()?i.concat(r(o)):(i.push(o),i)},[]);return r(t).map(n=>WL.relative(t,n))}PL.deepReadDirSync=Vht});var mce=y(hce=>{c();hce.base64WorkerScript="aW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJ2luc3BlY3Rvcic7CmltcG9ydCB7IHdvcmtlckRhdGEsIHBhcmVudFBvcnQgfSBmcm9tICd3b3JrZXJfdGhyZWFkcyc7CmltcG9ydCB7IHBvc2l4LCBzZXAgfSBmcm9tICdwYXRoJzsKaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJzsKaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnOwppbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7CmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7CmltcG9ydCB7IGNyZWF0ZUd6aXAgfSBmcm9tICd6bGliJzsKaW1wb3J0ICogYXMgbmV0IGZyb20gJ25ldCc7CmltcG9ydCAqIGFzIHRscyBmcm9tICd0bHMnOwoKLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZApjb25zdCBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIG9uZSBvZiBhIGZldyBFcnJvciBvciBFcnJvci1saWtlCiAqIHtAbGluayBpc0Vycm9yfS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXJyb3Iod2F0KSB7CiAgc3dpdGNoIChvYmplY3RUb1N0cmluZy5jYWxsKHdhdCkpIHsKICAgIGNhc2UgJ1tvYmplY3QgRXJyb3JdJzoKICAgIGNhc2UgJ1tvYmplY3QgRXhjZXB0aW9uXSc6CiAgICBjYXNlICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nOgogICAgICByZXR1cm4gdHJ1ZTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBpc0luc3RhbmNlT2Yod2F0LCBFcnJvcik7CiAgfQp9Ci8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gYnVpbHQtaW4gY2xhc3MuCiAqCiAqIEBwYXJhbSB3YXQgVGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQKICogQHBhcmFtIGNsYXNzTmFtZQogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0J1aWx0aW4od2F0LCBjbGFzc05hbWUpIHsKICByZXR1cm4gb2JqZWN0VG9TdHJpbmcuY2FsbCh3YXQpID09PSBgW29iamVjdCAke2NsYXNzTmFtZX1dYDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZwogKiB7QGxpbmsgaXNTdHJpbmd9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNTdHJpbmcod2F0KSB7CiAgcmV0dXJuIGlzQnVpbHRpbih3YXQsICdTdHJpbmcnKTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBvYmplY3QgbGl0ZXJhbCwgb3IgYSBjbGFzcyBpbnN0YW5jZS4KICoge0BsaW5rIGlzUGxhaW5PYmplY3R9LgogKgogKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh3YXQpIHsKICByZXR1cm4gaXNCdWlsdGluKHdhdCwgJ09iamVjdCcpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlCiAqIHtAbGluayBpc0V2ZW50fS4KICoKICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuCiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC4KICovCmZ1bmN0aW9uIGlzRXZlbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHdhdCwgRXZlbnQpOwp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UKICoge0BsaW5rIGlzRWxlbWVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc0VsZW1lbnQod2F0KSB7CiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlIGhhcyBhIHRoZW4gZnVuY3Rpb24uCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKi8KZnVuY3Rpb24gaXNUaGVuYWJsZSh3YXQpIHsKICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzCiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7Cn0KCi8qKgogKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYSBTeW50aGV0aWNFdmVudAogKiB7QGxpbmsgaXNTeW50aGV0aWNFdmVudH0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KHdhdCkgewogIHJldHVybiBpc1BsYWluT2JqZWN0KHdhdCkgJiYgJ25hdGl2ZUV2ZW50JyBpbiB3YXQgJiYgJ3ByZXZlbnREZWZhdWx0JyBpbiB3YXQgJiYgJ3N0b3BQcm9wYWdhdGlvbicgaW4gd2F0Owp9CgovKioKICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUgaXMgTmFOCiAqIHtAbGluayBpc05hTn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc05hTiQxKHdhdCkgewogIHJldHVybiB0eXBlb2Ygd2F0ID09PSAnbnVtYmVyJyAmJiB3YXQgIT09IHdhdDsKfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci4KICoge0BsaW5rIGlzSW5zdGFuY2VPZn0uCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcGFyYW0gYmFzZSBBIGNvbnN0cnVjdG9yIHRvIGJlIHVzZWQgaW4gYSBjaGVjay4KICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LgogKi8KZnVuY3Rpb24gaXNJbnN0YW5jZU9mKHdhdCwgYmFzZSkgewogIHRyeSB7CiAgICByZXR1cm4gd2F0IGluc3RhbmNlb2YgYmFzZTsKICB9IGNhdGNoIChfZSkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLyoqCiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIFZ1ZSBWaWV3TW9kZWwuCiAqCiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLgogKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuCiAqLwpmdW5jdGlvbiBpc1Z1ZVZpZXdNb2RlbCh3YXQpIHsKICAvLyBOb3QgdXNpbmcgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBiZWNhdXNlIGluIFZ1ZSAzIGl0IHdvdWxkIHJlYWQgdGhlIGluc3RhbmNlJ3MgU3ltYm9sKFN5bWJvbC50b1N0cmluZ1RhZykgcHJvcGVydHkuCiAgcmV0dXJuICEhKHR5cGVvZiB3YXQgPT09ICdvYmplY3QnICYmIHdhdCAhPT0gbnVsbCAmJiAoKHdhdCApLl9faXNWdWUgfHwgKHdhdCApLl9pc1Z1ZSkpOwp9CgovKiogSW50ZXJuYWwgZ2xvYmFsIHdpdGggY29tbW9uIHByb3BlcnRpZXMgYW5kIFNlbnRyeSBleHRlbnNpb25zICAqLwoKLy8gVGhlIGNvZGUgYmVsb3cgZm9yICdpc0dsb2JhbE9iaicgYW5kICdHTE9CQUxfT0JKJyB3YXMgY29waWVkIGZyb20gY29yZS1qcyBiZWZvcmUgbW9kaWZpY2F0aW9uCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvMWI5NDRkZjU1MjgyY2RjOTljOTBkYjVmNDllYjBiNmVkYTJjYzBhMy9wYWNrYWdlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanMKLy8gY29yZS1qcyBoYXMgdGhlIGZvbGxvd2luZyBsaWNlbmNlOgovLwovLyBDb3B5cmlnaHQgKGMpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYKLy8KLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQovLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAovLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci8vCi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgovLwovLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgovLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgovLyBUSEUgU09GVFdBUkUuCgovKiogUmV0dXJucyAnb2JqJyBpZiBpdCdzIHRoZSBnbG9iYWwgb2JqZWN0LCBvdGhlcndpc2UgcmV0dXJucyB1bmRlZmluZWQgKi8KZnVuY3Rpb24gaXNHbG9iYWxPYmoob2JqKSB7CiAgcmV0dXJuIG9iaiAmJiBvYmouTWF0aCA9PSBNYXRoID8gb2JqIDogdW5kZWZpbmVkOwp9CgovKiogR2V0J3MgdGhlIGdsb2JhbCBvYmplY3QgZm9yIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcnVudGltZSAqLwpjb25zdCBHTE9CQUxfT0JKID0KICAodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgaXNHbG9iYWxPYmooZ2xvYmFsVGhpcykpIHx8CiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHdpbmRvdykpIHx8CiAgKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKHNlbGYpKSB8fAogICh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGlzR2xvYmFsT2JqKGdsb2JhbCkpIHx8CiAgKGZ1bmN0aW9uICgpIHsKICAgIHJldHVybiB0aGlzOwogIH0pKCkgfHwKICB7fTsKCi8qKgogKiBAZGVwcmVjYXRlZCBVc2UgR0xPQkFMX09CSiBpbnN0ZWFkIG9yIFdJTkRPVyBmcm9tIEBzZW50cnkvYnJvd3Nlci4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjgKICovCmZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHsKICByZXR1cm4gR0xPQkFMX09CSiA7Cn0KCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgpjb25zdCBXSU5ET1cgPSBnZXRHbG9iYWxPYmplY3QoKTsKCmNvbnN0IERFRkFVTFRfTUFYX1NUUklOR19MRU5HVEggPSA4MDsKCi8qKgogKiBHaXZlbiBhIGNoaWxkIERPTSBlbGVtZW50LCByZXR1cm5zIGEgcXVlcnktc2VsZWN0b3Igc3RhdGVtZW50IGRlc2NyaWJpbmcgdGhhdAogKiBhbmQgaXRzIGFuY2VzdG9ycwogKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gaHRtbFRyZWVBc1N0cmluZygKICBlbGVtLAogIG9wdGlvbnMgPSB7fSwKKSB7CiAgaWYgKCFlbGVtKSB7CiAgICByZXR1cm4gJzx1bmtub3duPic7CiAgfQoKICAvLyB0cnkvY2F0Y2ggYm90aDoKICAvLyAtIGFjY2Vzc2luZyBldmVudC50YXJnZXQgKHNlZSBnZXRzZW50cnkvcmF2ZW4tanMjODM4LCAjNzY4KQogIC8vIC0gYGh0bWxUcmVlQXNTdHJpbmdgIGJlY2F1c2UgaXQncyBjb21wbGV4LCBhbmQganVzdCBhY2Nlc3NpbmcgdGhlIERPTSBpbmNvcnJlY3RseQogIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCiAgdHJ5IHsKICAgIGxldCBjdXJyZW50RWxlbSA9IGVsZW0gOwogICAgY29uc3QgTUFYX1RSQVZFUlNFX0hFSUdIVCA9IDU7CiAgICBjb25zdCBvdXQgPSBbXTsKICAgIGxldCBoZWlnaHQgPSAwOwogICAgbGV0IGxlbiA9IDA7CiAgICBjb25zdCBzZXBhcmF0b3IgPSAnID4gJzsKICAgIGNvbnN0IHNlcExlbmd0aCA9IHNlcGFyYXRvci5sZW5ndGg7CiAgICBsZXQgbmV4dFN0cjsKICAgIGNvbnN0IGtleUF0dHJzID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zLmtleUF0dHJzOwogICAgY29uc3QgbWF4U3RyaW5nTGVuZ3RoID0gKCFBcnJheS5pc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoKSB8fCBERUZBVUxUX01BWF9TVFJJTkdfTEVOR1RIOwoKICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHsKICAgICAgbmV4dFN0ciA9IF9odG1sRWxlbWVudEFzU3RyaW5nKGN1cnJlbnRFbGVtLCBrZXlBdHRycyk7CiAgICAgIC8vIGJhaWwgb3V0IGlmCiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnQKICAgICAgLy8gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGV4Y2VlZHMgbWF4U3RyaW5nTGVuZ3RoCiAgICAgIC8vICAgKGlnbm9yZSB0aGlzIGxpbWl0IGlmIHdlIGFyZSBvbiB0aGUgZmlyc3QgaXRlcmF0aW9uKQogICAgICBpZiAobmV4dFN0ciA9PT0gJ2h0bWwnIHx8IChoZWlnaHQgPiAxICYmIGxlbiArIG91dC5sZW5ndGggKiBzZXBMZW5ndGggKyBuZXh0U3RyLmxlbmd0aCA+PSBtYXhTdHJpbmdMZW5ndGgpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIG91dC5wdXNoKG5leHRTdHIpOwoKICAgICAgbGVuICs9IG5leHRTdHIubGVuZ3RoOwogICAgICBjdXJyZW50RWxlbSA9IGN1cnJlbnRFbGVtLnBhcmVudE5vZGU7CiAgICB9CgogICAgcmV0dXJuIG91dC5yZXZlcnNlKCkuam9pbihzZXBhcmF0b3IpOwogIH0gY2F0Y2ggKF9vTykgewogICAgcmV0dXJuICc8dW5rbm93bj4nOwogIH0KfQoKLyoqCiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnQKICogZS5nLiBbSFRNTEVsZW1lbnRdID0+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdCiAqIEByZXR1cm5zIGdlbmVyYXRlZCBET00gcGF0aAogKi8KZnVuY3Rpb24gX2h0bWxFbGVtZW50QXNTdHJpbmcoZWwsIGtleUF0dHJzKSB7CiAgY29uc3QgZWxlbSA9IGVsCgo7CgogIGNvbnN0IG91dCA9IFtdOwogIGxldCBjbGFzc05hbWU7CiAgbGV0IGNsYXNzZXM7CiAgbGV0IGtleTsKICBsZXQgYXR0cjsKICBsZXQgaTsKCiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHsKICAgIHJldHVybiAnJzsKICB9CgogIC8vIEB0cy1leHBlY3QtZXJyb3IgV0lORE9XIGhhcyBIVE1MRWxlbWVudAogIGlmIChXSU5ET1cuSFRNTEVsZW1lbnQpIHsKICAgIC8vIElmIHVzaW5nIHRoZSBjb21wb25lbnQgbmFtZSBhbm5vdGF0aW9uIHBsdWdpbiwgdGhpcyB2YWx1ZSBtYXkgYmUgYXZhaWxhYmxlIG9uIHRoZSBET00gbm9kZQogICAgaWYgKGVsZW0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbGVtLmRhdGFzZXQgJiYgZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXSkgewogICAgICByZXR1cm4gZWxlbS5kYXRhc2V0WydzZW50cnlDb21wb25lbnQnXTsKICAgIH0KICB9CgogIG91dC5wdXNoKGVsZW0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKCiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuCiAgY29uc3Qga2V5QXR0clBhaXJzID0KICAgIGtleUF0dHJzICYmIGtleUF0dHJzLmxlbmd0aAogICAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKQogICAgICA6IG51bGw7CgogIGlmIChrZXlBdHRyUGFpcnMgJiYga2V5QXR0clBhaXJzLmxlbmd0aCkgewogICAga2V5QXR0clBhaXJzLmZvckVhY2goa2V5QXR0clBhaXIgPT4gewogICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PSIke2tleUF0dHJQYWlyWzFdfSJdYCk7CiAgICB9KTsKICB9IGVsc2UgewogICAgaWYgKGVsZW0uaWQpIHsKICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWU7CiAgICBpZiAoY2xhc3NOYW1lICYmIGlzU3RyaW5nKGNsYXNzTmFtZSkpIHsKICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXHMrLyk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgYWxsb3dlZEF0dHJzID0gWydhcmlhLWxhYmVsJywgJ3R5cGUnLCAnbmFtZScsICd0aXRsZScsICdhbHQnXTsKICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7CiAgICBrZXkgPSBhbGxvd2VkQXR0cnNbaV07CiAgICBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoa2V5KTsKICAgIGlmIChhdHRyKSB7CiAgICAgIG91dC5wdXNoKGBbJHtrZXl9PSIke2F0dHJ9Il1gKTsKICAgIH0KICB9CiAgcmV0dXJuIG91dC5qb2luKCcnKTsKfQoKLyoqCiAqIFRoaXMgc2VydmVzIGFzIGEgYnVpbGQgdGltZSBmbGFnIHRoYXQgd2lsbCBiZSB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCBmYWxzZSBpbiBub24tZGVidWcgYnVpbGRzIG9yIGlmIHVzZXJzIHJlcGxhY2UgYF9fU0VOVFJZX0RFQlVHX19gIGluIHRoZWlyIGdlbmVyYXRlZCBjb2RlLgogKgogKiBBVFRFTlRJT046IFRoaXMgY29uc3RhbnQgbXVzdCBuZXZlciBjcm9zcyBwYWNrYWdlIGJvdW5kYXJpZXMgKGkuZS4gYmUgZXhwb3J0ZWQpIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGNhbiBiZSB1c2VkIGZvciB0cmVlIHNoYWtpbmcuCiAqLwpjb25zdCBERUJVR19CVUlMRCQxID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKiBQcmVmaXggZm9yIGxvZ2dpbmcgc3RyaW5ncyAqLwpjb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnOwoKY29uc3QgQ09OU09MRV9MRVZFTFMgPSBbCiAgJ2RlYnVnJywKICAnaW5mbycsCiAgJ3dhcm4nLAogICdlcnJvcicsCiAgJ2xvZycsCiAgJ2Fzc2VydCcsCiAgJ3RyYWNlJywKXSA7CgovKiogVGhpcyBtYXkgYmUgbXV0YXRlZCBieSB0aGUgY29uc29sZSBpbnN0cnVtZW50YXRpb24uICovCmNvbnN0IG9yaWdpbmFsQ29uc29sZU1ldGhvZHMKCiA9IHt9OwoKLyoqIEpTRG9jICovCgovKioKICogVGVtcG9yYXJpbHkgZGlzYWJsZSBzZW50cnkgY29uc29sZSBpbnN0cnVtZW50YXRpb25zLgogKgogKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRvIHJ1biBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBgY29uc29sZWAgbWVzc2FnZXMKICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrCiAqLwpmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjaykgewogIGlmICghKCdjb25zb2xlJyBpbiBHTE9CQUxfT0JKKSkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfQoKICBjb25zdCBjb25zb2xlID0gR0xPQkFMX09CSi5jb25zb2xlIDsKICBjb25zdCB3cmFwcGVkRnVuY3MgPSB7fTsKCiAgY29uc3Qgd3JhcHBlZExldmVscyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsQ29uc29sZU1ldGhvZHMpIDsKCiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHMKICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgY29uc3Qgb3JpZ2luYWxDb25zb2xlTWV0aG9kID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kc1tsZXZlbF0gOwogICAgd3JhcHBlZEZ1bmNzW2xldmVsXSA9IGNvbnNvbGVbbGV2ZWxdIDsKICAgIGNvbnNvbGVbbGV2ZWxdID0gb3JpZ2luYWxDb25zb2xlTWV0aG9kOwogIH0pOwoKICB0cnkgewogICAgcmV0dXJuIGNhbGxiYWNrKCk7CiAgfSBmaW5hbGx5IHsKICAgIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlCiAgICB3cmFwcGVkTGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4gewogICAgICBjb25zb2xlW2xldmVsXSA9IHdyYXBwZWRGdW5jc1tsZXZlbF0gOwogICAgfSk7CiAgfQp9CgpmdW5jdGlvbiBtYWtlTG9nZ2VyKCkgewogIGxldCBlbmFibGVkID0gZmFsc2U7CiAgY29uc3QgbG9nZ2VyID0gewogICAgZW5hYmxlOiAoKSA9PiB7CiAgICAgIGVuYWJsZWQgPSB0cnVlOwogICAgfSwKICAgIGRpc2FibGU6ICgpID0+IHsKICAgICAgZW5hYmxlZCA9IGZhbHNlOwogICAgfSwKICAgIGlzRW5hYmxlZDogKCkgPT4gZW5hYmxlZCwKICB9OwoKICBpZiAoREVCVUdfQlVJTEQkMSkgewogICAgQ09OU09MRV9MRVZFTFMuZm9yRWFjaChuYW1lID0+IHsKICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgICAgbG9nZ2VyW25hbWVdID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICBpZiAoZW5hYmxlZCkgewogICAgICAgICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAgICAgICBHTE9CQUxfT0JKLmNvbnNvbGVbbmFtZV0oYCR7UFJFRklYfVske25hbWV9XTpgLCAuLi5hcmdzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICBDT05TT0xFX0xFVkVMUy5mb3JFYWNoKG5hbWUgPT4gewogICAgICBsb2dnZXJbbmFtZV0gPSAoKSA9PiB1bmRlZmluZWQ7CiAgICB9KTsKICB9CgogIHJldHVybiBsb2dnZXIgOwp9Cgpjb25zdCBsb2dnZXIgPSBtYWtlTG9nZ2VyKCk7CgovKioKICogUmVuZGVycyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHNuLgogKgogKiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcmVuZGVyIHRoZSBwdWJsaWMgcmVwcmVzZW50YXRpb24gd2l0aG91dCB0aGUgcGFzc3dvcmQKICogY29tcG9uZW50LiBUbyBnZXQgdGhlIGRlcHJlY2F0ZWQgcHJpdmF0ZSByZXByZXNlbnRhdGlvbiwgc2V0IGB3aXRoUGFzc3dvcmRgCiAqIHRvIHRydWUuCiAqCiAqIEBwYXJhbSB3aXRoUGFzc3dvcmQgV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIHBhc3N3b3JkIHdpbGwgYmUgaW5jbHVkZWQuCiAqLwpmdW5jdGlvbiBkc25Ub1N0cmluZyhkc24sIHdpdGhQYXNzd29yZCA9IGZhbHNlKSB7CiAgY29uc3QgeyBob3N0LCBwYXRoLCBwYXNzLCBwb3J0LCBwcm9qZWN0SWQsIHByb3RvY29sLCBwdWJsaWNLZXkgfSA9IGRzbjsKICByZXR1cm4gKAogICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICsKICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YAogICk7Cn0KCi8qKiBBbiBlcnJvciBlbWl0dGVkIGJ5IFNlbnRyeSBTREtzIGFuZCByZWxhdGVkIHV0aWxpdGllcy4gKi8KY2xhc3MgU2VudHJ5RXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIERpc3BsYXkgbmFtZSBvZiB0aGlzIGVycm9yIGluc3RhbmNlLiAqLwoKICAgY29uc3RydWN0b3IoIG1lc3NhZ2UsIGxvZ0xldmVsID0gJ3dhcm4nKSB7CiAgICBzdXBlcihtZXNzYWdlKTt0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOwogICAgdGhpcy5uYW1lID0gbmV3LnRhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTsKICAgIC8vIFRoaXMgc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIGBFcnJvcmAsIG5vdCBgU2VudHJ5RXJyb3JgLiBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIHRoaXMsIGJ1dCBjb21tZW50aW5nIHRoaXMgbGluZQogICAgLy8gb3V0IGNhdXNlcyB2YXJpb3VzIChzZWVtaW5nbHkgdG90YWxseSB1bnJlbGF0ZWQpIHBsYXl3cmlnaHQgdGVzdHMgY29uc2lzdGVudGx5IHRpbWUgb3V0LiBGWUksIHRoaXMgbWFrZXMKICAgIC8vIGluc3RhbmNlcyBvZiBgU2VudHJ5RXJyb3JgIGZhaWwgYG9iaiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yYCBjaGVja3MuCiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpOwogICAgdGhpcy5sb2dMZXZlbCA9IGxvZ0xldmVsOwogIH0KfQoKLyoqCiAqIEVuY29kZXMgZ2l2ZW4gb2JqZWN0IGludG8gdXJsLWZyaWVuZGx5IGZvcm1hdAogKgogKiBAcGFyYW0gb2JqZWN0IEFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlcmlhbGl6YWJsZSB2YWx1ZXMKICogQHJldHVybnMgc3RyaW5nIEVuY29kZWQKICovCmZ1bmN0aW9uIHVybEVuY29kZShvYmplY3QpIHsKICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KQogICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKQogICAgLmpvaW4oJyYnKTsKfQoKLyoqCiAqIFRyYW5zZm9ybXMgYW55IGBFcnJvcmAgb3IgYEV2ZW50YCBpbnRvIGEgcGxhaW4gb2JqZWN0IHdpdGggYWxsIG9mIHRoZWlyIGVudW1lcmFibGUgcHJvcGVydGllcywgYW5kIHNvbWUgb2YgdGhlaXIKICogbm9uLWVudW1lcmFibGUgcHJvcGVydGllcyBhdHRhY2hlZC4KICoKICogQHBhcmFtIHZhbHVlIEluaXRpYWwgc291cmNlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2Zvcm0gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHVzYWJsZSBieSB0aGUgc2VyaWFsaXplcgogKiBAcmV0dXJucyBBbiBFdmVudCBvciBFcnJvciB0dXJuZWQgaW50byBhbiBvYmplY3QgLSBvciB0aGUgdmFsdWUgYXJndXJtZW50IGl0c2VsZiwgd2hlbiB2YWx1ZSBpcyBuZWl0aGVyIGFuIEV2ZW50IG5vcgogKiAgYW4gRXJyb3IuCiAqLwpmdW5jdGlvbiBjb252ZXJ0VG9QbGFpbk9iamVjdCgKICB2YWx1ZSwKKQoKIHsKICBpZiAoaXNFcnJvcih2YWx1ZSkpIHsKICAgIHJldHVybiB7CiAgICAgIG1lc3NhZ2U6IHZhbHVlLm1lc3NhZ2UsCiAgICAgIG5hbWU6IHZhbHVlLm5hbWUsCiAgICAgIHN0YWNrOiB2YWx1ZS5zdGFjaywKICAgICAgLi4uZ2V0T3duUHJvcGVydGllcyh2YWx1ZSksCiAgICB9OwogIH0gZWxzZSBpZiAoaXNFdmVudCh2YWx1ZSkpIHsKICAgIGNvbnN0IG5ld09iagoKID0gewogICAgICB0eXBlOiB2YWx1ZS50eXBlLAogICAgICB0YXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLnRhcmdldCksCiAgICAgIGN1cnJlbnRUYXJnZXQ6IHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHZhbHVlLmN1cnJlbnRUYXJnZXQpLAogICAgICAuLi5nZXRPd25Qcm9wZXJ0aWVzKHZhbHVlKSwKICAgIH07CgogICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHsKICAgICAgbmV3T2JqLmRldGFpbCA9IHZhbHVlLmRldGFpbDsKICAgIH0KCiAgICByZXR1cm4gbmV3T2JqOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovKiogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFyZ2V0IG9mIGFuIGBFdmVudGAgb2JqZWN0ICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50VGFyZ2V0KHRhcmdldCkgewogIHRyeSB7CiAgICByZXR1cm4gaXNFbGVtZW50KHRhcmdldCkgPyBodG1sVHJlZUFzU3RyaW5nKHRhcmdldCkgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGFyZ2V0KTsKICB9IGNhdGNoIChfb08pIHsKICAgIHJldHVybiAnPHVua25vd24+JzsKICB9Cn0KCi8qKiBGaWx0ZXJzIG91dCBhbGwgYnV0IGFuIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzICovCmZ1bmN0aW9uIGdldE93blByb3BlcnRpZXMob2JqKSB7CiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbCkgewogICAgY29uc3QgZXh0cmFjdGVkUHJvcHMgPSB7fTsKICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gb2JqKSB7CiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHsKICAgICAgICBleHRyYWN0ZWRQcm9wc1twcm9wZXJ0eV0gPSAob2JqIClbcHJvcGVydHldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXh0cmFjdGVkUHJvcHM7CiAgfSBlbHNlIHsKICAgIHJldHVybiB7fTsKICB9Cn0KCi8qKgogKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gYSBuZXcgb2JqZWN0IGhhdmluZyByZW1vdmVkIGFsbCBmaWVsZHMgd2hvc2UgdmFsdWUgd2FzIGB1bmRlZmluZWRgLgogKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuCiAqCiAqIEF0dGVudGlvbjogVGhpcyBmdW5jdGlvbiBrZWVwcyBjaXJjdWxhciByZWZlcmVuY2VzIGluIHRoZSByZXR1cm5lZCBvYmplY3QuCiAqLwpmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5cyhpbnB1dFZhbHVlKSB7CiAgLy8gVGhpcyBtYXAga2VlcHMgdHJhY2sgb2Ygd2hhdCBhbHJlYWR5IHZpc2l0ZWQgbm9kZXMgbWFwIHRvLgogIC8vIE91ciBTZXQgLSBiYXNlZCBtZW1vQnVpbGRlciBkb2Vzbid0IHdvcmsgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8gdGhlIG91dHB1dCBvYmplY3QgdG8gaGF2ZSB0aGUgc2FtZSBjaXJjdWxhcgogIC8vIHJlZmVyZW5jZXMgYXMgdGhlIGlucHV0IG9iamVjdC4KICBjb25zdCBtZW1vaXphdGlvbk1hcCA9IG5ldyBNYXAoKTsKCiAgLy8gVGhpcyBmdW5jdGlvbiBqdXN0IHByb3hpZXMgYF9kcm9wVW5kZWZpbmVkS2V5c2AgdG8ga2VlcCB0aGUgYG1lbW9CdWlsZGVyYCBvdXQgb2YgdGhpcyBmdW5jdGlvbidzIEFQSQogIHJldHVybiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApOwp9CgpmdW5jdGlvbiBfZHJvcFVuZGVmaW5lZEtleXMoaW5wdXRWYWx1ZSwgbWVtb2l6YXRpb25NYXApIHsKICBpZiAoaXNQb2pvKGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBvYmplY3QgaXQgd2FzIG1hcHBlZCB0byBpbiB0aGUgbmV3IG9iamVjdAogICAgY29uc3QgbWVtb1ZhbCA9IG1lbW9pemF0aW9uTWFwLmdldChpbnB1dFZhbHVlKTsKICAgIGlmIChtZW1vVmFsICE9PSB1bmRlZmluZWQpIHsKICAgICAgcmV0dXJuIG1lbW9WYWwgOwogICAgfQoKICAgIGNvbnN0IHJldHVyblZhbHVlID0ge307CiAgICAvLyBTdG9yZSB0aGUgbWFwcGluZyBvZiB0aGlzIHZhbHVlIGluIGNhc2Ugd2UgdmlzaXQgaXQgYWdhaW4sIGluIGNhc2Ugb2YgY2lyY3VsYXIgZGF0YQogICAgbWVtb2l6YXRpb25NYXAuc2V0KGlucHV0VmFsdWUsIHJldHVyblZhbHVlKTsKCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnB1dFZhbHVlKSkgewogICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWVba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICByZXR1cm5WYWx1ZVtrZXldID0gX2Ryb3BVbmRlZmluZWRLZXlzKGlucHV0VmFsdWVba2V5XSwgbWVtb2l6YXRpb25NYXApOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIGlmIChBcnJheS5pc0FycmF5KGlucHV0VmFsdWUpKSB7CiAgICAvLyBJZiB0aGlzIG5vZGUgaGFzIGFscmVhZHkgYmVlbiB2aXNpdGVkIGR1ZSB0byBhIGNpcmN1bGFyIHJlZmVyZW5jZSwgcmV0dXJuIHRoZSBhcnJheSBpdCB3YXMgbWFwcGVkIHRvIGluIHRoZSBuZXcgb2JqZWN0CiAgICBjb25zdCBtZW1vVmFsID0gbWVtb2l6YXRpb25NYXAuZ2V0KGlucHV0VmFsdWUpOwogICAgaWYgKG1lbW9WYWwgIT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm4gbWVtb1ZhbCA7CiAgICB9CgogICAgY29uc3QgcmV0dXJuVmFsdWUgPSBbXTsKICAgIC8vIFN0b3JlIHRoZSBtYXBwaW5nIG9mIHRoaXMgdmFsdWUgaW4gY2FzZSB3ZSB2aXNpdCBpdCBhZ2FpbiwgaW4gY2FzZSBvZiBjaXJjdWxhciBkYXRhCiAgICBtZW1vaXphdGlvbk1hcC5zZXQoaW5wdXRWYWx1ZSwgcmV0dXJuVmFsdWUpOwoKICAgIGlucHV0VmFsdWUuZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICByZXR1cm5WYWx1ZS5wdXNoKF9kcm9wVW5kZWZpbmVkS2V5cyhpdGVtLCBtZW1vaXphdGlvbk1hcCkpOwogICAgfSk7CgogICAgcmV0dXJuIHJldHVyblZhbHVlIDsKICB9CgogIHJldHVybiBpbnB1dFZhbHVlOwp9CgpmdW5jdGlvbiBpc1Bvam8oaW5wdXQpIHsKICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB0cnkgewogICAgY29uc3QgbmFtZSA9IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICkuY29uc3RydWN0b3IubmFtZTsKICAgIHJldHVybiAhbmFtZSB8fCBuYW1lID09PSAnT2JqZWN0JzsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8qKgogKiBEb2VzIHRoaXMgZmlsZW5hbWUgbG9vayBsaWtlIGl0J3MgcGFydCBvZiB0aGUgYXBwIGNvZGU/CiAqLwpmdW5jdGlvbiBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUsIGlzTmF0aXZlID0gZmFsc2UpIHsKICBjb25zdCBpc0ludGVybmFsID0KICAgIGlzTmF0aXZlIHx8CiAgICAoZmlsZW5hbWUgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSBsaW51eCBwYXRoCiAgICAgICFmaWxlbmFtZS5zdGFydHNXaXRoKCcvJykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgaXQncyBhbiBhYnNvbHV0ZSB3aW5kb3dzIHBhdGgKICAgICAgIWZpbGVuYW1lLm1hdGNoKC9eW0EtWl06LykgJiYKICAgICAgLy8gSXQncyBub3QgaW50ZXJuYWwgaWYgdGhlIHBhdGggaXMgc3RhcnRpbmcgd2l0aCBhIGRvdAogICAgICAhZmlsZW5hbWUuc3RhcnRzV2l0aCgnLicpICYmCiAgICAgIC8vIEl0J3Mgbm90IGludGVybmFsIGlmIHRoZSBmcmFtZSBoYXMgYSBwcm90b2NvbC4gSW4gbm9kZSwgdGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIGlmIHRoZSBmaWxlIGdvdCBwcmUtcHJvY2Vzc2VkIHdpdGggYSBidW5kbGVyIGxpa2Ugd2VicGFjawogICAgICAhZmlsZW5hbWUubWF0Y2goL15bYS16QS1aXShbYS16QS1aMC05LlwtK10pKjpcL1wvLykpOyAvLyBTY2hlbWEgZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM2NDE3ODIKCiAgLy8gaW5fYXBwIGlzIGFsbCB0aGF0J3Mgbm90IGFuIGludGVybmFsIE5vZGUgZnVuY3Rpb24gb3IgYSBtb2R1bGUgd2l0aGluIG5vZGVfbW9kdWxlcwogIC8vIG5vdGUgdGhhdCBpc05hdGl2ZSBhcHBlYXJzIHRvIHJldHVybiB0cnVlIGV2ZW4gZm9yIG5vZGUgY29yZSBsaWJyYXJpZXMKICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9yYXZlbi1ub2RlL2lzc3Vlcy8xNzYKCiAgcmV0dXJuICFpc0ludGVybmFsICYmIGZpbGVuYW1lICE9PSB1bmRlZmluZWQgJiYgIWZpbGVuYW1lLmluY2x1ZGVzKCdub2RlX21vZHVsZXMvJyk7Cn0KCmNvbnN0IFNUQUNLVFJBQ0VfRlJBTUVfTElNSVQgPSA1MDsKY29uc3QgU1RSSVBfRlJBTUVfUkVHRVhQID0gL2NhcHR1cmVNZXNzYWdlfGNhcHR1cmVFeGNlcHRpb24vOwoKLyoqCiAqIFJlbW92ZXMgU2VudHJ5IGZyYW1lcyBmcm9tIHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgc3RhY2sgaWYgcHJlc2VudCBhbmQgZW5mb3JjZXMgYSBsaW1pdCBvZiBtYXggbnVtYmVyIG9mIGZyYW1lcy4KICogQXNzdW1lcyBzdGFjayBpbnB1dCBpcyBvcmRlcmVkIGZyb20gdG9wIHRvIGJvdHRvbSBhbmQgcmV0dXJucyB0aGUgcmV2ZXJzZSByZXByZXNlbnRhdGlvbiBzbyBjYWxsIHNpdGUgb2YgdGhlCiAqIGZ1bmN0aW9uIHRoYXQgY2F1c2VkIHRoZSBjcmFzaCBpcyB0aGUgbGFzdCBmcmFtZSBpbiB0aGUgYXJyYXkuCiAqIEBoaWRkZW4KICovCmZ1bmN0aW9uIHN0cmlwU2VudHJ5RnJhbWVzQW5kUmV2ZXJzZShzdGFjaykgewogIGlmICghc3RhY2subGVuZ3RoKSB7CiAgICByZXR1cm4gW107CiAgfQoKICBjb25zdCBsb2NhbFN0YWNrID0gQXJyYXkuZnJvbShzdGFjayk7CgogIC8vIElmIHN0YWNrIHN0YXJ0cyB3aXRoIG9uZSBvZiBvdXIgQVBJIGNhbGxzLCByZW1vdmUgaXQgKHN0YXJ0cywgbWVhbmluZyBpdCdzIHRoZSB0b3Agb2YgdGhlIHN0YWNrIC0gYWthIGxhc3QgY2FsbCkKICBpZiAoL3NlbnRyeVdyYXBwZWQvLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgbG9jYWxTdGFjay5wb3AoKTsKICB9CgogIC8vIFJldmVyc2luZyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwcm9jZWR1cmUgYWxsb3dzIHVzIHRvIGp1c3QgcG9wIHRoZSB2YWx1ZXMgb2ZmIHRoZSBzdGFjawogIGxvY2FsU3RhY2sucmV2ZXJzZSgpOwoKICAvLyBJZiBzdGFjayBlbmRzIHdpdGggb25lIG9mIG91ciBpbnRlcm5hbCBBUEkgY2FsbHMsIHJlbW92ZSBpdCAoZW5kcywgbWVhbmluZyBpdCdzIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIC0gYWthIHRvcC1tb3N0IGNhbGwpCiAgaWYgKFNUUklQX0ZSQU1FX1JFR0VYUC50ZXN0KGxvY2FsU3RhY2tbbG9jYWxTdGFjay5sZW5ndGggLSAxXS5mdW5jdGlvbiB8fCAnJykpIHsKICAgIGxvY2FsU3RhY2sucG9wKCk7CgogICAgLy8gV2hlbiB1c2luZyBzeW50aGV0aWMgZXZlbnRzLCB3ZSB3aWxsIGhhdmUgYSAyIGxldmVscyBkZWVwIHN0YWNrLCBhcyBgbmV3IEVycm9yKCdTZW50cnkgc3ludGhldGljRXhjZXB0aW9uJylgCiAgICAvLyBpcyBwcm9kdWNlZCB3aXRoaW4gdGhlIGh1YiBpdHNlbGYsIG1ha2luZyBpdDoKICAgIC8vCiAgICAvLyAgIFNlbnRyeS5jYXB0dXJlRXhjZXB0aW9uKCkKICAgIC8vICAgZ2V0Q3VycmVudEh1YigpLmNhcHR1cmVFeGNlcHRpb24oKQogICAgLy8KICAgIC8vIGluc3RlYWQgb2YganVzdCB0aGUgdG9wIGBTZW50cnlgIGNhbGwgaXRzZWxmLgogICAgLy8gVGhpcyBmb3JjZXMgdXMgdG8gcG9zc2libHkgc3RyaXAgYW4gYWRkaXRpb25hbCBmcmFtZSBpbiB0aGUgZXhhY3Qgc2FtZSB3YXMgYXMgYWJvdmUuCiAgICBpZiAoU1RSSVBfRlJBTUVfUkVHRVhQLnRlc3QobG9jYWxTdGFja1tsb2NhbFN0YWNrLmxlbmd0aCAtIDFdLmZ1bmN0aW9uIHx8ICcnKSkgewogICAgICBsb2NhbFN0YWNrLnBvcCgpOwogICAgfQogIH0KCiAgcmV0dXJuIGxvY2FsU3RhY2suc2xpY2UoMCwgU1RBQ0tUUkFDRV9GUkFNRV9MSU1JVCkubWFwKGZyYW1lID0+ICh7CiAgICAuLi5mcmFtZSwKICAgIGZpbGVuYW1lOiBmcmFtZS5maWxlbmFtZSB8fCBsb2NhbFN0YWNrW2xvY2FsU3RhY2subGVuZ3RoIC0gMV0uZmlsZW5hbWUsCiAgICBmdW5jdGlvbjogZnJhbWUuZnVuY3Rpb24gfHwgJz8nLAogIH0pKTsKfQoKY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7CgovKioKICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZgogKi8KZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuKSB7CiAgdHJ5IHsKICAgIGlmICghZm4gfHwgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogICAgfQogICAgcmV0dXJuIGZuLm5hbWUgfHwgZGVmYXVsdEZ1bmN0aW9uTmFtZTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHMKICAgIC8vIGNhbiBjYXVzZSBhICJQZXJtaXNzaW9uIGRlbmllZCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS4KICAgIHJldHVybiBkZWZhdWx0RnVuY3Rpb25OYW1lOwogIH0KfQoKLyoqCiAqIFVVSUQ0IGdlbmVyYXRvcgogKgogKiBAcmV0dXJucyBzdHJpbmcgR2VuZXJhdGVkIFVVSUQ0LgogKi8KZnVuY3Rpb24gdXVpZDQoKSB7CiAgY29uc3QgZ2JsID0gR0xPQkFMX09CSiA7CiAgY29uc3QgY3J5cHRvID0gZ2JsLmNyeXB0byB8fCBnYmwubXNDcnlwdG87CgogIGxldCBnZXRSYW5kb21CeXRlID0gKCkgPT4gTWF0aC5yYW5kb20oKSAqIDE2OwogIHRyeSB7CiAgICBpZiAoY3J5cHRvICYmIGNyeXB0by5yYW5kb21VVUlEKSB7CiAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpLnJlcGxhY2UoLy0vZywgJycpOwogICAgfQogICAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgIGdldFJhbmRvbUJ5dGUgPSAoKSA9PiB7CiAgICAgICAgLy8gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyBtaWdodCByZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgdGhlIHR5cGVkIGFycmF5CiAgICAgICAgLy8gaW4gb2xkIENocm9taXVtIHZlcnNpb25zIChlLmcuIDIzLjAuMTIzNS4wICgxNTE0MjIpKQogICAgICAgIC8vIEhvd2V2ZXIsIGB0eXBlZEFycmF5YCBpcyBzdGlsbCBmaWxsZWQgaW4tcGxhY2UuCiAgICAgICAgLy8gQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3J5cHRvL2dldFJhbmRvbVZhbHVlcyN0eXBlZGFycmF5CiAgICAgICAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDEpOwogICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSk7CiAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlbMF07CiAgICAgIH07CiAgICB9CiAgfSBjYXRjaCAoXykgewogICAgLy8gc29tZSBydW50aW1lcyBjYW4gY3Jhc2ggaW52b2tpbmcgY3J5cHRvCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy84OTM1CiAgfQoKICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHQvMjExNzUyMyMyMTE3NTIzCiAgLy8gQ29uY2F0ZW5hdGluZyB0aGUgZm9sbG93aW5nIG51bWJlcnMgYXMgc3RyaW5ncyByZXN1bHRzIGluICcxMDAwMDAwMDEwMDA0MDAwODAwMDEwMDAwMDAwMDAwMCcKICByZXR1cm4gKChbMWU3XSApICsgMWUzICsgNGUzICsgOGUzICsgMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UKICAgICgoYyApIF4gKChnZXRSYW5kb21CeXRlKCkgJiAxNSkgPj4gKChjICkgLyA0KSkpLnRvU3RyaW5nKDE2KSwKICApOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi8KLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqLwoKLyoqCiAqIEhlbHBlciB0byBkZWN5Y2xlIGpzb24gb2JqZWN0cwogKi8KZnVuY3Rpb24gbWVtb0J1aWxkZXIoKSB7CiAgY29uc3QgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nOwogIGNvbnN0IGlubmVyID0gaGFzV2Vha1NldCA/IG5ldyBXZWFrU2V0KCkgOiBbXTsKICBmdW5jdGlvbiBtZW1vaXplKG9iaikgewogICAgaWYgKGhhc1dlYWtTZXQpIHsKICAgICAgaWYgKGlubmVyLmhhcyhvYmopKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaW5uZXIuYWRkKG9iaik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCB2YWx1ZSA9IGlubmVyW2ldOwogICAgICBpZiAodmFsdWUgPT09IG9iaikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBpbm5lci5wdXNoKG9iaik7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiB1bm1lbW9pemUob2JqKSB7CiAgICBpZiAoaGFzV2Vha1NldCkgewogICAgICBpbm5lci5kZWxldGUob2JqKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5uZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW5uZXJbaV0gPT09IG9iaikgewogICAgICAgICAgaW5uZXIuc3BsaWNlKGksIDEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBbbWVtb2l6ZSwgdW5tZW1vaXplXTsKfQoKLyoqCiAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZXMgdGhlIGdpdmVuIG9iamVjdC4KICoKICogLSBDcmVhdGVzIGEgY29weSB0byBwcmV2ZW50IG9yaWdpbmFsIGlucHV0IG11dGF0aW9uCiAqIC0gU2tpcHMgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcwogKiAtIFdoZW4gc3RyaW5naWZ5aW5nLCBjYWxscyBgdG9KU09OYCBpZiBpbXBsZW1lbnRlZAogKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogKiAtIFRyYW5zbGF0ZXMgbm9uLXNlcmlhbGl6YWJsZSB2YWx1ZXMgKGB1bmRlZmluZWRgL2BOYU5gL2Z1bmN0aW9ucykgdG8gc2VyaWFsaXphYmxlIGZvcm1hdAogKiAtIFRyYW5zbGF0ZXMga25vd24gZ2xvYmFsIG9iamVjdHMvY2xhc3NlcyB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbnMKICogLSBUYWtlcyBjYXJlIG9mIGBFcnJvcmAgb2JqZWN0IHNlcmlhbGl6YXRpb24KICogLSBPcHRpb25hbGx5IGxpbWl0cyBkZXB0aCBvZiBmaW5hbCBvdXRwdXQKICogLSBPcHRpb25hbGx5IGxpbWl0cyBudW1iZXIgb2YgcHJvcGVydGllcy9lbGVtZW50cyBpbmNsdWRlZCBpbiBhbnkgc2luZ2xlIG9iamVjdC9hcnJheQogKgogKiBAcGFyYW0gaW5wdXQgVGhlIG9iamVjdCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gZGVwdGggVGhlIG1heCBkZXB0aCB0byB3aGljaCB0byBub3JtYWxpemUgdGhlIG9iamVjdC4gKEFueXRoaW5nIGRlZXBlciBzdHJpbmdpZmllZCB3aG9sZS4pCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIFRoZSBtYXggbnVtYmVyIG9mIGVsZW1lbnRzIG9yIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBhcnJheSBvcgogKiBvYmplY3QgaW4gdGhlIG5vcm1hbGxpemVkIG91dHB1dC4KICogQHJldHVybnMgQSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIG9iamVjdCwgb3IgYCIqKm5vbi1zZXJpYWxpemFibGUqKiJgIGlmIGFueSBlcnJvcnMgYXJlIHRocm93biBkdXJpbmcgbm9ybWFsaXphdGlvbi4KICovCi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55CmZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dCwgZGVwdGggPSAxMDAsIG1heFByb3BlcnRpZXMgPSArSW5maW5pdHkpIHsKICB0cnkgewogICAgLy8gc2luY2Ugd2UncmUgYXQgdGhlIG91dGVybW9zdCBsZXZlbCwgd2UgZG9uJ3QgcHJvdmlkZSBhIGtleQogICAgcmV0dXJuIHZpc2l0KCcnLCBpbnB1dCwgZGVwdGgsIG1heFByb3BlcnRpZXMpOwogIH0gY2F0Y2ggKGVycikgewogICAgcmV0dXJuIHsgRVJST1I6IGAqKm5vbi1zZXJpYWxpemFibGUqKiAoJHtlcnJ9KWAgfTsKICB9Cn0KCi8qKgogKiBWaXNpdHMgYSBub2RlIHRvIHBlcmZvcm0gbm9ybWFsaXphdGlvbiBvbiBpdAogKgogKiBAcGFyYW0ga2V5IFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gbm9kZQogKiBAcGFyYW0gdmFsdWUgVGhlIG5vZGUgdG8gYmUgdmlzaXRlZAogKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgdGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoCiAqIEBwYXJhbSBtYXhQcm9wZXJ0aWVzIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMvZWxlbWVudHMgaW5jbHVkZWQgaW4gYW55IHNpbmdsZSBvYmplY3QvYXJyYXkKICogQHBhcmFtIG1lbW8gT3B0aW9uYWwgTWVtbyBjbGFzcyBoYW5kbGluZyBkZWN5Y2xpbmcKICovCmZ1bmN0aW9uIHZpc2l0KAogIGtleSwKICB2YWx1ZSwKICBkZXB0aCA9ICtJbmZpbml0eSwKICBtYXhQcm9wZXJ0aWVzID0gK0luZmluaXR5LAogIG1lbW8gPSBtZW1vQnVpbGRlcigpLAopIHsKICBjb25zdCBbbWVtb2l6ZSwgdW5tZW1vaXplXSA9IG1lbW87CgogIC8vIEdldCB0aGUgc2ltcGxlIGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0CiAgaWYgKAogICAgdmFsdWUgPT0gbnVsbCB8fCAvLyB0aGlzIG1hdGNoZXMgbnVsbCBhbmQgdW5kZWZpbmVkIC0+IGVxZXEgbm90IGVxZXFlcQogICAgKFsnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKSAmJiAhaXNOYU4kMSh2YWx1ZSkpCiAgKSB7CiAgICByZXR1cm4gdmFsdWUgOwogIH0KCiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlWYWx1ZShrZXksIHZhbHVlKTsKCiAgLy8gQW55dGhpbmcgd2UgY291bGQgcG90ZW50aWFsbHkgZGlnIGludG8gbW9yZSAob2JqZWN0cyBvciBhcnJheXMpIHdpbGwgaGF2ZSBjb21lIGJhY2sgYXMgYCJbb2JqZWN0IFhYWFhdImAuCiAgLy8gRXZlcnl0aGluZyBlbHNlIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc2VyaWFsaXplZCwgc28gaWYgd2UgZG9uJ3Qgc2VlIHRoYXQgcGF0dGVybiwgd2UncmUgZG9uZS4KICBpZiAoIXN0cmluZ2lmaWVkLnN0YXJ0c1dpdGgoJ1tvYmplY3QgJykpIHsKICAgIHJldHVybiBzdHJpbmdpZmllZDsKICB9CgogIC8vIEZyb20gaGVyZSBvbiwgd2UgY2FuIGFzc2VydCB0aGF0IGB2YWx1ZWAgaXMgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS4KCiAgLy8gRG8gbm90IG5vcm1hbGl6ZSBvYmplY3RzIHRoYXQgd2Uga25vdyBoYXZlIGFscmVhZHkgYmVlbiBub3JtYWxpemVkLiBBcyBhIGdlbmVyYWwgcnVsZSwgdGhlCiAgLy8gIl9fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fIiBwcm9wZXJ0eSBzaG91bGQgb25seSBiZSB1c2VkIHNwYXJpbmdseSBhbmQgb25seSBzaG91bGQgb25seSBiZSBzZXQgb24gb2JqZWN0cyB0aGF0CiAgLy8gaGF2ZSBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZC4KICBpZiAoKHZhbHVlIClbJ19fc2VudHJ5X3NraXBfbm9ybWFsaXphdGlvbl9fJ10pIHsKICAgIHJldHVybiB2YWx1ZSA7CiAgfQoKICAvLyBXZSBjYW4gc2V0IGBfX3NlbnRyeV9vdmVycmlkZV9ub3JtYWxpemF0aW9uX2RlcHRoX19gIG9uIGFuIG9iamVjdCB0byBlbnN1cmUgdGhhdCBmcm9tIHRoZXJlCiAgLy8gV2Uga2VlcCBhIGNlcnRhaW4gYW1vdW50IG9mIGRlcHRoLgogIC8vIFRoaXMgc2hvdWxkIGJlIHVzZWQgc3BhcmluZ2x5LCBlLmcuIHdlIHVzZSBpdCBmb3IgdGhlIHJlZHV4IGludGVncmF0aW9uIHRvIGVuc3VyZSB3ZSBnZXQgYSBjZXJ0YWluIGFtb3VudCBvZiBzdGF0ZS4KICBjb25zdCByZW1haW5pbmdEZXB0aCA9CiAgICB0eXBlb2YgKHZhbHVlIClbJ19fc2VudHJ5X292ZXJyaWRlX25vcm1hbGl6YXRpb25fZGVwdGhfXyddID09PSAnbnVtYmVyJwogICAgICA/ICgodmFsdWUgKVsnX19zZW50cnlfb3ZlcnJpZGVfbm9ybWFsaXphdGlvbl9kZXB0aF9fJ10gKQogICAgICA6IGRlcHRoOwoKICAvLyBXZSdyZSBhbHNvIGRvbmUgaWYgd2UndmUgcmVhY2hlZCB0aGUgbWF4IGRlcHRoCiAgaWYgKHJlbWFpbmluZ0RlcHRoID09PSAwKSB7CiAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgYHNlcmlhbGl6ZWRgIGlzIGEgc3RyaW5nIG9mIHRoZSBmb3JtIGAiW29iamVjdCBYWFhYXSJgLiBDbGVhbiBpdCB1cCBzbyBpdCdzIGp1c3QgYCJbWFhYWF0iYC4KICAgIHJldHVybiBzdHJpbmdpZmllZC5yZXBsYWNlKCdvYmplY3QgJywgJycpOwogIH0KCiAgLy8gSWYgd2UndmUgYWxyZWFkeSB2aXNpdGVkIHRoaXMgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2UuIElmIG5vdCwgbm90ZSB0aGF0IHdlJ3JlIHNlZWluZyBpdCBub3cuCiAgaWYgKG1lbW9pemUodmFsdWUpKSB7CiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7CiAgfQoKICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgYHRvSlNPTmAgbWV0aG9kLCB3ZSBjYWxsIGl0IHRvIGV4dHJhY3QgbW9yZSBpbmZvcm1hdGlvbgogIGNvbnN0IHZhbHVlV2l0aFRvSlNPTiA9IHZhbHVlIDsKICBpZiAodmFsdWVXaXRoVG9KU09OICYmIHR5cGVvZiB2YWx1ZVdpdGhUb0pTT04udG9KU09OID09PSAnZnVuY3Rpb24nKSB7CiAgICB0cnkgewogICAgICBjb25zdCBqc29uVmFsdWUgPSB2YWx1ZVdpdGhUb0pTT04udG9KU09OKCk7CiAgICAgIC8vIFdlIG5lZWQgdG8gbm9ybWFsaXplIHRoZSByZXR1cm4gdmFsdWUgb2YgYC50b0pTT04oKWAgaW4gY2FzZSBpdCBoYXMgY2lyY3VsYXIgcmVmZXJlbmNlcwogICAgICByZXR1cm4gdmlzaXQoJycsIGpzb25WYWx1ZSwgcmVtYWluaW5nRGVwdGggLSAxLCBtYXhQcm9wZXJ0aWVzLCBtZW1vKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICAvLyBwYXNzIChUaGUgYnVpbHQtaW4gYHRvSlNPTmAgZmFpbGVkLCBidXQgd2UgY2FuIHN0aWxsIHRyeSB0byBkbyBpdCBvdXJzZWx2ZXMpCiAgICB9CiAgfQoKICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgd2UgZWl0aGVyIGhhdmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5LCB3ZSBoYXZlbid0IHNlZW4gaXQgYmVmb3JlLCBhbmQgd2UncmUgZ29pbmcgdG8gcmVjdXJzZQogIC8vIGJlY2F1c2Ugd2UgaGF2ZW4ndCB5ZXQgcmVhY2hlZCB0aGUgbWF4IGRlcHRoLiBDcmVhdGUgYW4gYWNjdW11bGF0b3IgdG8gaG9sZCB0aGUgcmVzdWx0cyBvZiB2aXNpdGluZyBlYWNoCiAgLy8gcHJvcGVydHkvZW50cnksIGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgd2UgYWRkIHRvIGl0LgogIGNvbnN0IG5vcm1hbGl6ZWQgPSAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9KSA7CiAgbGV0IG51bUFkZGVkID0gMDsKCiAgLy8gQmVmb3JlIHdlIGJlZ2luLCBjb252ZXJ0YEVycm9yYCBhbmRgRXZlbnRgIGluc3RhbmNlcyBpbnRvIHBsYWluIG9iamVjdHMsIHNpbmNlIHNvbWUgb2YgZWFjaCBvZiB0aGVpciByZWxldmFudAogIC8vIHByb3BlcnRpZXMgYXJlIG5vbi1lbnVtZXJhYmxlIGFuZCBvdGhlcndpc2Ugd291bGQgZ2V0IG1pc3NlZC4KICBjb25zdCB2aXNpdGFibGUgPSBjb252ZXJ0VG9QbGFpbk9iamVjdCh2YWx1ZSApOwoKICBmb3IgKGNvbnN0IHZpc2l0S2V5IGluIHZpc2l0YWJsZSkgewogICAgLy8gQXZvaWQgaXRlcmF0aW5nIG92ZXIgZmllbGRzIGluIHRoZSBwcm90b3R5cGUgaWYgdGhleSd2ZSBzb21laG93IGJlZW4gZXhwb3NlZCB0byBlbnVtZXJhdGlvbi4KICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZpc2l0YWJsZSwgdmlzaXRLZXkpKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgIGlmIChudW1BZGRlZCA+PSBtYXhQcm9wZXJ0aWVzKSB7CiAgICAgIG5vcm1hbGl6ZWRbdmlzaXRLZXldID0gJ1tNYXhQcm9wZXJ0aWVzIH5dJzsKICAgICAgYnJlYWs7CiAgICB9CgogICAgLy8gUmVjdXJzaXZlbHkgdmlzaXQgYWxsIHRoZSBjaGlsZCBub2RlcwogICAgY29uc3QgdmlzaXRWYWx1ZSA9IHZpc2l0YWJsZVt2aXNpdEtleV07CiAgICBub3JtYWxpemVkW3Zpc2l0S2V5XSA9IHZpc2l0KHZpc2l0S2V5LCB2aXNpdFZhbHVlLCByZW1haW5pbmdEZXB0aCAtIDEsIG1heFByb3BlcnRpZXMsIG1lbW8pOwoKICAgIG51bUFkZGVkKys7CiAgfQoKICAvLyBPbmNlIHdlJ3ZlIHZpc2l0ZWQgYWxsIHRoZSBicmFuY2hlcywgcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSBtZW1vIHN0b3JhZ2UKICB1bm1lbW9pemUodmFsdWUpOwoKICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzCiAgcmV0dXJuIG5vcm1hbGl6ZWQ7Cn0KCi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi8KLyoqCiAqIFN0cmluZ2lmeSB0aGUgZ2l2ZW4gdmFsdWUuIEhhbmRsZXMgdmFyaW91cyBrbm93biBzcGVjaWFsIHZhbHVlcyBhbmQgdHlwZXMuCiAqCiAqIE5vdCBtZWFudCB0byBiZSB1c2VkIG9uIHNpbXBsZSBwcmltaXRpdmVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYXMgaXQgd2lsbCwgZm9yIGV4YW1wbGUsIHR1cm4KICogdGhlIG51bWJlciAxMjMxIGludG8gIltPYmplY3QgTnVtYmVyXSIsIG5vciBvbiBgbnVsbGAsIGFzIGl0IHdpbGwgdGhyb3cuCiAqCiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5CiAqIEByZXR1cm5zIEEgc3RyaW5naWZpZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIHZhbHVlCiAqLwpmdW5jdGlvbiBzdHJpbmdpZnlWYWx1ZSgKICBrZXksCiAgLy8gdGhpcyB0eXBlIGlzIGEgdGlueSBiaXQgb2YgYSBjaGVhdCwgc2luY2UgdGhpcyBmdW5jdGlvbiBkb2VzIGhhbmRsZSBOYU4gKHdoaWNoIGlzIHRlY2huaWNhbGx5IGEgbnVtYmVyKSwgYnV0IGZvcgogIC8vIG91ciBpbnRlcm5hbCB1c2UsIGl0J2xsIGRvCiAgdmFsdWUsCikgewogIHRyeSB7CiAgICBpZiAoa2V5ID09PSAnZG9tYWluJyAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICh2YWx1ZSApLl9ldmVudHMpIHsKICAgICAgcmV0dXJuICdbRG9tYWluXSc7CiAgICB9CgogICAgaWYgKGtleSA9PT0gJ2RvbWFpbkVtaXR0ZXInKSB7CiAgICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJzsKICAgIH0KCiAgICAvLyBJdCdzIHNhZmUgdG8gdXNlIGBnbG9iYWxgLCBgd2luZG93YCwgYW5kIGBkb2N1bWVudGAgaGVyZSBpbiB0aGlzIG1hbm5lciwgYXMgd2UgYXJlIGFzc2VydGluZyB1c2luZyBgdHlwZW9mYCBmaXJzdAogICAgLy8gd2hpY2ggd29uJ3QgdGhyb3cgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCgogICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSBnbG9iYWwpIHsKICAgICAgcmV0dXJuICdbR2xvYmFsXSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlID09PSB3aW5kb3cpIHsKICAgICAgcmV0dXJuICdbV2luZG93XSc7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscwogICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgPT09IGRvY3VtZW50KSB7CiAgICAgIHJldHVybiAnW0RvY3VtZW50XSc7CiAgICB9CgogICAgaWYgKGlzVnVlVmlld01vZGVsKHZhbHVlKSkgewogICAgICByZXR1cm4gJ1tWdWVWaWV3TW9kZWxdJzsKICAgIH0KCiAgICAvLyBSZWFjdCdzIFN5bnRoZXRpY0V2ZW50IHRoaW5neQogICAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7CiAgICAgIHJldHVybiAnW1N5bnRoZXRpY0V2ZW50XSc7CiAgICB9CgogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlKSB7CiAgICAgIHJldHVybiAnW05hTl0nOwogICAgfQoKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHsKICAgICAgcmV0dXJuIGBbRnVuY3Rpb246ICR7Z2V0RnVuY3Rpb25OYW1lKHZhbHVlKX1dYDsKICAgIH0KCiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykgewogICAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7CiAgICB9CgogICAgLy8gc3RyaW5naWZpZWQgQmlnSW50cyBhcmUgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSByZWd1bGFyIG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gbGFiZWwgdGhlbSB0byBhdm9pZCBjb25mdXNpb24KICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7CiAgICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gOwogICAgfQoKICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGtub2NrZWQgb3V0IGFsbCB0aGUgc3BlY2lhbCBjYXNlcyBhbmQgdGhlIHByaW1pdGl2ZXMsIGFsbCB3ZSBoYXZlIGxlZnQgYXJlIG9iamVjdHMuIFNpbXBseSBjYXN0aW5nCiAgICAvLyB0aGVtIHRvIHN0cmluZ3MgbWVhbnMgdGhhdCBpbnN0YW5jZXMgb2YgY2xhc3NlcyB3aGljaCBoYXZlbid0IGRlZmluZWQgdGhlaXIgYHRvU3RyaW5nVGFnYCB3aWxsIGp1c3QgY29tZSBvdXQgYXMKICAgIC8vIGAiW29iamVjdCBPYmplY3RdImAuIElmIHdlIGluc3RlYWQgbG9vayBhdCB0aGUgY29uc3RydWN0b3IncyBuYW1lICh3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MpLAogICAgLy8gd2UgY2FuIG1ha2Ugc3VyZSB0aGF0IG9ubHkgcGxhaW4gb2JqZWN0cyBjb21lIG91dCB0aGF0IHdheS4KICAgIGNvbnN0IG9iak5hbWUgPSBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpOwoKICAgIC8vIEhhbmRsZSBIVE1MIEVsZW1lbnRzCiAgICBpZiAoL15IVE1MKFx3KilFbGVtZW50JC8udGVzdChvYmpOYW1lKSkgewogICAgICByZXR1cm4gYFtIVE1MRWxlbWVudDogJHtvYmpOYW1lfV1gOwogICAgfQoKICAgIHJldHVybiBgW29iamVjdCAke29iak5hbWV9XWA7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gYCoqbm9uLXNlcmlhbGl6YWJsZSoqICgke2Vycn0pYDsKICB9Cn0KLyogZXNsaW50LWVuYWJsZSBjb21wbGV4aXR5ICovCgpmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodmFsdWUpIHsKICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpOwoKICByZXR1cm4gcHJvdG90eXBlID8gcHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWUgOiAnbnVsbCBwcm90b3R5cGUnOwp9CgovKioKICogTm9ybWFsaXplcyBVUkxzIGluIGV4Y2VwdGlvbnMgYW5kIHN0YWNrdHJhY2VzIHRvIGEgYmFzZSBwYXRoIHNvIFNlbnRyeSBjYW4gZmluZ2VycHJpbnQKICogYWNyb3NzIHBsYXRmb3JtcyBhbmQgd29ya2luZyBkaXJlY3RvcnkuCiAqCiAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBiZSBub3JtYWxpemVkLgogKiBAcGFyYW0gYmFzZVBhdGggVGhlIGFwcGxpY2F0aW9uIGJhc2UgcGF0aC4KICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgVVJMLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplVXJsVG9CYXNlKHVybCwgYmFzZVBhdGgpIHsKICBjb25zdCBlc2NhcGVkQmFzZSA9IGJhc2VQYXRoCiAgICAvLyBCYWNrc2xhc2ggdG8gZm9yd2FyZAogICAgLnJlcGxhY2UoL1xcL2csICcvJykKICAgIC8vIEVzY2FwZSBSZWdFeHAgc3BlY2lhbCBjaGFyYWN0ZXJzCiAgICAucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICdcXCQmJyk7CgogIGxldCBuZXdVcmwgPSB1cmw7CiAgdHJ5IHsKICAgIG5ld1VybCA9IGRlY29kZVVSSSh1cmwpOwogIH0gY2F0Y2ggKF9PbykgewogICAgLy8gU29tZXRpbWUgdGhpcyBicmVha3MKICB9CiAgcmV0dXJuICgKICAgIG5ld1VybAogICAgICAucmVwbGFjZSgvXFwvZywgJy8nKQogICAgICAucmVwbGFjZSgvd2VicGFjazpcLz8vZywgJycpIC8vIFJlbW92ZSBpbnRlcm1lZGlhdGUgYmFzZSBwYXRoCiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAc2VudHJ5LWludGVybmFsL3Nkay9uby1yZWdleHAtY29uc3RydWN0b3IKICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgKGZpbGU6Ly8pPy8qJHtlc2NhcGVkQmFzZX0vKmAsICdpZycpLCAnYXBwOi8vLycpCiAgKTsKfQoKLy8gU2xpZ2h0bHkgbW9kaWZpZWQgKG5vIElFOCBzdXBwb3J0LCBFUzYpIGFuZCB0cmFuc2NyaWJlZCB0byBUeXBlU2NyaXB0CgovLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvbgovLyAncm9vdCcgaXMganVzdCBhIHNsYXNoLCBvciBub3RoaW5nLgpjb25zdCBzcGxpdFBhdGhSZSA9IC9eKFxTKzpcXHxcLz8pKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteL1xcXSs/fCkoXC5bXi4vXFxdKnwpKSg/OlsvXFxdKikkLzsKLyoqIEpTRG9jICovCmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZSkgewogIC8vIFRydW5jYXRlIGZpbGVzIG5hbWVzIGdyZWF0ZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgdG8gYXZvaWQgcmVnZXggZG9zCiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9wdWxsLzg3MzcjZGlzY3Vzc2lvbl9yMTI4NTcxOTE3MgogIGNvbnN0IHRydW5jYXRlZCA9IGZpbGVuYW1lLmxlbmd0aCA+IDEwMjQgPyBgPHRydW5jYXRlZD4ke2ZpbGVuYW1lLnNsaWNlKC0xMDI0KX1gIDogZmlsZW5hbWU7CiAgY29uc3QgcGFydHMgPSBzcGxpdFBhdGhSZS5leGVjKHRydW5jYXRlZCk7CiAgcmV0dXJuIHBhcnRzID8gcGFydHMuc2xpY2UoMSkgOiBbXTsKfQoKLyoqIEpTRG9jICovCmZ1bmN0aW9uIGRpcm5hbWUocGF0aCkgewogIGNvbnN0IHJlc3VsdCA9IHNwbGl0UGF0aChwYXRoKTsKICBjb25zdCByb290ID0gcmVzdWx0WzBdOwogIGxldCBkaXIgPSByZXN1bHRbMV07CgogIGlmICghcm9vdCAmJiAhZGlyKSB7CiAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgIHJldHVybiAnLic7CiAgfQoKICBpZiAoZGlyKSB7CiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaAogICAgZGlyID0gZGlyLnNsaWNlKDAsIGRpci5sZW5ndGggLSAxKTsKICB9CgogIHJldHVybiByb290ICsgZGlyOwp9CgovKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi8KCi8qKiBTeW5jUHJvbWlzZSBpbnRlcm5hbCBzdGF0ZXMgKi8KdmFyIFN0YXRlczsgKGZ1bmN0aW9uIChTdGF0ZXMpIHsKICAvKiogUGVuZGluZyAqLwogIGNvbnN0IFBFTkRJTkcgPSAwOyBTdGF0ZXNbU3RhdGVzWyJQRU5ESU5HIl0gPSBQRU5ESU5HXSA9ICJQRU5ESU5HIjsKICAvKiogUmVzb2x2ZWQgLyBPSyAqLwogIGNvbnN0IFJFU09MVkVEID0gMTsgU3RhdGVzW1N0YXRlc1siUkVTT0xWRUQiXSA9IFJFU09MVkVEXSA9ICJSRVNPTFZFRCI7CiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi8KICBjb25zdCBSRUpFQ1RFRCA9IDI7IFN0YXRlc1tTdGF0ZXNbIlJFSkVDVEVEIl0gPSBSRUpFQ1RFRF0gPSAiUkVKRUNURUQiOwp9KShTdGF0ZXMgfHwgKFN0YXRlcyA9IHt9KSk7CgovLyBPdmVybG9hZHMgc28gd2UgY2FuIGNhbGwgcmVzb2x2ZWRTeW5jUHJvbWlzZSB3aXRob3V0IGFyZ3VtZW50cyBhbmQgZ2VuZXJpYyBhcmd1bWVudAoKLyoqCiAqIENyZWF0ZXMgYSByZXNvbHZlZCBzeW5jIHByb21pc2UuCiAqCiAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZXNvbHZlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlc29sdmVkU3luY1Byb21pc2UodmFsdWUpIHsKICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKHJlc29sdmUgPT4gewogICAgcmVzb2x2ZSh2YWx1ZSk7CiAgfSk7Cn0KCi8qKgogKiBDcmVhdGVzIGEgcmVqZWN0ZWQgc3luYyBwcm9taXNlLgogKgogKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIHJlamVjdCB0aGUgcHJvbWlzZSB3aXRoCiAqIEByZXR1cm5zIHRoZSByZWplY3RlZCBzeW5jIHByb21pc2UKICovCmZ1bmN0aW9uIHJlamVjdGVkU3luY1Byb21pc2UocmVhc29uKSB7CiAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7CiAgICByZWplY3QocmVhc29uKTsKICB9KTsKfQoKLyoqCiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZQogKiBidXQgaXMgbm90IGFzeW5jIGludGVybmFsbHkKICovCmNsYXNzIFN5bmNQcm9taXNlIHsKCiAgIGNvbnN0cnVjdG9yKAogICAgZXhlY3V0b3IsCiAgKSB7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdC5jYWxsKHRoaXMpO1N5bmNQcm9taXNlLnByb3RvdHlwZS5fX2luaXQyLmNhbGwodGhpcyk7U3luY1Byb21pc2UucHJvdG90eXBlLl9faW5pdDMuY2FsbCh0aGlzKTtTeW5jUHJvbWlzZS5wcm90b3R5cGUuX19pbml0NC5jYWxsKHRoaXMpOwogICAgdGhpcy5fc3RhdGUgPSBTdGF0ZXMuUEVORElORzsKICAgIHRoaXMuX2hhbmRsZXJzID0gW107CgogICAgdHJ5IHsKICAgICAgZXhlY3V0b3IodGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgdGhpcy5fcmVqZWN0KGUpOwogICAgfQogIH0KCiAgLyoqIEpTRG9jICovCiAgIHRoZW4oCiAgICBvbmZ1bGZpbGxlZCwKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5faGFuZGxlcnMucHVzaChbCiAgICAgICAgZmFsc2UsCiAgICAgICAgcmVzdWx0ID0+IHsKICAgICAgICAgIGlmICghb25mdWxmaWxsZWQpIHsKICAgICAgICAgICAgLy8gVE9ETzogwq9cXyjjg4QpXy/CrwogICAgICAgICAgICAvLyBUT0RPOiBGSVhNRQogICAgICAgICAgICByZXNvbHZlKHJlc3VsdCApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpOwogICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZWFzb24gPT4gewogICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICByZXNvbHZlKG9ucmVqZWN0ZWQocmVhc29uKSk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgICByZWplY3QoZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICBdKTsKICAgICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7CiAgICB9KTsKICB9CgogIC8qKiBKU0RvYyAqLwogICBjYXRjaCgKICAgIG9ucmVqZWN0ZWQsCiAgKSB7CiAgICByZXR1cm4gdGhpcy50aGVuKHZhbCA9PiB2YWwsIG9ucmVqZWN0ZWQpOwogIH0KCiAgLyoqIEpTRG9jICovCiAgIGZpbmFsbHkob25maW5hbGx5KSB7CiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IHZhbDsKICAgICAgbGV0IGlzUmVqZWN0ZWQ7CgogICAgICByZXR1cm4gdGhpcy50aGVuKAogICAgICAgIHZhbHVlID0+IHsKICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhbCA9IHZhbHVlOwogICAgICAgICAgaWYgKG9uZmluYWxseSkgewogICAgICAgICAgICBvbmZpbmFsbHkoKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJlYXNvbiA9PiB7CiAgICAgICAgICBpc1JlamVjdGVkID0gdHJ1ZTsKICAgICAgICAgIHZhbCA9IHJlYXNvbjsKICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHsKICAgICAgICAgICAgb25maW5hbGx5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoaXNSZWplY3RlZCkgewogICAgICAgICAgcmVqZWN0KHZhbCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXNvbHZlKHZhbCApOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQoKSB7dGhpcy5fcmVzb2x2ZSA9ICh2YWx1ZSkgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRVNPTFZFRCwgdmFsdWUpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDIoKSB7dGhpcy5fcmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgdGhpcy5fc2V0UmVzdWx0KFN0YXRlcy5SRUpFQ1RFRCwgcmVhc29uKTsKICB9O30KCiAgLyoqIEpTRG9jICovCiAgICBfX2luaXQzKCkge3RoaXMuX3NldFJlc3VsdCA9IChzdGF0ZSwgdmFsdWUpID0+IHsKICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc1RoZW5hYmxlKHZhbHVlKSkgewogICAgICB2b2lkICh2YWx1ZSApLnRoZW4odGhpcy5fcmVzb2x2ZSwgdGhpcy5fcmVqZWN0KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRoaXMuX3N0YXRlID0gc3RhdGU7CiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwoKICAgIHRoaXMuX2V4ZWN1dGVIYW5kbGVycygpOwogIH07fQoKICAvKiogSlNEb2MgKi8KICAgIF9faW5pdDQoKSB7dGhpcy5fZXhlY3V0ZUhhbmRsZXJzID0gKCkgPT4gewogICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUEVORElORykgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpOwogICAgdGhpcy5faGFuZGxlcnMgPSBbXTsKCiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gewogICAgICBpZiAoaGFuZGxlclswXSkgewogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVTT0xWRUQpIHsKICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzCiAgICAgICAgaGFuZGxlclsxXSh0aGlzLl92YWx1ZSApOwogICAgICB9CgogICAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5SRUpFQ1RFRCkgewogICAgICAgIGhhbmRsZXJbMl0odGhpcy5fdmFsdWUpOwogICAgICB9CgogICAgICBoYW5kbGVyWzBdID0gdHJ1ZTsKICAgIH0pOwogIH07fQp9CgovKioKICogQ3JlYXRlcyBhbiBuZXcgUHJvbWlzZUJ1ZmZlciBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIGxpbWl0CiAqIEBwYXJhbSBsaW1pdCBtYXggbnVtYmVyIG9mIHByb21pc2VzIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyCiAqLwpmdW5jdGlvbiBtYWtlUHJvbWlzZUJ1ZmZlcihsaW1pdCkgewogIGNvbnN0IGJ1ZmZlciA9IFtdOwoKICBmdW5jdGlvbiBpc1JlYWR5KCkgewogICAgcmV0dXJuIGxpbWl0ID09PSB1bmRlZmluZWQgfHwgYnVmZmVyLmxlbmd0aCA8IGxpbWl0OwogIH0KCiAgLyoqCiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS4KICAgKgogICAqIEBwYXJhbSB0YXNrIENhbiBiZSBhbnkgUHJvbWlzZUxpa2U8VD4KICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuCiAgICovCiAgZnVuY3Rpb24gcmVtb3ZlKHRhc2spIHsKICAgIHJldHVybiBidWZmZXIuc3BsaWNlKGJ1ZmZlci5pbmRleE9mKHRhc2spLCAxKVswXTsKICB9CgogIC8qKgogICAqIEFkZCBhIHByb21pc2UgKHJlcHJlc2VudGluZyBhbiBpbi1mbGlnaHQgYWN0aW9uKSB0byB0aGUgcXVldWUsIGFuZCBzZXQgaXQgdG8gcmVtb3ZlIGl0c2VsZiBvbiBmdWxmaWxsbWVudC4KICAgKgogICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6CiAgICogICAgICAgIFByb21pc2VMaWtlPFQ+YCwgYnV0IHVuZGVyIHRoYXQgbW9kZWwsIFByb21pc2VzIHdlcmUgaW5zdGFudGx5IGNyZWF0ZWQgb24gdGhlIGNhbGwtc2l0ZSBhbmQgdGhlaXIgZXhlY3V0b3IKICAgKiAgICAgICAgZnVuY3Rpb25zIHRoZXJlZm9yZSByYW4gaW1tZWRpYXRlbHkuIFRodXMsIGV2ZW4gaWYgdGhlIGJ1ZmZlciB3YXMgZnVsbCwgdGhlIGFjdGlvbiBzdGlsbCBoYXBwZW5lZC4gQnkKICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlcgogICAqICAgICAgICBsaW1pdCBjaGVjay4KICAgKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgcHJvbWlzZS4KICAgKi8KICBmdW5jdGlvbiBhZGQodGFza1Byb2R1Y2VyKSB7CiAgICBpZiAoIWlzUmVhZHkoKSkgewogICAgICByZXR1cm4gcmVqZWN0ZWRTeW5jUHJvbWlzZShuZXcgU2VudHJ5RXJyb3IoJ05vdCBhZGRpbmcgUHJvbWlzZSBiZWNhdXNlIGJ1ZmZlciBsaW1pdCB3YXMgcmVhY2hlZC4nKSk7CiAgICB9CgogICAgLy8gc3RhcnQgdGhlIHRhc2sgYW5kIGFkZCBpdHMgcHJvbWlzZSB0byB0aGUgcXVldWUKICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTsKICAgIGlmIChidWZmZXIuaW5kZXhPZih0YXNrKSA9PT0gLTEpIHsKICAgICAgYnVmZmVyLnB1c2godGFzayk7CiAgICB9CiAgICB2b2lkIHRhc2sKICAgICAgLnRoZW4oKCkgPT4gcmVtb3ZlKHRhc2spKQogICAgICAvLyBVc2UgYHRoZW4obnVsbCwgcmVqZWN0aW9uSGFuZGxlcilgIHJhdGhlciB0aGFuIGBjYXRjaChyZWplY3Rpb25IYW5kbGVyKWAgc28gdGhhdCB3ZSBjYW4gdXNlIGBQcm9taXNlTGlrZWAKICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndAogICAgICAvLyBoYXZlIHByb21pc2VzLCBzbyBUUyBoYXMgdG8gcG9seWZpbGwgd2hlbiBkb3duLWNvbXBpbGluZy4pCiAgICAgIC50aGVuKG51bGwsICgpID0+CiAgICAgICAgcmVtb3ZlKHRhc2spLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHJlbW92ZSgpYCBzdGFydHMgYSBuZXcgcHJvbWlzZSBjaGFpbi4KICAgICAgICB9KSwKICAgICAgKTsKICAgIHJldHVybiB0YXNrOwogIH0KCiAgLyoqCiAgICogV2FpdCBmb3IgYWxsIHByb21pc2VzIGluIHRoZSBxdWV1ZSB0byByZXNvbHZlIG9yIGZvciB0aW1lb3V0IHRvIGV4cGlyZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0LgogICAqCiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yCiAgICogbm90IHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHRoZSBxdWV1ZSB0byBkcmFpbiBiZWZvcmUgcmVzb2x2aW5nIHRvCiAgICogYHRydWVgLgogICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZAogICAqIGBmYWxzZWAgb3RoZXJ3aXNlCiAgICovCiAgZnVuY3Rpb24gZHJhaW4odGltZW91dCkgewogICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAgIGxldCBjb3VudGVyID0gYnVmZmVyLmxlbmd0aDsKCiAgICAgIGlmICghY291bnRlcikgewogICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpOwogICAgICB9CgogICAgICAvLyB3YWl0IGZvciBgdGltZW91dGAgbXMgYW5kIHRoZW4gcmVzb2x2ZSB0byBgZmFsc2VgIChpZiBub3QgY2FuY2VsbGVkIGZpcnN0KQogICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGltZW91dCAmJiB0aW1lb3V0ID4gMCkgewogICAgICAgICAgcmVzb2x2ZShmYWxzZSk7CiAgICAgICAgfQogICAgICB9LCB0aW1lb3V0KTsKCiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgCiAgICAgIGJ1ZmZlci5mb3JFYWNoKGl0ZW0gPT4gewogICAgICAgIHZvaWQgcmVzb2x2ZWRTeW5jUHJvbWlzZShpdGVtKS50aGVuKCgpID0+IHsKICAgICAgICAgIGlmICghLS1jb3VudGVyKSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dChjYXB0dXJlZFNldFRpbWVvdXQpOwogICAgICAgICAgICByZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sIHJlamVjdCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICByZXR1cm4gewogICAgJDogYnVmZmVyLAogICAgYWRkLAogICAgZHJhaW4sCiAgfTsKfQoKY29uc3QgT05FX1NFQ09ORF9JTl9NUyA9IDEwMDA7CgovKioKICogQSBwYXJ0aWFsIGRlZmluaXRpb24gb2YgdGhlIFtQZXJmb3JtYW5jZSBXZWIgQVBJXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUGVyZm9ybWFuY2V9CiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoLXJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLgogKi8KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgdGhlIERhdGUgQVBJLgogKgogKiBUT0RPKHY4KTogUmV0dXJuIHR5cGUgc2hvdWxkIGJlIHJvdW5kZWQuCiAqLwpmdW5jdGlvbiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCkgewogIHJldHVybiBEYXRlLm5vdygpIC8gT05FX1NFQ09ORF9JTl9NUzsKfQoKLyoqCiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90CiAqIHN1cHBvcnQgdGhlIEFQSS4KICoKICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLgogKi8KZnVuY3Rpb24gY3JlYXRlVW5peFRpbWVzdGFtcEluU2Vjb25kc0Z1bmMoKSB7CiAgY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gR0xPQkFMX09CSiA7CiAgaWYgKCFwZXJmb3JtYW5jZSB8fCAhcGVyZm9ybWFuY2Uubm93KSB7CiAgICByZXR1cm4gZGF0ZVRpbWVzdGFtcEluU2Vjb25kczsKICB9CgogIC8vIFNvbWUgYnJvd3NlciBhbmQgZW52aXJvbm1lbnRzIGRvbid0IGhhdmUgYSB0aW1lT3JpZ2luLCBzbyB3ZSBmYWxsYmFjayB0bwogIC8vIHVzaW5nIERhdGUubm93KCkgdG8gY29tcHV0ZSB0aGUgc3RhcnRpbmcgdGltZS4KICBjb25zdCBhcHByb3hTdGFydGluZ1RpbWVPcmlnaW4gPSBEYXRlLm5vdygpIC0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgdGltZU9yaWdpbiA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gPT0gdW5kZWZpbmVkID8gYXBwcm94U3RhcnRpbmdUaW1lT3JpZ2luIDogcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKCiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgaXMgYSBtb25vdG9uaWMgY2xvY2ssIHdoaWNoIG1lYW5zIGl0IHN0YXJ0cyBhdCAwIHdoZW4gdGhlIHByb2Nlc3MgYmVnaW5zLiBUbyBnZXQgdGhlIGN1cnJlbnQKICAvLyB3YWxsIGNsb2NrIHRpbWUgKGFjdHVhbCBVTklYIHRpbWVzdGFtcCksIHdlIG5lZWQgdG8gYWRkIHRoZSBzdGFydGluZyB0aW1lIG9yaWdpbiBhbmQgdGhlIGN1cnJlbnQgdGltZSBlbGFwc2VkLgogIC8vCiAgLy8gVE9ETzogVGhpcyBkb2VzIG5vdCBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgbW9ub3RvbmljIGNsb2NrIHRoYXQgcG93ZXJzIHBlcmZvcm1hbmNlLm5vdygpIGRyaWZ0cyBmcm9tIHRoZQogIC8vIHdhbGwgY2xvY2sgdGltZSwgd2hpY2ggY2F1c2VzIHRoZSByZXR1cm5lZCB0aW1lc3RhbXAgdG8gYmUgaW5hY2N1cmF0ZS4gV2Ugc2hvdWxkIGludmVzdGlnYXRlIGhvdyB0byBkZXRlY3QgYW5kCiAgLy8gY29ycmVjdCBmb3IgdGhpcy4KICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAKICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZG4vY29udGVudC9pc3N1ZXMvNDcxMwogIC8vIFNlZTogaHR0cHM6Ly9kZXYudG8vbm9hbXIvd2hlbi1hLW1pbGxpc2Vjb25kLWlzLW5vdC1hLW1pbGxpc2Vjb25kLTNoNgogIHJldHVybiAoKSA9PiB7CiAgICByZXR1cm4gKHRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSkgLyBPTkVfU0VDT05EX0lOX01TOwogIH07Cn0KCi8qKgogKiBSZXR1cm5zIGEgdGltZXN0YW1wIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2ggdXNpbmcgZWl0aGVyIHRoZSBQZXJmb3JtYW5jZSBvciBEYXRlIEFQSXMsIGRlcGVuZGluZyBvbiB0aGUKICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuCiAqCiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcwogKiBhc2xlZXAuIFRoaXMgY3JlYXRlcyBhIHNrZXcgYmV0d2VlbiBgZGF0ZVRpbWVzdGFtcEluU2Vjb25kc2AgYW5kIGB0aW1lc3RhbXBJblNlY29uZHNgLiBUaGUKICogc2tldyBjYW4gZ3JvdyB0byBhcmJpdHJhcnkgYW1vdW50cyBsaWtlIGRheXMsIHdlZWtzIG9yIG1vbnRocy4KICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuCiAqLwpjb25zdCB0aW1lc3RhbXBJblNlY29uZHMgPSBjcmVhdGVVbml4VGltZXN0YW1wSW5TZWNvbmRzRnVuYygpOwoKLyoqCiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGUKICogcGVyZm9ybWFuY2UgQVBJIGlzIGF2YWlsYWJsZS4KICovCigoKSA9PiB7CiAgLy8gVW5mb3J0dW5hdGVseSBicm93c2VycyBtYXkgcmVwb3J0IGFuIGluYWNjdXJhdGUgdGltZSBvcmlnaW4gZGF0YSwgdGhyb3VnaCBlaXRoZXIgcGVyZm9ybWFuY2UudGltZU9yaWdpbiBvcgogIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW4KICAvLyBkYXRhIGFzIHJlbGlhYmxlIGlmIHRoZXkgYXJlIHdpdGhpbiBhIHJlYXNvbmFibGUgdGhyZXNob2xkIG9mIHRoZSBjdXJyZW50IHRpbWUuCgogIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IEdMT0JBTF9PQkogOwogIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIGNvbnN0IHRocmVzaG9sZCA9IDM2MDAgKiAxMDAwOwogIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7CiAgY29uc3QgZGF0ZU5vdyA9IERhdGUubm93KCk7CgogIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZAogIGNvbnN0IHRpbWVPcmlnaW5EZWx0YSA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4KICAgID8gTWF0aC5hYnMocGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlTm93IC0gZGF0ZU5vdykKICAgIDogdGhyZXNob2xkOwogIGNvbnN0IHRpbWVPcmlnaW5Jc1JlbGlhYmxlID0gdGltZU9yaWdpbkRlbHRhIDwgdGhyZXNob2xkOwoKICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpbgogIC8vIGlzIG5vdCBhcyB3aWRlbHkgc3VwcG9ydGVkLiBOYW1lbHksIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXMgdW5kZWZpbmVkIGluIFNhZmFyaSBhcyBvZiB3cml0aW5nLgogIC8vIEFsc28gYXMgb2Ygd3JpdGluZywgcGVyZm9ybWFuY2UudGltaW5nIGlzIG5vdCBhdmFpbGFibGUgaW4gV2ViIFdvcmtlcnMgaW4gbWFpbnN0cmVhbSBicm93c2Vycywgc28gaXQgaXMgbm90IGFsd2F5cwogIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZQogIC8vIERhdGUgQVBJLgogIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvbgogIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0OwogIGNvbnN0IGhhc05hdmlnYXRpb25TdGFydCA9IHR5cGVvZiBuYXZpZ2F0aW9uU3RhcnQgPT09ICdudW1iZXInOwogIC8vIGlmIG5hdmlnYXRpb25TdGFydCBpc24ndCBhdmFpbGFibGUgc2V0IGRlbHRhIHRvIHRocmVzaG9sZCBzbyBpdCBpc24ndCB1c2VkCiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkOwogIGNvbnN0IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUgPSBuYXZpZ2F0aW9uU3RhcnREZWx0YSA8IHRocmVzaG9sZDsKCiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHsKICAgIC8vIFVzZSB0aGUgbW9yZSByZWxpYWJsZSB0aW1lIG9yaWdpbgogICAgaWYgKHRpbWVPcmlnaW5EZWx0YSA8PSBuYXZpZ2F0aW9uU3RhcnREZWx0YSkgewogICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuYXZpZ2F0aW9uU3RhcnQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlTm93Owp9KSgpOwoKLyoqCiAqIENyZWF0ZXMgYW4gZW52ZWxvcGUuCiAqIE1ha2Ugc3VyZSB0byBhbHdheXMgZXhwbGljaXRseSBwcm92aWRlIHRoZSBnZW5lcmljIHRvIHRoaXMgZnVuY3Rpb24KICogc28gdGhhdCB0aGUgZW52ZWxvcGUgdHlwZXMgcmVzb2x2ZSBjb3JyZWN0bHkuCiAqLwpmdW5jdGlvbiBjcmVhdGVFbnZlbG9wZShoZWFkZXJzLCBpdGVtcyA9IFtdKSB7CiAgcmV0dXJuIFtoZWFkZXJzLCBpdGVtc10gOwp9CgovKioKICogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9vcCB0aHJvdWdoIHRoZSBpdGVtcyBhbmQgaXRlbSB0eXBlcyBvZiBhbiBlbnZlbG9wZS4KICogKFRoaXMgZnVuY3Rpb24gd2FzIG1vc3RseSBjcmVhdGVkIGJlY2F1c2Ugd29ya2luZyB3aXRoIGVudmVsb3BlIHR5cGVzIGlzIHBhaW5mdWwgYXQgdGhlIG1vbWVudCkKICoKICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KICovCmZ1bmN0aW9uIGZvckVhY2hFbnZlbG9wZUl0ZW0oCiAgZW52ZWxvcGUsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IGVudmVsb3BlSXRlbXMgPSBlbnZlbG9wZVsxXTsKCiAgZm9yIChjb25zdCBlbnZlbG9wZUl0ZW0gb2YgZW52ZWxvcGVJdGVtcykgewogICAgY29uc3QgZW52ZWxvcGVJdGVtVHlwZSA9IGVudmVsb3BlSXRlbVswXS50eXBlOwogICAgY29uc3QgcmVzdWx0ID0gY2FsbGJhY2soZW52ZWxvcGVJdGVtLCBlbnZlbG9wZUl0ZW1UeXBlKTsKCiAgICBpZiAocmVzdWx0KSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KCiAgcmV0dXJuIGZhbHNlOwp9CgovKioKICogRW5jb2RlIGEgc3RyaW5nIHRvIFVURjguCiAqLwpmdW5jdGlvbiBlbmNvZGVVVEY4KGlucHV0LCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IHV0ZjggPSB0ZXh0RW5jb2RlciB8fCBuZXcgVGV4dEVuY29kZXIoKTsKICByZXR1cm4gdXRmOC5lbmNvZGUoaW5wdXQpOwp9CgovKioKICogU2VyaWFsaXplcyBhbiBlbnZlbG9wZS4KICovCmZ1bmN0aW9uIHNlcmlhbGl6ZUVudmVsb3BlKGVudmVsb3BlLCB0ZXh0RW5jb2RlcikgewogIGNvbnN0IFtlbnZIZWFkZXJzLCBpdGVtc10gPSBlbnZlbG9wZTsKCiAgLy8gSW5pdGlhbGx5IHdlIGNvbnN0cnVjdCBvdXIgZW52ZWxvcGUgYXMgYSBzdHJpbmcgYW5kIG9ubHkgY29udmVydCB0byBiaW5hcnkgY2h1bmtzIGlmIHdlIGVuY291bnRlciBiaW5hcnkgZGF0YQogIGxldCBwYXJ0cyA9IEpTT04uc3RyaW5naWZ5KGVudkhlYWRlcnMpOwoKICBmdW5jdGlvbiBhcHBlbmQobmV4dCkgewogICAgaWYgKHR5cGVvZiBwYXJ0cyA9PT0gJ3N0cmluZycpIHsKICAgICAgcGFydHMgPSB0eXBlb2YgbmV4dCA9PT0gJ3N0cmluZycgPyBwYXJ0cyArIG5leHQgOiBbZW5jb2RlVVRGOChwYXJ0cywgdGV4dEVuY29kZXIpLCBuZXh0XTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLnB1c2godHlwZW9mIG5leHQgPT09ICdzdHJpbmcnID8gZW5jb2RlVVRGOChuZXh0LCB0ZXh0RW5jb2RlcikgOiBuZXh0KTsKICAgIH0KICB9CgogIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykgewogICAgY29uc3QgW2l0ZW1IZWFkZXJzLCBwYXlsb2FkXSA9IGl0ZW07CgogICAgYXBwZW5kKGBcbiR7SlNPTi5zdHJpbmdpZnkoaXRlbUhlYWRlcnMpfVxuYCk7CgogICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnc3RyaW5nJyB8fCBwYXlsb2FkIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICBhcHBlbmQocGF5bG9hZCk7CiAgICB9IGVsc2UgewogICAgICBsZXQgc3RyaW5naWZpZWRQYXlsb2FkOwogICAgICB0cnkgewogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KHBheWxvYWQpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gSW4gY2FzZSwgZGVzcGl0ZSBhbGwgb3VyIGVmZm9ydHMgdG8ga2VlcCBgcGF5bG9hZGAgY2lyY3VsYXItZGVwZW5kZW5jeS1mcmVlLCBgSlNPTi5zdHJpbmlmeSgpYCBzdGlsbAogICAgICAgIC8vIGZhaWxzLCB3ZSB0cnkgYWdhaW4gYWZ0ZXIgbm9ybWFsaXppbmcgaXQgYWdhaW4gd2l0aCBpbmZpbml0ZSBub3JtYWxpemF0aW9uIGRlcHRoLiBUaGlzIG9mIGNvdXJzZSBoYXMgYQogICAgICAgIC8vIHBlcmZvcm1hbmNlIGltcGFjdCBidXQgaW4gdGhpcyBjYXNlIGEgcGVyZm9ybWFuY2UgaGl0IGlzIGJldHRlciB0aGFuIHRocm93aW5nLgogICAgICAgIHN0cmluZ2lmaWVkUGF5bG9hZCA9IEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZShwYXlsb2FkKSk7CiAgICAgIH0KICAgICAgYXBwZW5kKHN0cmluZ2lmaWVkUGF5bG9hZCk7CiAgICB9CiAgfQoKICByZXR1cm4gdHlwZW9mIHBhcnRzID09PSAnc3RyaW5nJyA/IHBhcnRzIDogY29uY2F0QnVmZmVycyhwYXJ0cyk7Cn0KCmZ1bmN0aW9uIGNvbmNhdEJ1ZmZlcnMoYnVmZmVycykgewogIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVycy5yZWR1Y2UoKGFjYywgYnVmKSA9PiBhY2MgKyBidWYubGVuZ3RoLCAwKTsKCiAgY29uc3QgbWVyZ2VkID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHsKICAgIG1lcmdlZC5zZXQoYnVmZmVyLCBvZmZzZXQpOwogICAgb2Zmc2V0ICs9IGJ1ZmZlci5sZW5ndGg7CiAgfQoKICByZXR1cm4gbWVyZ2VkOwp9Cgpjb25zdCBJVEVNX1RZUEVfVE9fREFUQV9DQVRFR09SWV9NQVAgPSB7CiAgc2Vzc2lvbjogJ3Nlc3Npb24nLAogIHNlc3Npb25zOiAnc2Vzc2lvbicsCiAgYXR0YWNobWVudDogJ2F0dGFjaG1lbnQnLAogIHRyYW5zYWN0aW9uOiAndHJhbnNhY3Rpb24nLAogIGV2ZW50OiAnZXJyb3InLAogIGNsaWVudF9yZXBvcnQ6ICdpbnRlcm5hbCcsCiAgdXNlcl9yZXBvcnQ6ICdkZWZhdWx0JywKICBwcm9maWxlOiAncHJvZmlsZScsCiAgcmVwbGF5X2V2ZW50OiAncmVwbGF5JywKICByZXBsYXlfcmVjb3JkaW5nOiAncmVwbGF5JywKICBjaGVja19pbjogJ21vbml0b3InLAogIGZlZWRiYWNrOiAnZmVlZGJhY2snLAogIHNwYW46ICdzcGFuJywKICAvLyBUT0RPOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgd2UgaGF2ZSBhIHByb3BlciBkYXRhIGNhdGVnb3J5IGZvciBtZXRyaWNzCiAgc3RhdHNkOiAndW5rbm93bicsCn07CgovKioKICogTWFwcyB0aGUgdHlwZSBvZiBhbiBlbnZlbG9wZSBpdGVtIHRvIGEgZGF0YSBjYXRlZ29yeS4KICovCmZ1bmN0aW9uIGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKSB7CiAgcmV0dXJuIElURU1fVFlQRV9UT19EQVRBX0NBVEVHT1JZX01BUFt0eXBlXTsKfQoKLyoqIEV4dHJhY3RzIHRoZSBtaW5pbWFsIFNESyBpbmZvIGZyb20gZnJvbSB0aGUgbWV0YWRhdGEgb3IgYW4gZXZlbnRzICovCmZ1bmN0aW9uIGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIobWV0YWRhdGFPckV2ZW50KSB7CiAgaWYgKCFtZXRhZGF0YU9yRXZlbnQgfHwgIW1ldGFkYXRhT3JFdmVudC5zZGspIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBtZXRhZGF0YU9yRXZlbnQuc2RrOwogIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTsKfQoKLyoqCiAqIENyZWF0ZXMgZXZlbnQgZW52ZWxvcGUgaGVhZGVycywgYmFzZWQgb24gZXZlbnQsIHNkayBpbmZvIGFuZCB0dW5uZWwKICogTm90ZTogVGhpcyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIGNvcmUgcGFja2FnZSB0byBtYWtlIGl0IGF2YWlsYWJsZSBpbiBSZXBsYXkKICovCmZ1bmN0aW9uIGNyZWF0ZUV2ZW50RW52ZWxvcGVIZWFkZXJzKAogIGV2ZW50LAogIHNka0luZm8sCiAgdHVubmVsLAogIGRzbiwKKSB7CiAgY29uc3QgZHluYW1pY1NhbXBsaW5nQ29udGV4dCA9IGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YSAmJiBldmVudC5zZGtQcm9jZXNzaW5nTWV0YWRhdGEuZHluYW1pY1NhbXBsaW5nQ29udGV4dDsKICByZXR1cm4gewogICAgZXZlbnRfaWQ6IGV2ZW50LmV2ZW50X2lkICwKICAgIHNlbnRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSwKICAgIC4uLihzZGtJbmZvICYmIHsgc2RrOiBzZGtJbmZvIH0pLAogICAgLi4uKCEhdHVubmVsICYmIGRzbiAmJiB7IGRzbjogZHNuVG9TdHJpbmcoZHNuKSB9KSwKICAgIC4uLihkeW5hbWljU2FtcGxpbmdDb250ZXh0ICYmIHsKICAgICAgdHJhY2U6IGRyb3BVbmRlZmluZWRLZXlzKHsgLi4uZHluYW1pY1NhbXBsaW5nQ29udGV4dCB9KSwKICAgIH0pLAogIH07Cn0KCi8vIEludGVudGlvbmFsbHkga2VlcGluZyB0aGUga2V5IGJyb2FkLCBhcyB3ZSBkb24ndCBrbm93IGZvciBzdXJlIHdoYXQgcmF0ZSBsaW1pdCBoZWFkZXJzIGdldCByZXR1cm5lZCBmcm9tIGJhY2tlbmQKCmNvbnN0IERFRkFVTFRfUkVUUllfQUZURVIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHMKCi8qKgogKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWUKICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXIKICogQHBhcmFtIG5vdyBjdXJyZW50IHVuaXggdGltZXN0YW1wCiAqCiAqLwpmdW5jdGlvbiBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIoaGVhZGVyLCBub3cgPSBEYXRlLm5vdygpKSB7CiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApOwogIGlmICghaXNOYU4oaGVhZGVyRGVsYXkpKSB7CiAgICByZXR1cm4gaGVhZGVyRGVsYXkgKiAxMDAwOwogIH0KCiAgY29uc3QgaGVhZGVyRGF0ZSA9IERhdGUucGFyc2UoYCR7aGVhZGVyfWApOwogIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHsKICAgIHJldHVybiBoZWFkZXJEYXRlIC0gbm93OwogIH0KCiAgcmV0dXJuIERFRkFVTFRfUkVUUllfQUZURVI7Cn0KCi8qKgogKiBHZXRzIHRoZSB0aW1lIHRoYXQgdGhlIGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nLgogKiBJbiBjYXNlIG5vIGNhdGVnb3J5LXNwZWNpZmljIGxpbWl0IGlzIHNldCBidXQgYSBnZW5lcmFsIHJhdGUgbGltaXQgYWNyb3NzIGFsbCBjYXRlZ29yaWVzIGlzIGFjdGl2ZSwKICogdGhhdCB0aW1lIGlzIHJldHVybmVkLgogKgogKiBAcmV0dXJuIHRoZSB0aW1lIGluIG1zIHRoYXQgdGhlIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIG9yIDAgaWYgdGhlcmUncyBubyBhY3RpdmUgcmF0ZSBsaW1pdC4KICovCmZ1bmN0aW9uIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgewogIHJldHVybiBsaW1pdHNbY2F0ZWdvcnldIHx8IGxpbWl0cy5hbGwgfHwgMDsKfQoKLyoqCiAqIENoZWNrcyBpZiBhIGNhdGVnb3J5IGlzIHJhdGUgbGltaXRlZAogKi8KZnVuY3Rpb24gaXNSYXRlTGltaXRlZChsaW1pdHMsIGNhdGVnb3J5LCBub3cgPSBEYXRlLm5vdygpKSB7CiAgcmV0dXJuIGRpc2FibGVkVW50aWwobGltaXRzLCBjYXRlZ29yeSkgPiBub3c7Cn0KCi8qKgogKiBVcGRhdGUgcmF0ZWxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuCiAqCiAqIEByZXR1cm4gdGhlIHVwZGF0ZWQgUmF0ZUxpbWl0cyBvYmplY3QuCiAqLwpmdW5jdGlvbiB1cGRhdGVSYXRlTGltaXRzKAogIGxpbWl0cywKICB7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSwKICBub3cgPSBEYXRlLm5vdygpLAopIHsKICBjb25zdCB1cGRhdGVkUmF0ZUxpbWl0cyA9IHsKICAgIC4uLmxpbWl0cywKICB9OwoKICAvLyAiVGhlIG5hbWUgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iCiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hlYWRlcnMvZ2V0CiAgY29uc3QgcmF0ZUxpbWl0SGVhZGVyID0gaGVhZGVycyAmJiBoZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddOwogIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107CgogIGlmIChyYXRlTGltaXRIZWFkZXIpIHsKICAgIC8qKgogICAgICogcmF0ZSBsaW1pdCBoZWFkZXJzIGFyZSBvZiB0aGUgZm9ybQogICAgICogICAgIDxoZWFkZXI+LDxoZWFkZXI+LC4uCiAgICAgKiB3aGVyZSBlYWNoIDxoZWFkZXI+IGlzIG9mIHRoZSBmb3JtCiAgICAgKiAgICAgPHJldHJ5X2FmdGVyPjogPGNhdGVnb3JpZXM+OiA8c2NvcGU+OiA8cmVhc29uX2NvZGU+CiAgICAgKiB3aGVyZQogICAgICogICAgIDxyZXRyeV9hZnRlcj4gaXMgYSBkZWxheSBpbiBzZWNvbmRzCiAgICAgKiAgICAgPGNhdGVnb3JpZXM+IGlzIHRoZSBldmVudCB0eXBlKHMpIChlcnJvciwgdHJhbnNhY3Rpb24sIGV0YykgYmVpbmcgcmF0ZSBsaW1pdGVkIGFuZCBpcyBvZiB0aGUgZm9ybQogICAgICogICAgICAgICA8Y2F0ZWdvcnk+OzxjYXRlZ29yeT47Li4uCiAgICAgKiAgICAgPHNjb3BlPiBpcyB3aGF0J3MgYmVpbmcgbGltaXRlZCAob3JnLCBwcm9qZWN0LCBvciBrZXkpIC0gaWdub3JlZCBieSBTREsKICAgICAqICAgICA8cmVhc29uX2NvZGU+IGlzIGFuIGFyYml0cmFyeSBzdHJpbmcgbGlrZSAib3JnX3F1b3RhIiAtIGlnbm9yZWQgYnkgU0RLCiAgICAgKi8KICAgIGZvciAoY29uc3QgbGltaXQgb2YgcmF0ZUxpbWl0SGVhZGVyLnRyaW0oKS5zcGxpdCgnLCcpKSB7CiAgICAgIGNvbnN0IFtyZXRyeUFmdGVyLCBjYXRlZ29yaWVzXSA9IGxpbWl0LnNwbGl0KCc6JywgMik7CiAgICAgIGNvbnN0IGhlYWRlckRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlciwgMTApOwogICAgICBjb25zdCBkZWxheSA9ICghaXNOYU4oaGVhZGVyRGVsYXkpID8gaGVhZGVyRGVsYXkgOiA2MCkgKiAxMDAwOyAvLyA2MHNlYyBkZWZhdWx0CiAgICAgIGlmICghY2F0ZWdvcmllcykgewogICAgICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIGRlbGF5OwogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcy5zcGxpdCgnOycpKSB7CiAgICAgICAgICB1cGRhdGVkUmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBub3cgKyBkZWxheTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHJldHJ5QWZ0ZXJIZWFkZXIpIHsKICAgIHVwZGF0ZWRSYXRlTGltaXRzLmFsbCA9IG5vdyArIHBhcnNlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyLCBub3cpOwogIH0gZWxzZSBpZiAoc3RhdHVzQ29kZSA9PT0gNDI5KSB7CiAgICB1cGRhdGVkUmF0ZUxpbWl0cy5hbGwgPSBub3cgKyA2MCAqIDEwMDA7CiAgfQoKICByZXR1cm4gdXBkYXRlZFJhdGVMaW1pdHM7Cn0KCi8qKgogKiBBIG5vZGUuanMgd2F0Y2hkb2cgdGltZXIKICogQHBhcmFtIHBvbGxJbnRlcnZhbCBUaGUgaW50ZXJ2YWwgdGhhdCB3ZSBleHBlY3QgdG8gZ2V0IHBvbGxlZCBhdAogKiBAcGFyYW0gYW5yVGhyZXNob2xkIFRoZSB0aHJlc2hvbGQgZm9yIHdoZW4gd2UgY29uc2lkZXIgQU5SCiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gY2FsbCBmb3IgQU5SCiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGBwb2xsYCBhbmQgYGVuYWJsZWRgIGZ1bmN0aW9ucyB7QGxpbmsgV2F0Y2hkb2dSZXR1cm59CiAqLwpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVyKAogIGNyZWF0ZVRpbWVyLAogIHBvbGxJbnRlcnZhbCwKICBhbnJUaHJlc2hvbGQsCiAgY2FsbGJhY2ssCikgewogIGNvbnN0IHRpbWVyID0gY3JlYXRlVGltZXIoKTsKICBsZXQgdHJpZ2dlcmVkID0gZmFsc2U7CiAgbGV0IGVuYWJsZWQgPSB0cnVlOwoKICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBjb25zdCBkaWZmTXMgPSB0aW1lci5nZXRUaW1lTXMoKTsKCiAgICBpZiAodHJpZ2dlcmVkID09PSBmYWxzZSAmJiBkaWZmTXMgPiBwb2xsSW50ZXJ2YWwgKyBhbnJUaHJlc2hvbGQpIHsKICAgICAgdHJpZ2dlcmVkID0gdHJ1ZTsKICAgICAgaWYgKGVuYWJsZWQpIHsKICAgICAgICBjYWxsYmFjaygpOwogICAgICB9CiAgICB9CgogICAgaWYgKGRpZmZNcyA8IHBvbGxJbnRlcnZhbCArIGFuclRocmVzaG9sZCkgewogICAgICB0cmlnZ2VyZWQgPSBmYWxzZTsKICAgIH0KICB9LCAyMCk7CgogIHJldHVybiB7CiAgICBwb2xsOiAoKSA9PiB7CiAgICAgIHRpbWVyLnJlc2V0KCk7CiAgICB9LAogICAgZW5hYmxlZDogKHN0YXRlKSA9PiB7CiAgICAgIGVuYWJsZWQgPSBzdGF0ZTsKICAgIH0sCiAgfTsKfQoKLy8gdHlwZXMgY29waWVkIGZyb20gaW5zcGVjdG9yLmQudHMKCi8qKgogKiBDb252ZXJ0cyBEZWJ1Z2dlci5DYWxsRnJhbWUgdG8gU2VudHJ5IFN0YWNrRnJhbWUKICovCmZ1bmN0aW9uIGNhbGxGcmFtZVRvU3RhY2tGcmFtZSgKICBmcmFtZSwKICB1cmwsCiAgZ2V0TW9kdWxlRnJvbUZpbGVuYW1lLAopIHsKICBjb25zdCBmaWxlbmFtZSA9IHVybCA/IHVybC5yZXBsYWNlKC9eZmlsZTpcL1wvLywgJycpIDogdW5kZWZpbmVkOwoKICAvLyBDYWxsRnJhbWUgcm93L2NvbCBhcmUgMCBiYXNlZCwgd2hlcmVhcyBTdGFja0ZyYW1lIGFyZSAxIGJhc2VkCiAgY29uc3QgY29sbm8gPSBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5jb2x1bW5OdW1iZXIgKyAxIDogdW5kZWZpbmVkOwogIGNvbnN0IGxpbmVubyA9IGZyYW1lLmxvY2F0aW9uLmxpbmVOdW1iZXIgPyBmcmFtZS5sb2NhdGlvbi5saW5lTnVtYmVyICsgMSA6IHVuZGVmaW5lZDsKCiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIGZpbGVuYW1lLAogICAgbW9kdWxlOiBnZXRNb2R1bGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpLAogICAgZnVuY3Rpb246IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCAnPycsCiAgICBjb2xubywKICAgIGxpbmVubywKICAgIGluX2FwcDogZmlsZW5hbWUgPyBmaWxlbmFtZUlzSW5BcHAoZmlsZW5hbWUpIDogdW5kZWZpbmVkLAogIH0pOwp9CgovKioKICogVGhpcyBzZXJ2ZXMgYXMgYSBidWlsZCB0aW1lIGZsYWcgdGhhdCB3aWxsIGJlIHRydWUgYnkgZGVmYXVsdCwgYnV0IGZhbHNlIGluIG5vbi1kZWJ1ZyBidWlsZHMgb3IgaWYgdXNlcnMgcmVwbGFjZSBgX19TRU5UUllfREVCVUdfX2AgaW4gdGhlaXIgZ2VuZXJhdGVkIGNvZGUuCiAqCiAqIEFUVEVOVElPTjogVGhpcyBjb25zdGFudCBtdXN0IG5ldmVyIGNyb3NzIHBhY2thZ2UgYm91bmRhcmllcyAoaS5lLiBiZSBleHBvcnRlZCkgdG8gZ3VhcmFudGVlIHRoYXQgaXQgY2FuIGJlIHVzZWQgZm9yIHRyZWUgc2hha2luZy4KICovCmNvbnN0IERFQlVHX0JVSUxEID0gKHR5cGVvZiBfX1NFTlRSWV9ERUJVR19fID09PSAndW5kZWZpbmVkJyB8fCBfX1NFTlRSWV9ERUJVR19fKTsKCi8qKgogKiBDcmVhdGVzIGEgbmV3IGBTZXNzaW9uYCBvYmplY3QgYnkgc2V0dGluZyBjZXJ0YWluIGRlZmF1bHQgcGFyYW1ldGVycy4gSWYgb3B0aW9uYWwgQHBhcmFtIGNvbnRleHQKICogaXMgcGFzc2VkLCB0aGUgcGFzc2VkIHByb3BlcnRpZXMgYXJlIGFwcGxpZWQgdG8gdGhlIHNlc3Npb24gb2JqZWN0LgogKgogKiBAcGFyYW0gY29udGV4dCAob3B0aW9uYWwpIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIHRoZSByZXR1cm5lZCBzZXNzaW9uIG9iamVjdAogKgogKiBAcmV0dXJucyBhIG5ldyBgU2Vzc2lvbmAgb2JqZWN0CiAqLwpmdW5jdGlvbiBtYWtlU2Vzc2lvbihjb250ZXh0KSB7CiAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCiAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGNvbnN0IHNlc3Npb24gPSB7CiAgICBzaWQ6IHV1aWQ0KCksCiAgICBpbml0OiB0cnVlLAogICAgdGltZXN0YW1wOiBzdGFydGluZ1RpbWUsCiAgICBzdGFydGVkOiBzdGFydGluZ1RpbWUsCiAgICBkdXJhdGlvbjogMCwKICAgIHN0YXR1czogJ29rJywKICAgIGVycm9yczogMCwKICAgIGlnbm9yZUR1cmF0aW9uOiBmYWxzZSwKICAgIHRvSlNPTjogKCkgPT4gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSwKICB9OwoKICBpZiAoY29udGV4dCkgewogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0KTsKICB9CgogIHJldHVybiBzZXNzaW9uOwp9CgovKioKICogVXBkYXRlcyBhIHNlc3Npb24gb2JqZWN0IHdpdGggdGhlIHByb3BlcnRpZXMgcGFzc2VkIGluIHRoZSBjb250ZXh0LgogKgogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtdXRhdGVzIHRoZSBwYXNzZWQgb2JqZWN0IGFuZCByZXR1cm5zIHZvaWQuCiAqIChIYWQgdG8gZG8gdGhpcyBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG5ldyBhbmQgdXBkYXRlZCBzZXNzaW9uIGJlY2F1c2UgY2xvc2luZyBhbmQgc2VuZGluZyBhIHNlc3Npb24KICogbWFrZXMgYW4gdXBkYXRlIHRvIHRoZSBzZXNzaW9uIGFmdGVyIGl0IHdhcyBwYXNzZWQgdG8gdGhlIHNlbmRpbmcgbG9naWMuCiAqIEBzZWUgQmFzZUNsaWVudC5jYXB0dXJlU2Vzc2lvbiApCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBgU2Vzc2lvbmAgdG8gdXBkYXRlCiAqIEBwYXJhbSBjb250ZXh0IHRoZSBgU2Vzc2lvbkNvbnRleHRgIGhvbGRpbmcgdGhlIHByb3BlcnRpZXMgdGhhdCBzaG91bGQgYmUgdXBkYXRlZCBpbiBAcGFyYW0gc2Vzc2lvbgogKi8KLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHkKZnVuY3Rpb24gdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCBjb250ZXh0ID0ge30pIHsKICBpZiAoY29udGV4dC51c2VyKSB7CiAgICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQudXNlci5pcF9hZGRyZXNzKSB7CiAgICAgIHNlc3Npb24uaXBBZGRyZXNzID0gY29udGV4dC51c2VyLmlwX2FkZHJlc3M7CiAgICB9CgogICAgaWYgKCFzZXNzaW9uLmRpZCAmJiAhY29udGV4dC5kaWQpIHsKICAgICAgc2Vzc2lvbi5kaWQgPSBjb250ZXh0LnVzZXIuaWQgfHwgY29udGV4dC51c2VyLmVtYWlsIHx8IGNvbnRleHQudXNlci51c2VybmFtZTsKICAgIH0KICB9CgogIHNlc3Npb24udGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7CgogIGlmIChjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbSkgewogICAgc2Vzc2lvbi5hYm5vcm1hbF9tZWNoYW5pc20gPSBjb250ZXh0LmFibm9ybWFsX21lY2hhbmlzbTsKICB9CgogIGlmIChjb250ZXh0Lmlnbm9yZUR1cmF0aW9uKSB7CiAgICBzZXNzaW9uLmlnbm9yZUR1cmF0aW9uID0gY29udGV4dC5pZ25vcmVEdXJhdGlvbjsKICB9CiAgaWYgKGNvbnRleHQuc2lkKSB7CiAgICAvLyBHb29kIGVub3VnaCB1dWlkIHZhbGlkYXRpb24uIOKAlCBLYW1pbAogICAgc2Vzc2lvbi5zaWQgPSBjb250ZXh0LnNpZC5sZW5ndGggPT09IDMyID8gY29udGV4dC5zaWQgOiB1dWlkNCgpOwogIH0KICBpZiAoY29udGV4dC5pbml0ICE9PSB1bmRlZmluZWQpIHsKICAgIHNlc3Npb24uaW5pdCA9IGNvbnRleHQuaW5pdDsKICB9CiAgaWYgKCFzZXNzaW9uLmRpZCAmJiBjb250ZXh0LmRpZCkgewogICAgc2Vzc2lvbi5kaWQgPSBgJHtjb250ZXh0LmRpZH1gOwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuc3RhcnRlZCA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uc3RhcnRlZCA9IGNvbnRleHQuc3RhcnRlZDsKICB9CiAgaWYgKHNlc3Npb24uaWdub3JlRHVyYXRpb24pIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSB1bmRlZmluZWQ7CiAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dC5kdXJhdGlvbiA9PT0gJ251bWJlcicpIHsKICAgIHNlc3Npb24uZHVyYXRpb24gPSBjb250ZXh0LmR1cmF0aW9uOwogIH0gZWxzZSB7CiAgICBjb25zdCBkdXJhdGlvbiA9IHNlc3Npb24udGltZXN0YW1wIC0gc2Vzc2lvbi5zdGFydGVkOwogICAgc2Vzc2lvbi5kdXJhdGlvbiA9IGR1cmF0aW9uID49IDAgPyBkdXJhdGlvbiA6IDA7CiAgfQogIGlmIChjb250ZXh0LnJlbGVhc2UpIHsKICAgIHNlc3Npb24ucmVsZWFzZSA9IGNvbnRleHQucmVsZWFzZTsKICB9CiAgaWYgKGNvbnRleHQuZW52aXJvbm1lbnQpIHsKICAgIHNlc3Npb24uZW52aXJvbm1lbnQgPSBjb250ZXh0LmVudmlyb25tZW50OwogIH0KICBpZiAoIXNlc3Npb24uaXBBZGRyZXNzICYmIGNvbnRleHQuaXBBZGRyZXNzKSB7CiAgICBzZXNzaW9uLmlwQWRkcmVzcyA9IGNvbnRleHQuaXBBZGRyZXNzOwogIH0KICBpZiAoIXNlc3Npb24udXNlckFnZW50ICYmIGNvbnRleHQudXNlckFnZW50KSB7CiAgICBzZXNzaW9uLnVzZXJBZ2VudCA9IGNvbnRleHQudXNlckFnZW50OwogIH0KICBpZiAodHlwZW9mIGNvbnRleHQuZXJyb3JzID09PSAnbnVtYmVyJykgewogICAgc2Vzc2lvbi5lcnJvcnMgPSBjb250ZXh0LmVycm9yczsKICB9CiAgaWYgKGNvbnRleHQuc3RhdHVzKSB7CiAgICBzZXNzaW9uLnN0YXR1cyA9IGNvbnRleHQuc3RhdHVzOwogIH0KfQoKLyoqCiAqIFNlcmlhbGl6ZXMgYSBwYXNzZWQgc2Vzc2lvbiBvYmplY3QgdG8gYSBKU09OIG9iamVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHN0cnVjdHVyZS4KICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgU2VudHJ5IGJhY2tlbmQgcmVxdWlyZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2NoZW1hIG9mIGEgc2Vzc2lvbgogKiB0aGFuIHRoZSBvbmUgdGhlIEpTIFNES3MgdXNlIGludGVybmFsbHkuCiAqCiAqIEBwYXJhbSBzZXNzaW9uIHRoZSBzZXNzaW9uIHRvIGJlIGNvbnZlcnRlZAogKgogKiBAcmV0dXJucyBhIEpTT04gb2JqZWN0IG9mIHRoZSBwYXNzZWQgc2Vzc2lvbgogKi8KZnVuY3Rpb24gc2Vzc2lvblRvSlNPTihzZXNzaW9uKSB7CiAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHsKICAgIHNpZDogYCR7c2Vzc2lvbi5zaWR9YCwKICAgIGluaXQ6IHNlc3Npb24uaW5pdCwKICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3IKICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHNlc3Npb24uc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksCiAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHNlc3Npb24udGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwKICAgIHN0YXR1czogc2Vzc2lvbi5zdGF0dXMsCiAgICBlcnJvcnM6IHNlc3Npb24uZXJyb3JzLAogICAgZGlkOiB0eXBlb2Ygc2Vzc2lvbi5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZXNzaW9uLmRpZCA9PT0gJ3N0cmluZycgPyBgJHtzZXNzaW9uLmRpZH1gIDogdW5kZWZpbmVkLAogICAgZHVyYXRpb246IHNlc3Npb24uZHVyYXRpb24sCiAgICBhYm5vcm1hbF9tZWNoYW5pc206IHNlc3Npb24uYWJub3JtYWxfbWVjaGFuaXNtLAogICAgYXR0cnM6IHsKICAgICAgcmVsZWFzZTogc2Vzc2lvbi5yZWxlYXNlLAogICAgICBlbnZpcm9ubWVudDogc2Vzc2lvbi5lbnZpcm9ubWVudCwKICAgICAgaXBfYWRkcmVzczogc2Vzc2lvbi5pcEFkZHJlc3MsCiAgICAgIHVzZXJfYWdlbnQ6IHNlc3Npb24udXNlckFnZW50LAogICAgfSwKICB9KTsKfQoKLyoqCiAqIEFwcGx5IFNka0luZm8gKG5hbWUsIHZlcnNpb24sIHBhY2thZ2VzLCBpbnRlZ3JhdGlvbnMpIHRvIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGtleS4KICogTWVyZ2Ugd2l0aCBleGlzdGluZyBkYXRhIGlmIGFueS4KICoqLwpmdW5jdGlvbiBlbmhhbmNlRXZlbnRXaXRoU2RrSW5mbyhldmVudCwgc2RrSW5mbykgewogIGlmICghc2RrSW5mbykgewogICAgcmV0dXJuIGV2ZW50OwogIH0KICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307CiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7CiAgZXZlbnQuc2RrLnZlcnNpb24gPSBldmVudC5zZGsudmVyc2lvbiB8fCBzZGtJbmZvLnZlcnNpb247CiAgZXZlbnQuc2RrLmludGVncmF0aW9ucyA9IFsuLi4oZXZlbnQuc2RrLmludGVncmF0aW9ucyB8fCBbXSksIC4uLihzZGtJbmZvLmludGVncmF0aW9ucyB8fCBbXSldOwogIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTsKICByZXR1cm4gZXZlbnQ7Cn0KCi8qKiBDcmVhdGVzIGFuIGVudmVsb3BlIGZyb20gYSBTZXNzaW9uICovCmZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25FbnZlbG9wZSgKICBzZXNzaW9uLAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSB7CiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSwKICAgIC4uLighIXR1bm5lbCAmJiBkc24gJiYgeyBkc246IGRzblRvU3RyaW5nKGRzbikgfSksCiAgfTsKCiAgY29uc3QgZW52ZWxvcGVJdGVtID0KICAgICdhZ2dyZWdhdGVzJyBpbiBzZXNzaW9uID8gW3sgdHlwZTogJ3Nlc3Npb25zJyB9LCBzZXNzaW9uXSA6IFt7IHR5cGU6ICdzZXNzaW9uJyB9LCBzZXNzaW9uLnRvSlNPTigpXTsKCiAgcmV0dXJuIGNyZWF0ZUVudmVsb3BlKGVudmVsb3BlSGVhZGVycywgW2VudmVsb3BlSXRlbV0pOwp9CgovKioKICogQ3JlYXRlIGFuIEVudmVsb3BlIGZyb20gYW4gZXZlbnQuCiAqLwpmdW5jdGlvbiBjcmVhdGVFdmVudEVudmVsb3BlKAogIGV2ZW50LAogIGRzbiwKICBtZXRhZGF0YSwKICB0dW5uZWwsCikgewogIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKG1ldGFkYXRhKTsKCiAgLyoKICAgIE5vdGU6IER1ZSB0byBUUywgZXZlbnQudHlwZSBtYXkgYmUgYHJlcGxheV9ldmVudGAsIHRoZW9yZXRpY2FsbHkuCiAgICBJbiBwcmFjdGljZSwgd2UgbmV2ZXIgY2FsbCBgY3JlYXRlRXZlbnRFbnZlbG9wZWAgd2l0aCBgcmVwbGF5X2V2ZW50YCB0eXBlLAogICAgYW5kIHdlJ2QgaGF2ZSB0byBhZGp1dCBhIGxvb290IG9mIHR5cGVzIHRvIG1ha2UgdGhpcyB3b3JrIHByb3Blcmx5LgogICAgV2Ugd2FudCB0byBhdm9pZCBjYXN0aW5nIHRoaXMgYXJvdW5kLCBhcyB0aGF0IGNvdWxkIGxlYWQgdG8gYnVncyAoZS5nLiB3aGVuIHdlIGFkZCBhbm90aGVyIHR5cGUpCiAgICBTbyB0aGUgc2FmZSBjaG9pY2UgaXMgdG8gcmVhbGx5IGd1YXJkIGFnYWluc3QgdGhlIHJlcGxheV9ldmVudCB0eXBlIGhlcmUuCiAgKi8KICBjb25zdCBldmVudFR5cGUgPSBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09ICdyZXBsYXlfZXZlbnQnID8gZXZlbnQudHlwZSA6ICdldmVudCc7CgogIGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBtZXRhZGF0YSAmJiBtZXRhZGF0YS5zZGspOwoKICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBjcmVhdGVFdmVudEVudmVsb3BlSGVhZGVycyhldmVudCwgc2RrSW5mbywgdHVubmVsLCBkc24pOwoKICAvLyBQcmV2ZW50IHRoaXMgZGF0YSAod2hpY2gsIGlmIGl0IGV4aXN0cywgd2FzIHVzZWQgaW4gZWFybGllciBzdGVwcyBpbiB0aGUgcHJvY2Vzc2luZyBwaXBlbGluZSkgZnJvbSBiZWluZyBzZW50IHRvCiAgLy8gc2VudHJ5LiAoTm90ZTogT3VyIHVzZSBvZiB0aGlzIHByb3BlcnR5IGNvbWVzIGFuZCBnb2VzIHdpdGggd2hhdGV2ZXIgd2UgbWlnaHQgYmUgZGVidWdnaW5nLCB3aGF0ZXZlciBoYWNrcyB3ZSBtYXkKICAvLyBoYXZlIHRlbXBvcmFyaWx5IGFkZGVkLCBldGMuIEV2ZW4gaWYgd2UgZG9uJ3QgaGFwcGVuIHRvIGJlIHVzaW5nIGl0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgbGV0J3Mgbm90IGdldCByaWQKICAvLyBvZiB0aGlzIGBkZWxldGVgLCBsZXN0IHdlIG1pc3MgcHV0dGluZyBpdCBiYWNrIGluIHRoZSBuZXh0IHRpbWUgdGhlIHByb3BlcnR5IGlzIGluIHVzZS4pCiAgZGVsZXRlIGV2ZW50LnNka1Byb2Nlc3NpbmdNZXRhZGF0YTsKCiAgY29uc3QgZXZlbnRJdGVtID0gW3sgdHlwZTogZXZlbnRUeXBlIH0sIGV2ZW50XTsKICByZXR1cm4gY3JlYXRlRW52ZWxvcGUoZW52ZWxvcGVIZWFkZXJzLCBbZXZlbnRJdGVtXSk7Cn0KCmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JzsKCi8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi8KZnVuY3Rpb24gZ2V0QmFzZUFwaUVuZHBvaW50KGRzbikgewogIGNvbnN0IHByb3RvY29sID0gZHNuLnByb3RvY29sID8gYCR7ZHNuLnByb3RvY29sfTpgIDogJyc7CiAgY29uc3QgcG9ydCA9IGRzbi5wb3J0ID8gYDoke2Rzbi5wb3J0fWAgOiAnJzsKICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2Rzbi5ob3N0fSR7cG9ydH0ke2Rzbi5wYXRoID8gYC8ke2Rzbi5wYXRofWAgOiAnJ30vYXBpL2A7Cn0KCi8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovCmZ1bmN0aW9uIF9nZXRJbmdlc3RFbmRwb2ludChkc24pIHsKICByZXR1cm4gYCR7Z2V0QmFzZUFwaUVuZHBvaW50KGRzbil9JHtkc24ucHJvamVjdElkfS9lbnZlbG9wZS9gOwp9CgovKiogUmV0dXJucyBhIFVSTC1lbmNvZGVkIHN0cmluZyB3aXRoIGF1dGggY29uZmlnIHN1aXRhYmxlIGZvciBhIHF1ZXJ5IHN0cmluZy4gKi8KZnVuY3Rpb24gX2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbykgewogIHJldHVybiB1cmxFbmNvZGUoewogICAgLy8gV2Ugc2VuZCBvbmx5IHRoZSBtaW5pbXVtIHNldCBvZiByZXF1aXJlZCBpbmZvcm1hdGlvbi4gU2VlCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTcyLgogICAgc2VudHJ5X2tleTogZHNuLnB1YmxpY0tleSwKICAgIHNlbnRyeV92ZXJzaW9uOiBTRU5UUllfQVBJX1ZFUlNJT04sCiAgICAuLi4oc2RrSW5mbyAmJiB7IHNlbnRyeV9jbGllbnQ6IGAke3Nka0luZm8ubmFtZX0vJHtzZGtJbmZvLnZlcnNpb259YCB9KSwKICB9KTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy4KICoKICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLgogKi8KZnVuY3Rpb24gZ2V0RW52ZWxvcGVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgKICBkc24sCiAgLy8gVE9ETyAodjgpOiBSZW1vdmUgYHR1bm5lbE9yT3B0aW9uc2AgaW4gZmF2b3Igb2YgYG9wdGlvbnNgLCBhbmQgdXNlIHRoZSBzdWJzdGl0dXRlIGNvZGUgYmVsb3cKICAvLyBvcHRpb25zOiBDbGllbnRPcHRpb25zID0ge30gYXMgQ2xpZW50T3B0aW9ucywKICB0dW5uZWxPck9wdGlvbnMgPSB7fSAsCikgewogIC8vIFRPRE8gKHY4KTogVXNlIHRoaXMgY29kZSBpbnN0ZWFkCiAgLy8gY29uc3QgeyB0dW5uZWwsIF9tZXRhZGF0YSA9IHt9IH0gPSBvcHRpb25zOwogIC8vIHJldHVybiB0dW5uZWwgPyB0dW5uZWwgOiBgJHtfZ2V0SW5nZXN0RW5kcG9pbnQoZHNuKX0/JHtfZW5jb2RlZEF1dGgoZHNuLCBfbWV0YWRhdGEuc2RrKX1gOwoKICBjb25zdCB0dW5uZWwgPSB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyA/IHR1bm5lbE9yT3B0aW9ucyA6IHR1bm5lbE9yT3B0aW9ucy50dW5uZWw7CiAgY29uc3Qgc2RrSW5mbyA9CiAgICB0eXBlb2YgdHVubmVsT3JPcHRpb25zID09PSAnc3RyaW5nJyB8fCAhdHVubmVsT3JPcHRpb25zLl9tZXRhZGF0YSA/IHVuZGVmaW5lZCA6IHR1bm5lbE9yT3B0aW9ucy5fbWV0YWRhdGEuc2RrOwoKICByZXR1cm4gdHVubmVsID8gdHVubmVsIDogYCR7X2dldEluZ2VzdEVuZHBvaW50KGRzbil9PyR7X2VuY29kZWRBdXRoKGRzbiwgc2RrSW5mbyl9YDsKfQoKY29uc3QgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUgPSAzMDsKCi8qKgogKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIGEgU2VudHJ5IGBUcmFuc3BvcnRgCiAqCiAqIEBwYXJhbSBvcHRpb25zCiAqIEBwYXJhbSBtYWtlUmVxdWVzdAogKi8KZnVuY3Rpb24gY3JlYXRlVHJhbnNwb3J0KAogIG9wdGlvbnMsCiAgbWFrZVJlcXVlc3QsCiAgYnVmZmVyID0gbWFrZVByb21pc2VCdWZmZXIoCiAgICBvcHRpb25zLmJ1ZmZlclNpemUgfHwgREVGQVVMVF9UUkFOU1BPUlRfQlVGRkVSX1NJWkUsCiAgKSwKKSB7CiAgbGV0IHJhdGVMaW1pdHMgPSB7fTsKICBjb25zdCBmbHVzaCA9ICh0aW1lb3V0KSA9PiBidWZmZXIuZHJhaW4odGltZW91dCk7CgogIGZ1bmN0aW9uIHNlbmQoZW52ZWxvcGUpIHsKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGVJdGVtcyA9IFtdOwoKICAgIC8vIERyb3AgcmF0ZSBsaW1pdGVkIGl0ZW1zIGZyb20gZW52ZWxvcGUKICAgIGZvckVhY2hFbnZlbG9wZUl0ZW0oZW52ZWxvcGUsIChpdGVtLCB0eXBlKSA9PiB7CiAgICAgIGNvbnN0IGVudmVsb3BlSXRlbURhdGFDYXRlZ29yeSA9IGVudmVsb3BlSXRlbVR5cGVUb0RhdGFDYXRlZ29yeSh0eXBlKTsKICAgICAgaWYgKGlzUmF0ZUxpbWl0ZWQocmF0ZUxpbWl0cywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5KSkgewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQoJ3JhdGVsaW1pdF9iYWNrb2ZmJywgZW52ZWxvcGVJdGVtRGF0YUNhdGVnb3J5LCBldmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zLnB1c2goaXRlbSk7CiAgICAgIH0KICAgIH0pOwoKICAgIC8vIFNraXAgc2VuZGluZyBpZiBlbnZlbG9wZSBpcyBlbXB0eSBhZnRlciBmaWx0ZXJpbmcgb3V0IHJhdGUgbGltaXRlZCBldmVudHMKICAgIGlmIChmaWx0ZXJlZEVudmVsb3BlSXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiByZXNvbHZlZFN5bmNQcm9taXNlKCk7CiAgICB9CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkKICAgIGNvbnN0IGZpbHRlcmVkRW52ZWxvcGUgPSBjcmVhdGVFbnZlbG9wZShlbnZlbG9wZVswXSwgZmlsdGVyZWRFbnZlbG9wZUl0ZW1zICk7CgogICAgLy8gQ3JlYXRlcyBjbGllbnQgcmVwb3J0IGZvciBlYWNoIGl0ZW0gaW4gYW4gZW52ZWxvcGUKICAgIGNvbnN0IHJlY29yZEVudmVsb3BlTG9zcyA9IChyZWFzb24pID0+IHsKICAgICAgZm9yRWFjaEVudmVsb3BlSXRlbShmaWx0ZXJlZEVudmVsb3BlLCAoaXRlbSwgdHlwZSkgPT4gewogICAgICAgIGNvbnN0IGV2ZW50ID0gZ2V0RXZlbnRGb3JFbnZlbG9wZUl0ZW0oaXRlbSwgdHlwZSk7CiAgICAgICAgb3B0aW9ucy5yZWNvcmREcm9wcGVkRXZlbnQocmVhc29uLCBlbnZlbG9wZUl0ZW1UeXBlVG9EYXRhQ2F0ZWdvcnkodHlwZSksIGV2ZW50KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IHJlcXVlc3RUYXNrID0gKCkgPT4KICAgICAgbWFrZVJlcXVlc3QoeyBib2R5OiBzZXJpYWxpemVFbnZlbG9wZShmaWx0ZXJlZEVudmVsb3BlLCBvcHRpb25zLnRleHRFbmNvZGVyKSB9KS50aGVuKAogICAgICAgIHJlc3BvbnNlID0+IHsKICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdGhyb3cgb24gTk9LIHJlc3BvbnNlcywgYnV0IHdlIHdhbnQgdG8gYXQgbGVhc3QgbG9nIHRoZW0KICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9PSB1bmRlZmluZWQgJiYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzQ29kZSA+PSAzMDApKSB7CiAgICAgICAgICAgIERFQlVHX0JVSUxEICYmIGxvZ2dlci53YXJuKGBTZW50cnkgcmVzcG9uZGVkIHdpdGggc3RhdHVzIGNvZGUgJHtyZXNwb25zZS5zdGF0dXNDb2RlfSB0byBzZW50IGV2ZW50LmApOwogICAgICAgICAgfQoKICAgICAgICAgIHJhdGVMaW1pdHMgPSB1cGRhdGVSYXRlTGltaXRzKHJhdGVMaW1pdHMsIHJlc3BvbnNlKTsKICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICB9LAogICAgICAgIGVycm9yID0+IHsKICAgICAgICAgIHJlY29yZEVudmVsb3BlTG9zcygnbmV0d29ya19lcnJvcicpOwogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICByZXR1cm4gYnVmZmVyLmFkZChyZXF1ZXN0VGFzaykudGhlbigKICAgICAgcmVzdWx0ID0+IHJlc3VsdCwKICAgICAgZXJyb3IgPT4gewogICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7CiAgICAgICAgICBERUJVR19CVUlMRCAmJiBsb2dnZXIuZXJyb3IoJ1NraXBwZWQgc2VuZGluZyBldmVudCBiZWNhdXNlIGJ1ZmZlciBpcyBmdWxsLicpOwogICAgICAgICAgcmVjb3JkRW52ZWxvcGVMb3NzKCdxdWV1ZV9vdmVyZmxvdycpOwogICAgICAgICAgcmV0dXJuIHJlc29sdmVkU3luY1Byb21pc2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9LAogICAgKTsKICB9CgogIC8vIFdlIHVzZSB0aGlzIHRvIGlkZW50aWZpZnkgaWYgdGhlIHRyYW5zcG9ydCBpcyB0aGUgYmFzZSB0cmFuc3BvcnQKICAvLyBUT0RPICh2OCk6IFJlbW92ZSB0aGlzIGFnYWluIGFzIHdlJ2xsIG5vIGxvbmdlciBuZWVkIGl0CiAgc2VuZC5fX3NlbnRyeV9fYmFzZVRyYW5zcG9ydF9fID0gdHJ1ZTsKCiAgcmV0dXJuIHsKICAgIHNlbmQsCiAgICBmbHVzaCwKICB9Owp9CgpmdW5jdGlvbiBnZXRFdmVudEZvckVudmVsb3BlSXRlbShpdGVtLCB0eXBlKSB7CiAgaWYgKHR5cGUgIT09ICdldmVudCcgJiYgdHlwZSAhPT0gJ3RyYW5zYWN0aW9uJykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIHJldHVybiBBcnJheS5pc0FycmF5KGl0ZW0pID8gKGl0ZW0gKVsxXSA6IHVuZGVmaW5lZDsKfQoKLyoqIG5vcm1hbGl6ZXMgV2luZG93cyBwYXRocyAqLwpmdW5jdGlvbiBub3JtYWxpemVXaW5kb3dzUGF0aChwYXRoKSB7CiAgcmV0dXJuIHBhdGgKICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeAogICAgLnJlcGxhY2UoL1xcL2csICcvJyk7IC8vIHJlcGxhY2UgYWxsIGBcYCBpbnN0YW5jZXMgd2l0aCBgL2AKfQoKLyoqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgdGhlIG1vZHVsZSBuYW1lIGZyb20gYSBmaWxlbmFtZSAqLwpmdW5jdGlvbiBjcmVhdGVHZXRNb2R1bGVGcm9tRmlsZW5hbWUoCiAgYmFzZVBhdGggPSBwcm9jZXNzLmFyZ3ZbMV0gPyBkaXJuYW1lKHByb2Nlc3MuYXJndlsxXSkgOiBwcm9jZXNzLmN3ZCgpLAogIGlzV2luZG93cyA9IHNlcCA9PT0gJ1xcJywKKSB7CiAgY29uc3Qgbm9ybWFsaXplZEJhc2UgPSBpc1dpbmRvd3MgPyBub3JtYWxpemVXaW5kb3dzUGF0aChiYXNlUGF0aCkgOiBiYXNlUGF0aDsKCiAgcmV0dXJuIChmaWxlbmFtZSkgPT4gewogICAgaWYgKCFmaWxlbmFtZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgbm9ybWFsaXplZEZpbGVuYW1lID0gaXNXaW5kb3dzID8gbm9ybWFsaXplV2luZG93c1BhdGgoZmlsZW5hbWUpIDogZmlsZW5hbWU7CgogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdAogICAgbGV0IHsgZGlyLCBiYXNlOiBmaWxlLCBleHQgfSA9IHBvc2l4LnBhcnNlKG5vcm1hbGl6ZWRGaWxlbmFtZSk7CgogICAgaWYgKGV4dCA9PT0gJy5qcycgfHwgZXh0ID09PSAnLm1qcycgfHwgZXh0ID09PSAnLmNqcycpIHsKICAgICAgZmlsZSA9IGZpbGUuc2xpY2UoMCwgZXh0Lmxlbmd0aCAqIC0xKTsKICAgIH0KCiAgICBpZiAoIWRpcikgewogICAgICAvLyBObyBkaXJuYW1lIHdoYXRzb2V2ZXIKICAgICAgZGlyID0gJy4nOwogICAgfQoKICAgIGNvbnN0IG4gPSBkaXIubGFzdEluZGV4T2YoJy9ub2RlX21vZHVsZXMnKTsKICAgIGlmIChuID4gLTEpIHsKICAgICAgcmV0dXJuIGAke2Rpci5zbGljZShuICsgMTQpLnJlcGxhY2UoL1wvL2csICcuJyl9OiR7ZmlsZX1gOwogICAgfQoKICAgIC8vIExldCdzIHNlZSBpZiBpdCdzIGEgcGFydCBvZiB0aGUgbWFpbiBtb2R1bGUKICAgIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2UKICAgIGlmIChkaXIuc3RhcnRzV2l0aChub3JtYWxpemVkQmFzZSkpIHsKICAgICAgbGV0IG1vZHVsZU5hbWUgPSBkaXIuc2xpY2Uobm9ybWFsaXplZEJhc2UubGVuZ3RoICsgMSkucmVwbGFjZSgvXC8vZywgJy4nKTsKCiAgICAgIGlmIChtb2R1bGVOYW1lKSB7CiAgICAgICAgbW9kdWxlTmFtZSArPSAnOic7CiAgICAgIH0KICAgICAgbW9kdWxlTmFtZSArPSBmaWxlOwoKICAgICAgcmV0dXJuIG1vZHVsZU5hbWU7CiAgICB9CgogICAgcmV0dXJuIGZpbGU7CiAgfTsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZSQyKGxocywgcmhzRm4pIHsgaWYgKGxocyAhPSBudWxsKSB7IHJldHVybiBsaHM7IH0gZWxzZSB7IHJldHVybiByaHNGbigpOyB9IH0vKioKICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IGZvcmtlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9Ub29UYWxsTmF0ZS9wcm94eS1hZ2VudHMvdHJlZS9iMTMzMjk1ZmQxNmY2NDc1NTc4YjZiMTViZDliNGUzM2VjYjBkMGI3CiAqIFdpdGggdGhlIGZvbGxvd2luZyBsaWNlbmNlOgogKgogKiAoVGhlIE1JVCBMaWNlbnNlKQogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTMgTmF0aGFuIFJhamxpY2ggPG5hdGhhbkB0b290YWxsbmF0ZS5uZXQ+KgogKgogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCiAqICdTb2Z0d2FyZScpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAogKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCiAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoqCiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLioKICoKICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICdBUyBJUycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgogKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCiAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCiAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogKi8KCmNvbnN0IElOVEVSTkFMID0gU3ltYm9sKCdBZ2VudEJhc2VJbnRlcm5hbFN0YXRlJyk7CgpjbGFzcyBBZ2VudCBleHRlbmRzIGh0dHAuQWdlbnQgewoKICAvLyBTZXQgYnkgYGh0dHAuQWdlbnRgIC0gbWlzc2luZyBmcm9tIGBAdHlwZXMvbm9kZWAKCiAgY29uc3RydWN0b3Iob3B0cykgewogICAgc3VwZXIob3B0cyk7CiAgICB0aGlzW0lOVEVSTkFMXSA9IHt9OwogIH0KCiAgLyoqCiAgICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhbiBgaHR0cGAgb3IgYGh0dHBzYCByZXF1ZXN0LgogICAqLwogIGlzU2VjdXJlRW5kcG9pbnQob3B0aW9ucykgewogICAgaWYgKG9wdGlvbnMpIHsKICAgICAgLy8gRmlyc3QgY2hlY2sgdGhlIGBzZWN1cmVFbmRwb2ludGAgcHJvcGVydHkgZXhwbGljaXRseSwgc2luY2UgdGhpcwogICAgICAvLyBtZWFucyB0aGF0IGEgcGFyZW50IGBBZ2VudGAgaXMgInBhc3NpbmcgdGhyb3VnaCIgdG8gdGhpcyBpbnN0YW5jZS4KICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcwogICAgICBpZiAodHlwZW9mIChvcHRpb25zICkuc2VjdXJlRW5kcG9pbnQgPT09ICdib29sZWFuJykgewogICAgICAgIHJldHVybiBvcHRpb25zLnNlY3VyZUVuZHBvaW50OwogICAgICB9CgogICAgICAvLyBJZiBubyBleHBsaWNpdCBgc2VjdXJlYCBlbmRwb2ludCwgY2hlY2sgaWYgYHByb3RvY29sYCBwcm9wZXJ0eSBpcwogICAgICAvLyBzZXQuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZSBjYXNlIHNpbmNlIHVzaW5nIGEgZnVsbCBzdHJpbmcgVVJMCiAgICAgIC8vIG9yIGBVUkxgIGluc3RhbmNlIHNob3VsZCBiZSB0aGUgbW9zdCBjb21tb24gdXNhZ2UuCiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b2NvbCA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaW5hbGx5LCBpZiBubyBgcHJvdG9jb2xgIHByb3BlcnR5IHdhcyBzZXQsIHRoZW4gZmFsbCBiYWNrIHRvCiAgICAvLyBjaGVja2luZyB0aGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGN1cnJlbnQgY2FsbCBzdGFjaywgYW5kIHRyeSB0bwogICAgLy8gZGV0ZWN0IHRoZSAiaHR0cHMiIG1vZHVsZS4KICAgIGNvbnN0IHsgc3RhY2sgfSA9IG5ldyBFcnJvcigpOwogICAgaWYgKHR5cGVvZiBzdGFjayAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdGFjay5zcGxpdCgnXG4nKS5zb21lKGwgPT4gbC5pbmRleE9mKCcoaHR0cHMuanM6JykgIT09IC0xIHx8IGwuaW5kZXhPZignbm9kZTpodHRwczonKSAhPT0gLTEpOwogIH0KCiAgY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpIHsKICAgIGNvbnN0IGNvbm5lY3RPcHRzID0gewogICAgICAuLi5vcHRpb25zLAogICAgICBzZWN1cmVFbmRwb2ludDogdGhpcy5pc1NlY3VyZUVuZHBvaW50KG9wdGlvbnMpLAogICAgfTsKICAgIFByb21pc2UucmVzb2x2ZSgpCiAgICAgIC50aGVuKCgpID0+IHRoaXMuY29ubmVjdChyZXEsIGNvbm5lY3RPcHRzKSkKICAgICAgLnRoZW4oc29ja2V0ID0+IHsKICAgICAgICBpZiAoc29ja2V0IGluc3RhbmNlb2YgaHR0cC5BZ2VudCkgewogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBgYWRkUmVxdWVzdCgpYCBpc24ndCBkZWZpbmVkIGluIGBAdHlwZXMvbm9kZWAKICAgICAgICAgIHJldHVybiBzb2NrZXQuYWRkUmVxdWVzdChyZXEsIGNvbm5lY3RPcHRzKTsKICAgICAgICB9CiAgICAgICAgdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldCA9IHNvY2tldDsKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBjcmVhdGVTb2NrZXQoKWAgaXNuJ3QgZGVmaW5lZCBpbiBgQHR5cGVzL25vZGVgCiAgICAgICAgc3VwZXIuY3JlYXRlU29ja2V0KHJlcSwgb3B0aW9ucywgY2IpOwogICAgICB9LCBjYik7CiAgfQoKICBjcmVhdGVDb25uZWN0aW9uKCkgewogICAgY29uc3Qgc29ja2V0ID0gdGhpc1tJTlRFUk5BTF0uY3VycmVudFNvY2tldDsKICAgIHRoaXNbSU5URVJOQUxdLmN1cnJlbnRTb2NrZXQgPSB1bmRlZmluZWQ7CiAgICBpZiAoIXNvY2tldCkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNvY2tldCB3YXMgcmV0dXJuZWQgaW4gdGhlIGBjb25uZWN0KClgIGZ1bmN0aW9uJyk7CiAgICB9CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgZ2V0IGRlZmF1bHRQb3J0KCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5kZWZhdWx0UG9ydCwgKCkgPT4gKCAodGhpcy5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MCkpKTsKICB9CgogIHNldCBkZWZhdWx0UG9ydCh2KSB7CiAgICBpZiAodGhpc1tJTlRFUk5BTF0pIHsKICAgICAgdGhpc1tJTlRFUk5BTF0uZGVmYXVsdFBvcnQgPSB2OwogICAgfQogIH0KCiAgZ2V0IHByb3RvY29sKCkgewogICAgcmV0dXJuIF9udWxsaXNoQ29hbGVzY2UkMih0aGlzW0lOVEVSTkFMXS5wcm90b2NvbCwgKCkgPT4gKCAodGhpcy5pc1NlY3VyZUVuZHBvaW50KCkgPyAnaHR0cHM6JyA6ICdodHRwOicpKSk7CiAgfQoKICBzZXQgcHJvdG9jb2wodikgewogICAgaWYgKHRoaXNbSU5URVJOQUxdKSB7CiAgICAgIHRoaXNbSU5URVJOQUxdLnByb3RvY29sID0gdjsKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIGRlYnVnJDEoLi4uYXJncykgewogIGxvZ2dlci5sb2coJ1todHRwcy1wcm94eS1hZ2VudDpwYXJzZS1wcm94eS1yZXNwb25zZV0nLCAuLi5hcmdzKTsKfQoKZnVuY3Rpb24gcGFyc2VQcm94eVJlc3BvbnNlKHNvY2tldCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICAvLyB3ZSBuZWVkIHRvIGJ1ZmZlciBhbnkgSFRUUCB0cmFmZmljIHRoYXQgaGFwcGVucyB3aXRoIHRoZSBwcm94eSBiZWZvcmUgd2UgZ2V0CiAgICAvLyB0aGUgQ09OTkVDVCByZXNwb25zZSwgc28gdGhhdCBpZiB0aGUgcmVzcG9uc2UgaXMgYW55dGhpbmcgb3RoZXIgdGhhbiBhbiAiMjAwIgogICAgLy8gcmVzcG9uc2UgY29kZSwgdGhlbiB3ZSBjYW4gcmUtcGxheSB0aGUgImRhdGEiIGV2ZW50cyBvbiB0aGUgc29ja2V0IG9uY2UgdGhlCiAgICAvLyBIVFRQIHBhcnNlciBpcyBob29rZWQgdXAuLi4KICAgIGxldCBidWZmZXJzTGVuZ3RoID0gMDsKICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTsKCiAgICBmdW5jdGlvbiByZWFkKCkgewogICAgICBjb25zdCBiID0gc29ja2V0LnJlYWQoKTsKICAgICAgaWYgKGIpIG9uZGF0YShiKTsKICAgICAgZWxzZSBzb2NrZXQub25jZSgncmVhZGFibGUnLCByZWFkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGVhbnVwKCkgewogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uZW5kKTsKICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uZXJyb3IpOwogICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgcmVhZCk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lbmQoKSB7CiAgICAgIGNsZWFudXAoKTsKICAgICAgZGVidWckMSgnb25lbmQnKTsKICAgICAgcmVqZWN0KG5ldyBFcnJvcignUHJveHkgY29ubmVjdGlvbiBlbmRlZCBiZWZvcmUgcmVjZWl2aW5nIENPTk5FQ1QgcmVzcG9uc2UnKSk7CiAgICB9CgogICAgZnVuY3Rpb24gb25lcnJvcihlcnIpIHsKICAgICAgY2xlYW51cCgpOwogICAgICBkZWJ1ZyQxKCdvbmVycm9yICVvJywgZXJyKTsKICAgICAgcmVqZWN0KGVycik7CiAgICB9CgogICAgZnVuY3Rpb24gb25kYXRhKGIpIHsKICAgICAgYnVmZmVycy5wdXNoKGIpOwogICAgICBidWZmZXJzTGVuZ3RoICs9IGIubGVuZ3RoOwoKICAgICAgY29uc3QgYnVmZmVyZWQgPSBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMsIGJ1ZmZlcnNMZW5ndGgpOwogICAgICBjb25zdCBlbmRPZkhlYWRlcnMgPSBidWZmZXJlZC5pbmRleE9mKCdcclxuXHJcbicpOwoKICAgICAgaWYgKGVuZE9mSGVhZGVycyA9PT0gLTEpIHsKICAgICAgICAvLyBrZWVwIGJ1ZmZlcmluZwogICAgICAgIGRlYnVnJDEoJ2hhdmUgbm90IHJlY2VpdmVkIGVuZCBvZiBIVFRQIGhlYWRlcnMgeWV0Li4uJyk7CiAgICAgICAgcmVhZCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaGVhZGVyUGFydHMgPSBidWZmZXJlZC5zbGljZSgwLCBlbmRPZkhlYWRlcnMpLnRvU3RyaW5nKCdhc2NpaScpLnNwbGl0KCdcclxuJyk7CiAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGhlYWRlclBhcnRzLnNoaWZ0KCk7CiAgICAgIGlmICghZmlyc3RMaW5lKSB7CiAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignTm8gaGVhZGVyIHJlY2VpdmVkIGZyb20gcHJveHkgQ09OTkVDVCByZXNwb25zZScpKTsKICAgICAgfQogICAgICBjb25zdCBmaXJzdExpbmVQYXJ0cyA9IGZpcnN0TGluZS5zcGxpdCgnICcpOwogICAgICBjb25zdCBzdGF0dXNDb2RlID0gK2ZpcnN0TGluZVBhcnRzWzFdOwogICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZmlyc3RMaW5lUGFydHMuc2xpY2UoMikuam9pbignICcpOwogICAgICBjb25zdCBoZWFkZXJzID0ge307CiAgICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIGhlYWRlclBhcnRzKSB7CiAgICAgICAgaWYgKCFoZWFkZXIpIGNvbnRpbnVlOwogICAgICAgIGNvbnN0IGZpcnN0Q29sb24gPSBoZWFkZXIuaW5kZXhPZignOicpOwogICAgICAgIGlmIChmaXJzdENvbG9uID09PSAtMSkgewogICAgICAgICAgc29ja2V0LmRlc3Ryb3koKTsKICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBJbnZhbGlkIGhlYWRlciBmcm9tIHByb3h5IENPTk5FQ1QgcmVzcG9uc2U6ICIke2hlYWRlcn0iYCkpOwogICAgICAgIH0KICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXIuc2xpY2UoMCwgZmlyc3RDb2xvbikudG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zbGljZShmaXJzdENvbG9uICsgMSkudHJpbVN0YXJ0KCk7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGhlYWRlcnNba2V5XTsKICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09ICdzdHJpbmcnKSB7CiAgICAgICAgICBoZWFkZXJzW2tleV0gPSBbY3VycmVudCwgdmFsdWVdOwogICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50KSkgewogICAgICAgICAgY3VycmVudC5wdXNoKHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGRlYnVnJDEoJ2dvdCBwcm94eSBzZXJ2ZXIgcmVzcG9uc2U6ICVvICVvJywgZmlyc3RMaW5lLCBoZWFkZXJzKTsKICAgICAgY2xlYW51cCgpOwogICAgICByZXNvbHZlKHsKICAgICAgICBjb25uZWN0OiB7CiAgICAgICAgICBzdGF0dXNDb2RlLAogICAgICAgICAgc3RhdHVzVGV4dCwKICAgICAgICAgIGhlYWRlcnMsCiAgICAgICAgfSwKICAgICAgICBidWZmZXJlZCwKICAgICAgfSk7CiAgICB9CgogICAgc29ja2V0Lm9uKCdlcnJvcicsIG9uZXJyb3IpOwogICAgc29ja2V0Lm9uKCdlbmQnLCBvbmVuZCk7CgogICAgcmVhZCgpOwogIH0pOwp9CgpmdW5jdGlvbiBfbnVsbGlzaENvYWxlc2NlJDEobGhzLCByaHNGbikgeyBpZiAobGhzICE9IG51bGwpIHsgcmV0dXJuIGxoczsgfSBlbHNlIHsgcmV0dXJuIHJoc0ZuKCk7IH0gfSBmdW5jdGlvbiBfb3B0aW9uYWxDaGFpbiQxKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CgpmdW5jdGlvbiBkZWJ1ZyguLi5hcmdzKSB7CiAgbG9nZ2VyLmxvZygnW2h0dHBzLXByb3h5LWFnZW50XScsIC4uLmFyZ3MpOwp9CgovKioKICogVGhlIGBIdHRwc1Byb3h5QWdlbnRgIGltcGxlbWVudHMgYW4gSFRUUCBBZ2VudCBzdWJjbGFzcyB0aGF0IGNvbm5lY3RzIHRvCiAqIHRoZSBzcGVjaWZpZWQgIkhUVFAocykgcHJveHkgc2VydmVyIiBpbiBvcmRlciB0byBwcm94eSBIVFRQUyByZXF1ZXN0cy4KICoKICogT3V0Z29pbmcgSFRUUCByZXF1ZXN0cyBhcmUgZmlyc3QgdHVubmVsZWQgdGhyb3VnaCB0aGUgcHJveHkgc2VydmVyIHVzaW5nIHRoZQogKiBgQ09OTkVDVGAgSFRUUCByZXF1ZXN0IG1ldGhvZCB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIsCiAqIGFuZCB0aGVuIHRoZSBwcm94eSBzZXJ2ZXIgY29ubmVjdHMgdG8gdGhlIGRlc3RpbmF0aW9uIHRhcmdldCBhbmQgaXNzdWVzIHRoZQogKiBIVFRQIHJlcXVlc3QgZnJvbSB0aGUgcHJveHkgc2VydmVyLgogKgogKiBgaHR0cHM6YCByZXF1ZXN0cyBoYXZlIHRoZWlyIHNvY2tldCBjb25uZWN0aW9uIHVwZ3JhZGVkIHRvIFRMUyBvbmNlCiAqIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBwcm94eSBzZXJ2ZXIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCiAqLwpjbGFzcyBIdHRwc1Byb3h5QWdlbnQgZXh0ZW5kcyBBZ2VudCB7CiAgc3RhdGljIF9faW5pdFN0YXRpYygpIHt0aGlzLnByb3RvY29scyA9IFsnaHR0cCcsICdodHRwcyddOyB9CgogIGNvbnN0cnVjdG9yKHByb3h5LCBvcHRzKSB7CiAgICBzdXBlcihvcHRzKTsKICAgIHRoaXMub3B0aW9ucyA9IHt9OwogICAgdGhpcy5wcm94eSA9IHR5cGVvZiBwcm94eSA9PT0gJ3N0cmluZycgPyBuZXcgVVJMKHByb3h5KSA6IHByb3h5OwogICAgdGhpcy5wcm94eUhlYWRlcnMgPSBfbnVsbGlzaENvYWxlc2NlJDEoX29wdGlvbmFsQ2hhaW4kMShbb3B0cywgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIuaGVhZGVyc10pLCAoKSA9PiAoIHt9KSk7CiAgICBkZWJ1ZygnQ3JlYXRpbmcgbmV3IEh0dHBzUHJveHlBZ2VudCBpbnN0YW5jZTogJW8nLCB0aGlzLnByb3h5LmhyZWYpOwoKICAgIC8vIFRyaW0gb2ZmIHRoZSBicmFja2V0cyBmcm9tIElQdjYgYWRkcmVzc2VzCiAgICBjb25zdCBob3N0ID0gKHRoaXMucHJveHkuaG9zdG5hbWUgfHwgdGhpcy5wcm94eS5ob3N0KS5yZXBsYWNlKC9eXFt8XF0kL2csICcnKTsKICAgIGNvbnN0IHBvcnQgPSB0aGlzLnByb3h5LnBvcnQgPyBwYXJzZUludCh0aGlzLnByb3h5LnBvcnQsIDEwKSA6IHRoaXMucHJveHkucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODA7CiAgICB0aGlzLmNvbm5lY3RPcHRzID0gewogICAgICAvLyBBdHRlbXB0IHRvIG5lZ290aWF0ZSBodHRwLzEuMSBmb3IgcHJveHkgc2VydmVycyB0aGF0IHN1cHBvcnQgaHR0cC8yCiAgICAgIEFMUE5Qcm90b2NvbHM6IFsnaHR0cC8xLjEnXSwKICAgICAgLi4uKG9wdHMgPyBvbWl0KG9wdHMsICdoZWFkZXJzJykgOiBudWxsKSwKICAgICAgaG9zdCwKICAgICAgcG9ydCwKICAgIH07CiAgfQoKICAvKioKICAgKiBDYWxsZWQgd2hlbiB0aGUgbm9kZS1jb3JlIEhUVFAgY2xpZW50IGxpYnJhcnkgaXMgY3JlYXRpbmcgYQogICAqIG5ldyBIVFRQIHJlcXVlc3QuCiAgICovCiAgYXN5bmMgY29ubmVjdChyZXEsIG9wdHMpIHsKICAgIGNvbnN0IHsgcHJveHkgfSA9IHRoaXM7CgogICAgaWYgKCFvcHRzLmhvc3QpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gImhvc3QiIHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5IHNlcnZlci4KICAgIGxldCBzb2NrZXQ7CiAgICBpZiAocHJveHkucHJvdG9jb2wgPT09ICdodHRwczonKSB7CiAgICAgIGRlYnVnKCdDcmVhdGluZyBgdGxzLlNvY2tldGA6ICVvJywgdGhpcy5jb25uZWN0T3B0cyk7CiAgICAgIGNvbnN0IHNlcnZlcm5hbWUgPSB0aGlzLmNvbm5lY3RPcHRzLnNlcnZlcm5hbWUgfHwgdGhpcy5jb25uZWN0T3B0cy5ob3N0OwogICAgICBzb2NrZXQgPSB0bHMuY29ubmVjdCh7CiAgICAgICAgLi4udGhpcy5jb25uZWN0T3B0cywKICAgICAgICBzZXJ2ZXJuYW1lOiBzZXJ2ZXJuYW1lICYmIG5ldC5pc0lQKHNlcnZlcm5hbWUpID8gdW5kZWZpbmVkIDogc2VydmVybmFtZSwKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBkZWJ1ZygnQ3JlYXRpbmcgYG5ldC5Tb2NrZXRgOiAlbycsIHRoaXMuY29ubmVjdE9wdHMpOwogICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh0aGlzLmNvbm5lY3RPcHRzKTsKICAgIH0KCiAgICBjb25zdCBoZWFkZXJzID0KICAgICAgdHlwZW9mIHRoaXMucHJveHlIZWFkZXJzID09PSAnZnVuY3Rpb24nID8gdGhpcy5wcm94eUhlYWRlcnMoKSA6IHsgLi4udGhpcy5wcm94eUhlYWRlcnMgfTsKICAgIGNvbnN0IGhvc3QgPSBuZXQuaXNJUHY2KG9wdHMuaG9zdCkgPyBgWyR7b3B0cy5ob3N0fV1gIDogb3B0cy5ob3N0OwogICAgbGV0IHBheWxvYWQgPSBgQ09OTkVDVCAke2hvc3R9OiR7b3B0cy5wb3J0fSBIVFRQLzEuMVxyXG5gOwoKICAgIC8vIEluamVjdCB0aGUgYFByb3h5LUF1dGhvcml6YXRpb25gIGhlYWRlciBpZiBuZWNlc3NhcnkuCiAgICBpZiAocHJveHkudXNlcm5hbWUgfHwgcHJveHkucGFzc3dvcmQpIHsKICAgICAgY29uc3QgYXV0aCA9IGAke2RlY29kZVVSSUNvbXBvbmVudChwcm94eS51c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHByb3h5LnBhc3N3b3JkKX1gOwogICAgICBoZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShhdXRoKS50b1N0cmluZygnYmFzZTY0Jyl9YDsKICAgIH0KCiAgICBoZWFkZXJzLkhvc3QgPSBgJHtob3N0fToke29wdHMucG9ydH1gOwoKICAgIGlmICghaGVhZGVyc1snUHJveHktQ29ubmVjdGlvbiddKSB7CiAgICAgIGhlYWRlcnNbJ1Byb3h5LUNvbm5lY3Rpb24nXSA9IHRoaXMua2VlcEFsaXZlID8gJ0tlZXAtQWxpdmUnIDogJ2Nsb3NlJzsKICAgIH0KICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkgewogICAgICBwYXlsb2FkICs9IGAke25hbWV9OiAke2hlYWRlcnNbbmFtZV19XHJcbmA7CiAgICB9CgogICAgY29uc3QgcHJveHlSZXNwb25zZVByb21pc2UgPSBwYXJzZVByb3h5UmVzcG9uc2Uoc29ja2V0KTsKCiAgICBzb2NrZXQud3JpdGUoYCR7cGF5bG9hZH1cclxuYCk7CgogICAgY29uc3QgeyBjb25uZWN0LCBidWZmZXJlZCB9ID0gYXdhaXQgcHJveHlSZXNwb25zZVByb21pc2U7CiAgICByZXEuZW1pdCgncHJveHlDb25uZWN0JywgY29ubmVjdCk7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50CiAgICAvLyBAdHMtaWdub3JlIE5vdCBFdmVudEVtaXR0ZXIgaW4gTm9kZSB0eXBlcwogICAgdGhpcy5lbWl0KCdwcm94eUNvbm5lY3QnLCBjb25uZWN0LCByZXEpOwoKICAgIGlmIChjb25uZWN0LnN0YXR1c0NvZGUgPT09IDIwMCkgewogICAgICByZXEub25jZSgnc29ja2V0JywgcmVzdW1lKTsKCiAgICAgIGlmIChvcHRzLnNlY3VyZUVuZHBvaW50KSB7CiAgICAgICAgLy8gVGhlIHByb3h5IGlzIGNvbm5lY3RpbmcgdG8gYSBUTFMgc2VydmVyLCBzbyB1cGdyYWRlCiAgICAgICAgLy8gdGhpcyBzb2NrZXQgY29ubmVjdGlvbiB0byBhIFRMUyBjb25uZWN0aW9uLgogICAgICAgIGRlYnVnKCdVcGdyYWRpbmcgc29ja2V0IGNvbm5lY3Rpb24gdG8gVExTJyk7CiAgICAgICAgY29uc3Qgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZSB8fCBvcHRzLmhvc3Q7CiAgICAgICAgcmV0dXJuIHRscy5jb25uZWN0KHsKICAgICAgICAgIC4uLm9taXQob3B0cywgJ2hvc3QnLCAncGF0aCcsICdwb3J0JyksCiAgICAgICAgICBzb2NrZXQsCiAgICAgICAgICBzZXJ2ZXJuYW1lOiBuZXQuaXNJUChzZXJ2ZXJuYW1lKSA/IHVuZGVmaW5lZCA6IHNlcnZlcm5hbWUsCiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgLy8gU29tZSBvdGhlciBzdGF0dXMgY29kZSB0aGF0J3Mgbm90IDIwMC4uLiBuZWVkIHRvIHJlLXBsYXkgdGhlIEhUVFAKICAgIC8vIGhlYWRlciAiZGF0YSIgZXZlbnRzIG9udG8gdGhlIHNvY2tldCBvbmNlIHRoZSBIVFRQIG1hY2hpbmVyeSBpcwogICAgLy8gYXR0YWNoZWQgc28gdGhhdCB0aGUgbm9kZSBjb3JlIGBodHRwYCBjYW4gcGFyc2UgYW5kIGhhbmRsZSB0aGUKICAgIC8vIGVycm9yIHN0YXR1cyBjb2RlLgoKICAgIC8vIENsb3NlIHRoZSBvcmlnaW5hbCBzb2NrZXQsIGFuZCBhIG5ldyAiZmFrZSIgc29ja2V0IGlzIHJldHVybmVkCiAgICAvLyBpbnN0ZWFkLCBzbyB0aGF0IHRoZSBwcm94eSBkb2Vzbid0IGdldCB0aGUgSFRUUCByZXF1ZXN0CiAgICAvLyB3cml0dGVuIHRvIGl0ICh3aGljaCBtYXkgY29udGFpbiBgQXV0aG9yaXphdGlvbmAgaGVhZGVycyBvciBvdGhlcgogICAgLy8gc2Vuc2l0aXZlIGRhdGEpLgogICAgLy8KICAgIC8vIFNlZTogaHR0cHM6Ly9oYWNrZXJvbmUuY29tL3JlcG9ydHMvNTQxNTAyCiAgICBzb2NrZXQuZGVzdHJveSgpOwoKICAgIGNvbnN0IGZha2VTb2NrZXQgPSBuZXcgbmV0LlNvY2tldCh7IHdyaXRhYmxlOiBmYWxzZSB9KTsKICAgIGZha2VTb2NrZXQucmVhZGFibGUgPSB0cnVlOwoKICAgIC8vIE5lZWQgdG8gd2FpdCBmb3IgdGhlICJzb2NrZXQiIGV2ZW50IHRvIHJlLXBsYXkgdGhlICJkYXRhIiBldmVudHMuCiAgICByZXEub25jZSgnc29ja2V0JywgKHMpID0+IHsKICAgICAgZGVidWcoJ1JlcGxheWluZyBwcm94eSBidWZmZXIgZm9yIGZhaWxlZCByZXF1ZXN0Jyk7CiAgICAgIC8vIFJlcGxheSB0aGUgImJ1ZmZlcmVkIiBCdWZmZXIgb250byB0aGUgZmFrZSBgc29ja2V0YCwgc2luY2UgYXQKICAgICAgLy8gdGhpcyBwb2ludCB0aGUgSFRUUCBtb2R1bGUgbWFjaGluZXJ5IGhhcyBiZWVuIGhvb2tlZCB1cCBmb3IKICAgICAgLy8gdGhlIHVzZXIuCiAgICAgIHMucHVzaChidWZmZXJlZCk7CiAgICAgIHMucHVzaChudWxsKTsKICAgIH0pOwoKICAgIHJldHVybiBmYWtlU29ja2V0OwogIH0KfSBIdHRwc1Byb3h5QWdlbnQuX19pbml0U3RhdGljKCk7CgpmdW5jdGlvbiByZXN1bWUoc29ja2V0KSB7CiAgc29ja2V0LnJlc3VtZSgpOwp9CgpmdW5jdGlvbiBvbWl0KAogIG9iaiwKICAuLi5rZXlzCikKCiB7CiAgY29uc3QgcmV0ID0ge30KCjsKICBsZXQga2V5OwogIGZvciAoa2V5IGluIG9iaikgewogICAgaWYgKCFrZXlzLmluY2x1ZGVzKGtleSkpIHsKICAgICAgcmV0W2tleV0gPSBvYmpba2V5XTsKICAgIH0KICB9CiAgcmV0dXJuIHJldDsKfQoKZnVuY3Rpb24gX251bGxpc2hDb2FsZXNjZShsaHMsIHJoc0ZuKSB7IGlmIChsaHMgIT0gbnVsbCkgeyByZXR1cm4gbGhzOyB9IGVsc2UgeyByZXR1cm4gcmhzRm4oKTsgfSB9Ci8vIEVzdGltYXRlZCBtYXhpbXVtIHNpemUgZm9yIHJlYXNvbmFibGUgc3RhbmRhbG9uZSBldmVudApjb25zdCBHWklQX1RIUkVTSE9MRCA9IDEwMjQgKiAzMjsKCi8qKgogKiBHZXRzIGEgc3RyZWFtIGZyb20gYSBVaW50OEFycmF5IG9yIHN0cmluZwogKiBSZWFkYWJsZS5mcm9tIGlzIGlkZWFsIGJ1dCB3YXMgYWRkZWQgaW4gbm9kZS5qcyB2MTIuMy4wIGFuZCB2MTAuMTcuMAogKi8KZnVuY3Rpb24gc3RyZWFtRnJvbUJvZHkoYm9keSkgewogIHJldHVybiBuZXcgUmVhZGFibGUoewogICAgcmVhZCgpIHsKICAgICAgdGhpcy5wdXNoKGJvZHkpOwogICAgICB0aGlzLnB1c2gobnVsbCk7CiAgICB9LAogIH0pOwp9CgovKioKICogQ3JlYXRlcyBhIFRyYW5zcG9ydCB0aGF0IHVzZXMgbmF0aXZlIHRoZSBuYXRpdmUgJ2h0dHAnIGFuZCAnaHR0cHMnIG1vZHVsZXMgdG8gc2VuZCBldmVudHMgdG8gU2VudHJ5LgogKi8KZnVuY3Rpb24gbWFrZU5vZGVUcmFuc3BvcnQob3B0aW9ucykgewogIGxldCB1cmxTZWdtZW50czsKCiAgdHJ5IHsKICAgIHVybFNlZ21lbnRzID0gbmV3IFVSTChvcHRpb25zLnVybCk7CiAgfSBjYXRjaCAoZSkgewogICAgY29uc29sZVNhbmRib3goKCkgPT4gewogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgJ1tAc2VudHJ5L25vZGVdOiBJbnZhbGlkIGRzbiBvciB0dW5uZWwgb3B0aW9uLCB3aWxsIG5vdCBzZW5kIGFueSBldmVudHMuIFRoZSB0dW5uZWwgb3B0aW9uIG11c3QgYmUgYSBmdWxsIFVSTCB3aGVuIHVzZWQuJywKICAgICAgKTsKICAgIH0pOwogICAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCAoKSA9PiBQcm9taXNlLnJlc29sdmUoe30pKTsKICB9CgogIGNvbnN0IGlzSHR0cHMgPSB1cmxTZWdtZW50cy5wcm90b2NvbCA9PT0gJ2h0dHBzOic7CgogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwID0+IGBvcHRpb25zLnByb3h5YCB8IGBwcm9jZXNzLmVudi5odHRwX3Byb3h5YAogIC8vIFByb3h5IHByaW9yaXRpemF0aW9uOiBodHRwcyA9PiBgb3B0aW9ucy5wcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgCiAgY29uc3QgcHJveHkgPSBhcHBseU5vUHJveHlPcHRpb24oCiAgICB1cmxTZWdtZW50cywKICAgIG9wdGlvbnMucHJveHkgfHwgKGlzSHR0cHMgPyBwcm9jZXNzLmVudi5odHRwc19wcm94eSA6IHVuZGVmaW5lZCkgfHwgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eSwKICApOwoKICBjb25zdCBuYXRpdmVIdHRwTW9kdWxlID0gaXNIdHRwcyA/IGh0dHBzIDogaHR0cDsKICBjb25zdCBrZWVwQWxpdmUgPSBvcHRpb25zLmtlZXBBbGl2ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBvcHRpb25zLmtlZXBBbGl2ZTsKCiAgLy8gVE9ETyh2Nyk6IEV2YWx1YXRlIGlmIHdlIGNhbiBzZXQga2VlcEFsaXZlIHRvIHRydWUuIFRoaXMgd291bGQgaW52b2x2ZSB0ZXN0aW5nIGZvciBtZW1vcnkgbGVha3MgaW4gb2xkZXIgbm9kZQogIC8vIHZlcnNpb25zKD49IDgpIGFzIHRoZXkgaGFkIG1lbW9yeSBsZWFrcyB3aGVuIHVzaW5nIGl0OiAjMjU1NQogIGNvbnN0IGFnZW50ID0gcHJveHkKICAgID8gKG5ldyBIdHRwc1Byb3h5QWdlbnQocHJveHkpICkKICAgIDogbmV3IG5hdGl2ZUh0dHBNb2R1bGUuQWdlbnQoeyBrZWVwQWxpdmUsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pOwoKICBjb25zdCByZXF1ZXN0RXhlY3V0b3IgPSBjcmVhdGVSZXF1ZXN0RXhlY3V0b3Iob3B0aW9ucywgX251bGxpc2hDb2FsZXNjZShvcHRpb25zLmh0dHBNb2R1bGUsICgpID0+ICggbmF0aXZlSHR0cE1vZHVsZSkpLCBhZ2VudCk7CiAgcmV0dXJuIGNyZWF0ZVRyYW5zcG9ydChvcHRpb25zLCByZXF1ZXN0RXhlY3V0b3IpOwp9CgovKioKICogSG9ub3JzIHRoZSBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uCiAqCiAqIEBwYXJhbSB0cmFuc3BvcnRVcmwgVGhlIFVSTCB0aGUgdHJhbnNwb3J0IGludGVuZHMgdG8gc2VuZCBldmVudHMgdG8uCiAqIEBwYXJhbSBwcm94eSBUaGUgY2xpZW50IGNvbmZpZ3VyZWQgcHJveHkuCiAqIEByZXR1cm5zIEEgcHJveHkgdGhlIHRyYW5zcG9ydCBzaG91bGQgdXNlLgogKi8KZnVuY3Rpb24gYXBwbHlOb1Byb3h5T3B0aW9uKHRyYW5zcG9ydFVybFNlZ21lbnRzLCBwcm94eSkgewogIGNvbnN0IHsgbm9fcHJveHkgfSA9IHByb2Nlc3MuZW52OwoKICBjb25zdCB1cmxJc0V4ZW1wdEZyb21Qcm94eSA9CiAgICBub19wcm94eSAmJgogICAgbm9fcHJveHkKICAgICAgLnNwbGl0KCcsJykKICAgICAgLnNvbWUoCiAgICAgICAgZXhlbXB0aW9uID0+IHRyYW5zcG9ydFVybFNlZ21lbnRzLmhvc3QuZW5kc1dpdGgoZXhlbXB0aW9uKSB8fCB0cmFuc3BvcnRVcmxTZWdtZW50cy5ob3N0bmFtZS5lbmRzV2l0aChleGVtcHRpb24pLAogICAgICApOwoKICBpZiAodXJsSXNFeGVtcHRGcm9tUHJveHkpIHsKICAgIHJldHVybiB1bmRlZmluZWQ7CiAgfSBlbHNlIHsKICAgIHJldHVybiBwcm94eTsKICB9Cn0KCi8qKgogKiBDcmVhdGVzIGEgUmVxdWVzdEV4ZWN1dG9yIHRvIGJlIHVzZWQgd2l0aCBgY3JlYXRlVHJhbnNwb3J0YC4KICovCmZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RFeGVjdXRvcigKICBvcHRpb25zLAogIGh0dHBNb2R1bGUsCiAgYWdlbnQsCikgewogIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCwgc2VhcmNoIH0gPSBuZXcgVVJMKG9wdGlvbnMudXJsKTsKICByZXR1cm4gZnVuY3Rpb24gbWFrZVJlcXVlc3QocmVxdWVzdCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgbGV0IGJvZHkgPSBzdHJlYW1Gcm9tQm9keShyZXF1ZXN0LmJvZHkpOwoKICAgICAgY29uc3QgaGVhZGVycyA9IHsgLi4ub3B0aW9ucy5oZWFkZXJzIH07CgogICAgICBpZiAocmVxdWVzdC5ib2R5Lmxlbmd0aCA+IEdaSVBfVEhSRVNIT0xEKSB7CiAgICAgICAgaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddID0gJ2d6aXAnOwogICAgICAgIGJvZHkgPSBib2R5LnBpcGUoY3JlYXRlR3ppcCgpKTsKICAgICAgfQoKICAgICAgY29uc3QgcmVxID0gaHR0cE1vZHVsZS5yZXF1ZXN0KAogICAgICAgIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYWdlbnQsCiAgICAgICAgICBoZWFkZXJzLAogICAgICAgICAgaG9zdG5hbWUsCiAgICAgICAgICBwYXRoOiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gLAogICAgICAgICAgcG9ydCwKICAgICAgICAgIHByb3RvY29sLAogICAgICAgICAgY2E6IG9wdGlvbnMuY2FDZXJ0cywKICAgICAgICB9LAogICAgICAgIHJlcyA9PiB7CiAgICAgICAgICByZXMub24oJ2RhdGEnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLm9uKCdlbmQnLCAoKSA9PiB7CiAgICAgICAgICAgIC8vIERyYWluIHNvY2tldAogICAgICAgICAgfSk7CgogICAgICAgICAgcmVzLnNldEVuY29kaW5nKCd1dGY4Jyk7CgogICAgICAgICAgLy8gIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC4iCiAgICAgICAgICAvLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVycwogICAgICAgICAgY29uc3QgcmV0cnlBZnRlckhlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10sICgpID0+ICggbnVsbCkpOwogICAgICAgICAgY29uc3QgcmF0ZUxpbWl0c0hlYWRlciA9IF9udWxsaXNoQ29hbGVzY2UocmVzLmhlYWRlcnNbJ3gtc2VudHJ5LXJhdGUtbGltaXRzJ10sICgpID0+ICggbnVsbCkpOwoKICAgICAgICAgIHJlc29sdmUoewogICAgICAgICAgICBzdGF0dXNDb2RlOiByZXMuc3RhdHVzQ29kZSwKICAgICAgICAgICAgaGVhZGVyczogewogICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogQXJyYXkuaXNBcnJheShyYXRlTGltaXRzSGVhZGVyKSA/IHJhdGVMaW1pdHNIZWFkZXJbMF0gOiByYXRlTGltaXRzSGVhZGVyLAogICAgICAgICAgICB9LAogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpOwogICAgICBib2R5LnBpcGUocmVxKTsKICAgIH0pOwogIH07Cn0KCmZ1bmN0aW9uIF9vcHRpb25hbENoYWluKG9wcykgeyBsZXQgbGFzdEFjY2Vzc0xIUyA9IHVuZGVmaW5lZDsgbGV0IHZhbHVlID0gb3BzWzBdOyBsZXQgaSA9IDE7IHdoaWxlIChpIDwgb3BzLmxlbmd0aCkgeyBjb25zdCBvcCA9IG9wc1tpXTsgY29uc3QgZm4gPSBvcHNbaSArIDFdOyBpICs9IDI7IGlmICgob3AgPT09ICdvcHRpb25hbEFjY2VzcycgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSAmJiB2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gaWYgKG9wID09PSAnYWNjZXNzJyB8fCBvcCA9PT0gJ29wdGlvbmFsQWNjZXNzJykgeyBsYXN0QWNjZXNzTEhTID0gdmFsdWU7IHZhbHVlID0gZm4odmFsdWUpOyB9IGVsc2UgaWYgKG9wID09PSAnY2FsbCcgfHwgb3AgPT09ICdvcHRpb25hbENhbGwnKSB7IHZhbHVlID0gZm4oKC4uLmFyZ3MpID0+IHZhbHVlLmNhbGwobGFzdEFjY2Vzc0xIUywgLi4uYXJncykpOyBsYXN0QWNjZXNzTEhTID0gdW5kZWZpbmVkOyB9IH0gcmV0dXJuIHZhbHVlOyB9CmNvbnN0IG9wdGlvbnMgPSB3b3JrZXJEYXRhOwpsZXQgc2Vzc2lvbjsKbGV0IGhhc1NlbnRBbnJFdmVudCA9IGZhbHNlOwoKZnVuY3Rpb24gbG9nKG1zZykgewogIGlmIChvcHRpb25zLmRlYnVnKSB7CiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZQogICAgY29uc29sZS5sb2coYFtBTlIgV29ya2VyXSAke21zZ31gKTsKICB9Cn0KCmNvbnN0IHVybCA9IGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgob3B0aW9ucy5kc24pOwpjb25zdCB0cmFuc3BvcnQgPSBtYWtlTm9kZVRyYW5zcG9ydCh7CiAgdXJsLAogIHJlY29yZERyb3BwZWRFdmVudDogKCkgPT4gewogICAgLy8KICB9LAp9KTsKCmFzeW5jIGZ1bmN0aW9uIHNlbmRBYm5vcm1hbFNlc3Npb24oKSB7CiAgLy8gb2Ygd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uIHBhc3NlZCBmcm9tIHRoZSBtYWluIHRocmVhZCwgc2VuZCBpdCBhcyBhYm5vcm1hbAogIGlmIChzZXNzaW9uKSB7CiAgICBsb2coJ1NlbmRpbmcgYWJub3JtYWwgc2Vzc2lvbicpOwogICAgdXBkYXRlU2Vzc2lvbihzZXNzaW9uLCB7IHN0YXR1czogJ2Fibm9ybWFsJywgYWJub3JtYWxfbWVjaGFuaXNtOiAnYW5yX2ZvcmVncm91bmQnIH0pOwoKICAgIGNvbnN0IGVudmVsb3BlID0gY3JlYXRlU2Vzc2lvbkVudmVsb3BlKHNlc3Npb24sIG9wdGlvbnMuZHNuLCBvcHRpb25zLnNka01ldGFkYXRhKTsKICAgIC8vIExvZyB0aGUgZW52ZWxvcGUgc28gdG8gYWlkIGluIHRlc3RpbmcKICAgIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICAgIGF3YWl0IHRyYW5zcG9ydC5zZW5kKGVudmVsb3BlKTsKCiAgICB0cnkgewogICAgICAvLyBOb3RpZnkgdGhlIG1haW4gcHJvY2VzcyB0aGF0IHRoZSBzZXNzaW9uIGhhcyBlbmRlZCBzbyB0aGUgc2Vzc2lvbiBjYW4gYmUgY2xlYXJlZCBmcm9tIHRoZSBzY29wZQogICAgICBfb3B0aW9uYWxDaGFpbihbcGFyZW50UG9ydCwgJ29wdGlvbmFsQWNjZXNzJywgXzIgPT4gXzIucG9zdE1lc3NhZ2UsICdjYWxsJywgXzMgPT4gXzMoJ3Nlc3Npb24tZW5kZWQnKV0pOwogICAgfSBjYXRjaCAoXykgewogICAgICAvLyBpZ25vcmUKICAgIH0KICB9Cn0KCmxvZygnU3RhcnRlZCcpOwoKZnVuY3Rpb24gcHJlcGFyZVN0YWNrRnJhbWVzKHN0YWNrRnJhbWVzKSB7CiAgaWYgKCFzdGFja0ZyYW1lcykgewogICAgcmV0dXJuIHVuZGVmaW5lZDsKICB9CgogIC8vIFN0cmlwIFNlbnRyeSBmcmFtZXMgYW5kIHJldmVyc2UgdGhlIHN0YWNrIGZyYW1lcyBzbyB0aGV5IGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlcgogIGNvbnN0IHN0cmlwcGVkRnJhbWVzID0gc3RyaXBTZW50cnlGcmFtZXNBbmRSZXZlcnNlKHN0YWNrRnJhbWVzKTsKCiAgLy8gSWYgd2UgaGF2ZSBhbiBhcHAgcm9vdCBwYXRoLCByZXdyaXRlIHRoZSBmaWxlbmFtZXMgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIGFwcCByb290CiAgaWYgKG9wdGlvbnMuYXBwUm9vdFBhdGgpIHsKICAgIGZvciAoY29uc3QgZnJhbWUgb2Ygc3RyaXBwZWRGcmFtZXMpIHsKICAgICAgaWYgKCFmcmFtZS5maWxlbmFtZSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBmcmFtZS5maWxlbmFtZSA9IG5vcm1hbGl6ZVVybFRvQmFzZShmcmFtZS5maWxlbmFtZSwgb3B0aW9ucy5hcHBSb290UGF0aCk7CiAgICB9CiAgfQoKICByZXR1cm4gc3RyaXBwZWRGcmFtZXM7Cn0KCmFzeW5jIGZ1bmN0aW9uIHNlbmRBbnJFdmVudChmcmFtZXMsIHRyYWNlQ29udGV4dCkgewogIGlmIChoYXNTZW50QW5yRXZlbnQpIHsKICAgIHJldHVybjsKICB9CgogIGhhc1NlbnRBbnJFdmVudCA9IHRydWU7CgogIGF3YWl0IHNlbmRBYm5vcm1hbFNlc3Npb24oKTsKCiAgbG9nKCdTZW5kaW5nIGV2ZW50Jyk7CgogIGNvbnN0IGV2ZW50ID0gewogICAgZXZlbnRfaWQ6IHV1aWQ0KCksCiAgICBjb250ZXh0czogeyAuLi5vcHRpb25zLmNvbnRleHRzLCB0cmFjZTogdHJhY2VDb250ZXh0IH0sCiAgICByZWxlYXNlOiBvcHRpb25zLnJlbGVhc2UsCiAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCwKICAgIGRpc3Q6IG9wdGlvbnMuZGlzdCwKICAgIHBsYXRmb3JtOiAnbm9kZScsCiAgICBsZXZlbDogJ2Vycm9yJywKICAgIGV4Y2VwdGlvbjogewogICAgICB2YWx1ZXM6IFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAnQXBwbGljYXRpb25Ob3RSZXNwb25kaW5nJywKICAgICAgICAgIHZhbHVlOiBgQXBwbGljYXRpb24gTm90IFJlc3BvbmRpbmcgZm9yIGF0IGxlYXN0ICR7b3B0aW9ucy5hbnJUaHJlc2hvbGR9IG1zYCwKICAgICAgICAgIHN0YWNrdHJhY2U6IHsgZnJhbWVzOiBwcmVwYXJlU3RhY2tGcmFtZXMoZnJhbWVzKSB9LAogICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoZSBVSSBkb2Vzbid0IHNheSAnQ3Jhc2hlZCBpbicgZm9yIHRoZSBzdGFjayB0cmFjZQogICAgICAgICAgbWVjaGFuaXNtOiB7IHR5cGU6ICdBTlInIH0sCiAgICAgICAgfSwKICAgICAgXSwKICAgIH0sCiAgICB0YWdzOiBvcHRpb25zLnN0YXRpY1RhZ3MsCiAgfTsKCiAgY29uc3QgZW52ZWxvcGUgPSBjcmVhdGVFdmVudEVudmVsb3BlKGV2ZW50LCBvcHRpb25zLmRzbiwgb3B0aW9ucy5zZGtNZXRhZGF0YSk7CiAgLy8gTG9nIHRoZSBlbnZlbG9wZSBzbyB0byBhaWQgaW4gdGVzdGluZwogIGxvZyhKU09OLnN0cmluZ2lmeShlbnZlbG9wZSkpOwoKICBhd2FpdCB0cmFuc3BvcnQuc2VuZChlbnZlbG9wZSk7CiAgYXdhaXQgdHJhbnNwb3J0LmZsdXNoKDIwMDApOwoKICAvLyBEZWxheSBmb3IgNSBzZWNvbmRzIHNvIHRoYXQgc3RkaW8gY2FuIGZsdXNoIGluIHRoZSBtYWluIGV2ZW50IGxvb3AgZXZlciByZXN0YXJ0cy4KICAvLyBUaGlzIGlzIG1haW5seSBmb3IgdGhlIGJlbmVmaXQgb2YgbG9nZ2luZy9kZWJ1Z2dpbmcgaXNzdWVzLgogIHNldFRpbWVvdXQoKCkgPT4gewogICAgcHJvY2Vzcy5leGl0KDApOwogIH0sIDUwMDApOwp9CgpsZXQgZGVidWdnZXJQYXVzZTsKCmlmIChvcHRpb25zLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgbG9nKCdDb25uZWN0aW5nIHRvIGRlYnVnZ2VyJyk7CgogIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbigpIDsKICBzZXNzaW9uLmNvbm5lY3RUb01haW5UaHJlYWQoKTsKCiAgbG9nKCdDb25uZWN0ZWQgdG8gZGVidWdnZXInKTsKCiAgLy8gQ29sbGVjdCBzY3JpcHRJZCAtPiB1cmwgbWFwIHNvIHdlIGNhbiBsb29rIHVwIHRoZSBmaWxlbmFtZXMgbGF0ZXIKICBjb25zdCBzY3JpcHRzID0gbmV3IE1hcCgpOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5zY3JpcHRQYXJzZWQnLCBldmVudCA9PiB7CiAgICBzY3JpcHRzLnNldChldmVudC5wYXJhbXMuc2NyaXB0SWQsIGV2ZW50LnBhcmFtcy51cmwpOwogIH0pOwoKICBzZXNzaW9uLm9uKCdEZWJ1Z2dlci5wYXVzZWQnLCBldmVudCA9PiB7CiAgICBpZiAoZXZlbnQucGFyYW1zLnJlYXNvbiAhPT0gJ290aGVyJykgewogICAgICByZXR1cm47CiAgICB9CgogICAgdHJ5IHsKICAgICAgbG9nKCdEZWJ1Z2dlciBwYXVzZWQnKTsKCiAgICAgIC8vIGNvcHkgdGhlIGZyYW1lcwogICAgICBjb25zdCBjYWxsRnJhbWVzID0gWy4uLmV2ZW50LnBhcmFtcy5jYWxsRnJhbWVzXTsKCiAgICAgIGNvbnN0IGdldE1vZHVsZU5hbWUgPSBvcHRpb25zLmFwcFJvb3RQYXRoID8gY3JlYXRlR2V0TW9kdWxlRnJvbUZpbGVuYW1lKG9wdGlvbnMuYXBwUm9vdFBhdGgpIDogKCkgPT4gdW5kZWZpbmVkOwogICAgICBjb25zdCBzdGFja0ZyYW1lcyA9IGNhbGxGcmFtZXMubWFwKGZyYW1lID0+CiAgICAgICAgY2FsbEZyYW1lVG9TdGFja0ZyYW1lKGZyYW1lLCBzY3JpcHRzLmdldChmcmFtZS5sb2NhdGlvbi5zY3JpcHRJZCksIGdldE1vZHVsZU5hbWUpLAogICAgICApOwoKICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgaW4gdGhlIGN1cnJlbnRseSBwYXVzZWQgY29udGV4dAogICAgICBzZXNzaW9uLnBvc3QoCiAgICAgICAgJ1J1bnRpbWUuZXZhbHVhdGUnLAogICAgICAgIHsKICAgICAgICAgIC8vIEdyYWIgdGhlIHRyYWNlIGNvbnRleHQgZnJvbSB0aGUgY3VycmVudCBzY29wZQogICAgICAgICAgZXhwcmVzc2lvbjoKICAgICAgICAgICAgJ2NvbnN0IGN0eCA9IF9fU0VOVFJZX18uaHViLmdldFNjb3BlKCkuZ2V0UHJvcGFnYXRpb25Db250ZXh0KCk7IGN0eC50cmFjZUlkICsgIi0iICsgY3R4LnNwYW5JZCArICItIiArIGN0eC5wYXJlbnRTcGFuSWQnLAogICAgICAgICAgLy8gRG9uJ3QgcmUtdHJpZ2dlciB0aGUgZGVidWdnZXIgaWYgdGhpcyBjYXVzZXMgYW4gZXJyb3IKICAgICAgICAgIHNpbGVudDogdHJ1ZSwKICAgICAgICB9LAogICAgICAgIChfLCBwYXJhbSkgPT4gewogICAgICAgICAgY29uc3QgdHJhY2VJZCA9IHBhcmFtICYmIHBhcmFtLnJlc3VsdCA/IChwYXJhbS5yZXN1bHQudmFsdWUgKSA6ICctLSc7CiAgICAgICAgICBjb25zdCBbdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkXSA9IHRyYWNlSWQuc3BsaXQoJy0nKSA7CgogICAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5yZXN1bWUnKTsKICAgICAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwoKICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBfb3B0aW9uYWxDaGFpbihbdHJhY2VfaWQsICdvcHRpb25hbEFjY2VzcycsIF80ID0+IF80Lmxlbmd0aF0pICYmIF9vcHRpb25hbENoYWluKFtzcGFuX2lkLCAnb3B0aW9uYWxBY2Nlc3MnLCBfNSA9PiBfNS5sZW5ndGhdKSA/IHsgdHJhY2VfaWQsIHNwYW5faWQsIHBhcmVudF9zcGFuX2lkIH0gOiB1bmRlZmluZWQ7CiAgICAgICAgICBzZW5kQW5yRXZlbnQoc3RhY2tGcmFtZXMsIGNvbnRleHQpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICAgICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZC4nKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIucmVzdW1lJyk7CiAgICAgIHNlc3Npb24ucG9zdCgnRGVidWdnZXIuZGlzYWJsZScpOwogICAgICB0aHJvdyBlOwogICAgfQogIH0pOwoKICBkZWJ1Z2dlclBhdXNlID0gKCkgPT4gewogICAgdHJ5IHsKICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5lbmFibGUnLCAoKSA9PiB7CiAgICAgICAgc2Vzc2lvbi5wb3N0KCdEZWJ1Z2dlci5wYXVzZScpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8KICAgIH0KICB9Owp9CgpmdW5jdGlvbiBjcmVhdGVIclRpbWVyKCkgewogIC8vIFRPRE8gKHY4KTogV2UgY2FuIHVzZSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKSBhZnRlciB3ZSBkcm9wIG5vZGUgdjgKICBsZXQgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwoKICByZXR1cm4gewogICAgZ2V0VGltZU1zOiAoKSA9PiB7CiAgICAgIGNvbnN0IFtzZWNvbmRzLCBuYW5vU2Vjb25kc10gPSBwcm9jZXNzLmhydGltZShsYXN0UG9sbCk7CiAgICAgIHJldHVybiBNYXRoLmZsb29yKHNlY29uZHMgKiAxZTMgKyBuYW5vU2Vjb25kcyAvIDFlNik7CiAgICB9LAogICAgcmVzZXQ6ICgpID0+IHsKICAgICAgbGFzdFBvbGwgPSBwcm9jZXNzLmhydGltZSgpOwogICAgfSwKICB9Owp9CgpmdW5jdGlvbiB3YXRjaGRvZ1RpbWVvdXQoKSB7CiAgbG9nKCdXYXRjaGRvZyB0aW1lb3V0Jyk7CgogIGlmIChkZWJ1Z2dlclBhdXNlKSB7CiAgICBsb2coJ1BhdXNpbmcgZGVidWdnZXIgdG8gY2FwdHVyZSBzdGFjayB0cmFjZScpOwogICAgZGVidWdnZXJQYXVzZSgpOwogIH0gZWxzZSB7CiAgICBsb2coJ0NhcHR1cmluZyBldmVudCB3aXRob3V0IGEgc3RhY2sgdHJhY2UnKTsKICAgIHNlbmRBbnJFdmVudCgpLnRoZW4obnVsbCwgKCkgPT4gewogICAgICBsb2coJ1NlbmRpbmcgQU5SIGV2ZW50IGZhaWxlZCBvbiB3YXRjaGRvZyB0aW1lb3V0LicpOwogICAgfSk7CiAgfQp9Cgpjb25zdCB7IHBvbGwgfSA9IHdhdGNoZG9nVGltZXIoY3JlYXRlSHJUaW1lciwgb3B0aW9ucy5wb2xsSW50ZXJ2YWwsIG9wdGlvbnMuYW5yVGhyZXNob2xkLCB3YXRjaGRvZ1RpbWVvdXQpOwoKX29wdGlvbmFsQ2hhaW4oW3BhcmVudFBvcnQsICdvcHRpb25hbEFjY2VzcycsIF82ID0+IF82Lm9uLCAnY2FsbCcsIF83ID0+IF83KCdtZXNzYWdlJywgKG1zZykgPT4gewogIGlmIChtc2cuc2Vzc2lvbikgewogICAgc2Vzc2lvbiA9IG1ha2VTZXNzaW9uKG1zZy5zZXNzaW9uKTsKICB9CgogIHBvbGwoKTsKfSldKTs="});var GS=y((OS,bce)=>{c();var{_optionalChain:Hht,_optionalChainDelete:gce}=ge();Object.defineProperty(OS,"__esModule",{value:!0});var Mht=require("url"),kS=St(),VL=ge(),DL=lp(),Uht=mce(),jht=50,Xht=5e3;function qL(e,...t){VL.logger.log(`[ANR] ${e}`,...t)}function Yht(){return VL.dynamicRequire(bce,"worker_threads")}async function Kht(e){let t={message:"ANR"},r={};for(let n of e.getEventProcessors()){if(t===null)break;t=await n(t,r)}return Hht([t,"optionalAccess",n=>n.contexts])||{}}var yce="Anr",zht=(e={})=>({name:yce,setupOnce(){},setup(t){if(DL.NODE_VERSION.major<16||DL.NODE_VERSION.major===16&&DL.NODE_VERSION.minor<17)throw new Error("ANR detection requires Node 16.17.0 or later");setImmediate(()=>$ht(t,e))}}),vce=kS.defineIntegration(zht),Jht=kS.convertIntegrationFnToClass(yce,vce);async function $ht(e,t){let r=await Kht(e),n=e.getDsn();if(!n)return;gce([r,"access",d=>d.app,"optionalAccess",d=>delete d.app_memory]),gce([r,"access",d=>d.device,"optionalAccess",d=>delete d.free_memory]);let i=e.getOptions(),s=e.getSdkMetadata()||{};s.sdk&&(s.sdk.integrations=i.integrations.map(d=>d.name));let o={debug:VL.logger.isEnabled(),dsn:n,environment:i.environment||"production",release:i.release,dist:i.dist,sdkMetadata:s,appRootPath:t.appRootPath,pollInterval:t.pollInterval||jht,anrThreshold:t.anrThreshold||Xht,captureStackTrace:!!t.captureStackTrace,staticTags:t.staticTags||{},contexts:r};if(o.captureStackTrace){let d=require("inspector");d.url()||d.open(0)}let{Worker:a}=Yht(),u=new a(new Mht.URL(`data:application/javascript;base64,${Uht.base64WorkerScript}`),{workerData:o});process.on("exit",()=>{u.terminate()});let p=setInterval(()=>{try{let d=kS.getCurrentScope().getSession(),h=d?{...d,toJSON:void 0}:void 0;u.postMessage({session:h})}catch{}},o.pollInterval);p.unref(),u.on("message",d=>{d==="session-ended"&&(qL("ANR event sent from ANR worker. Clearing session in this thread."),kS.getCurrentScope().setSession(void 0))}),u.once("error",d=>{clearInterval(p),qL("ANR worker error",d)}),u.once("exit",d=>{clearInterval(p),qL("ANR worker exit",d)}),u.unref()}OS.Anr=Jht;OS.anrIntegration=vce});var Ice=y(HL=>{c();Object.defineProperty(HL,"__esModule",{value:!0});var Qht=St(),emt=GS();function tmt(e){let t=Qht.getClient();return new emt.Anr(e).setup(t),Promise.resolve()}HL.enableAnrDetection=tmt});var Cce=y(FS=>{c();Object.defineProperty(FS,"__esModule",{value:!0});var _ce=ge();function rmt(e,t){return _ce.extractRequestData(e,{include:t})}function nmt(e,t,r={}){return _ce.addRequestDataToEvent(e,t,{include:r})}FS.extractRequestData=rmt;FS.parseRequest=nmt});var Sce=y(Au=>{c();var{_optionalChain:ih}=ge();Object.defineProperty(Au,"__esModule",{value:!0});var pr=St(),Eu=ge(),imt=Wy(),LS=ZL(),xce=Cce();function smt(){return function(t,r,n){let i=ih([pr.getClient,"call",d=>d(),"optionalAccess",d=>d.getOptions,"call",d=>d()]);if(!i||i.instrumenter!=="sentry"||ih([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="OPTIONS"||ih([t,"access",d=>d.method,"optionalAccess",d=>d.toUpperCase,"call",d=>d()])==="HEAD")return n();let s=t.headers&&Eu.isString(t.headers["sentry-trace"])?t.headers["sentry-trace"]:void 0,o=ih([t,"access",d=>d.headers,"optionalAccess",d=>d.baggage]);if(!pr.hasTracingEnabled(i))return n();let[a,u]=Eu.extractPathForTransaction(t,{path:!0,method:!0}),p=pr.continueTrace({sentryTrace:s,baggage:o},d=>pr.startTransaction({name:a,op:"http.server",origin:"auto.http.node.tracingHandler",...d,data:{[pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]:u},metadata:{...d.metadata,request:t}},{request:Eu.extractRequestData(t)}));pr.getCurrentScope().setSpan(p),r.__sentry_transaction=p,r.once("finish",()=>{setImmediate(()=>{Eu.addRequestDataToTransaction(p,t),pr.setHttpStatus(p,r.statusCode),p.end()})}),n()}}function omt(e={}){let t;if("include"in e)t={include:e.include};else{let{ip:r,request:n,transaction:i,user:s}=e;(r||n||i||s)&&(t={include:Eu.dropUndefinedKeys({ip:r,request:n,transaction:i,user:s})})}return t}function amt(e){let t=omt(e),r=pr.getClient();if(r&&LS.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();let n=pr.getCurrentScope();n.getSession()&&n.setSession()}return function(i,s,o){if(e&&e.flushTimeout&&e.flushTimeout>0){let a=s.end;s.end=function(u,p,d){pr.flush(e.flushTimeout).then(()=>{a.call(this,u,p,d)}).then(null,h=>{imt.DEBUG_BUILD&&Eu.logger.error(h),a.call(this,u,p,d)})}}pr.runWithAsyncContext(()=>{let a=pr.getCurrentScope();a.setSDKProcessingMetadata({request:i,requestDataOptionsFromExpressHandler:t});let u=pr.getClient();LS.isAutoSessionTrackingEnabled(u)&&a.setRequestSession({status:"ok"}),s.once("finish",()=>{let p=pr.getClient();LS.isAutoSessionTrackingEnabled(p)&&setImmediate(()=>{p&&p._captureRequestSession&&p._captureRequestSession()})}),o()})}}function cmt(e){let t=e.status||e.statusCode||e.status_code||e.output&&e.output.statusCode;return t?parseInt(t,10):500}function umt(e){return cmt(e)>=500}function lmt(e){return function(r,n,i,s){if((e&&e.shouldHandleError||umt)(r)){pr.withScope(a=>{a.setSDKProcessingMetadata({request:n});let u=i.__sentry_transaction;u&&!pr.getActiveSpan()&&a.setSpan(u);let p=pr.getClient();if(p&&LS.isAutoSessionTrackingEnabled(p)&&p._sessionFlusher!==void 0){let m=a.getRequestSession();m&&m.status!==void 0&&(m.status="crashed")}let d=pr.captureException(r,{mechanism:{type:"middleware",handled:!1}});i.sentry=d,s(r)});return}s(r)}}function pmt(e={}){return function({path:t,type:r,next:n,rawInput:i}){let s=ih([pr.getClient,"call",p=>p(),"optionalAccess",p=>p.getOptions,"call",p=>p()]),o=pr.getCurrentScope().getTransaction();if(o){o.updateName(`trpc/${t}`),o.setAttribute(pr.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,"route"),o.op="rpc.server";let p={procedure_type:r};(e.attachRpcInput!==void 0?e.attachRpcInput:ih([s,"optionalAccess",d=>d.sendDefaultPii]))&&(p.input=Eu.normalize(i)),o.setContext("trpc",p)}function a(p){p.ok||pr.captureException(p.error,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}let u;try{u=n()}catch(p){throw pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}}),p}return Eu.isThenable(u)?Promise.resolve(u).then(p=>{a(p)},p=>{pr.captureException(p,{mechanism:{handled:!1,data:{function:"trpcMiddleware"}}})}):a(u),u}}Au.extractRequestData=xce.extractRequestData;Au.parseRequest=xce.parseRequest;Au.errorHandler=lmt;Au.requestHandler=amt;Au.tracingHandler=smt;Au.trpcMiddleware=pmt});var ML=y(sh=>{c();Object.defineProperty(sh,"__esModule",{value:!0});var Bi=St(),Ace=ge();function wce(e){return e&&e.statusCode!==void 0}function dmt(e){return e&&e.isBoom!==void 0}function fmt(e){return e&&e.error!==void 0}function Ece(e){Bi.captureException(e,{mechanism:{type:"hapi",handled:!1,data:{function:"hapiErrorPlugin"}}})}var Rce={name:"SentryHapiErrorPlugin",version:Bi.SDK_VERSION,register:async function(e){e.events.on("request",(r,n)=>{let i=Bi.getActiveTransaction();r.response&&dmt(r.response)?Ece(r.response):fmt(n)&&Ece(n.error),i&&(i.setStatus("internal_error"),i.end())})}},Tce={name:"SentryHapiTracingPlugin",version:Bi.SDK_VERSION,register:async function(e){let t=e;t.ext("onPreHandler",(r,n)=>{let i=Bi.continueTrace({sentryTrace:r.headers["sentry-trace"]||void 0,baggage:r.headers.baggage||void 0},s=>Bi.startTransaction({...s,op:"hapi.request",name:r.route.path,description:`${r.route.method} ${r.path}`}));return Bi.getCurrentScope().setSpan(i),n.continue}),t.ext("onPreResponse",(r,n)=>{let i=Bi.getActiveTransaction();if(r.response&&wce(r.response)&&i){let s=r.response;s.header("sentry-trace",Bi.spanToTraceHeader(i));let o=Ace.dynamicSamplingContextToSentryBaggageHeader(Bi.getDynamicSamplingContextFromSpan(i));o&&s.header("baggage",o)}return n.continue}),t.ext("onPostHandler",(r,n)=>{let i=Bi.getActiveTransaction();return i&&(r.response&&wce(r.response)&&Bi.setHttpStatus(i,r.response.statusCode),i.end()),n.continue})}},Nce="Hapi",hmt=(e={})=>{let t=e.server;return{name:Nce,setupOnce(){t&&Ace.fill(t,"start",r=>async function(){return await this.register(Tce),await this.register(Rce),r.apply(this)})}}},Bce=Bi.defineIntegration(hmt),mmt=Bi.convertIntegrationFnToClass(Nce,Bce);sh.Hapi=mmt;sh.hapiErrorPlugin=Rce;sh.hapiIntegration=Bce;sh.hapiTracingPlugin=Tce});var kce=y(ui=>{c();Object.defineProperty(ui,"__esModule",{value:!0});var gmt=pS(),ymt=gS(),vmt=wS(),bmt=AS(),Imt=CS(),_mt=mS(),Cmt=dS(),xmt=St(),Smt=IS(),wmt=NS(),Emt=RS(),Amt=GS(),Rmt=ML();ui.Console=gmt.Console;ui.Http=ymt.Http;ui.OnUncaughtException=vmt.OnUncaughtException;ui.OnUnhandledRejection=bmt.OnUnhandledRejection;ui.Modules=Imt.Modules;ui.ContextLines=_mt.ContextLines;ui.Context=Cmt.Context;ui.RequestData=xmt.RequestData;ui.LocalVariables=Smt.LocalVariables;ui.Undici=wmt.Undici;ui.Spotlight=Emt.Spotlight;ui.Anr=Amt.Anr;ui.Hapi=Rmt.Hapi});var Oce=y(lc=>{c();Object.defineProperty(lc,"__esModule",{value:!0});var vp=sL();lc.Apollo=vp.Apollo;lc.Express=vp.Express;lc.GraphQL=vp.GraphQL;lc.Mongo=vp.Mongo;lc.Mysql=vp.Mysql;lc.Postgres=vp.Postgres;lc.Prisma=vp.Prisma});var ZS=y(UL=>{c();Object.defineProperty(UL,"__esModule",{value:!0});var Tmt=[["january","1"],["february","2"],["march","3"],["april","4"],["may","5"],["june","6"],["july","7"],["august","8"],["september","9"],["october","10"],["november","11"],["december","12"],["jan","1"],["feb","2"],["mar","3"],["apr","4"],["may","5"],["jun","6"],["jul","7"],["aug","8"],["sep","9"],["oct","10"],["nov","11"],["dec","12"],["sunday","0"],["monday","1"],["tuesday","2"],["wednesday","3"],["thursday","4"],["friday","5"],["saturday","6"],["sun","0"],["mon","1"],["tue","2"],["wed","3"],["thu","4"],["fri","5"],["sat","6"]];function Nmt(e){return Tmt.reduce((t,[r,n])=>t.replace(new RegExp(r,"gi"),n),e)}UL.replaceCronNames=Nmt});var Zce=y(jL=>{c();Object.defineProperty(jL,"__esModule",{value:!0});var Gce=St(),Fce=ZS(),Lce="Automatic instrumentation of CronJob only supports crontab string";function Bmt(e,t){let r=!1;return new Proxy(e,{construct(n,i){let[s,o,a,u,p,...d]=i;if(typeof s!="string")throw new Error(Lce);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let h=Fce.replaceCronNames(s);function m(g,v){return Gce.withMonitor(t,()=>o(g,v),{schedule:{type:"crontab",value:h},...p?{timeZone:p}:{}})}return new n(s,m,a,u,p,...d)},get(n,i){return i==="from"?s=>{let{cronTime:o,onTick:a,timeZone:u}=s;if(typeof o!="string")throw new Error(Lce);if(r)throw new Error(`A job named '${t}' has already been scheduled`);r=!0;let p=Fce.replaceCronNames(o);return s.onTick=(d,h)=>Gce.withMonitor(t,()=>a(d,h),{schedule:{type:"crontab",value:p},...u?{timeZone:u}:{}}),n.from(s)}:n[i]}})}jL.instrumentCron=Bmt});var Pce=y(XL=>{c();var{_optionalChain:Wce}=ge();Object.defineProperty(XL,"__esModule",{value:!0});var kmt=St(),Omt=ZS();function Gmt(e){return new Proxy(e,{get(t,r){return r==="schedule"&&t.schedule?new Proxy(t.schedule,{apply(n,i,s){let[o,,a]=s;if(!Wce([a,"optionalAccess",u=>u.name]))throw new Error('Missing "name" for scheduled job. A name is required for Sentry check-in monitoring.');return kmt.withMonitor(a.name,()=>n.apply(i,s),{schedule:{type:"crontab",value:Omt.replaceCronNames(o)},timezone:Wce([a,"optionalAccess",u=>u.timezone])})}}):t[r]}})}XL.instrumentNodeCron=Gmt});var Dce=y(YL=>{c();Object.defineProperty(YL,"__esModule",{value:!0});var Fmt=St(),Lmt=ZS();function Zmt(e){return new Proxy(e,{get(t,r){return r==="scheduleJob"?new Proxy(t.scheduleJob,{apply(n,i,s){let[o,a]=s;if(typeof o!="string"||typeof a!="string")throw new Error("Automatic instrumentation of 'node-schedule' requires the first parameter of 'scheduleJob' to be a job name string and the second parameter to be a crontab string");let u=o,p=a;return Fmt.withMonitor(u,()=>n.apply(i,s),{schedule:{type:"crontab",value:Lmt.replaceCronNames(p)}})}}):t[r]}})}YL.instrumentNodeSchedule=Zmt});var Uce=y(ve=>{c();Object.defineProperty(ve,"__esModule",{value:!0});var Fe=St(),Wmt=eae(),Pmt=uL(),Dmt=gL(),Uy=ZL(),KL=ge(),qmt=fce(),qce=LL(),Vmt=Ice(),Hmt=Sce(),Mmt=kce(),Umt=Oce(),jmt=pS(),Xmt=wS(),Ymt=AS(),Kmt=CS(),zmt=mS(),Jmt=dS(),$mt=IS(),Qmt=RS(),egt=GS(),Vce=ML(),Hce=NS(),Mce=gS(),tgt=Zce(),rgt=Pce(),ngt=Dce(),igt=qce.createGetModuleFromFilename(),sgt={...Fe.Integrations,...Mmt,...Umt},ogt={instrumentCron:tgt.instrumentCron,instrumentNodeCron:rgt.instrumentNodeCron,instrumentNodeSchedule:ngt.instrumentNodeSchedule};ve.Hub=Fe.Hub;ve.SDK_VERSION=Fe.SDK_VERSION;ve.SEMANTIC_ATTRIBUTE_SENTRY_OP=Fe.SEMANTIC_ATTRIBUTE_SENTRY_OP;ve.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN=Fe.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN;ve.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SAMPLE_RATE;ve.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE=Fe.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE;ve.Scope=Fe.Scope;ve.addBreadcrumb=Fe.addBreadcrumb;ve.addEventProcessor=Fe.addEventProcessor;ve.addGlobalEventProcessor=Fe.addGlobalEventProcessor;ve.addIntegration=Fe.addIntegration;ve.captureCheckIn=Fe.captureCheckIn;ve.captureEvent=Fe.captureEvent;ve.captureException=Fe.captureException;ve.captureMessage=Fe.captureMessage;ve.captureSession=Fe.captureSession;ve.close=Fe.close;ve.configureScope=Fe.configureScope;ve.continueTrace=Fe.continueTrace;ve.createTransport=Fe.createTransport;ve.endSession=Fe.endSession;ve.extractTraceparentData=Fe.extractTraceparentData;ve.flush=Fe.flush;ve.functionToStringIntegration=Fe.functionToStringIntegration;ve.getActiveSpan=Fe.getActiveSpan;ve.getActiveTransaction=Fe.getActiveTransaction;ve.getClient=Fe.getClient;ve.getCurrentHub=Fe.getCurrentHub;ve.getCurrentScope=Fe.getCurrentScope;ve.getGlobalScope=Fe.getGlobalScope;ve.getHubFromCarrier=Fe.getHubFromCarrier;ve.getIsolationScope=Fe.getIsolationScope;ve.getSpanStatusFromHttpCode=Fe.getSpanStatusFromHttpCode;ve.inboundFiltersIntegration=Fe.inboundFiltersIntegration;ve.isInitialized=Fe.isInitialized;ve.lastEventId=Fe.lastEventId;ve.linkedErrorsIntegration=Fe.linkedErrorsIntegration;ve.makeMain=Fe.makeMain;ve.metrics=Fe.metrics;ve.parameterize=Fe.parameterize;ve.requestDataIntegration=Fe.requestDataIntegration;ve.runWithAsyncContext=Fe.runWithAsyncContext;ve.setContext=Fe.setContext;ve.setCurrentClient=Fe.setCurrentClient;ve.setExtra=Fe.setExtra;ve.setExtras=Fe.setExtras;ve.setHttpStatus=Fe.setHttpStatus;ve.setMeasurement=Fe.setMeasurement;ve.setTag=Fe.setTag;ve.setTags=Fe.setTags;ve.setUser=Fe.setUser;ve.spanStatusfromHttpCode=Fe.spanStatusfromHttpCode;ve.startActiveSpan=Fe.startActiveSpan;ve.startInactiveSpan=Fe.startInactiveSpan;ve.startSession=Fe.startSession;ve.startSpan=Fe.startSpan;ve.startSpanManual=Fe.startSpanManual;ve.startTransaction=Fe.startTransaction;ve.trace=Fe.trace;ve.withActiveSpan=Fe.withActiveSpan;ve.withIsolationScope=Fe.withIsolationScope;ve.withMonitor=Fe.withMonitor;ve.withScope=Fe.withScope;ve.autoDiscoverNodePerformanceMonitoringIntegrations=Wmt.autoDiscoverNodePerformanceMonitoringIntegrations;ve.NodeClient=Pmt.NodeClient;ve.makeNodeTransport=Dmt.makeNodeTransport;ve.defaultIntegrations=Uy.defaultIntegrations;ve.defaultStackParser=Uy.defaultStackParser;ve.getDefaultIntegrations=Uy.getDefaultIntegrations;ve.getSentryRelease=Uy.getSentryRelease;ve.init=Uy.init;ve.DEFAULT_USER_INCLUDES=KL.DEFAULT_USER_INCLUDES;ve.addRequestDataToEvent=KL.addRequestDataToEvent;ve.extractRequestData=KL.extractRequestData;ve.deepReadDirSync=qmt.deepReadDirSync;ve.createGetModuleFromFilename=qce.createGetModuleFromFilename;ve.enableAnrDetection=Vmt.enableAnrDetection;ve.Handlers=Hmt;ve.consoleIntegration=jmt.consoleIntegration;ve.onUncaughtExceptionIntegration=Xmt.onUncaughtExceptionIntegration;ve.onUnhandledRejectionIntegration=Ymt.onUnhandledRejectionIntegration;ve.modulesIntegration=Kmt.modulesIntegration;ve.contextLinesIntegration=zmt.contextLinesIntegration;ve.nodeContextIntegration=Jmt.nodeContextIntegration;ve.localVariablesIntegration=$mt.localVariablesIntegration;ve.spotlightIntegration=Qmt.spotlightIntegration;ve.anrIntegration=egt.anrIntegration;ve.hapiErrorPlugin=Vce.hapiErrorPlugin;ve.hapiIntegration=Vce.hapiIntegration;ve.Undici=Hce.Undici;ve.nativeNodeFetchintegration=Hce.nativeNodeFetchintegration;ve.Http=Mce.Http;ve.httpIntegration=Mce.httpIntegration;ve.Integrations=sgt;ve.cron=ogt;ve.getModuleFromFilename=igt});var oh=y((Oar,agt)=>{agt.exports={name:"@ampt/cli",version:"1.1.18",description:"Ampt command line interface",main:"./dist/index.js",types:"./types/index.d.ts",engines:{node:">=16.0.0 <21.0.0"},publishConfig:{access:"public"},bin:{ampt:"./bin/bin"},scripts:{prepublishOnly:"npm run build",build:"node esbuild.mjs",watch:"node esbuild.mjs --watch",test:'LOG_LEVEL=silent AWS_REGION=us-east-1 NODE_OPTIONS="--no-warnings --experimental-vm-modules" jest',eslint:"eslint .",prettier:"prettier --check .",typecheck:"tsc -b ."},author:"Ampt Inc <hello@getampt.com>",license:"Apache-2.0",optionalDependencies:{fsevents:"~2.3.2"},babel:{presets:["@babel/preset-typescript"]},devDependencies:{"@astrojs/webapi":"^1.1.1","@sentry/esbuild-plugin":"^2.16.0","@sentry/node":"^7.107.0","@types/express":"^4.17.13","@types/http-proxy":"^1.17.8","@types/write-file-atomic":"^4.0.0","@types/ws":"^8.5.3","adm-zip":"^0.5.5","ansi-escapes":"^4.3.1",axios:"^1.6.5","axios-retry":"^4.0.0",chalk:"^4.1.0","child-process-ext":"^2.1.1",chokidar:"^3.5.0",chunk:"^0.0.3",dayjs:"^1.10.4",debounce:"^1.2.1",del:"^6.0.0",figures:"^3.2.0","fs-extra":"^9.0.1","get-port":"^5.0.0","git-list-updated":"^1.2.1","github-release-from-cc-changelog":"^2.2.0","http-proxy":"^1.18.1",ignore:"^5.2.0","is-git-url":"^1.0.0","is-installed-globally":"^0.4.0","it-parallel":"^2.0.1","jwt-decode":"^3.1.2",keypress:"^0.2.1","lz4-wasm-nodejs":"^0.9.2",minimist:"^1.2.5","node-emoji":"^1.10.0","node-resolve":"^1.3.4","normalize-path":"^3.0.0",open:"^8.2.0","parse-packagejson-name":"^1.0.1",pluralize:"^8.0.0",ramda:"^0.27.2",semver:"^5.7.1","strip-ansi":"^6.0.0",terminate:"^2.5.0","tree-kill":"^1.2.2",ulid:"^2.3.0",which:"^2.0.2","write-file-atomic":"^4.0.2"},dependencies:{esbuild:"^0.19.5",joycon:"^3.1.1",pirates:"^4.0.6","source-map-support":"^0.5.21","tsconfig-paths":"^4.2.0"}}});var jce,An,cgt,ugt,jy,zL,Wt,ua=ae(()=>{"use strict";c();jce=Ce(Dte()),An=Ce(Uce());dr();ah();({version:cgt}=oh()),ugt=()=>{var e;return(process.env.AMPT_STAGE==="prod"||((e=process.env.AMPT_ENDPOINT)==null?void 0:e.endsWith("ampt.dev")))&&!process.env.JEST_WORKER_ID};ugt()&&An.init({release:cgt,dsn:"https://5f27cbf3265a475abff6b7999ae73179@o1265020.ingest.us.sentry.io/6448443",tracesSampleRate:.5});zL=class{constructor(){Cr(this,"orgName");Cr(this,"user");Cr(this,"config");Im(this,jy,(0,jce.ulid)());Cr(this,"auth");Cr(this,"captureException",t=>{ca.error({err:t},"captureException"),An==null||An.captureException(t)})}getSessionId(){return Ro(this,jy)}loadAmptConfig(){this.config=JL(),ca.debug({config:this.config},"loadAmptConfig")}getLoggedInUser(){var t;if(this.config||this.loadAmptConfig(),this.config&&((t=this.config)!=null&&t.userId)){let{sessions:r}=this.config,n=r==null?void 0:r[this.config.userId];if(n!=null&&n.accessToken&&(this.auth={accessToken:n.accessToken}),n&&n.username&&n.refreshToken)return{userId:this.config.userId,username:n.username,name:n.name,email:n.email,expiresAt:n.expiresAt,refreshToken:n.refreshToken,accessToken:n.accessToken}}return null}saveConfig(t){this.config={...this.config,...t},$L(this.config)}updateLogin(t){if(this.config){let r=this.getLoggedInUser();if(r&&r.userId){let n=Date.now()+t.expiresIn*1e3,{userId:i,username:s,name:o,email:a,refreshToken:u}=r;this.saveConfig({userId:i,sessions:{[i]:{userId:i,username:s,name:o,email:a,refreshToken:u,accessToken:t.accessToken,expiresAt:n}}})}}}storeToken(t,r){this.auth={accessToken:t},this.updateLogin({accessToken:t,expiresIn:r})}writeUpdateCheck(){let t=Math.round(Date.now()/1e3);this.config&&this.saveConfig({...this.config,meta:{...this.config.meta,last_update_check:t}})}shouldCheckForCliUpdate(){var t;if(this.config){let r=(t=this.config.meta)==null?void 0:t.last_update_check,n=Math.round(Date.now()/1e3);return!r||n-r>60*60*24*7}return!0}setUser(t){this.user=t,An==null||An.setUser({userId:t.userId,username:t.username,email:t.email,fullName:t.name,userAgeDays:t.userAgeDays,auth0Id:t.auth0Id})}onLogin(t,r){if(t){let{refreshToken:n,accessToken:i,expiresIn:s}=r,o=Date.now()+s*1e3;this.saveConfig({userId:t.userId,meta:{created_at:Math.round(Date.now()/1e3)},sessions:{[t.userId]:{userId:t.userId,username:t.username,name:t.name,email:t.email,refreshToken:n,accessToken:i,expiresAt:o}}}),ca.debug({userName:t.username},"saved config file"),this.setUser(t),ca.debug({userName:t.username},"set user in session")}}shouldPromptTutorial(){var t,r,n,i,s,o,a,u,p;if((t=this.user)!=null&&t.preferences){let d=((n=(r=this.user)==null?void 0:r.preferences)==null?void 0:n.connectedCount)>=3,h=((i=this.user)==null?void 0:i.userAgeDays)&&((s=this.user)==null?void 0:s.userAgeDays)>30;return{showTutorial:((a=(o=this.user)==null?void 0:o.preferences)==null?void 0:a.showTutorial)===void 0?!0:(p=(u=this.user)==null?void 0:u.preferences)==null?void 0:p.showTutorial,allowDismiss:h?!0:d}}return{showTutorial:!1,allowDismiss:!1}}setSentryContext(t){let r={...t,sessionId:Ro(this,jy)};An==null||An.setTags(r),An==null||An.setContext("cli-session",r)}async flushSentry(){return An==null?void 0:An.flush()}};jy=new WeakMap;Wt=new zL});var WS,PS,Ru,QL,Ae,ca,ah=ae(()=>{"use strict";c();WS=Ce(Wte()),PS=Ce(require("path")),Ru=Ce(yl());ua();QL=class{logger;enabled;logFilePath;logToConsole;pinoArgs;pinoDestination;initLogDestination(){try{(0,Ru.removeSync)(this.logFilePath)}catch(t){process.env.AMPT_DEBUG&&console.error("Error removing log file: ",t)}finally{if(this.enabled)try{(0,Ru.ensureFileSync)(this.logFilePath)}catch{this.enabled=!1}}this.pinoDestination=this.enabled&&!this.logToConsole?WS.default.destination({dest:this.logFilePath,sync:process.platform!=="win32"}):void 0}constructor(){this.enabled=!process.env.AMPT_DISABLE_LOGS,this.logFilePath=process.env.AMPT_LOG_DIR||PS.default.join(process.cwd(),".ampt","logs"),this.logToConsole=process.env.AMPT_LOG_TO_CONSOLE==="true",this.initLogDestination(),this.pinoArgs={enabled:this.enabled,level:process.env.AMPT_LOG_LEVEL||"info",mixin:()=>({sessionId:Wt.getSessionId()}),redact:{remove:!0,paths:["credentials","accessKey","token","idToken","refreshToken","accessToken"]}},this.logger=(0,WS.default)(this.pinoArgs,this.pinoDestination)}disable(){this.enabled=!1}enable(){this.enabled=!0;let t=PS.default.join(process.cwd(),".ampt");this.logFilePath=process.env.AMPT_LOG_DIR||PS.default.join(t,"logs"),(0,Ru.existsSync)(t)||(0,Ru.mkdirSync)(t),this.initLogDestination(),this.pinoArgs={...this.pinoArgs,enabled:this.enabled},this.logger=(0,WS.default)(this.pinoArgs,this.pinoDestination)}child(t){return this.logger.child(t)}debug(...t){this.enabled&&this.logger.debug(...t)}warn(...t){this.enabled&&this.logger.warn(...t)}error(...t){this.enabled&&this.logger.error(...t)}info(...t){this.enabled&&this.logger.info(...t)}fatal(...t){this.enabled&&this.logger.fatal(...t)}trace(...t){this.enabled&&this.logger.trace(...t)}},Ae=new QL,ca=Ae});var Yce,Xce,lgt,eZ,tZ,$e,Kar,rZ=ae(()=>{"use strict";c();Yce=Ce(require("https"));Z0();A7();ah();ua();({version:Xce}=oh()),lgt=new Yce.default.Agent({keepAlive:!0}),eZ=class e{axios;static config(){return{apiEndpoint:process.env.AMPT_ENDPOINT,apiKey:process.env.AMPT_API_KEY}}constructor(){this.axios=Wo.create({httpsAgent:lgt}),W0(this.axios,{retries:10,retryDelay:W0.exponentialDelay,retryCondition:t=>{var s;let r=t.response&&t.response.status||"unknown",n=t.response&&t.response.data&&t.response.data.message||"unknown",i=W0.isNetworkOrIdempotentRequestError(t)&&r!==500||r===429||r===503;return i&&ca.debug({status:r,message:n,response:(s=t.response)==null?void 0:s.data},"retryable request error"),i}}),this.axios.defaults.headers.common={},this.axios.defaults.headers.put={},this.axios.defaults.headers.get={}}async request(t={}){var I,x,_,A,E,S,w,T,D,L,P,k,F,B;let{apiEndpoint:r,apiKey:n}=e.config(),i=t.root||r,s=(I=Wt.auth)==null?void 0:I.accessToken,{method:o="POST",params:a,headers:u={},body:p,endpoint:d}=t,{url:h=`${i}${d}`,responseType:m}=t;n&&h.startsWith(r)?u.Authorization=`Basic ${n}`:s&&h.startsWith(r)&&(u.Authorization=`Bearer ${s}`),p&&d&&(u["Content-Type"]="application/json");let g=Wt.getSessionId();d&&(u["User-Agent"]=`ampt-cli/${Xce}`,u["ampt-version"]=Xce,u["ampt-session-id"]=g);let v={url:h,method:o,headers:u,params:a,data:p,maxContentLength:1/0,maxBodyLength:1/0,onUploadProgress:t.onUploadProgress};m&&(v.responseType=m);try{return ca.debug({method:o,url:h,sessionId:g},"request"),(await this.axios(v)).data}catch(M){if(((x=M.response)==null?void 0:x.status)===403&&((A=(_=M.response)==null?void 0:_.data)==null?void 0:A.code)==="EXPIRED_TOKEN")return ca.debug({status:M.response.status,code:M.response.data.code},"Token expired, refreshing"),await((E=Wt.user)==null?void 0:E.refreshAccessToken()),this.request(t);if(((S=M.response)==null?void 0:S.status)===403){let Y=new Error("Forbidden");throw Y.message="You do not have permission to access this resource.",Y.name="ForbiddenError",Y}if(((w=M.response)==null?void 0:w.status)===404)return;if(((T=M.response)==null?void 0:T.status)===409){let Y=new Error("Conflict");throw Y.message="Conflict",Y.name="ConflictError",Y}if(ca.error({status:(D=M.response)==null?void 0:D.status,data:(L=M.response)==null?void 0:L.data},"request error"),M.response&&M.response.data){let Y=new Error(M.response.data.message||M.response.data);throw(P=M.response.data.message)!=null&&P.includes("Request Entity Too Large")?(Y.message="Your code size is too large. Try reducing it by adding to .deployignore",Y.name="EntityTooLargeError"):(k=M.response.data.message)!=null&&k.includes("User disabled")?(Y.message=M.response.data.detail||"Your account has been disabled. Please contact support@getampt.com for more information.",Y.name="UserDisabledError"):(F=M.response.data.message)!=null&&F.includes("App limit reached")?(Y.message="You have reached your Organization's app limit. Please upgrade your plan or delete an app.",Y.name="AppLimitReachedError"):(B=M.response.data.message)!=null&&B.includes("Instance limit reached")?(Y.message="You have reached your Organization's environment limit. Please upgrade your plan or delete an environment.",Y.name="EnvironmentLimitReachedError"):Y.name=M.response.data.name||null,Y.statusCode=M.response.data.statusCode||M.response.status||null,Y}throw M}}},tZ=new eZ,$e=tZ.request.bind(tZ),Kar=tZ.request});var Kce,zce=ae(()=>{"use strict";c();Kce=async(e,t)=>{let r,n=new Promise(i=>{r=setTimeout(()=>i(null),t)});return Promise.race([e,n]).then(i=>(clearTimeout(r),i))}});var DS,Jce=ae(()=>{"use strict";c();DS=e=>e?e===0?"less than a second":e===1?"1 second":`${e} seconds`:"a few seconds"});var Tu,nZ=ae(()=>{"use strict";c();Tu=async e=>new Promise(t=>setTimeout(t,e).unref())});var fr,iZ,sZ=ae(()=>{"use strict";c();dr();ua();fr=e=>{(async()=>{let{eventName:t,eventData:r={}}=e,n=Wt.orgName;if(!n){Ae.warn({eventName:t},"Could not send report - no org name found");return}try{await $e({method:"POST",body:{eventName:t,eventData:{...r,shell:!0}},endpoint:`/orgs/${n}/analytics`})}catch(i){Wt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()},iZ=fr});async function qS(e){try{let t="https://ampt.dev/public/templates/manifest-tags.json",{data:r}=await Wo.get(t);return r.filter(n=>n.tags.includes("starter"))}catch(t){return process.env.AMPT_DEBUG&&e.logError(t),[]}}var oZ=ae(()=>{"use strict";c();Z0()});var aZ,$ce,cZ=ae(()=>{"use strict";c();aZ=e=>{try{return process.kill(e,0)}catch(t){return t.code==="EPERM"}},$ce=aZ});async function VS(e,t){let r=e.eventNames(),n=new Map;for(let i of r)n.set(i,e.listeners(i));try{return await t()}finally{e.removeAllListeners();for(let i of r)for(let s of n.get(i))e.on(i,s)}}var Qce=ae(()=>{"use strict";c()});function eue(e){e=e.trim();let t=0,r=null,n=null,i=null,s=[];for(let o=0;o<e.length;o++){if(r=n,n=e.charAt(o),n===" "&&!i){r!==" "&&t++;continue}if(n===i){i=null;continue}else if((n==="'"||n==='"')&&!i){i=n;continue}s[t]||(s[t]=""),s[t]+=n}return s}var tue=ae(()=>{"use strict";c()});var rue=ae(()=>{"use strict";c()});var nue=y((ch,Xy)=>{c();(function(){var e,t="4.17.21",r=200,n="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",i="Expected a function",s="Invalid `variable` option passed into `_.template`",o="__lodash_hash_undefined__",a=500,u="__lodash_placeholder__",p=1,d=2,h=4,m=1,g=2,v=1,I=2,x=4,_=8,A=16,E=32,S=64,w=128,T=256,D=512,L=30,P="...",k=800,F=16,B=1,M=2,Y=3,V=1/0,q=9007199254740991,te=17976931348623157e292,z=0/0,he=4294967295,fe=he-1,Se=he>>>1,De=[["ary",w],["bind",v],["bindKey",I],["curry",_],["curryRight",A],["flip",D],["partial",E],["partialRight",S],["rearg",T]],Oe="[object Arguments]",Xe="[object Array]",Ze="[object AsyncFunction]",Re="[object Boolean]",gt="[object Date]",lt="[object DOMException]",_e="[object Error]",Z="[object Function]",R="[object GeneratorFunction]",ne="[object Map]",J="[object Number]",rt="[object Null]",ze="[object Object]",Yt="[object Promise]",Ir="[object Proxy]",Yr="[object RegExp]",We="[object Set]",$t="[object String]",xn="[object Symbol]",Yp="[object Undefined]",xo="[object WeakMap]",Uu="[object WeakSet]",So="[object ArrayBuffer]",G="[object DataView]",j="[object Float32Array]",K="[object Float64Array]",oe="[object Int8Array]",pe="[object Int16Array]",Te="[object Int32Array]",st="[object Uint8Array]",bt="[object Uint8ClampedArray]",tn="[object Uint16Array]",Pi="[object Uint32Array]",Gr=/\b__p \+= '';/g,Qe=/\b(__p \+=) '' \+/g,Ys=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Rb=/&(?:amp|lt|gt|quot|#39);/g,Kp=/[&<>"']/g,Tb=RegExp(Rb.source),Nb=RegExp(Kp.source),em=/<%-([\s\S]+?)%>/g,Di=/<%([\s\S]+?)%>/g,tm=/<%=([\s\S]+?)%>/g,rm=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Bb=/^\w*$/,nm=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ju=/[\\^$.*+?()[\]{}|]/g,zp=RegExp(ju.source),Xu=/^\s+/,kb=/\s/,Ob=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,$1e=/\{\n\/\* \[wrapped with (.+)\] \*/,Q1e=/,? & /,e2e=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,t2e=/[()=,{}\[\]\/\s]/,r2e=/\\(\\)?/g,n2e=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,wV=/\w*$/,i2e=/^[-+]0x[0-9a-f]+$/i,s2e=/^0b[01]+$/i,o2e=/^\[object .+?Constructor\]$/,a2e=/^0o[0-7]+$/i,c2e=/^(?:0|[1-9]\d*)$/,u2e=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Gb=/($^)/,l2e=/['\n\r\u2028\u2029\\]/g,Fb="\\ud800-\\udfff",p2e="\\u0300-\\u036f",d2e="\\ufe20-\\ufe2f",f2e="\\u20d0-\\u20ff",EV=p2e+d2e+f2e,AV="\\u2700-\\u27bf",RV="a-z\\xdf-\\xf6\\xf8-\\xff",h2e="\\xac\\xb1\\xd7\\xf7",m2e="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",g2e="\\u2000-\\u206f",y2e=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",TV="A-Z\\xc0-\\xd6\\xd8-\\xde",NV="\\ufe0e\\ufe0f",BV=h2e+m2e+g2e+y2e,LA="['\u2019]",v2e="["+Fb+"]",kV="["+BV+"]",Lb="["+EV+"]",OV="\\d+",b2e="["+AV+"]",GV="["+RV+"]",FV="[^"+Fb+BV+OV+AV+RV+TV+"]",ZA="\\ud83c[\\udffb-\\udfff]",I2e="(?:"+Lb+"|"+ZA+")",LV="[^"+Fb+"]",WA="(?:\\ud83c[\\udde6-\\uddff]){2}",PA="[\\ud800-\\udbff][\\udc00-\\udfff]",Jp="["+TV+"]",ZV="\\u200d",WV="(?:"+GV+"|"+FV+")",_2e="(?:"+Jp+"|"+FV+")",PV="(?:"+LA+"(?:d|ll|m|re|s|t|ve))?",DV="(?:"+LA+"(?:D|LL|M|RE|S|T|VE))?",qV=I2e+"?",VV="["+NV+"]?",C2e="(?:"+ZV+"(?:"+[LV,WA,PA].join("|")+")"+VV+qV+")*",x2e="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",S2e="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",HV=VV+qV+C2e,w2e="(?:"+[b2e,WA,PA].join("|")+")"+HV,E2e="(?:"+[LV+Lb+"?",Lb,WA,PA,v2e].join("|")+")",A2e=RegExp(LA,"g"),R2e=RegExp(Lb,"g"),DA=RegExp(ZA+"(?="+ZA+")|"+E2e+HV,"g"),T2e=RegExp([Jp+"?"+GV+"+"+PV+"(?="+[kV,Jp,"$"].join("|")+")",_2e+"+"+DV+"(?="+[kV,Jp+WV,"$"].join("|")+")",Jp+"?"+WV+"+"+PV,Jp+"+"+DV,S2e,x2e,OV,w2e].join("|"),"g"),N2e=RegExp("["+ZV+Fb+EV+NV+"]"),B2e=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,k2e=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],O2e=-1,ar={};ar[j]=ar[K]=ar[oe]=ar[pe]=ar[Te]=ar[st]=ar[bt]=ar[tn]=ar[Pi]=!0,ar[Oe]=ar[Xe]=ar[So]=ar[Re]=ar[G]=ar[gt]=ar[_e]=ar[Z]=ar[ne]=ar[J]=ar[ze]=ar[Yr]=ar[We]=ar[$t]=ar[xo]=!1;var nr={};nr[Oe]=nr[Xe]=nr[So]=nr[G]=nr[Re]=nr[gt]=nr[j]=nr[K]=nr[oe]=nr[pe]=nr[Te]=nr[ne]=nr[J]=nr[ze]=nr[Yr]=nr[We]=nr[$t]=nr[xn]=nr[st]=nr[bt]=nr[tn]=nr[Pi]=!0,nr[_e]=nr[Z]=nr[xo]=!1;var G2e={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},F2e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},L2e={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},Z2e={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},W2e=parseFloat,P2e=parseInt,MV=typeof global=="object"&&global&&global.Object===Object&&global,D2e=typeof self=="object"&&self&&self.Object===Object&&self,dn=MV||D2e||Function("return this")(),qA=typeof ch=="object"&&ch&&!ch.nodeType&&ch,Yu=qA&&typeof Xy=="object"&&Xy&&!Xy.nodeType&&Xy,UV=Yu&&Yu.exports===qA,VA=UV&&MV.process,us=function(){try{var $=Yu&&Yu.require&&Yu.require("util").types;return $||VA&&VA.binding&&VA.binding("util")}catch{}}(),jV=us&&us.isArrayBuffer,XV=us&&us.isDate,YV=us&&us.isMap,KV=us&&us.isRegExp,zV=us&&us.isSet,JV=us&&us.isTypedArray;function qi($,ce,se){switch(se.length){case 0:return $.call(ce);case 1:return $.call(ce,se[0]);case 2:return $.call(ce,se[0],se[1]);case 3:return $.call(ce,se[0],se[1],se[2])}return $.apply(ce,se)}function q2e($,ce,se,Be){for(var ot=-1,Ft=$==null?0:$.length;++ot<Ft;){var rn=$[ot];ce(Be,rn,se(rn),$)}return Be}function ls($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be&&ce($[se],se,$)!==!1;);return $}function V2e($,ce){for(var se=$==null?0:$.length;se--&&ce($[se],se,$)!==!1;);return $}function $V($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(!ce($[se],se,$))return!1;return!0}function Bc($,ce){for(var se=-1,Be=$==null?0:$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];ce(rn,se,$)&&(Ft[ot++]=rn)}return Ft}function Zb($,ce){var se=$==null?0:$.length;return!!se&&$p($,ce,0)>-1}function HA($,ce,se){for(var Be=-1,ot=$==null?0:$.length;++Be<ot;)if(se(ce,$[Be]))return!0;return!1}function ur($,ce){for(var se=-1,Be=$==null?0:$.length,ot=Array(Be);++se<Be;)ot[se]=ce($[se],se,$);return ot}function kc($,ce){for(var se=-1,Be=ce.length,ot=$.length;++se<Be;)$[ot+se]=ce[se];return $}function MA($,ce,se,Be){var ot=-1,Ft=$==null?0:$.length;for(Be&&Ft&&(se=$[++ot]);++ot<Ft;)se=ce(se,$[ot],ot,$);return se}function H2e($,ce,se,Be){var ot=$==null?0:$.length;for(Be&&ot&&(se=$[--ot]);ot--;)se=ce(se,$[ot],ot,$);return se}function UA($,ce){for(var se=-1,Be=$==null?0:$.length;++se<Be;)if(ce($[se],se,$))return!0;return!1}var M2e=jA("length");function U2e($){return $.split("")}function j2e($){return $.match(e2e)||[]}function QV($,ce,se){var Be;return se($,function(ot,Ft,rn){if(ce(ot,Ft,rn))return Be=Ft,!1}),Be}function Wb($,ce,se,Be){for(var ot=$.length,Ft=se+(Be?1:-1);Be?Ft--:++Ft<ot;)if(ce($[Ft],Ft,$))return Ft;return-1}function $p($,ce,se){return ce===ce?ike($,ce,se):Wb($,eH,se)}function X2e($,ce,se,Be){for(var ot=se-1,Ft=$.length;++ot<Ft;)if(Be($[ot],ce))return ot;return-1}function eH($){return $!==$}function tH($,ce){var se=$==null?0:$.length;return se?YA($,ce)/se:z}function jA($){return function(ce){return ce==null?e:ce[$]}}function XA($){return function(ce){return $==null?e:$[ce]}}function rH($,ce,se,Be,ot){return ot($,function(Ft,rn,Qt){se=Be?(Be=!1,Ft):ce(se,Ft,rn,Qt)}),se}function Y2e($,ce){var se=$.length;for($.sort(ce);se--;)$[se]=$[se].value;return $}function YA($,ce){for(var se,Be=-1,ot=$.length;++Be<ot;){var Ft=ce($[Be]);Ft!==e&&(se=se===e?Ft:se+Ft)}return se}function KA($,ce){for(var se=-1,Be=Array($);++se<$;)Be[se]=ce(se);return Be}function K2e($,ce){return ur(ce,function(se){return[se,$[se]]})}function nH($){return $&&$.slice(0,aH($)+1).replace(Xu,"")}function Vi($){return function(ce){return $(ce)}}function zA($,ce){return ur(ce,function(se){return $[se]})}function im($,ce){return $.has(ce)}function iH($,ce){for(var se=-1,Be=$.length;++se<Be&&$p(ce,$[se],0)>-1;);return se}function sH($,ce){for(var se=$.length;se--&&$p(ce,$[se],0)>-1;);return se}function z2e($,ce){for(var se=$.length,Be=0;se--;)$[se]===ce&&++Be;return Be}var J2e=XA(G2e),$2e=XA(F2e);function Q2e($){return"\\"+Z2e[$]}function eke($,ce){return $==null?e:$[ce]}function Qp($){return N2e.test($)}function tke($){return B2e.test($)}function rke($){for(var ce,se=[];!(ce=$.next()).done;)se.push(ce.value);return se}function JA($){var ce=-1,se=Array($.size);return $.forEach(function(Be,ot){se[++ce]=[ot,Be]}),se}function oH($,ce){return function(se){return $(ce(se))}}function Oc($,ce){for(var se=-1,Be=$.length,ot=0,Ft=[];++se<Be;){var rn=$[se];(rn===ce||rn===u)&&($[se]=u,Ft[ot++]=se)}return Ft}function Pb($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=Be}),se}function nke($){var ce=-1,se=Array($.size);return $.forEach(function(Be){se[++ce]=[Be,Be]}),se}function ike($,ce,se){for(var Be=se-1,ot=$.length;++Be<ot;)if($[Be]===ce)return Be;return-1}function ske($,ce,se){for(var Be=se+1;Be--;)if($[Be]===ce)return Be;return Be}function ed($){return Qp($)?ake($):M2e($)}function Ks($){return Qp($)?cke($):U2e($)}function aH($){for(var ce=$.length;ce--&&kb.test($.charAt(ce)););return ce}var oke=XA(L2e);function ake($){for(var ce=DA.lastIndex=0;DA.test($);)++ce;return ce}function cke($){return $.match(DA)||[]}function uke($){return $.match(T2e)||[]}var lke=function $(ce){ce=ce==null?dn:Gc.defaults(dn.Object(),ce,Gc.pick(dn,k2e));var se=ce.Array,Be=ce.Date,ot=ce.Error,Ft=ce.Function,rn=ce.Math,Qt=ce.Object,$A=ce.RegExp,pke=ce.String,ps=ce.TypeError,Db=se.prototype,dke=Ft.prototype,td=Qt.prototype,qb=ce["__core-js_shared__"],Vb=dke.toString,Dt=td.hasOwnProperty,fke=0,cH=function(){var l=/[^.]+$/.exec(qb&&qb.keys&&qb.keys.IE_PROTO||"");return l?"Symbol(src)_1."+l:""}(),Hb=td.toString,hke=Vb.call(Qt),mke=dn._,gke=$A("^"+Vb.call(Dt).replace(ju,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Mb=UV?ce.Buffer:e,Fc=ce.Symbol,Ub=ce.Uint8Array,uH=Mb?Mb.allocUnsafe:e,jb=oH(Qt.getPrototypeOf,Qt),lH=Qt.create,pH=td.propertyIsEnumerable,Xb=Db.splice,dH=Fc?Fc.isConcatSpreadable:e,sm=Fc?Fc.iterator:e,Ku=Fc?Fc.toStringTag:e,Yb=function(){try{var l=el(Qt,"defineProperty");return l({},"",{}),l}catch{}}(),yke=ce.clearTimeout!==dn.clearTimeout&&ce.clearTimeout,vke=Be&&Be.now!==dn.Date.now&&Be.now,bke=ce.setTimeout!==dn.setTimeout&&ce.setTimeout,Kb=rn.ceil,zb=rn.floor,QA=Qt.getOwnPropertySymbols,Ike=Mb?Mb.isBuffer:e,fH=ce.isFinite,_ke=Db.join,Cke=oH(Qt.keys,Qt),nn=rn.max,Wn=rn.min,xke=Be.now,Ske=ce.parseInt,hH=rn.random,wke=Db.reverse,eR=el(ce,"DataView"),om=el(ce,"Map"),tR=el(ce,"Promise"),rd=el(ce,"Set"),am=el(ce,"WeakMap"),cm=el(Qt,"create"),Jb=am&&new am,nd={},Eke=tl(eR),Ake=tl(om),Rke=tl(tR),Tke=tl(rd),Nke=tl(am),$b=Fc?Fc.prototype:e,um=$b?$b.valueOf:e,mH=$b?$b.toString:e;function O(l){if(Rr(l)&&!pt(l)&&!(l instanceof _t)){if(l instanceof ds)return l;if(Dt.call(l,"__wrapped__"))return gM(l)}return new ds(l)}var id=function(){function l(){}return function(f){if(!_r(f))return{};if(lH)return lH(f);l.prototype=f;var b=new l;return l.prototype=e,b}}();function Qb(){}function ds(l,f){this.__wrapped__=l,this.__actions__=[],this.__chain__=!!f,this.__index__=0,this.__values__=e}O.templateSettings={escape:em,evaluate:Di,interpolate:tm,variable:"",imports:{_:O}},O.prototype=Qb.prototype,O.prototype.constructor=O,ds.prototype=id(Qb.prototype),ds.prototype.constructor=ds;function _t(l){this.__wrapped__=l,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=he,this.__views__=[]}function Bke(){var l=new _t(this.__wrapped__);return l.__actions__=mi(this.__actions__),l.__dir__=this.__dir__,l.__filtered__=this.__filtered__,l.__iteratees__=mi(this.__iteratees__),l.__takeCount__=this.__takeCount__,l.__views__=mi(this.__views__),l}function kke(){if(this.__filtered__){var l=new _t(this);l.__dir__=-1,l.__filtered__=!0}else l=this.clone(),l.__dir__*=-1;return l}function Oke(){var l=this.__wrapped__.value(),f=this.__dir__,b=pt(l),C=f<0,N=b?l.length:0,W=UOe(0,N,this.__views__),U=W.start,X=W.end,Q=X-U,le=C?X:U-1,de=this.__iteratees__,ye=de.length,Ee=0,He=Wn(Q,this.__takeCount__);if(!b||!C&&N==Q&&He==Q)return PH(l,this.__actions__);var et=[];e:for(;Q--&&Ee<He;){le+=f;for(var mt=-1,tt=l[le];++mt<ye;){var It=de[mt],Et=It.iteratee,Ui=It.type,ri=Et(tt);if(Ui==M)tt=ri;else if(!ri){if(Ui==B)continue e;break e}}et[Ee++]=tt}return et}_t.prototype=id(Qb.prototype),_t.prototype.constructor=_t;function zu(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Gke(){this.__data__=cm?cm(null):{},this.size=0}function Fke(l){var f=this.has(l)&&delete this.__data__[l];return this.size-=f?1:0,f}function Lke(l){var f=this.__data__;if(cm){var b=f[l];return b===o?e:b}return Dt.call(f,l)?f[l]:e}function Zke(l){var f=this.__data__;return cm?f[l]!==e:Dt.call(f,l)}function Wke(l,f){var b=this.__data__;return this.size+=this.has(l)?0:1,b[l]=cm&&f===e?o:f,this}zu.prototype.clear=Gke,zu.prototype.delete=Fke,zu.prototype.get=Lke,zu.prototype.has=Zke,zu.prototype.set=Wke;function wa(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Pke(){this.__data__=[],this.size=0}function Dke(l){var f=this.__data__,b=eI(f,l);if(b<0)return!1;var C=f.length-1;return b==C?f.pop():Xb.call(f,b,1),--this.size,!0}function qke(l){var f=this.__data__,b=eI(f,l);return b<0?e:f[b][1]}function Vke(l){return eI(this.__data__,l)>-1}function Hke(l,f){var b=this.__data__,C=eI(b,l);return C<0?(++this.size,b.push([l,f])):b[C][1]=f,this}wa.prototype.clear=Pke,wa.prototype.delete=Dke,wa.prototype.get=qke,wa.prototype.has=Vke,wa.prototype.set=Hke;function Ea(l){var f=-1,b=l==null?0:l.length;for(this.clear();++f<b;){var C=l[f];this.set(C[0],C[1])}}function Mke(){this.size=0,this.__data__={hash:new zu,map:new(om||wa),string:new zu}}function Uke(l){var f=dI(this,l).delete(l);return this.size-=f?1:0,f}function jke(l){return dI(this,l).get(l)}function Xke(l){return dI(this,l).has(l)}function Yke(l,f){var b=dI(this,l),C=b.size;return b.set(l,f),this.size+=b.size==C?0:1,this}Ea.prototype.clear=Mke,Ea.prototype.delete=Uke,Ea.prototype.get=jke,Ea.prototype.has=Xke,Ea.prototype.set=Yke;function Ju(l){var f=-1,b=l==null?0:l.length;for(this.__data__=new Ea;++f<b;)this.add(l[f])}function Kke(l){return this.__data__.set(l,o),this}function zke(l){return this.__data__.has(l)}Ju.prototype.add=Ju.prototype.push=Kke,Ju.prototype.has=zke;function zs(l){var f=this.__data__=new wa(l);this.size=f.size}function Jke(){this.__data__=new wa,this.size=0}function $ke(l){var f=this.__data__,b=f.delete(l);return this.size=f.size,b}function Qke(l){return this.__data__.get(l)}function eOe(l){return this.__data__.has(l)}function tOe(l,f){var b=this.__data__;if(b instanceof wa){var C=b.__data__;if(!om||C.length<r-1)return C.push([l,f]),this.size=++b.size,this;b=this.__data__=new Ea(C)}return b.set(l,f),this.size=b.size,this}zs.prototype.clear=Jke,zs.prototype.delete=$ke,zs.prototype.get=Qke,zs.prototype.has=eOe,zs.prototype.set=tOe;function gH(l,f){var b=pt(l),C=!b&&rl(l),N=!b&&!C&&Dc(l),W=!b&&!C&&!N&&cd(l),U=b||C||N||W,X=U?KA(l.length,pke):[],Q=X.length;for(var le in l)(f||Dt.call(l,le))&&!(U&&(le=="length"||N&&(le=="offset"||le=="parent")||W&&(le=="buffer"||le=="byteLength"||le=="byteOffset")||Na(le,Q)))&&X.push(le);return X}function yH(l){var f=l.length;return f?l[dR(0,f-1)]:e}function rOe(l,f){return fI(mi(l),$u(f,0,l.length))}function nOe(l){return fI(mi(l))}function rR(l,f,b){(b!==e&&!Js(l[f],b)||b===e&&!(f in l))&&Aa(l,f,b)}function lm(l,f,b){var C=l[f];(!(Dt.call(l,f)&&Js(C,b))||b===e&&!(f in l))&&Aa(l,f,b)}function eI(l,f){for(var b=l.length;b--;)if(Js(l[b][0],f))return b;return-1}function iOe(l,f,b,C){return Lc(l,function(N,W,U){f(C,N,b(N),U)}),C}function vH(l,f){return l&&Eo(f,fn(f),l)}function sOe(l,f){return l&&Eo(f,yi(f),l)}function Aa(l,f,b){f=="__proto__"&&Yb?Yb(l,f,{configurable:!0,enumerable:!0,value:b,writable:!0}):l[f]=b}function nR(l,f){for(var b=-1,C=f.length,N=se(C),W=l==null;++b<C;)N[b]=W?e:ZR(l,f[b]);return N}function $u(l,f,b){return l===l&&(b!==e&&(l=l<=b?l:b),f!==e&&(l=l>=f?l:f)),l}function fs(l,f,b,C,N,W){var U,X=f&p,Q=f&d,le=f&h;if(b&&(U=N?b(l,C,N,W):b(l)),U!==e)return U;if(!_r(l))return l;var de=pt(l);if(de){if(U=XOe(l),!X)return mi(l,U)}else{var ye=Pn(l),Ee=ye==Z||ye==R;if(Dc(l))return VH(l,X);if(ye==ze||ye==Oe||Ee&&!N){if(U=Q||Ee?{}:aM(l),!X)return Q?LOe(l,sOe(U,l)):FOe(l,vH(U,l))}else{if(!nr[ye])return N?l:{};U=YOe(l,ye,X)}}W||(W=new zs);var He=W.get(l);if(He)return He;W.set(l,U),LM(l)?l.forEach(function(tt){U.add(fs(tt,f,b,tt,l,W))}):GM(l)&&l.forEach(function(tt,It){U.set(It,fs(tt,f,b,It,l,W))});var et=le?Q?xR:CR:Q?yi:fn,mt=de?e:et(l);return ls(mt||l,function(tt,It){mt&&(It=tt,tt=l[It]),lm(U,It,fs(tt,f,b,It,l,W))}),U}function oOe(l){var f=fn(l);return function(b){return bH(b,l,f)}}function bH(l,f,b){var C=b.length;if(l==null)return!C;for(l=Qt(l);C--;){var N=b[C],W=f[N],U=l[N];if(U===e&&!(N in l)||!W(U))return!1}return!0}function IH(l,f,b){if(typeof l!="function")throw new ps(i);return ym(function(){l.apply(e,b)},f)}function pm(l,f,b,C){var N=-1,W=Zb,U=!0,X=l.length,Q=[],le=f.length;if(!X)return Q;b&&(f=ur(f,Vi(b))),C?(W=HA,U=!1):f.length>=r&&(W=im,U=!1,f=new Ju(f));e:for(;++N<X;){var de=l[N],ye=b==null?de:b(de);if(de=C||de!==0?de:0,U&&ye===ye){for(var Ee=le;Ee--;)if(f[Ee]===ye)continue e;Q.push(de)}else W(f,ye,C)||Q.push(de)}return Q}var Lc=XH(wo),_H=XH(sR,!0);function aOe(l,f){var b=!0;return Lc(l,function(C,N,W){return b=!!f(C,N,W),b}),b}function tI(l,f,b){for(var C=-1,N=l.length;++C<N;){var W=l[C],U=f(W);if(U!=null&&(X===e?U===U&&!Mi(U):b(U,X)))var X=U,Q=W}return Q}function cOe(l,f,b,C){var N=l.length;for(b=ht(b),b<0&&(b=-b>N?0:N+b),C=C===e||C>N?N:ht(C),C<0&&(C+=N),C=b>C?0:WM(C);b<C;)l[b++]=f;return l}function CH(l,f){var b=[];return Lc(l,function(C,N,W){f(C,N,W)&&b.push(C)}),b}function Sn(l,f,b,C,N){var W=-1,U=l.length;for(b||(b=zOe),N||(N=[]);++W<U;){var X=l[W];f>0&&b(X)?f>1?Sn(X,f-1,b,C,N):kc(N,X):C||(N[N.length]=X)}return N}var iR=YH(),xH=YH(!0);function wo(l,f){return l&&iR(l,f,fn)}function sR(l,f){return l&&xH(l,f,fn)}function rI(l,f){return Bc(f,function(b){return Ba(l[b])})}function Qu(l,f){f=Wc(f,l);for(var b=0,C=f.length;l!=null&&b<C;)l=l[Ao(f[b++])];return b&&b==C?l:e}function SH(l,f,b){var C=f(l);return pt(l)?C:kc(C,b(l))}function ei(l){return l==null?l===e?Yp:rt:Ku&&Ku in Qt(l)?MOe(l):nGe(l)}function oR(l,f){return l>f}function uOe(l,f){return l!=null&&Dt.call(l,f)}function lOe(l,f){return l!=null&&f in Qt(l)}function pOe(l,f,b){return l>=Wn(f,b)&&l<nn(f,b)}function aR(l,f,b){for(var C=b?HA:Zb,N=l[0].length,W=l.length,U=W,X=se(W),Q=1/0,le=[];U--;){var de=l[U];U&&f&&(de=ur(de,Vi(f))),Q=Wn(de.length,Q),X[U]=!b&&(f||N>=120&&de.length>=120)?new Ju(U&&de):e}de=l[0];var ye=-1,Ee=X[0];e:for(;++ye<N&&le.length<Q;){var He=de[ye],et=f?f(He):He;if(He=b||He!==0?He:0,!(Ee?im(Ee,et):C(le,et,b))){for(U=W;--U;){var mt=X[U];if(!(mt?im(mt,et):C(l[U],et,b)))continue e}Ee&&Ee.push(et),le.push(He)}}return le}function dOe(l,f,b,C){return wo(l,function(N,W,U){f(C,b(N),W,U)}),C}function dm(l,f,b){f=Wc(f,l),l=pM(l,f);var C=l==null?l:l[Ao(ms(f))];return C==null?e:qi(C,l,b)}function wH(l){return Rr(l)&&ei(l)==Oe}function fOe(l){return Rr(l)&&ei(l)==So}function hOe(l){return Rr(l)&&ei(l)==gt}function fm(l,f,b,C,N){return l===f?!0:l==null||f==null||!Rr(l)&&!Rr(f)?l!==l&&f!==f:mOe(l,f,b,C,fm,N)}function mOe(l,f,b,C,N,W){var U=pt(l),X=pt(f),Q=U?Xe:Pn(l),le=X?Xe:Pn(f);Q=Q==Oe?ze:Q,le=le==Oe?ze:le;var de=Q==ze,ye=le==ze,Ee=Q==le;if(Ee&&Dc(l)){if(!Dc(f))return!1;U=!0,de=!1}if(Ee&&!de)return W||(W=new zs),U||cd(l)?iM(l,f,b,C,N,W):VOe(l,f,Q,b,C,N,W);if(!(b&m)){var He=de&&Dt.call(l,"__wrapped__"),et=ye&&Dt.call(f,"__wrapped__");if(He||et){var mt=He?l.value():l,tt=et?f.value():f;return W||(W=new zs),N(mt,tt,b,C,W)}}return Ee?(W||(W=new zs),HOe(l,f,b,C,N,W)):!1}function gOe(l){return Rr(l)&&Pn(l)==ne}function cR(l,f,b,C){var N=b.length,W=N,U=!C;if(l==null)return!W;for(l=Qt(l);N--;){var X=b[N];if(U&&X[2]?X[1]!==l[X[0]]:!(X[0]in l))return!1}for(;++N<W;){X=b[N];var Q=X[0],le=l[Q],de=X[1];if(U&&X[2]){if(le===e&&!(Q in l))return!1}else{var ye=new zs;if(C)var Ee=C(le,de,Q,l,f,ye);if(!(Ee===e?fm(de,le,m|g,C,ye):Ee))return!1}}return!0}function EH(l){if(!_r(l)||$Oe(l))return!1;var f=Ba(l)?gke:o2e;return f.test(tl(l))}function yOe(l){return Rr(l)&&ei(l)==Yr}function vOe(l){return Rr(l)&&Pn(l)==We}function bOe(l){return Rr(l)&&bI(l.length)&&!!ar[ei(l)]}function AH(l){return typeof l=="function"?l:l==null?vi:typeof l=="object"?pt(l)?NH(l[0],l[1]):TH(l):KM(l)}function uR(l){if(!gm(l))return Cke(l);var f=[];for(var b in Qt(l))Dt.call(l,b)&&b!="constructor"&&f.push(b);return f}function IOe(l){if(!_r(l))return rGe(l);var f=gm(l),b=[];for(var C in l)C=="constructor"&&(f||!Dt.call(l,C))||b.push(C);return b}function lR(l,f){return l<f}function RH(l,f){var b=-1,C=gi(l)?se(l.length):[];return Lc(l,function(N,W,U){C[++b]=f(N,W,U)}),C}function TH(l){var f=wR(l);return f.length==1&&f[0][2]?uM(f[0][0],f[0][1]):function(b){return b===l||cR(b,l,f)}}function NH(l,f){return AR(l)&&cM(f)?uM(Ao(l),f):function(b){var C=ZR(b,l);return C===e&&C===f?WR(b,l):fm(f,C,m|g)}}function nI(l,f,b,C,N){l!==f&&iR(f,function(W,U){if(N||(N=new zs),_r(W))_Oe(l,f,U,b,nI,C,N);else{var X=C?C(TR(l,U),W,U+"",l,f,N):e;X===e&&(X=W),rR(l,U,X)}},yi)}function _Oe(l,f,b,C,N,W,U){var X=TR(l,b),Q=TR(f,b),le=U.get(Q);if(le){rR(l,b,le);return}var de=W?W(X,Q,b+"",l,f,U):e,ye=de===e;if(ye){var Ee=pt(Q),He=!Ee&&Dc(Q),et=!Ee&&!He&&cd(Q);de=Q,Ee||He||et?pt(X)?de=X:Fr(X)?de=mi(X):He?(ye=!1,de=VH(Q,!0)):et?(ye=!1,de=HH(Q,!0)):de=[]:vm(Q)||rl(Q)?(de=X,rl(X)?de=PM(X):(!_r(X)||Ba(X))&&(de=aM(Q))):ye=!1}ye&&(U.set(Q,de),N(de,Q,C,W,U),U.delete(Q)),rR(l,b,de)}function BH(l,f){var b=l.length;if(b)return f+=f<0?b:0,Na(f,b)?l[f]:e}function kH(l,f,b){f.length?f=ur(f,function(W){return pt(W)?function(U){return Qu(U,W.length===1?W[0]:W)}:W}):f=[vi];var C=-1;f=ur(f,Vi(Je()));var N=RH(l,function(W,U,X){var Q=ur(f,function(le){return le(W)});return{criteria:Q,index:++C,value:W}});return Y2e(N,function(W,U){return GOe(W,U,b)})}function COe(l,f){return OH(l,f,function(b,C){return WR(l,C)})}function OH(l,f,b){for(var C=-1,N=f.length,W={};++C<N;){var U=f[C],X=Qu(l,U);b(X,U)&&hm(W,Wc(U,l),X)}return W}function xOe(l){return function(f){return Qu(f,l)}}function pR(l,f,b,C){var N=C?X2e:$p,W=-1,U=f.length,X=l;for(l===f&&(f=mi(f)),b&&(X=ur(l,Vi(b)));++W<U;)for(var Q=0,le=f[W],de=b?b(le):le;(Q=N(X,de,Q,C))>-1;)X!==l&&Xb.call(X,Q,1),Xb.call(l,Q,1);return l}function GH(l,f){for(var b=l?f.length:0,C=b-1;b--;){var N=f[b];if(b==C||N!==W){var W=N;Na(N)?Xb.call(l,N,1):mR(l,N)}}return l}function dR(l,f){return l+zb(hH()*(f-l+1))}function SOe(l,f,b,C){for(var N=-1,W=nn(Kb((f-l)/(b||1)),0),U=se(W);W--;)U[C?W:++N]=l,l+=b;return U}function fR(l,f){var b="";if(!l||f<1||f>q)return b;do f%2&&(b+=l),f=zb(f/2),f&&(l+=l);while(f);return b}function yt(l,f){return NR(lM(l,f,vi),l+"")}function wOe(l){return yH(ud(l))}function EOe(l,f){var b=ud(l);return fI(b,$u(f,0,b.length))}function hm(l,f,b,C){if(!_r(l))return l;f=Wc(f,l);for(var N=-1,W=f.length,U=W-1,X=l;X!=null&&++N<W;){var Q=Ao(f[N]),le=b;if(Q==="__proto__"||Q==="constructor"||Q==="prototype")return l;if(N!=U){var de=X[Q];le=C?C(de,Q,X):e,le===e&&(le=_r(de)?de:Na(f[N+1])?[]:{})}lm(X,Q,le),X=X[Q]}return l}var FH=Jb?function(l,f){return Jb.set(l,f),l}:vi,AOe=Yb?function(l,f){return Yb(l,"toString",{configurable:!0,enumerable:!1,value:DR(f),writable:!0})}:vi;function ROe(l){return fI(ud(l))}function hs(l,f,b){var C=-1,N=l.length;f<0&&(f=-f>N?0:N+f),b=b>N?N:b,b<0&&(b+=N),N=f>b?0:b-f>>>0,f>>>=0;for(var W=se(N);++C<N;)W[C]=l[C+f];return W}function TOe(l,f){var b;return Lc(l,function(C,N,W){return b=f(C,N,W),!b}),!!b}function iI(l,f,b){var C=0,N=l==null?C:l.length;if(typeof f=="number"&&f===f&&N<=Se){for(;C<N;){var W=C+N>>>1,U=l[W];U!==null&&!Mi(U)&&(b?U<=f:U<f)?C=W+1:N=W}return N}return hR(l,f,vi,b)}function hR(l,f,b,C){var N=0,W=l==null?0:l.length;if(W===0)return 0;f=b(f);for(var U=f!==f,X=f===null,Q=Mi(f),le=f===e;N<W;){var de=zb((N+W)/2),ye=b(l[de]),Ee=ye!==e,He=ye===null,et=ye===ye,mt=Mi(ye);if(U)var tt=C||et;else le?tt=et&&(C||Ee):X?tt=et&&Ee&&(C||!He):Q?tt=et&&Ee&&!He&&(C||!mt):He||mt?tt=!1:tt=C?ye<=f:ye<f;tt?N=de+1:W=de}return Wn(W,fe)}function LH(l,f){for(var b=-1,C=l.length,N=0,W=[];++b<C;){var U=l[b],X=f?f(U):U;if(!b||!Js(X,Q)){var Q=X;W[N++]=U===0?0:U}}return W}function ZH(l){return typeof l=="number"?l:Mi(l)?z:+l}function Hi(l){if(typeof l=="string")return l;if(pt(l))return ur(l,Hi)+"";if(Mi(l))return mH?mH.call(l):"";var f=l+"";return f=="0"&&1/l==-V?"-0":f}function Zc(l,f,b){var C=-1,N=Zb,W=l.length,U=!0,X=[],Q=X;if(b)U=!1,N=HA;else if(W>=r){var le=f?null:DOe(l);if(le)return Pb(le);U=!1,N=im,Q=new Ju}else Q=f?[]:X;e:for(;++C<W;){var de=l[C],ye=f?f(de):de;if(de=b||de!==0?de:0,U&&ye===ye){for(var Ee=Q.length;Ee--;)if(Q[Ee]===ye)continue e;f&&Q.push(ye),X.push(de)}else N(Q,ye,b)||(Q!==X&&Q.push(ye),X.push(de))}return X}function mR(l,f){return f=Wc(f,l),l=pM(l,f),l==null||delete l[Ao(ms(f))]}function WH(l,f,b,C){return hm(l,f,b(Qu(l,f)),C)}function sI(l,f,b,C){for(var N=l.length,W=C?N:-1;(C?W--:++W<N)&&f(l[W],W,l););return b?hs(l,C?0:W,C?W+1:N):hs(l,C?W+1:0,C?N:W)}function PH(l,f){var b=l;return b instanceof _t&&(b=b.value()),MA(f,function(C,N){return N.func.apply(N.thisArg,kc([C],N.args))},b)}function gR(l,f,b){var C=l.length;if(C<2)return C?Zc(l[0]):[];for(var N=-1,W=se(C);++N<C;)for(var U=l[N],X=-1;++X<C;)X!=N&&(W[N]=pm(W[N]||U,l[X],f,b));return Zc(Sn(W,1),f,b)}function DH(l,f,b){for(var C=-1,N=l.length,W=f.length,U={};++C<N;){var X=C<W?f[C]:e;b(U,l[C],X)}return U}function yR(l){return Fr(l)?l:[]}function vR(l){return typeof l=="function"?l:vi}function Wc(l,f){return pt(l)?l:AR(l,f)?[l]:mM(Zt(l))}var NOe=yt;function Pc(l,f,b){var C=l.length;return b=b===e?C:b,!f&&b>=C?l:hs(l,f,b)}var qH=yke||function(l){return dn.clearTimeout(l)};function VH(l,f){if(f)return l.slice();var b=l.length,C=uH?uH(b):new l.constructor(b);return l.copy(C),C}function bR(l){var f=new l.constructor(l.byteLength);return new Ub(f).set(new Ub(l)),f}function BOe(l,f){var b=f?bR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.byteLength)}function kOe(l){var f=new l.constructor(l.source,wV.exec(l));return f.lastIndex=l.lastIndex,f}function OOe(l){return um?Qt(um.call(l)):{}}function HH(l,f){var b=f?bR(l.buffer):l.buffer;return new l.constructor(b,l.byteOffset,l.length)}function MH(l,f){if(l!==f){var b=l!==e,C=l===null,N=l===l,W=Mi(l),U=f!==e,X=f===null,Q=f===f,le=Mi(f);if(!X&&!le&&!W&&l>f||W&&U&&Q&&!X&&!le||C&&U&&Q||!b&&Q||!N)return 1;if(!C&&!W&&!le&&l<f||le&&b&&N&&!C&&!W||X&&b&&N||!U&&N||!Q)return-1}return 0}function GOe(l,f,b){for(var C=-1,N=l.criteria,W=f.criteria,U=N.length,X=b.length;++C<U;){var Q=MH(N[C],W[C]);if(Q){if(C>=X)return Q;var le=b[C];return Q*(le=="desc"?-1:1)}}return l.index-f.index}function UH(l,f,b,C){for(var N=-1,W=l.length,U=b.length,X=-1,Q=f.length,le=nn(W-U,0),de=se(Q+le),ye=!C;++X<Q;)de[X]=f[X];for(;++N<U;)(ye||N<W)&&(de[b[N]]=l[N]);for(;le--;)de[X++]=l[N++];return de}function jH(l,f,b,C){for(var N=-1,W=l.length,U=-1,X=b.length,Q=-1,le=f.length,de=nn(W-X,0),ye=se(de+le),Ee=!C;++N<de;)ye[N]=l[N];for(var He=N;++Q<le;)ye[He+Q]=f[Q];for(;++U<X;)(Ee||N<W)&&(ye[He+b[U]]=l[N++]);return ye}function mi(l,f){var b=-1,C=l.length;for(f||(f=se(C));++b<C;)f[b]=l[b];return f}function Eo(l,f,b,C){var N=!b;b||(b={});for(var W=-1,U=f.length;++W<U;){var X=f[W],Q=C?C(b[X],l[X],X,b,l):e;Q===e&&(Q=l[X]),N?Aa(b,X,Q):lm(b,X,Q)}return b}function FOe(l,f){return Eo(l,ER(l),f)}function LOe(l,f){return Eo(l,sM(l),f)}function oI(l,f){return function(b,C){var N=pt(b)?q2e:iOe,W=f?f():{};return N(b,l,Je(C,2),W)}}function sd(l){return yt(function(f,b){var C=-1,N=b.length,W=N>1?b[N-1]:e,U=N>2?b[2]:e;for(W=l.length>3&&typeof W=="function"?(N--,W):e,U&&ti(b[0],b[1],U)&&(W=N<3?e:W,N=1),f=Qt(f);++C<N;){var X=b[C];X&&l(f,X,C,W)}return f})}function XH(l,f){return function(b,C){if(b==null)return b;if(!gi(b))return l(b,C);for(var N=b.length,W=f?N:-1,U=Qt(b);(f?W--:++W<N)&&C(U[W],W,U)!==!1;);return b}}function YH(l){return function(f,b,C){for(var N=-1,W=Qt(f),U=C(f),X=U.length;X--;){var Q=U[l?X:++N];if(b(W[Q],Q,W)===!1)break}return f}}function ZOe(l,f,b){var C=f&v,N=mm(l);function W(){var U=this&&this!==dn&&this instanceof W?N:l;return U.apply(C?b:this,arguments)}return W}function KH(l){return function(f){f=Zt(f);var b=Qp(f)?Ks(f):e,C=b?b[0]:f.charAt(0),N=b?Pc(b,1).join(""):f.slice(1);return C[l]()+N}}function od(l){return function(f){return MA(XM(jM(f).replace(A2e,"")),l,"")}}function mm(l){return function(){var f=arguments;switch(f.length){case 0:return new l;case 1:return new l(f[0]);case 2:return new l(f[0],f[1]);case 3:return new l(f[0],f[1],f[2]);case 4:return new l(f[0],f[1],f[2],f[3]);case 5:return new l(f[0],f[1],f[2],f[3],f[4]);case 6:return new l(f[0],f[1],f[2],f[3],f[4],f[5]);case 7:return new l(f[0],f[1],f[2],f[3],f[4],f[5],f[6])}var b=id(l.prototype),C=l.apply(b,f);return _r(C)?C:b}}function WOe(l,f,b){var C=mm(l);function N(){for(var W=arguments.length,U=se(W),X=W,Q=ad(N);X--;)U[X]=arguments[X];var le=W<3&&U[0]!==Q&&U[W-1]!==Q?[]:Oc(U,Q);if(W-=le.length,W<b)return eM(l,f,aI,N.placeholder,e,U,le,e,e,b-W);var de=this&&this!==dn&&this instanceof N?C:l;return qi(de,this,U)}return N}function zH(l){return function(f,b,C){var N=Qt(f);if(!gi(f)){var W=Je(b,3);f=fn(f),b=function(X){return W(N[X],X,N)}}var U=l(f,b,C);return U>-1?N[W?f[U]:U]:e}}function JH(l){return Ta(function(f){var b=f.length,C=b,N=ds.prototype.thru;for(l&&f.reverse();C--;){var W=f[C];if(typeof W!="function")throw new ps(i);if(N&&!U&&pI(W)=="wrapper")var U=new ds([],!0)}for(C=U?C:b;++C<b;){W=f[C];var X=pI(W),Q=X=="wrapper"?SR(W):e;Q&&RR(Q[0])&&Q[1]==(w|_|E|T)&&!Q[4].length&&Q[9]==1?U=U[pI(Q[0])].apply(U,Q[3]):U=W.length==1&&RR(W)?U[X]():U.thru(W)}return function(){var le=arguments,de=le[0];if(U&&le.length==1&&pt(de))return U.plant(de).value();for(var ye=0,Ee=b?f[ye].apply(this,le):de;++ye<b;)Ee=f[ye].call(this,Ee);return Ee}})}function aI(l,f,b,C,N,W,U,X,Q,le){var de=f&w,ye=f&v,Ee=f&I,He=f&(_|A),et=f&D,mt=Ee?e:mm(l);function tt(){for(var It=arguments.length,Et=se(It),Ui=It;Ui--;)Et[Ui]=arguments[Ui];if(He)var ri=ad(tt),ji=z2e(Et,ri);if(C&&(Et=UH(Et,C,N,He)),W&&(Et=jH(Et,W,U,He)),It-=ji,He&&It<le){var Lr=Oc(Et,ri);return eM(l,f,aI,tt.placeholder,b,Et,Lr,X,Q,le-It)}var $s=ye?b:this,Oa=Ee?$s[l]:l;return It=Et.length,X?Et=iGe(Et,X):et&&It>1&&Et.reverse(),de&&Q<It&&(Et.length=Q),this&&this!==dn&&this instanceof tt&&(Oa=mt||mm(Oa)),Oa.apply($s,Et)}return tt}function $H(l,f){return function(b,C){return dOe(b,l,f(C),{})}}function cI(l,f){return function(b,C){var N;if(b===e&&C===e)return f;if(b!==e&&(N=b),C!==e){if(N===e)return C;typeof b=="string"||typeof C=="string"?(b=Hi(b),C=Hi(C)):(b=ZH(b),C=ZH(C)),N=l(b,C)}return N}}function IR(l){return Ta(function(f){return f=ur(f,Vi(Je())),yt(function(b){var C=this;return l(f,function(N){return qi(N,C,b)})})})}function uI(l,f){f=f===e?" ":Hi(f);var b=f.length;if(b<2)return b?fR(f,l):f;var C=fR(f,Kb(l/ed(f)));return Qp(f)?Pc(Ks(C),0,l).join(""):C.slice(0,l)}function POe(l,f,b,C){var N=f&v,W=mm(l);function U(){for(var X=-1,Q=arguments.length,le=-1,de=C.length,ye=se(de+Q),Ee=this&&this!==dn&&this instanceof U?W:l;++le<de;)ye[le]=C[le];for(;Q--;)ye[le++]=arguments[++X];return qi(Ee,N?b:this,ye)}return U}function QH(l){return function(f,b,C){return C&&typeof C!="number"&&ti(f,b,C)&&(b=C=e),f=ka(f),b===e?(b=f,f=0):b=ka(b),C=C===e?f<b?1:-1:ka(C),SOe(f,b,C,l)}}function lI(l){return function(f,b){return typeof f=="string"&&typeof b=="string"||(f=gs(f),b=gs(b)),l(f,b)}}function eM(l,f,b,C,N,W,U,X,Q,le){var de=f&_,ye=de?U:e,Ee=de?e:U,He=de?W:e,et=de?e:W;f|=de?E:S,f&=~(de?S:E),f&x||(f&=~(v|I));var mt=[l,f,N,He,ye,et,Ee,X,Q,le],tt=b.apply(e,mt);return RR(l)&&dM(tt,mt),tt.placeholder=C,fM(tt,l,f)}function _R(l){var f=rn[l];return function(b,C){if(b=gs(b),C=C==null?0:Wn(ht(C),292),C&&fH(b)){var N=(Zt(b)+"e").split("e"),W=f(N[0]+"e"+(+N[1]+C));return N=(Zt(W)+"e").split("e"),+(N[0]+"e"+(+N[1]-C))}return f(b)}}var DOe=rd&&1/Pb(new rd([,-0]))[1]==V?function(l){return new rd(l)}:HR;function tM(l){return function(f){var b=Pn(f);return b==ne?JA(f):b==We?nke(f):K2e(f,l(f))}}function Ra(l,f,b,C,N,W,U,X){var Q=f&I;if(!Q&&typeof l!="function")throw new ps(i);var le=C?C.length:0;if(le||(f&=~(E|S),C=N=e),U=U===e?U:nn(ht(U),0),X=X===e?X:ht(X),le-=N?N.length:0,f&S){var de=C,ye=N;C=N=e}var Ee=Q?e:SR(l),He=[l,f,b,C,N,de,ye,W,U,X];if(Ee&&tGe(He,Ee),l=He[0],f=He[1],b=He[2],C=He[3],N=He[4],X=He[9]=He[9]===e?Q?0:l.length:nn(He[9]-le,0),!X&&f&(_|A)&&(f&=~(_|A)),!f||f==v)var et=ZOe(l,f,b);else f==_||f==A?et=WOe(l,f,X):(f==E||f==(v|E))&&!N.length?et=POe(l,f,b,C):et=aI.apply(e,He);var mt=Ee?FH:dM;return fM(mt(et,He),l,f)}function rM(l,f,b,C){return l===e||Js(l,td[b])&&!Dt.call(C,b)?f:l}function nM(l,f,b,C,N,W){return _r(l)&&_r(f)&&(W.set(f,l),nI(l,f,e,nM,W),W.delete(f)),l}function qOe(l){return vm(l)?e:l}function iM(l,f,b,C,N,W){var U=b&m,X=l.length,Q=f.length;if(X!=Q&&!(U&&Q>X))return!1;var le=W.get(l),de=W.get(f);if(le&&de)return le==f&&de==l;var ye=-1,Ee=!0,He=b&g?new Ju:e;for(W.set(l,f),W.set(f,l);++ye<X;){var et=l[ye],mt=f[ye];if(C)var tt=U?C(mt,et,ye,f,l,W):C(et,mt,ye,l,f,W);if(tt!==e){if(tt)continue;Ee=!1;break}if(He){if(!UA(f,function(It,Et){if(!im(He,Et)&&(et===It||N(et,It,b,C,W)))return He.push(Et)})){Ee=!1;break}}else if(!(et===mt||N(et,mt,b,C,W))){Ee=!1;break}}return W.delete(l),W.delete(f),Ee}function VOe(l,f,b,C,N,W,U){switch(b){case G:if(l.byteLength!=f.byteLength||l.byteOffset!=f.byteOffset)return!1;l=l.buffer,f=f.buffer;case So:return!(l.byteLength!=f.byteLength||!W(new Ub(l),new Ub(f)));case Re:case gt:case J:return Js(+l,+f);case _e:return l.name==f.name&&l.message==f.message;case Yr:case $t:return l==f+"";case ne:var X=JA;case We:var Q=C&m;if(X||(X=Pb),l.size!=f.size&&!Q)return!1;var le=U.get(l);if(le)return le==f;C|=g,U.set(l,f);var de=iM(X(l),X(f),C,N,W,U);return U.delete(l),de;case xn:if(um)return um.call(l)==um.call(f)}return!1}function HOe(l,f,b,C,N,W){var U=b&m,X=CR(l),Q=X.length,le=CR(f),de=le.length;if(Q!=de&&!U)return!1;for(var ye=Q;ye--;){var Ee=X[ye];if(!(U?Ee in f:Dt.call(f,Ee)))return!1}var He=W.get(l),et=W.get(f);if(He&&et)return He==f&&et==l;var mt=!0;W.set(l,f),W.set(f,l);for(var tt=U;++ye<Q;){Ee=X[ye];var It=l[Ee],Et=f[Ee];if(C)var Ui=U?C(Et,It,Ee,f,l,W):C(It,Et,Ee,l,f,W);if(!(Ui===e?It===Et||N(It,Et,b,C,W):Ui)){mt=!1;break}tt||(tt=Ee=="constructor")}if(mt&&!tt){var ri=l.constructor,ji=f.constructor;ri!=ji&&"constructor"in l&&"constructor"in f&&!(typeof ri=="function"&&ri instanceof ri&&typeof ji=="function"&&ji instanceof ji)&&(mt=!1)}return W.delete(l),W.delete(f),mt}function Ta(l){return NR(lM(l,e,bM),l+"")}function CR(l){return SH(l,fn,ER)}function xR(l){return SH(l,yi,sM)}var SR=Jb?function(l){return Jb.get(l)}:HR;function pI(l){for(var f=l.name+"",b=nd[f],C=Dt.call(nd,f)?b.length:0;C--;){var N=b[C],W=N.func;if(W==null||W==l)return N.name}return f}function ad(l){var f=Dt.call(O,"placeholder")?O:l;return f.placeholder}function Je(){var l=O.iteratee||qR;return l=l===qR?AH:l,arguments.length?l(arguments[0],arguments[1]):l}function dI(l,f){var b=l.__data__;return JOe(f)?b[typeof f=="string"?"string":"hash"]:b.map}function wR(l){for(var f=fn(l),b=f.length;b--;){var C=f[b],N=l[C];f[b]=[C,N,cM(N)]}return f}function el(l,f){var b=eke(l,f);return EH(b)?b:e}function MOe(l){var f=Dt.call(l,Ku),b=l[Ku];try{l[Ku]=e;var C=!0}catch{}var N=Hb.call(l);return C&&(f?l[Ku]=b:delete l[Ku]),N}var ER=QA?function(l){return l==null?[]:(l=Qt(l),Bc(QA(l),function(f){return pH.call(l,f)}))}:MR,sM=QA?function(l){for(var f=[];l;)kc(f,ER(l)),l=jb(l);return f}:MR,Pn=ei;(eR&&Pn(new eR(new ArrayBuffer(1)))!=G||om&&Pn(new om)!=ne||tR&&Pn(tR.resolve())!=Yt||rd&&Pn(new rd)!=We||am&&Pn(new am)!=xo)&&(Pn=function(l){var f=ei(l),b=f==ze?l.constructor:e,C=b?tl(b):"";if(C)switch(C){case Eke:return G;case Ake:return ne;case Rke:return Yt;case Tke:return We;case Nke:return xo}return f});function UOe(l,f,b){for(var C=-1,N=b.length;++C<N;){var W=b[C],U=W.size;switch(W.type){case"drop":l+=U;break;case"dropRight":f-=U;break;case"take":f=Wn(f,l+U);break;case"takeRight":l=nn(l,f-U);break}}return{start:l,end:f}}function jOe(l){var f=l.match($1e);return f?f[1].split(Q1e):[]}function oM(l,f,b){f=Wc(f,l);for(var C=-1,N=f.length,W=!1;++C<N;){var U=Ao(f[C]);if(!(W=l!=null&&b(l,U)))break;l=l[U]}return W||++C!=N?W:(N=l==null?0:l.length,!!N&&bI(N)&&Na(U,N)&&(pt(l)||rl(l)))}function XOe(l){var f=l.length,b=new l.constructor(f);return f&&typeof l[0]=="string"&&Dt.call(l,"index")&&(b.index=l.index,b.input=l.input),b}function aM(l){return typeof l.constructor=="function"&&!gm(l)?id(jb(l)):{}}function YOe(l,f,b){var C=l.constructor;switch(f){case So:return bR(l);case Re:case gt:return new C(+l);case G:return BOe(l,b);case j:case K:case oe:case pe:case Te:case st:case bt:case tn:case Pi:return HH(l,b);case ne:return new C;case J:case $t:return new C(l);case Yr:return kOe(l);case We:return new C;case xn:return OOe(l)}}function KOe(l,f){var b=f.length;if(!b)return l;var C=b-1;return f[C]=(b>1?"& ":"")+f[C],f=f.join(b>2?", ":" "),l.replace(Ob,`{
156
156
  /* [wrapped with `+f+`] */
157
157
  `)}function zOe(l){return pt(l)||rl(l)||!!(dH&&l&&l[dH])}function Na(l,f){var b=typeof l;return f=f??q,!!f&&(b=="number"||b!="symbol"&&c2e.test(l))&&l>-1&&l%1==0&&l<f}function ti(l,f,b){if(!_r(b))return!1;var C=typeof f;return(C=="number"?gi(b)&&Na(f,b.length):C=="string"&&f in b)?Js(b[f],l):!1}function AR(l,f){if(pt(l))return!1;var b=typeof l;return b=="number"||b=="symbol"||b=="boolean"||l==null||Mi(l)?!0:Bb.test(l)||!rm.test(l)||f!=null&&l in Qt(f)}function JOe(l){var f=typeof l;return f=="string"||f=="number"||f=="symbol"||f=="boolean"?l!=="__proto__":l===null}function RR(l){var f=pI(l),b=O[f];if(typeof b!="function"||!(f in _t.prototype))return!1;if(l===b)return!0;var C=SR(b);return!!C&&l===C[0]}function $Oe(l){return!!cH&&cH in l}var QOe=qb?Ba:UR;function gm(l){var f=l&&l.constructor,b=typeof f=="function"&&f.prototype||td;return l===b}function cM(l){return l===l&&!_r(l)}function uM(l,f){return function(b){return b==null?!1:b[l]===f&&(f!==e||l in Qt(b))}}function eGe(l){var f=yI(l,function(C){return b.size===a&&b.clear(),C}),b=f.cache;return f}function tGe(l,f){var b=l[1],C=f[1],N=b|C,W=N<(v|I|w),U=C==w&&b==_||C==w&&b==T&&l[7].length<=f[8]||C==(w|T)&&f[7].length<=f[8]&&b==_;if(!(W||U))return l;C&v&&(l[2]=f[2],N|=b&v?0:x);var X=f[3];if(X){var Q=l[3];l[3]=Q?UH(Q,X,f[4]):X,l[4]=Q?Oc(l[3],u):f[4]}return X=f[5],X&&(Q=l[5],l[5]=Q?jH(Q,X,f[6]):X,l[6]=Q?Oc(l[5],u):f[6]),X=f[7],X&&(l[7]=X),C&w&&(l[8]=l[8]==null?f[8]:Wn(l[8],f[8])),l[9]==null&&(l[9]=f[9]),l[0]=f[0],l[1]=N,l}function rGe(l){var f=[];if(l!=null)for(var b in Qt(l))f.push(b);return f}function nGe(l){return Hb.call(l)}function lM(l,f,b){return f=nn(f===e?l.length-1:f,0),function(){for(var C=arguments,N=-1,W=nn(C.length-f,0),U=se(W);++N<W;)U[N]=C[f+N];N=-1;for(var X=se(f+1);++N<f;)X[N]=C[N];return X[f]=b(U),qi(l,this,X)}}function pM(l,f){return f.length<2?l:Qu(l,hs(f,0,-1))}function iGe(l,f){for(var b=l.length,C=Wn(f.length,b),N=mi(l);C--;){var W=f[C];l[C]=Na(W,b)?N[W]:e}return l}function TR(l,f){if(!(f==="constructor"&&typeof l[f]=="function")&&f!="__proto__")return l[f]}var dM=hM(FH),ym=bke||function(l,f){return dn.setTimeout(l,f)},NR=hM(AOe);function fM(l,f,b){var C=f+"";return NR(l,KOe(C,sGe(jOe(C),b)))}function hM(l){var f=0,b=0;return function(){var C=xke(),N=F-(C-b);if(b=C,N>0){if(++f>=k)return arguments[0]}else f=0;return l.apply(e,arguments)}}function fI(l,f){var b=-1,C=l.length,N=C-1;for(f=f===e?C:f;++b<f;){var W=dR(b,N),U=l[W];l[W]=l[b],l[b]=U}return l.length=f,l}var mM=eGe(function(l){var f=[];return l.charCodeAt(0)===46&&f.push(""),l.replace(nm,function(b,C,N,W){f.push(N?W.replace(r2e,"$1"):C||b)}),f});function Ao(l){if(typeof l=="string"||Mi(l))return l;var f=l+"";return f=="0"&&1/l==-V?"-0":f}function tl(l){if(l!=null){try{return Vb.call(l)}catch{}try{return l+""}catch{}}return""}function sGe(l,f){return ls(De,function(b){var C="_."+b[0];f&b[1]&&!Zb(l,C)&&l.push(C)}),l.sort()}function gM(l){if(l instanceof _t)return l.clone();var f=new ds(l.__wrapped__,l.__chain__);return f.__actions__=mi(l.__actions__),f.__index__=l.__index__,f.__values__=l.__values__,f}function oGe(l,f,b){(b?ti(l,f,b):f===e)?f=1:f=nn(ht(f),0);var C=l==null?0:l.length;if(!C||f<1)return[];for(var N=0,W=0,U=se(Kb(C/f));N<C;)U[W++]=hs(l,N,N+=f);return U}function aGe(l){for(var f=-1,b=l==null?0:l.length,C=0,N=[];++f<b;){var W=l[f];W&&(N[C++]=W)}return N}function cGe(){var l=arguments.length;if(!l)return[];for(var f=se(l-1),b=arguments[0],C=l;C--;)f[C-1]=arguments[C];return kc(pt(b)?mi(b):[b],Sn(f,1))}var uGe=yt(function(l,f){return Fr(l)?pm(l,Sn(f,1,Fr,!0)):[]}),lGe=yt(function(l,f){var b=ms(f);return Fr(b)&&(b=e),Fr(l)?pm(l,Sn(f,1,Fr,!0),Je(b,2)):[]}),pGe=yt(function(l,f){var b=ms(f);return Fr(b)&&(b=e),Fr(l)?pm(l,Sn(f,1,Fr,!0),e,b):[]});function dGe(l,f,b){var C=l==null?0:l.length;return C?(f=b||f===e?1:ht(f),hs(l,f<0?0:f,C)):[]}function fGe(l,f,b){var C=l==null?0:l.length;return C?(f=b||f===e?1:ht(f),f=C-f,hs(l,0,f<0?0:f)):[]}function hGe(l,f){return l&&l.length?sI(l,Je(f,3),!0,!0):[]}function mGe(l,f){return l&&l.length?sI(l,Je(f,3),!0):[]}function gGe(l,f,b,C){var N=l==null?0:l.length;return N?(b&&typeof b!="number"&&ti(l,f,b)&&(b=0,C=N),cOe(l,f,b,C)):[]}function yM(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=b==null?0:ht(b);return N<0&&(N=nn(C+N,0)),Wb(l,Je(f,3),N)}function vM(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=C-1;return b!==e&&(N=ht(b),N=b<0?nn(C+N,0):Wn(N,C-1)),Wb(l,Je(f,3),N,!0)}function bM(l){var f=l==null?0:l.length;return f?Sn(l,1):[]}function yGe(l){var f=l==null?0:l.length;return f?Sn(l,V):[]}function vGe(l,f){var b=l==null?0:l.length;return b?(f=f===e?1:ht(f),Sn(l,f)):[]}function bGe(l){for(var f=-1,b=l==null?0:l.length,C={};++f<b;){var N=l[f];C[N[0]]=N[1]}return C}function IM(l){return l&&l.length?l[0]:e}function IGe(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=b==null?0:ht(b);return N<0&&(N=nn(C+N,0)),$p(l,f,N)}function _Ge(l){var f=l==null?0:l.length;return f?hs(l,0,-1):[]}var CGe=yt(function(l){var f=ur(l,yR);return f.length&&f[0]===l[0]?aR(f):[]}),xGe=yt(function(l){var f=ms(l),b=ur(l,yR);return f===ms(b)?f=e:b.pop(),b.length&&b[0]===l[0]?aR(b,Je(f,2)):[]}),SGe=yt(function(l){var f=ms(l),b=ur(l,yR);return f=typeof f=="function"?f:e,f&&b.pop(),b.length&&b[0]===l[0]?aR(b,e,f):[]});function wGe(l,f){return l==null?"":_ke.call(l,f)}function ms(l){var f=l==null?0:l.length;return f?l[f-1]:e}function EGe(l,f,b){var C=l==null?0:l.length;if(!C)return-1;var N=C;return b!==e&&(N=ht(b),N=N<0?nn(C+N,0):Wn(N,C-1)),f===f?ske(l,f,N):Wb(l,eH,N,!0)}function AGe(l,f){return l&&l.length?BH(l,ht(f)):e}var RGe=yt(_M);function _M(l,f){return l&&l.length&&f&&f.length?pR(l,f):l}function TGe(l,f,b){return l&&l.length&&f&&f.length?pR(l,f,Je(b,2)):l}function NGe(l,f,b){return l&&l.length&&f&&f.length?pR(l,f,e,b):l}var BGe=Ta(function(l,f){var b=l==null?0:l.length,C=nR(l,f);return GH(l,ur(f,function(N){return Na(N,b)?+N:N}).sort(MH)),C});function kGe(l,f){var b=[];if(!(l&&l.length))return b;var C=-1,N=[],W=l.length;for(f=Je(f,3);++C<W;){var U=l[C];f(U,C,l)&&(b.push(U),N.push(C))}return GH(l,N),b}function BR(l){return l==null?l:wke.call(l)}function OGe(l,f,b){var C=l==null?0:l.length;return C?(b&&typeof b!="number"&&ti(l,f,b)?(f=0,b=C):(f=f==null?0:ht(f),b=b===e?C:ht(b)),hs(l,f,b)):[]}function GGe(l,f){return iI(l,f)}function FGe(l,f,b){return hR(l,f,Je(b,2))}function LGe(l,f){var b=l==null?0:l.length;if(b){var C=iI(l,f);if(C<b&&Js(l[C],f))return C}return-1}function ZGe(l,f){return iI(l,f,!0)}function WGe(l,f,b){return hR(l,f,Je(b,2),!0)}function PGe(l,f){var b=l==null?0:l.length;if(b){var C=iI(l,f,!0)-1;if(Js(l[C],f))return C}return-1}function DGe(l){return l&&l.length?LH(l):[]}function qGe(l,f){return l&&l.length?LH(l,Je(f,2)):[]}function VGe(l){var f=l==null?0:l.length;return f?hs(l,1,f):[]}function HGe(l,f,b){return l&&l.length?(f=b||f===e?1:ht(f),hs(l,0,f<0?0:f)):[]}function MGe(l,f,b){var C=l==null?0:l.length;return C?(f=b||f===e?1:ht(f),f=C-f,hs(l,f<0?0:f,C)):[]}function UGe(l,f){return l&&l.length?sI(l,Je(f,3),!1,!0):[]}function jGe(l,f){return l&&l.length?sI(l,Je(f,3)):[]}var XGe=yt(function(l){return Zc(Sn(l,1,Fr,!0))}),YGe=yt(function(l){var f=ms(l);return Fr(f)&&(f=e),Zc(Sn(l,1,Fr,!0),Je(f,2))}),KGe=yt(function(l){var f=ms(l);return f=typeof f=="function"?f:e,Zc(Sn(l,1,Fr,!0),e,f)});function zGe(l){return l&&l.length?Zc(l):[]}function JGe(l,f){return l&&l.length?Zc(l,Je(f,2)):[]}function $Ge(l,f){return f=typeof f=="function"?f:e,l&&l.length?Zc(l,e,f):[]}function kR(l){if(!(l&&l.length))return[];var f=0;return l=Bc(l,function(b){if(Fr(b))return f=nn(b.length,f),!0}),KA(f,function(b){return ur(l,jA(b))})}function CM(l,f){if(!(l&&l.length))return[];var b=kR(l);return f==null?b:ur(b,function(C){return qi(f,e,C)})}var QGe=yt(function(l,f){return Fr(l)?pm(l,f):[]}),eFe=yt(function(l){return gR(Bc(l,Fr))}),tFe=yt(function(l){var f=ms(l);return Fr(f)&&(f=e),gR(Bc(l,Fr),Je(f,2))}),rFe=yt(function(l){var f=ms(l);return f=typeof f=="function"?f:e,gR(Bc(l,Fr),e,f)}),nFe=yt(kR);function iFe(l,f){return DH(l||[],f||[],lm)}function sFe(l,f){return DH(l||[],f||[],hm)}var oFe=yt(function(l){var f=l.length,b=f>1?l[f-1]:e;return b=typeof b=="function"?(l.pop(),b):e,CM(l,b)});function xM(l){var f=O(l);return f.__chain__=!0,f}function aFe(l,f){return f(l),l}function hI(l,f){return f(l)}var cFe=Ta(function(l){var f=l.length,b=f?l[0]:0,C=this.__wrapped__,N=function(W){return nR(W,l)};return f>1||this.__actions__.length||!(C instanceof _t)||!Na(b)?this.thru(N):(C=C.slice(b,+b+(f?1:0)),C.__actions__.push({func:hI,args:[N],thisArg:e}),new ds(C,this.__chain__).thru(function(W){return f&&!W.length&&W.push(e),W}))});function uFe(){return xM(this)}function lFe(){return new ds(this.value(),this.__chain__)}function pFe(){this.__values__===e&&(this.__values__=ZM(this.value()));var l=this.__index__>=this.__values__.length,f=l?e:this.__values__[this.__index__++];return{done:l,value:f}}function dFe(){return this}function fFe(l){for(var f,b=this;b instanceof Qb;){var C=gM(b);C.__index__=0,C.__values__=e,f?N.__wrapped__=C:f=C;var N=C;b=b.__wrapped__}return N.__wrapped__=l,f}function hFe(){var l=this.__wrapped__;if(l instanceof _t){var f=l;return this.__actions__.length&&(f=new _t(this)),f=f.reverse(),f.__actions__.push({func:hI,args:[BR],thisArg:e}),new ds(f,this.__chain__)}return this.thru(BR)}function mFe(){return PH(this.__wrapped__,this.__actions__)}var gFe=oI(function(l,f,b){Dt.call(l,b)?++l[b]:Aa(l,b,1)});function yFe(l,f,b){var C=pt(l)?$V:aOe;return b&&ti(l,f,b)&&(f=e),C(l,Je(f,3))}function vFe(l,f){var b=pt(l)?Bc:CH;return b(l,Je(f,3))}var bFe=zH(yM),IFe=zH(vM);function _Fe(l,f){return Sn(mI(l,f),1)}function CFe(l,f){return Sn(mI(l,f),V)}function xFe(l,f,b){return b=b===e?1:ht(b),Sn(mI(l,f),b)}function SM(l,f){var b=pt(l)?ls:Lc;return b(l,Je(f,3))}function wM(l,f){var b=pt(l)?V2e:_H;return b(l,Je(f,3))}var SFe=oI(function(l,f,b){Dt.call(l,b)?l[b].push(f):Aa(l,b,[f])});function wFe(l,f,b,C){l=gi(l)?l:ud(l),b=b&&!C?ht(b):0;var N=l.length;return b<0&&(b=nn(N+b,0)),II(l)?b<=N&&l.indexOf(f,b)>-1:!!N&&$p(l,f,b)>-1}var EFe=yt(function(l,f,b){var C=-1,N=typeof f=="function",W=gi(l)?se(l.length):[];return Lc(l,function(U){W[++C]=N?qi(f,U,b):dm(U,f,b)}),W}),AFe=oI(function(l,f,b){Aa(l,b,f)});function mI(l,f){var b=pt(l)?ur:RH;return b(l,Je(f,3))}function RFe(l,f,b,C){return l==null?[]:(pt(f)||(f=f==null?[]:[f]),b=C?e:b,pt(b)||(b=b==null?[]:[b]),kH(l,f,b))}var TFe=oI(function(l,f,b){l[b?0:1].push(f)},function(){return[[],[]]});function NFe(l,f,b){var C=pt(l)?MA:rH,N=arguments.length<3;return C(l,Je(f,4),b,N,Lc)}function BFe(l,f,b){var C=pt(l)?H2e:rH,N=arguments.length<3;return C(l,Je(f,4),b,N,_H)}function kFe(l,f){var b=pt(l)?Bc:CH;return b(l,vI(Je(f,3)))}function OFe(l){var f=pt(l)?yH:wOe;return f(l)}function GFe(l,f,b){(b?ti(l,f,b):f===e)?f=1:f=ht(f);var C=pt(l)?rOe:EOe;return C(l,f)}function FFe(l){var f=pt(l)?nOe:ROe;return f(l)}function LFe(l){if(l==null)return 0;if(gi(l))return II(l)?ed(l):l.length;var f=Pn(l);return f==ne||f==We?l.size:uR(l).length}function ZFe(l,f,b){var C=pt(l)?UA:TOe;return b&&ti(l,f,b)&&(f=e),C(l,Je(f,3))}var WFe=yt(function(l,f){if(l==null)return[];var b=f.length;return b>1&&ti(l,f[0],f[1])?f=[]:b>2&&ti(f[0],f[1],f[2])&&(f=[f[0]]),kH(l,Sn(f,1),[])}),gI=vke||function(){return dn.Date.now()};function PFe(l,f){if(typeof f!="function")throw new ps(i);return l=ht(l),function(){if(--l<1)return f.apply(this,arguments)}}function EM(l,f,b){return f=b?e:f,f=l&&f==null?l.length:f,Ra(l,w,e,e,e,e,f)}function AM(l,f){var b;if(typeof f!="function")throw new ps(i);return l=ht(l),function(){return--l>0&&(b=f.apply(this,arguments)),l<=1&&(f=e),b}}var OR=yt(function(l,f,b){var C=v;if(b.length){var N=Oc(b,ad(OR));C|=E}return Ra(l,C,f,b,N)}),RM=yt(function(l,f,b){var C=v|I;if(b.length){var N=Oc(b,ad(RM));C|=E}return Ra(f,C,l,b,N)});function TM(l,f,b){f=b?e:f;var C=Ra(l,_,e,e,e,e,e,f);return C.placeholder=TM.placeholder,C}function NM(l,f,b){f=b?e:f;var C=Ra(l,A,e,e,e,e,e,f);return C.placeholder=NM.placeholder,C}function BM(l,f,b){var C,N,W,U,X,Q,le=0,de=!1,ye=!1,Ee=!0;if(typeof l!="function")throw new ps(i);f=gs(f)||0,_r(b)&&(de=!!b.leading,ye="maxWait"in b,W=ye?nn(gs(b.maxWait)||0,f):W,Ee="trailing"in b?!!b.trailing:Ee);function He(Lr){var $s=C,Oa=N;return C=N=e,le=Lr,U=l.apply(Oa,$s),U}function et(Lr){return le=Lr,X=ym(It,f),de?He(Lr):U}function mt(Lr){var $s=Lr-Q,Oa=Lr-le,zM=f-$s;return ye?Wn(zM,W-Oa):zM}function tt(Lr){var $s=Lr-Q,Oa=Lr-le;return Q===e||$s>=f||$s<0||ye&&Oa>=W}function It(){var Lr=gI();if(tt(Lr))return Et(Lr);X=ym(It,mt(Lr))}function Et(Lr){return X=e,Ee&&C?He(Lr):(C=N=e,U)}function Ui(){X!==e&&qH(X),le=0,C=Q=N=X=e}function ri(){return X===e?U:Et(gI())}function ji(){var Lr=gI(),$s=tt(Lr);if(C=arguments,N=this,Q=Lr,$s){if(X===e)return et(Q);if(ye)return qH(X),X=ym(It,f),He(Q)}return X===e&&(X=ym(It,f)),U}return ji.cancel=Ui,ji.flush=ri,ji}var DFe=yt(function(l,f){return IH(l,1,f)}),qFe=yt(function(l,f,b){return IH(l,gs(f)||0,b)});function VFe(l){return Ra(l,D)}function yI(l,f){if(typeof l!="function"||f!=null&&typeof f!="function")throw new ps(i);var b=function(){var C=arguments,N=f?f.apply(this,C):C[0],W=b.cache;if(W.has(N))return W.get(N);var U=l.apply(this,C);return b.cache=W.set(N,U)||W,U};return b.cache=new(yI.Cache||Ea),b}yI.Cache=Ea;function vI(l){if(typeof l!="function")throw new ps(i);return function(){var f=arguments;switch(f.length){case 0:return!l.call(this);case 1:return!l.call(this,f[0]);case 2:return!l.call(this,f[0],f[1]);case 3:return!l.call(this,f[0],f[1],f[2])}return!l.apply(this,f)}}function HFe(l){return AM(2,l)}var MFe=NOe(function(l,f){f=f.length==1&&pt(f[0])?ur(f[0],Vi(Je())):ur(Sn(f,1),Vi(Je()));var b=f.length;return yt(function(C){for(var N=-1,W=Wn(C.length,b);++N<W;)C[N]=f[N].call(this,C[N]);return qi(l,this,C)})}),GR=yt(function(l,f){var b=Oc(f,ad(GR));return Ra(l,E,e,f,b)}),kM=yt(function(l,f){var b=Oc(f,ad(kM));return Ra(l,S,e,f,b)}),UFe=Ta(function(l,f){return Ra(l,T,e,e,e,f)});function jFe(l,f){if(typeof l!="function")throw new ps(i);return f=f===e?f:ht(f),yt(l,f)}function XFe(l,f){if(typeof l!="function")throw new ps(i);return f=f==null?0:nn(ht(f),0),yt(function(b){var C=b[f],N=Pc(b,0,f);return C&&kc(N,C),qi(l,this,N)})}function YFe(l,f,b){var C=!0,N=!0;if(typeof l!="function")throw new ps(i);return _r(b)&&(C="leading"in b?!!b.leading:C,N="trailing"in b?!!b.trailing:N),BM(l,f,{leading:C,maxWait:f,trailing:N})}function KFe(l){return EM(l,1)}function zFe(l,f){return GR(vR(f),l)}function JFe(){if(!arguments.length)return[];var l=arguments[0];return pt(l)?l:[l]}function $Fe(l){return fs(l,h)}function QFe(l,f){return f=typeof f=="function"?f:e,fs(l,h,f)}function eLe(l){return fs(l,p|h)}function tLe(l,f){return f=typeof f=="function"?f:e,fs(l,p|h,f)}function rLe(l,f){return f==null||bH(l,f,fn(f))}function Js(l,f){return l===f||l!==l&&f!==f}var nLe=lI(oR),iLe=lI(function(l,f){return l>=f}),rl=wH(function(){return arguments}())?wH:function(l){return Rr(l)&&Dt.call(l,"callee")&&!pH.call(l,"callee")},pt=se.isArray,sLe=jV?Vi(jV):fOe;function gi(l){return l!=null&&bI(l.length)&&!Ba(l)}function Fr(l){return Rr(l)&&gi(l)}function oLe(l){return l===!0||l===!1||Rr(l)&&ei(l)==Re}var Dc=Ike||UR,aLe=XV?Vi(XV):hOe;function cLe(l){return Rr(l)&&l.nodeType===1&&!vm(l)}function uLe(l){if(l==null)return!0;if(gi(l)&&(pt(l)||typeof l=="string"||typeof l.splice=="function"||Dc(l)||cd(l)||rl(l)))return!l.length;var f=Pn(l);if(f==ne||f==We)return!l.size;if(gm(l))return!uR(l).length;for(var b in l)if(Dt.call(l,b))return!1;return!0}function lLe(l,f){return fm(l,f)}function pLe(l,f,b){b=typeof b=="function"?b:e;var C=b?b(l,f):e;return C===e?fm(l,f,e,b):!!C}function FR(l){if(!Rr(l))return!1;var f=ei(l);return f==_e||f==lt||typeof l.message=="string"&&typeof l.name=="string"&&!vm(l)}function dLe(l){return typeof l=="number"&&fH(l)}function Ba(l){if(!_r(l))return!1;var f=ei(l);return f==Z||f==R||f==Ze||f==Ir}function OM(l){return typeof l=="number"&&l==ht(l)}function bI(l){return typeof l=="number"&&l>-1&&l%1==0&&l<=q}function _r(l){var f=typeof l;return l!=null&&(f=="object"||f=="function")}function Rr(l){return l!=null&&typeof l=="object"}var GM=YV?Vi(YV):gOe;function fLe(l,f){return l===f||cR(l,f,wR(f))}function hLe(l,f,b){return b=typeof b=="function"?b:e,cR(l,f,wR(f),b)}function mLe(l){return FM(l)&&l!=+l}function gLe(l){if(QOe(l))throw new ot(n);return EH(l)}function yLe(l){return l===null}function vLe(l){return l==null}function FM(l){return typeof l=="number"||Rr(l)&&ei(l)==J}function vm(l){if(!Rr(l)||ei(l)!=ze)return!1;var f=jb(l);if(f===null)return!0;var b=Dt.call(f,"constructor")&&f.constructor;return typeof b=="function"&&b instanceof b&&Vb.call(b)==hke}var LR=KV?Vi(KV):yOe;function bLe(l){return OM(l)&&l>=-q&&l<=q}var LM=zV?Vi(zV):vOe;function II(l){return typeof l=="string"||!pt(l)&&Rr(l)&&ei(l)==$t}function Mi(l){return typeof l=="symbol"||Rr(l)&&ei(l)==xn}var cd=JV?Vi(JV):bOe;function ILe(l){return l===e}function _Le(l){return Rr(l)&&Pn(l)==xo}function CLe(l){return Rr(l)&&ei(l)==Uu}var xLe=lI(lR),SLe=lI(function(l,f){return l<=f});function ZM(l){if(!l)return[];if(gi(l))return II(l)?Ks(l):mi(l);if(sm&&l[sm])return rke(l[sm]());var f=Pn(l),b=f==ne?JA:f==We?Pb:ud;return b(l)}function ka(l){if(!l)return l===0?l:0;if(l=gs(l),l===V||l===-V){var f=l<0?-1:1;return f*te}return l===l?l:0}function ht(l){var f=ka(l),b=f%1;return f===f?b?f-b:f:0}function WM(l){return l?$u(ht(l),0,he):0}function gs(l){if(typeof l=="number")return l;if(Mi(l))return z;if(_r(l)){var f=typeof l.valueOf=="function"?l.valueOf():l;l=_r(f)?f+"":f}if(typeof l!="string")return l===0?l:+l;l=nH(l);var b=s2e.test(l);return b||a2e.test(l)?P2e(l.slice(2),b?2:8):i2e.test(l)?z:+l}function PM(l){return Eo(l,yi(l))}function wLe(l){return l?$u(ht(l),-q,q):l===0?l:0}function Zt(l){return l==null?"":Hi(l)}var ELe=sd(function(l,f){if(gm(f)||gi(f)){Eo(f,fn(f),l);return}for(var b in f)Dt.call(f,b)&&lm(l,b,f[b])}),DM=sd(function(l,f){Eo(f,yi(f),l)}),_I=sd(function(l,f,b,C){Eo(f,yi(f),l,C)}),ALe=sd(function(l,f,b,C){Eo(f,fn(f),l,C)}),RLe=Ta(nR);function TLe(l,f){var b=id(l);return f==null?b:vH(b,f)}var NLe=yt(function(l,f){l=Qt(l);var b=-1,C=f.length,N=C>2?f[2]:e;for(N&&ti(f[0],f[1],N)&&(C=1);++b<C;)for(var W=f[b],U=yi(W),X=-1,Q=U.length;++X<Q;){var le=U[X],de=l[le];(de===e||Js(de,td[le])&&!Dt.call(l,le))&&(l[le]=W[le])}return l}),BLe=yt(function(l){return l.push(e,nM),qi(qM,e,l)});function kLe(l,f){return QV(l,Je(f,3),wo)}function OLe(l,f){return QV(l,Je(f,3),sR)}function GLe(l,f){return l==null?l:iR(l,Je(f,3),yi)}function FLe(l,f){return l==null?l:xH(l,Je(f,3),yi)}function LLe(l,f){return l&&wo(l,Je(f,3))}function ZLe(l,f){return l&&sR(l,Je(f,3))}function WLe(l){return l==null?[]:rI(l,fn(l))}function PLe(l){return l==null?[]:rI(l,yi(l))}function ZR(l,f,b){var C=l==null?e:Qu(l,f);return C===e?b:C}function DLe(l,f){return l!=null&&oM(l,f,uOe)}function WR(l,f){return l!=null&&oM(l,f,lOe)}var qLe=$H(function(l,f,b){f!=null&&typeof f.toString!="function"&&(f=Hb.call(f)),l[f]=b},DR(vi)),VLe=$H(function(l,f,b){f!=null&&typeof f.toString!="function"&&(f=Hb.call(f)),Dt.call(l,f)?l[f].push(b):l[f]=[b]},Je),HLe=yt(dm);function fn(l){return gi(l)?gH(l):uR(l)}function yi(l){return gi(l)?gH(l,!0):IOe(l)}function MLe(l,f){var b={};return f=Je(f,3),wo(l,function(C,N,W){Aa(b,f(C,N,W),C)}),b}function ULe(l,f){var b={};return f=Je(f,3),wo(l,function(C,N,W){Aa(b,N,f(C,N,W))}),b}var jLe=sd(function(l,f,b){nI(l,f,b)}),qM=sd(function(l,f,b,C){nI(l,f,b,C)}),XLe=Ta(function(l,f){var b={};if(l==null)return b;var C=!1;f=ur(f,function(W){return W=Wc(W,l),C||(C=W.length>1),W}),Eo(l,xR(l),b),C&&(b=fs(b,p|d|h,qOe));for(var N=f.length;N--;)mR(b,f[N]);return b});function YLe(l,f){return VM(l,vI(Je(f)))}var KLe=Ta(function(l,f){return l==null?{}:COe(l,f)});function VM(l,f){if(l==null)return{};var b=ur(xR(l),function(C){return[C]});return f=Je(f),OH(l,b,function(C,N){return f(C,N[0])})}function zLe(l,f,b){f=Wc(f,l);var C=-1,N=f.length;for(N||(N=1,l=e);++C<N;){var W=l==null?e:l[Ao(f[C])];W===e&&(C=N,W=b),l=Ba(W)?W.call(l):W}return l}function JLe(l,f,b){return l==null?l:hm(l,f,b)}function $Le(l,f,b,C){return C=typeof C=="function"?C:e,l==null?l:hm(l,f,b,C)}var HM=tM(fn),MM=tM(yi);function QLe(l,f,b){var C=pt(l),N=C||Dc(l)||cd(l);if(f=Je(f,4),b==null){var W=l&&l.constructor;N?b=C?new W:[]:_r(l)?b=Ba(W)?id(jb(l)):{}:b={}}return(N?ls:wo)(l,function(U,X,Q){return f(b,U,X,Q)}),b}function eZe(l,f){return l==null?!0:mR(l,f)}function tZe(l,f,b){return l==null?l:WH(l,f,vR(b))}function rZe(l,f,b,C){return C=typeof C=="function"?C:e,l==null?l:WH(l,f,vR(b),C)}function ud(l){return l==null?[]:zA(l,fn(l))}function nZe(l){return l==null?[]:zA(l,yi(l))}function iZe(l,f,b){return b===e&&(b=f,f=e),b!==e&&(b=gs(b),b=b===b?b:0),f!==e&&(f=gs(f),f=f===f?f:0),$u(gs(l),f,b)}function sZe(l,f,b){return f=ka(f),b===e?(b=f,f=0):b=ka(b),l=gs(l),pOe(l,f,b)}function oZe(l,f,b){if(b&&typeof b!="boolean"&&ti(l,f,b)&&(f=b=e),b===e&&(typeof f=="boolean"?(b=f,f=e):typeof l=="boolean"&&(b=l,l=e)),l===e&&f===e?(l=0,f=1):(l=ka(l),f===e?(f=l,l=0):f=ka(f)),l>f){var C=l;l=f,f=C}if(b||l%1||f%1){var N=hH();return Wn(l+N*(f-l+W2e("1e-"+((N+"").length-1))),f)}return dR(l,f)}var aZe=od(function(l,f,b){return f=f.toLowerCase(),l+(b?UM(f):f)});function UM(l){return PR(Zt(l).toLowerCase())}function jM(l){return l=Zt(l),l&&l.replace(u2e,J2e).replace(R2e,"")}function cZe(l,f,b){l=Zt(l),f=Hi(f);var C=l.length;b=b===e?C:$u(ht(b),0,C);var N=b;return b-=f.length,b>=0&&l.slice(b,N)==f}function uZe(l){return l=Zt(l),l&&Nb.test(l)?l.replace(Kp,$2e):l}function lZe(l){return l=Zt(l),l&&zp.test(l)?l.replace(ju,"\\$&"):l}var pZe=od(function(l,f,b){return l+(b?"-":"")+f.toLowerCase()}),dZe=od(function(l,f,b){return l+(b?" ":"")+f.toLowerCase()}),fZe=KH("toLowerCase");function hZe(l,f,b){l=Zt(l),f=ht(f);var C=f?ed(l):0;if(!f||C>=f)return l;var N=(f-C)/2;return uI(zb(N),b)+l+uI(Kb(N),b)}function mZe(l,f,b){l=Zt(l),f=ht(f);var C=f?ed(l):0;return f&&C<f?l+uI(f-C,b):l}function gZe(l,f,b){l=Zt(l),f=ht(f);var C=f?ed(l):0;return f&&C<f?uI(f-C,b)+l:l}function yZe(l,f,b){return b||f==null?f=0:f&&(f=+f),Ske(Zt(l).replace(Xu,""),f||0)}function vZe(l,f,b){return(b?ti(l,f,b):f===e)?f=1:f=ht(f),fR(Zt(l),f)}function bZe(){var l=arguments,f=Zt(l[0]);return l.length<3?f:f.replace(l[1],l[2])}var IZe=od(function(l,f,b){return l+(b?"_":"")+f.toLowerCase()});function _Ze(l,f,b){return b&&typeof b!="number"&&ti(l,f,b)&&(f=b=e),b=b===e?he:b>>>0,b?(l=Zt(l),l&&(typeof f=="string"||f!=null&&!LR(f))&&(f=Hi(f),!f&&Qp(l))?Pc(Ks(l),0,b):l.split(f,b)):[]}var CZe=od(function(l,f,b){return l+(b?" ":"")+PR(f)});function xZe(l,f,b){return l=Zt(l),b=b==null?0:$u(ht(b),0,l.length),f=Hi(f),l.slice(b,b+f.length)==f}function SZe(l,f,b){var C=O.templateSettings;b&&ti(l,f,b)&&(f=e),l=Zt(l),f=_I({},f,C,rM);var N=_I({},f.imports,C.imports,rM),W=fn(N),U=zA(N,W),X,Q,le=0,de=f.interpolate||Gb,ye="__p += '",Ee=$A((f.escape||Gb).source+"|"+de.source+"|"+(de===tm?n2e:Gb).source+"|"+(f.evaluate||Gb).source+"|$","g"),He="//# sourceURL="+(Dt.call(f,"sourceURL")?(f.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++O2e+"]")+`
158
158
  `;l.replace(Ee,function(tt,It,Et,Ui,ri,ji){return Et||(Et=Ui),ye+=l.slice(le,ji).replace(l2e,Q2e),It&&(X=!0,ye+=`' +
@@ -288,7 +288,7 @@ your project to use the Ampt SDK.
288
288
  ${r("Documentation:")} https://getampt.com/docs
289
289
  ${r("Discord:")} https://getampt.com/discord
290
290
  `;e.isShellActive&&(n=n.replaceAll("ampt ","")),e.log(n)}});var LMt,b1e=ae(()=>{"use strict";c();Zn();LMt=async e=>{e.viewSpinner("Loading");let t=e.args[0],{fs:r,user:n}=e;if(await r.read(),!r.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let i=e.options.overwrite||e.options.o||!1,s=e.options.app||r.serviceFile.ampt.app,o=e.options.org||r.serviceFile.ampt.org,a=e.options.stage||e.options.instance||n.username;o||(o=await e.selectOrg(n)),e.viewSpinner("Loading");let u=new Jt({orgName:o});await u.isAuthorized()||(e.logError(`You don't have access to the "${o}" org.`),o=await e.selectOrg(n)),u.update({orgName:o}),e.viewSpinner("Importing");let p=new Pt({org:u,serviceName:s}),d=new or({org:u,service:p,instanceName:a}),h=new Du({fs:r,org:u,service:p,instance:d});if(t&&!r.fileExists(t)){e.logError(`File "${t}" not found.`);return}await h.import({dataFileName:t,overwrite:i});let m=`Data imported from "${t||r.dataFileName}"`;e.logSuccess(m)}});var ZMt,I1e=ae(()=>{"use strict";c();ZMt=async e=>{var n;let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let r=t.servicePackageManager;e.args.length===0?e.viewSpinner(`[${r}] Installing dependencies`):e.args.length===1?e.viewSpinner(`[${r}] Installing ${e.args[0]}`):e.args.length>1&&e.viewSpinner(`[${r}] Installing ${String(e.args.length)} packages`);try{let i=e.args.length===0,s=e.argv.includes("--dev");s&&(e.argv=e.argv.filter(o=>o!=="--dev")),i?await t.installDependenciesIfExists({cleanInstall:!0}):await t.installDependency(e.argv.slice(1),s),e.args.length===0?e.logSuccess("Successfully installed dependencies."):e.args.length===1?e.logSuccess(`Successfully installed the ${(n=e.styles)==null?void 0:n.bold(e.args[0])} package.`):e.args.length>1&&e.logSuccess(`Successfully installed ${String(e.args.length)} packages.`)}catch(i){e.logError(i.message)}}});var WMt,_1e=ae(()=>{"use strict";c();Zn();WMt=async e=>{if(e.user&&e.user.isLoggedIn())return e.logInfo(`Already logged in as ${e.styles.bold(e.user.username)}.`);e.user||(e.user=await Sa.init()),await e.user.performLogin(e)}});var PMt,C1e=ae(()=>{"use strict";c();PMt=async e=>{e.viewSpinner("Logging out"),e.user&&e.user.isLoggedIn()?(e.user.logout(),e.logSuccess("Successfully logged out of Ampt CLI."),await e.quit()):e.logInfo("You are already logged out of Ampt CLI.")}});var DMt,x1e=ae(()=>{"use strict";c();Zn();DMt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");e.viewSpinner("Opening Dashboard");let{user:r}=e,n=t.serviceFile.ampt.org,i=t.serviceFile.ampt.app;n||(n=await e.selectOrg(r)),e.viewSpinner("Loading");let s=new Jt({orgName:n});await s.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(r)),s.update({orgName:n});let o=new Pt({org:s,serviceName:i});e.logInfo("Your browser should open automatically"),e.logInfo("If not, open the following app page url:");let a=o.getDashboardUrl();e.logUrl(a),e.openUrl(a)}});var qMt,S1e=ae(()=>{"use strict";c();Zn();qMt=async e=>{var S,w;e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.app||t.serviceFile.ampt.app,i=e.options.org||t.serviceFile.ampt.org;i||(i=await e.selectOrg(r)),e.viewSpinner("Loading");let s=new Jt({orgName:i});await s.isAuthorized()||(e.logError(`You don't have access to the "${i}" org.`),i=await e.selectOrg(r)),s.update({orgName:i});let o=new Pt({org:s,serviceName:n}),a=await o.listInstances(),u=(S=e.args)==null?void 0:S[0],p=(w=e.args)==null?void 0:w[1];if(!u){if(!e.isInteractive)throw new Error('Please specify a source stage name: "ampt promote dev"');e.logInfo("Please enter the name of the stage you want to promote."),u=await e.prompt("type a stage name")}if(!p){if(!e.isInteractive)throw new Error('Please specify a target stage name: "ampt promote dev prod"');e.logInfo("Please enter the name of the stage you want to promote to."),p=await e.prompt("type a stage name")}if(u===p)throw new Error("The stage names you specified are identical. Please specify two different stages.");let d=a.find(T=>T.instanceName===u);if(!d)throw new Error(`The specified source instance does not exist: ${u}.`);let h=a.find(T=>T.instanceName===p);if(d&&d.instanceType!=="stage"||h&&h.instanceType!=="stage")throw new Error('One of the instances you specified are not of type "stage". You can only promote between stage environments.');let m=new or({org:s,service:o,instanceName:p}),g=await o.get();if(!g)return e.logWarning(`Unexpected error: App ${n} was not found.`);let[v,I]=await Promise.all([s.fetch(),s.getRegions()]),x=await e.selectRegion({orgInfo:v,instanceInfo:h,serviceInfo:g,regions:I});if(!x)return e.logWarning("Promote cancelled.");e.viewSpinner(`Promoting ${u} to ${p} (${x.name})`),e.updateSpinnerStep("syncing");let{operationId:_}=await o.copy({sourceInstanceName:u,targetInstanceName:p,copyCode:!0,copyData:!1,copyStorage:!1,instanceType:"stage",region:x.code}),{success:A,message:E}=await e.messenger.waitForOperation({operationId:_,context:e,orgName:i,appName:n});if(E&&(A?e.logInfo(E):e.logError(E)),!A){e.logError("Promote command failed");return}await m.get(),e.logSuccess(`Successfully promoted from the "${u}" stage to the "${p} (${x.name})" stage.`),e.logUrl(m.url)}});var w1e,E1e,A1e,R1e,VMt,HMt,T1e=ae(()=>{"use strict";c();Zn();dr();w1e=Ce(require("path")),E1e=Ce(require("os")),A1e=Ce(yl()),R1e=Ce(require("assert")),VMt=(e,t)=>w1e.default.join(E1e.default.homedir(),".serverless",`cloud_shell_activity_${e}_${t}.json`),HMt=async e=>{var _,A,E,S;e.viewSpinner("Running");let t,r=e.options.login,n=e.user;if(!n)throw new Error("User not found");r&&(delete e.options.login,t=await n.restoreOrgLogin(r),e.logSuccess("Successfully logged in."));let i=e.fs;if(await i.read(),!i.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");t=t||e.options.org||((A=(_=i.serviceFile)==null?void 0:_.ampt)==null?void 0:A.org);let s=e.options.app||((S=(E=i.serviceFile)==null?void 0:E.ampt)==null?void 0:S.app),o=e.args[0];if(o||(e.logInfo("Please specify a script name available in package.json that is prefixed with ampt:{name}, or a path to any TS or JS file."),o=await e.prompt("type a script name")),!e.isInteractive&&o==="dev")throw new Error("dev command not available in non-interactive mode.");t||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),t=await e.selectOrg(n),await i.writeServiceFile({orgName:t})),(0,R1e.default)(t,"orgName is required");let a=new Jt({orgName:t});await a.isAuthorized()||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),e.logError(`You don't have access to the "${t}" org.`),t=await e.selectOrg(n)),a.update({orgName:t}),s||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"service"}}),s=await e.promptServiceName(i.defaults.app),await i.writeServiceFile({serviceName:s}));let u=e.options["test-env"]||e.options["test-stage"],p=u?`test-${Math.random().toString(36).substring(2,7)}`:e.options.env||e.options.stage||e.options.instance||n.username,d=new Pt({org:a,serviceName:s}),h=new or({org:a,service:d,instanceName:p,instanceType:"test"});if(u)e.viewSpinner(`Starting test stage (${p})`);else if(!await h.get()){e.logError(`Stage "${p}" does not exist. Try running "deploy ${p}" first.`);return}let m=new is({org:a,service:d,instance:h,sandboxMode:!0,cli:e});await m.getUrlsAndMap();let{url:g,region:v}=h,{env:I}=m;e.onQuit(async()=>{(0,A1e.removeSync)(VMt(t,s)),await fi.stop(e,{hasQuit:!0,orgName:t,serviceName:s})}),e.viewSpinner(`Running ${o}`);let x=await fi.start({env:I,region:v,url:g,cli:e,user:n,fs:i,scriptName:o,ifPresent:!1,orgName:t,serviceName:s});return e.setExitCode(x),null}});async function MMt(e){var d,h,m,g;Ae.trace("refreshing sandbox credentials");let t=await s1e.init();if(!t.isLoggedIn())throw new Error("You must be logged in");let r=e.fs;await r.read();let n=process.env.AMPT_ORG_NAME||((h=(d=r.serviceFile)==null?void 0:d.ampt)==null?void 0:h.org),i=process.env.AMPT_APP_NAME||process.env.AMPT_SERVICE_NAME||((g=(m=r.serviceFile)==null?void 0:m.ampt)==null?void 0:g.app);if(!n)throw new Error("orgName is required");if(!i)throw new Error("serviceName is required");let s=new t1e({orgName:n});if(!await s.isAuthorized())throw new Error("Not authorized to access this org");let o=new SA({org:s,serviceName:i}),a=process.env.AMPT_ENVIRONMENT_NAME||process.env.AMPT_INSTANCE_NAME||t.username,u=new o0e({org:s,service:o,instanceName:a});await u.get();let p=new Qve({org:s,service:o,instance:u,sandboxMode:!0,cli:e});if(await p.getUrlsAndMap(),!p.credentials)throw new Error("No credentials");Ae.trace({expiration:p.credentials.expiration},"refreshed sandbox credentials"),console.log(JSON.stringify({Version:1,AccessKeyId:p.credentials.accessKeyId,SecretAccessKey:p.credentials.secretAccessKey,SessionToken:p.credentials.sessionToken,Expiration:p.credentials.expiration}))}var N1e=ae(()=>{"use strict";c();XP();dV();cV();KD();wA();ah()});var kA,B1e,k1e,UMt,O1e=ae(()=>{"use strict";c();kA=Ce(require("fs")),B1e=Ce(require("path")),k1e=require("child_process"),UMt=async e=>{e.pause();let t={js(){throw new Error("Not implemented")},ts(){throw new Error("Not implemented")},json(){throw new Error("Not implemented")},yml(r){return new Promise(n=>{var a,u;let i=kA.default.readFileSync(r);kA.default.writeFileSync("ampt.serverless.yml",i);let s=process.argv.slice(3),o=(0,k1e.spawn)("npx",["serverless","-c","ampt.serverless.yml"].concat(s),{env:{},stdio:"inherit",detached:!0});e.onQuit(()=>{o.kill(),n()}),(a=o.stdout)==null||a.pipe(process.stdout),(u=o.stderr)==null||u.pipe(process.stderr),o.on("exit",()=>{n()})})},yaml(r){return this.yml(r)}};for(let r of Object.keys(t)){let n=B1e.default.join(process.cwd(),`serverless.${r}`);if(kA.default.existsSync(n)){await t[r](n);return}}}});var jMt,G1e=ae(()=>{"use strict";c();Zn();jMt=async e=>{var F;e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.overwrite,i=e.options.container,s=r.username,o=((F=e.args)==null?void 0:F[0])||`${s}-${Math.random().toString(36).substr(2,5)}`,a=e.options.app||t.serviceFile.ampt.app,u=e.options.org||t.serviceFile.ampt.org;u||(u=await e.selectOrg(r)),e.viewSpinner("Loading");let p=new Jt({orgName:u}),[d,h]=await Promise.all([p.isAuthorized(),p.getPlan()]);if(d||(e.logError(`You don't have access to the "${u}" org.`),u=await e.selectOrg(r)),h&&!h.previewsEnabled){e.logWarning("Preview environments are not available on your current plan."),e.logInfo(`You can enable preview environments by upgrading to the ${e.styles.bold(e.styles.darkPurple("Team"))} plan.`),e.logUrl(`https://ampt.dev/orgs/${p.orgName}/settings/billing`);return}p.update({orgName:u});let m=new Pt({org:p,serviceName:a}),v=(await m.listInstances()).find(B=>B.instanceName===o);if(v&&v.instanceType!=="preview")return e.logError(`"${v.instanceName}" already exists as a "${v.instanceType}" environment and cannot be overwritten.`);if(v&&i&&!v.enableLambdaContainer)return e.logError("You cannot change the packaging type of an existing environment."),e.logWarning(`Please create a new preview environment with the ${e.styles.dim("--container")} flag.`);if(v&&!n&&(e.logInfo("This preview environment already exists. Are you sure you want to overwrite it?"),n=await e.confirm(),!n))if(e.isShellActive){await e.logCancelled();return}else await e.quit();let I=r.username,x=new or({org:p,service:m,instanceName:I}),[_,A,E,S]=await Promise.all([m.get().catch(()=>({serviceName:a})),p.fetch(),v?x.get().catch(()=>{}):void 0,p.getRegions()]),w=await e.selectRegion({orgInfo:A,instanceInfo:E,serviceInfo:_,regions:S});if(!w)return e.logWarning("Deployment cancelled.");let T=new is({org:p,service:m,instance:x,fullSync:e.options["full-sync"],cli:e}),D=e.styles.bold(e.styles.blue(o)),L=e.styles.dim(`(${w.code})`),P=n?`Overwriting existing preview environment ${D} ${L}`:`Creating new preview environment ${D} ${L}`;e.viewSpinner(P,{timer:!0}),e.updateSpinnerStep("syncing"),await T.sync();let k=new or({org:p,service:m,instanceName:o});if(s!==o){let{operationId:B}=await m.copy({sourceInstanceName:s,targetInstanceName:o,copyCode:!0,copyData:!0,copyStorage:!0,instanceType:"preview",region:w.code,enableLambdaContainer:i}),{success:M,message:Y}=await e.messenger.waitForOperation({operationId:B,context:e,orgName:u,appName:a});if(Y&&(M?e.logInfo(Y):e.logError(Y)),!M){e.logError("Share command failed"),e.setExitCode(1);return}}await k.get(),e.logSuccess(`Successfully created preview environment ${e.styles.bold(o)} (${w.code}).`),e.logUrl(k.url)}});var XMt,F1e=ae(()=>{"use strict";c();XMt=async e=>{await e.startSession()}});var YMt,L1e=ae(()=>{"use strict";c();Zn();YMt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile||!t.serviceFile.ampt||!t.serviceFile.ampt.app||!t.serviceFile.ampt.org){e.logInfo("This command must be run inside a service directory.");return}let{org:r,app:n}=t.serviceFile.ampt;if(!await fi.isRunning({orgName:r,serviceName:n})){e.logInfo(`There's no dev server running for app "${n}" in org "${r}" at the moment.`);return}await fi.stop(e,{orgName:r,serviceName:n}),e.logSuccess(`Successfully stopped the dev server for app "${n}" in org "${r}".`)}});var KMt,Z1e=ae(()=>{"use strict";c();dr();Zn();xs();KMt=async e=>{e.viewSpinner("Loading");let t=new Sa,r=e.fs;if(await r.read(),!r.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let n=e.options.org||r.serviceFile.ampt.org,i=e.options.service||r.serviceFile.ampt.app||r.serviceFile.ampt.service,s=e.isShellActive?e.user.username:`test-${Math.random().toString(36).substring(2,7)}`;n||(n=await e.selectOrg(t)),e.viewSpinner("Loading");let o=new Jt({orgName:n});await o.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(t)),o.update({orgName:n}),e.isShellActive||e.viewSpinner(`Starting test stage (${s})`);let a=new Pt({org:o,serviceName:i}),u=new or({org:o,service:a,instanceType:"test",instanceName:s,cli:e});e.isShellActive||(await new is({org:o,service:a,instance:u,fullSync:e.options["full-sync"],cli:e}).sync(),e.logSuccess(`Test instance started: ${u.url}`)),await u.get();let p=await u.connect({cli:e});try{e.viewSpinner("Running tests");let d=e.options.coverage||e.options.collectCoverage,h=e.args[0],m=e.options.workers,{timeout:g=3e5}=await u.test({coverage:d,pattern:h,workers:m}),v=await(p==null?void 0:p.waitForEvent({eventType:"ampt.test.completed",timeout:g+5e3}));V8(e,v),v.data.coverage&&v.data.coverage.length&&d&&(e.viewSpinner("Collecting test coverage report"),await u.downloadTestCoverage(r.serviceRoot),e.logSuccess("Coverage report saved")),process.exitCode=v.data.results&&v.data.results.success?0:1}catch(d){e.logError(d)}e.isShellActive||(p==null||p.close(),e.viewSpinner("Deleting instance"),await u.delete(),e.logSuccess("Test instance deleted"),e.log(`Exiting with status code ${process.exitCode}`))}});var zMt,W1e=ae(()=>{"use strict";c();zMt=async e=>{var n;let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");if(e.args.length===0){e.logInfo("Please enter the name of the npm package you want to uninstall.");let i=await e.prompt("type a package name");e.args.push(i)}let r=t.servicePackageManager;e.args.length===1?e.viewSpinner(`[${r}] Uninstalling ${e.args[0]}`):e.args.length>1&&e.viewSpinner(`[${r}] Uninstalling ${String(e.args.length)} packages`);try{let i=e.argv.includes("--dev");i&&(e.argv=e.argv.filter(s=>s!=="--dev")),await t.removeDependency(e.argv.slice(1),i),e.args.length===1?e.logSuccess(`Successfully uninstalled the ${(n=e.styles)==null?void 0:n.bold(e.args[0])} package.`):e.args.length>1&&e.logSuccess(`Successfully uninstalled ${String(e.args.length)} packages.`)}catch(i){e.session.captureException(i);let s=i.stdBuffer.toString();throw new Error(`Failed to uninstall due to the following error:
291
- ${s}`)}}});var JMt,P1e=ae(()=>{"use strict";c();Zn();JMt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.org||t.serviceFile.ampt.org,i=e.options.app||t.serviceFile.ampt.app,s=e.args[0]||r.username;n||(n=await e.selectOrg(r)),e.viewSpinner("Loading");let o=new Jt({orgName:n});await o.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(r)),o.update({orgName:n}),e.viewSpinner("Loading");let a=new Pt({org:o,serviceName:i}),u=new or({org:o,service:a,instanceName:s});await u.get(),e.logUrl(u.url)}});var D1e,$Mt,q1e=ae(()=>{"use strict";c();D1e=Ce(oh()),$Mt=async e=>{e.log(`v${D1e.version}`)}});var yV={};jR(yV,{bash:()=>RMt,clone:()=>TMt,dashboard:()=>NMt,delete:()=>BMt,deploy:()=>kMt,docs:()=>OMt,export:()=>GMt,help:()=>FMt,import:()=>LMt,install:()=>ZMt,login:()=>WMt,logout:()=>PMt,open:()=>DMt,promote:()=>qMt,run:()=>HMt,sandbox:()=>MMt,serverless:()=>UMt,setup:()=>fV,share:()=>jMt,start:()=>XMt,stop:()=>YMt,test:()=>KMt,uninstall:()=>zMt,url:()=>JMt,version:()=>$Mt});var vV=ae(()=>{"use strict";c();u1e();p1e();d1e();f1e();h1e();m1e();g1e();v1e();b1e();I1e();_1e();C1e();x1e();S1e();T1e();N1e();O1e();hV();G1e();F1e();L1e();Z1e();W1e();P1e();q1e()});var tUt={};jR(tUt,{default:()=>eUt});module.exports=XR(tUt);c();c();(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},t=new Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="1e16d767-a7b4-4b9f-a1a5-1912bdccca94",e._sentryDebugIdIdentifier="sentry-dbid-1e16d767-a7b4-4b9f-a1a5-1912bdccca94")}catch{}})();c();c();c();var bV=Ce(require("os")),$h=Ce(CI()),M1e=Ce(QM()),U1e=Ce(eU()),Xs=Ce(sU()),j1e=Ce(bU()),Co=Ce(JU()),X1e=Ce(ej()),Xp=Ce(rj()),Y1e=Ce(oj()),IV=Ce(lj()),K1e=Ce(AX()),_V=Ce(wB()),CV=Ce(AB()),xV=require("child_process"),SV=Ce(i4()),z1e=require("fs/promises"),Qh=Ce(yl()),FA=Ce(h1());dr();CW();Zn();_h();c();Zn();dr();xs();c();var a1e=Ce(yl()),gV=Ce(require("path")),RA=Ce(require("assert"));Zn();xs();dr();oZ();hV();c();dr();ua();function mV(e){(async()=>{let{orgName:t,serviceName:r,instanceName:n}=e;try{await $e({method:"POST",body:e,endpoint:`/orgs/${t}/services/${r}/instances/${n}/metrics`})}catch(i){Wt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()}var Mu=class extends Error{function=null;constructor(t,r){super(t),this.function=r}};var TA=class e{initialized=!1;cli;org;service;instance;data;code;isGitInstalled=!1;isCodeInstalled=!1;isSeedingEnabled=!1;isReseedingEnabled=!1;devModeStart=void 0;messenger;sandboxActive=!1;syncInProgress=!1;queuedFilePaths=new Set;constructor(t){this.cli=t}static async checkIfServiceExists(t){return!!await t.get().catch(()=>{})}async handleGitError(){return this.cli.logWarning(`"${this.cli.styles.bold("git")}" is not installed on this system.`),await this.cli.quit("Please install git and try again.")}async runSystemChecks(){let[t,r]=await Promise.all([this.cli.fs.detectGit(),this.cli.fs.detectVsCode()]);this.isGitInstalled=t,this.isCodeInstalled=r}getSandboxUrl(){if(this.instance)return this.instance.url}getDashboardUrl(){if(this.org&&this.service&&this.instance)return`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${this.org.orgName}/apps/${this.service.serviceName}/environments/${this.instance.instanceName}`}async boot(t){let r=new Set(t);r&&r.size>0?(r.has("analyze")&&await this.analyze(),r.has("detect")&&await this.detect(),r.has("connect")&&await this.connect(),r.has("dev")&&await this.dev()):(await this.analyze(),await this.detect(),await this.connect(),await this.dev())}async selectOrg(){var s,o,a;let t=this.cli,r=t.user;if(!r)return await this.cli.quit("You must be logged in to use this command.");if(await r.listOrgs(),((s=r.orgs)==null?void 0:s.length)===0)return await t.quit("You do not have access to any organizations.");let n=t.options.org;((o=r.orgs)==null?void 0:o.length)===1&&!n?n=r.orgs[0].orgName:((a=r.orgs)==null?void 0:a.length)>1&&!n&&(n=await t.selectOrg(r));let i=new Jt({orgName:n});i.update({orgName:n}),this.org=i}async authorize(){var n,i,s;let t=this.cli.user,r=this.cli.options.org||((i=(n=this.cli.fs.serviceFile)==null?void 0:n.ampt)==null?void 0:i.org);if(r&&!t.hasAccessToOrg(r)&&(this.cli.logWarning(`Org "${r}" has either been deleted, renamed, or you no longer have access to it.`),r=void 0),r?this.org=new Jt({orgName:r}):(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),await this.selectOrg(),await this.cli.fs.readServiceFileIfExists({orgName:r||((s=this.org)==null?void 0:s.orgName)})),!this.org)return await this.cli.quit("Ampt Organization is required");await this.org.isAuthorized()||(this.cli.logError(`You don't have access to the "${r}" org.`),await this.selectOrg()),this.cli._activeOrgName=this.org.orgName}async analyze(){this.cli.viewSpinner("Analyzing Project"),await fV(this.cli),await this.cli.checkForAmptPackageUpdates()}async hydrate(){if(!this.org){await this.cli.quit("Ampt Organization is required");return}if(!this.service){await this.cli.quit("Ampt App is required");return}if(!this.instance){await this.cli.quit("Ampt Environment is required");return}let[t,r,n,i]=await Promise.all([this.instance.get().catch(()=>{}),this.service.get().catch(()=>{}),this.org.fetch(),this.org.getRegions()]),s=this.cli.selectRegion({orgInfo:n,serviceInfo:r,instanceInfo:t,regions:i});if(!s){this.cli.logError("No region selected."),await this.cli.quit();return}this.instance.region=s.code}async detect(){var r,n,i;this.cli.viewSpinner("Starting");let t=this.cli.options.app||((n=(r=this.cli.fs.serviceFile)==null?void 0:r.ampt)==null?void 0:n.app);t||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"service"}}),t=await this.cli.promptServiceName(),this.cli.viewSpinner("Saving"),await this.cli.fs.writeServiceFile({serviceName:t})),this.cli._activeServiceName=t,this.service||(this.service=new Pt({org:this.org,serviceName:t})),this.instance||(this.instance=new or({org:this.org,service:this.service,instanceName:(i=this.cli.user)==null?void 0:i.generateSandboxName()})),await this.hydrate()}async connect(){if((0,RA.default)(this.org,"Org is required"),(0,RA.default)(this.service,"Service is required"),(0,RA.default)(this.instance,"Instance is required"),!this.cli.user)return await this.cli.quit("You must be logged in");let t=this.org.orgName,r=this.service.serviceName;if(this.cli.viewSpinner("Connecting to your personal sandbox environment..."),this.devModeStart=process.hrtime.bigint(),await this.cli.isAmptShellRunning({orgName:t,serviceName:r}))return this.cli.logError(`The Ampt shell for app "${r}" in org "${t}" is already running in another terminal.`),await this.cli.quit();await this.cli.writeAmptShellActivityFile({orgName:t,serviceName:r}),this.cli.bindService({orgName:t,serviceName:r}),this.cli.onQuit(async()=>{var d;(0,a1e.removeSync)(fh(t,r)),await fi.stop(this.cli,{hasQuit:!0,orgName:t,serviceName:r});let u=await this.cli.fs.readJsonFileIfExists(this.cli.fs.serviceFilePath),p=process.hrtime.bigint();(d=this.messenger)==null||d.close(),fr({eventName:"ampt.dev.ended",eventData:{source:this.cli.isGitPod?"gitpod":"local",timeInSeconds:this.devModeStart?Number(p-this.devModeStart)/1e9:0,dependencies:Object.keys((u==null?void 0:u.dependencies)||{}),appName:`${t}:${r}`}})}),this.code=new is({org:this.org,service:this.service,instance:this.instance,user:this.cli.user,fullSync:this.cli.options["full-sync"],cli:this.cli,verbose:this.cli.options.verbose}),this.data=new Du({fs:this.cli.fs,org:this.org,service:this.service,instance:this.instance}),this.cli.session.setSentryContext({identifier:`${this.org.orgName}:${this.service.serviceName}:${this.instance.instanceName}`,service:this.service.serviceName,instance:this.instance.instanceName,org:this.org.orgName}),this.cli.viewSpinner("Syncing");let i=this.cli.viewSpinner.bind(this.cli),s=u=>i(`Syncing (${u})`),o=await this.code.sync(void 0,s);this.cli.updateLastSyncedAt(Date.now()),mV({...o,source:this.cli.isGitPod?"gitpod":"local",orgName:t,serviceName:this.service.serviceName,instanceName:this.instance.instanceName,appName:`${t}:${r}`,region:this.instance.region}),this.cli.viewSpinner("Connecting to real time logs");let[a]=await Promise.all([this.instance.connect({cli:this.cli}),this.cli.messenger.subscribe({userUid:this.cli.user.userId,orgName:t,appName:r,instanceName:this.instance.instanceName})]);this.messenger=a}async dev(t){var I;let{logDashboard:r=!1}=t||{},n=this.org,i=this.service,s=this.instance,o=this.code,a=n.orgName,u=i.serviceName,p=s.instanceName,d=this.cli.styles.purple(`@${a}`),h=this.cli.styles.blue(u),m=this.cli.styles.green(p),g=this.cli.styles.dim("/"),v=`Connected to ${this.cli.styles.bold(`${d}${g}${h}${g}${m}`)}`;if(this.cli.logSuccess(v),this.cli.logUrl(s.url),r){this.cli.logSpace(),this.cli.logInfo("View your app in the dashboard");let x=`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${a}/apps/${u}/environments/${p}`;this.cli.logUrl(x)}if(this.isReseedingEnabled&&this.cli.logSuccess("Enabled automatic data reseeding"),this.cli.viewInput(),this.cli.options.dev){let{url:x,region:_}=s,{credentials:A,env:E}=o;fi.start({credentials:A,env:E,url:x,cli:this.cli,fs:this.cli.fs,user:this.cli.user,scriptName:"dev",ifPresent:!1,orgName:a,serviceName:u,region:_}).catch(S=>{Ae.error({err:S},"Error starting dev server"),this.cli.logError("Something went wrong starting the dev server.")})}fr({eventName:"ampt.dev.enabled",eventData:{dependencies:Object.keys(((I=this.cli.fs.serviceFile)==null?void 0:I.dependencies)||{}),appName:`${a}:${u}`}}),this.isSeedingEnabled&&await this.seed(),this.cli.fs.watch(o.workspaceRoot,this.onFileChange.bind(this)),this.sandboxActive=!0}async onFileChange(t){(async()=>{let r=this.org.orgName,n=this.service.serviceName,i=this.instance.instanceName;if(!this.code)return await this.cli.quit("Sync engine is not active");for(let p of t)this.queuedFilePaths.add(p);let s=this.queuedFilePaths,o=await fi.isRunning({orgName:r,serviceName:n}),a=this.cli.buildRunningInShell;if(this.cli.isCommandRunningInShell&&!o&&(Ae.trace("waiting for command to finish"),await this.cli.commandRunningInShellPromise,Ae.trace("command finished")),this.syncInProgress){Ae.trace("sync in progress, skipping");return}this.syncInProgress=!0;let u;if(a)await this.cli.commandRunningInShellPromise,u=await this.code.sync();else for(;this.queuedFilePaths.size>0;){let p=this.queuedFilePaths;this.queuedFilePaths=new Set,this.isReseedingEnabled&&this.cli.fs.dataFilePath&&p.has(this.cli.fs.dataFilePath)&&(this.cli.viewSpinner("Seeding",{timer:!0}),await this.seed()),(!this.cli.isCommandRunningInShell||o)&&this.cli.spinInput(),Ae.trace({size:p.size,queued:this.queuedFilePaths.size},"starting sync"),u=await this.code.sync(p),Ae.trace({size:p.size,queued:this.queuedFilePaths.size},"sync complete")}mV({...u,source:this.cli.isGitPod?"gitpod":"local",orgName:r,serviceName:n,instanceName:i,appName:`${r}:${n}`,region:this.instance.region}),this.syncInProgress=!1,this.cli.updateLastSyncedAt(Date.now()),this.cli.isAnimationEnabled||this.cli.logSuccess("Successfully updated your code"),(!this.cli.isCommandRunningInShell||o)&&this.cli.stopSpinningInput(),this.cli.tutorial.inProgress&&await this.cli.tutorial.onSync(s)})().catch(r=>{Ae.error({method:"sync-callback",err:r},"Error syncing code"),this.cli.logError("Something went wrong syncing your code. Please try again.")})}async seed(){var t;this.data&&(this.cli.viewSpinner("Seeding"),await this.data.import(),this.cli.logSuccess(`Seeded data from the ${(t=this.cli.styles)==null?void 0:t.bold(this.cli.fs.dataFileName)} file.`),this.cli.viewInput())}async setupApp(t){var p,d,h,m;let{name:r}=t||{},{org:n}=this,{fs:i}=this.cli;if(n||await this.authorize(),!n)return await this.cli.quit("Ampt Organization is required");let s=r||((d=(p=i.serviceFile)==null?void 0:p.ampt)==null?void 0:d.app)||this.cli.options.app,o=await this.cli.promptServiceName(s),a=new Pt({org:n,serviceName:o});if(await e.checkIfServiceExists(a)&&(this.cli.logWarning(`App ${(m=this.cli.styles)==null?void 0:m.purple((h=this.cli.styles)==null?void 0:h.bold(`"${o}"`))} already exists for this org.`),this.cli.logQuestion("Would you like to overwrite it?"),!await this.cli.confirm()))return this.setupApp({name:r});Ae.info({serviceName:a.serviceName,orgName:n.orgName},"app init"),this.service=a}async assureServiceDir(){var i;let{fs:t}=this.cli;if(!this.service||!this.service.serviceName)throw new Mu("Expected App to be defined","assureServiceDir");let r=!1;if(await t.isCwdEmpty()&&(r=await this.cli.confirm(!0,"Would you like to use the current directory?")),!r){if(t.dirExists(this.service.serviceName)){this.cli.logWarning(`Directory "./${this.service.serviceName}" already exists.`);let s=await this.cli.confirm(!1,"Would you like to overwrite it?"),o=await this.cli.confirm(!1,"Are you sure? This will delete all files in the directory.");if(s&&o)t.deleteServiceDir(this.service.serviceName),Ae.debug(`Deleted directory ${this.service.serviceName}`);else return this.assureServiceDir()}t.createServiceDir(this.service.serviceName),this.cli.logSuccess(`Created directory ${this.cli.styles.bold(this.cli.styles.darkPurple(`./${this.service.serviceName}`))}`),await t.read({orgName:(i=this.org)==null?void 0:i.orgName}),Ae.debug(`Created directory ${this.service.serviceName}`)}}async setupTemplate(){let{fs:t}=this.cli,{template:r}=this.cli.options;if(!this.org)throw new Mu("Expected Org to be defined","setupTemplate");let n=r,[i,s]=await Promise.all([qS(this.cli),this.org.validateLimits()]);if(Ae.trace({templates:i.length,limitResult:s},"setupTemplate"),s.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(s.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();let o=i.find(a=>a.name===n);if(!o){this.cli.logWarning(`Template "${n}" not found.`),this.cli.logInfo("Please choose a template to generate.");let a=await this.cli.select(i);o=a,n=a.name}if(await this.setupApp({name:n}),await this.assureServiceDir(),!this.service)throw new Mu("Expected App to be defined","setupTemplate");if(!t.serviceRoot)throw new Mu("Expected serviceRoot to be defined","setupTemplate");await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:o,existingProject:!1}),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}async setup(){let{fs:t}=this.cli;if(this.org||await this.authorize(),!this.org)return await this.cli.quit("Ampt Organization is required");let[r,n]=await Promise.all([t.readJsonFileIfExists(gV.default.join(t.serviceRoot,"package.json")),t.isCwdEmpty()]);if(n&&await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();if(r&&!r.ampt){if(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"migrateExistingApp"}}),this.cli.logInfo("This directory does not contain an Ampt project."),this.cli.logQuestion("Would you like to initialize it?"),await this.cli.confirm()){if(this.cli.viewSpinner("Migrating project to Ampt"),await this.setupApp({name:r.name||gV.default.basename(t.serviceRoot)}),!this.service||!this.service.serviceName)throw new Mu("Expected App to be defined","setup");if(await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,existingProject:!0}),this.cli.logInfo(`${this.cli.styles.bold(this.cli.styles.darkPurple(this.service.serviceName))} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();this.cli.viewSpinner("Installing Dependencies"),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)});return}}else if(r)await t.initService({orgName:this.org.orgName,existingProject:!0});else{if(this.cli.logQuestion("Would you like to create a new app?"),!await this.cli.confirm())return await this.cli.quit("Stopped");this.cli.viewSpinner("Loading");let[s,o]=await Promise.all([qS(this.cli),this.org.validateLimits()]);if(o.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(o.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();fr({eventName:"ampt.dev.prompt",eventData:{promptName:"template"}}),this.cli.logInfo("Choose a template to generate.");let a=await this.cli.select(s);if(await this.setupApp({name:a.name}),await this.assureServiceDir(),!this.service||!this.service.serviceName)throw new Mu("Expected App to be defined","setup");if(this.cli.viewSpinner("Generating template..."),await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:a,existingProject:!1}),t.dataFile&&(this.isSeedingEnabled=!0),this.cli._clearScreen(),this.cli.logSuccess(`${this.cli.styles.bold(this.service.serviceName)} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}}async shouldStartTutorial(){var s,o;let{cli:t}=this,{session:r}=t,{showTutorial:n,allowDismiss:i}=r.shouldPromptTutorial();if(n){let a=["Yes","Skip for now"];i&&a.push("Don't show again"),t.logQuestion("Would you like to start the tutorial?");let u=await t.select(a);if(u==="Yes")return this.isSeedingEnabled=!0,!0;if(u=="Don't show again"){t.logInfo(`You can always run ${(s=t.styles)==null?void 0:s.bold("ampt tutorial")} to go through the tutorial.`),t.viewSpinner("Saving Preferences");try{await((o=t.user)==null?void 0:o.updatePreferences({showTutorial:!1}))}catch{t.logError("Failed to save preferences")}}}return!1}async init(){let{cli:t}=this,r=t.user;if(!r)return await t.quit("You must be logged in to use this command.");if(!r.orgs||!r.orgs.length)return await t.quit("You do not have access to any organizations.");await t.fs.read();try{await Promise.all([this.authorize(),this.runSystemChecks()]),this.isSeedingEnabled=t.options.seed||t.options.s||!1,this.isReseedingEnabled=t.options.reseed||t.options.rs||!1;let n=t.options.tutorial??!1,i=t.options.template??!1;if(Ae.debug({tutorialPassed:n,templatePassed:i},"Project.init"),i&&await this.setupTemplate(),n)return await t.tutorial.initTutorial();await this.setup(),this.initialized=!0}catch(n){return await t.quit(n.message)}}};var V1e=(vV(),XR(yV));var Jh=class extends Error{function=null;constructor(t,r){super(t),this.function=r}},OA=class e{static tutorialGitUrl="https://github.com/ampt-templates/tutorial";static exitCmd="end";static iterationCmds=["skip","next","done"];static fullTutorialSteps=["editor","sandbox","postSandbox","importData","postImportData","staticAssets","postStaticAssets","runningScripts","postRunningScripts","deploy","postDeploy","dashboard"];static basicTutorialSteps=["editor","sandbox","postSandbox","staticAssets","build","postBuild","importData","postImportData","runningScripts","deploy","dashboard"];welcomeMessage=["Welcome to Ampt!","This Ampt CLI tutorial allows you to exit anytime with 'end' and skip steps using 'skip'."];cli;name;type="basic";inProgress=!1;tutorialModeStart=void 0;nextCommand;activeStepIndex=null;stepOrder=e.fullTutorialSteps;steps={editor:async()=>{let t="To begin, let's open the project in a code editor.";return{title:"Open the project in an editor",pre:this.cli.project.isCodeInstalled?[t,'Run `code .` in the terminal to open the project in Visual Studio Code or type "done" to continue']:[t,'Open the project in your favorite code editor and type "done" to continue'],command:"code"}},sandbox:async()=>{var r,n;let t=["The URL above is your developer sandbox. Code changes are synced here in real-time","Your sandbox goes offline when you disconnect from the CLI","Open the URL in your favorite browser to see your app in action"];return this.type==="full"?t.push('Try making a change to "index.tsx", refresh, and see the changes in real-time!'):(t.push("Try making a change to the code, refresh, and see the changes in real-time!"),(n=(r=this.cli.fs.serviceFile)==null?void 0:r.scripts)!=null&&n["ampt:dev"]&&t.push(`Note, if you're building a frontend app, you can use the "dev" command to start the local development server`)),{title:"The Developer Sandbox",pre:t,event:"sync"}},postSandbox:async()=>({title:"Sandbox Synced",pre:["Sandbox synced!","Any logs or errors from your sandbox are displayed here",'The "main" field in your package.json is the entry point to your app, and is the first file that is executed when your app starts.','By default, this is "index.js" or "index.ts" in the root of your project.'],postAction:!0}),staticAssets:async()=>{let t=["The `static` directory is automatically synced and served from your Ampt environment","This is useful for serving images, fonts, and other static assets"];this.type==="full"?t.push('Try moving "test.html" into the "static" directory and see it update in the sandbox'):t.push("Add a file to your static directory, or hit enter to skip");let r=this.type==="full"?"sync":void 0;return{title:"Static Assets",pre:t,event:r}},postStaticAssets:async()=>{let t=this.cli.project.getSandboxUrl();return{postAction:!0,title:"Static Assets Synced",pre:["Static assets synced!",t?`Now, try navigating to ${t}/test.html to see the changes`:"Try navigating to the /test.html route to see the changes"]}},importData:async()=>({title:"Importing Data to @ampt/data",pre:['You can import data into your Ampt environment using the "import" command',"This command is useful for seeding your database with data for development and testing","Try running the import command now by typing `import` into the terminal"],command:"import"}),postImportData:async()=>({title:"Data Imported!",pre:["Data imported!",this.type==="full"?"Now, try refreshing the sandbox to see the changes in the environment":"Data seeded from your data file is now available in your environment"],postAction:!0}),runningScripts:async()=>{let t=["The Ampt shell allows you to run scripts within the context of your app","For scripts within your package.json, prefix them with 'ampt', e.g. 'ampt:test'"];this.type==="full"&&t.push('Try running the test script by typing "run test" into the terminal'),this.type==="basic"&&(t.push('To run a script, just type "run" followed by the script name, e.g. "run test" for "ampt:test"'),t.push('Ampt automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'));let r=this.type==="full"?"run":void 0,n=this.type==="full"?"test":void 0;return{title:"Running scripts within the Ampt context",pre:t,command:r,runArg:n}},postRunningScripts:()=>Promise.resolve({title:"Scripts Run!",pre:["Nice, you just ran the test script!",'Ampt also automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'],postAction:!0}),deploy:()=>Promise.resolve({title:"Deploying to a permanent environment",pre:["To deploy your current sandbox, use the 'deploy prod' command to create a new stage environment named 'prod'","Note, this can take a second, as Ampt provisions an entirely new environment for you in a separate AWS account"],post:["Stage deployed!","The URL above is a stage environment, and is always available."],command:"deploy"}),postDeploy:()=>Promise.resolve({title:"Stage Deployed!",pre:["Stage deployed!","The URL above is a stage environment, and is always available",'Updates to the stage environment are made using the "deploy" command, or automatically using Git CI/CD.'],postAction:!0}),dashboard:()=>Promise.resolve({title:"The Ampt Dashboard",pre:["The dashboard is where you can manage your Ampt environments, view logs, data, and more",'Try opening the your dashboard with the "dashboard" command'],command:"dashboard"}),build:()=>Promise.resolve({title:"Building the app",pre:['For projects with a build step, use "build" to execute the "ampt:build" script in package.json',"Build output is automatically synced and is available at your sandbox url"],command:"run",runArg:"build"}),postBuild:()=>Promise.resolve({title:"App built!",pre:["Depending on your project, you might need to configure its output to be served from the 'static' directory","For more details on your specific framework, check out the Ampt documentation at https://getampt.com/docs"],postAction:!0})};constructor(t){if(!t.project)throw new Jh("Project should be set before Tutorial is initialized","constructor");this.cli=t}isExitCmd(t){return t===e.exitCmd}isIterationCmd(t){return e.iterationCmds.includes(t)}async iterateStep(t){let{skip:r=!1}=t||{skip:!1};if(this.inProgress&&this.activeStepIndex!==null){let n=this.activeStepIndex+1;if(this.activeStepIndex===0&&!this.cli.project.sandboxActive&&(this.cli.logSpace(),await this.cli.project.dev({logDashboard:!1})),this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex],event:"ampt.tutorial.step_completed"}),n<this.stepOrder.length){this.activeStepIndex=n;let i=await this.steps[this.stepOrder[this.activeStepIndex]]();r&&i.postAction&&n+1<this.stepOrder.length&&(this.activeStepIndex=n+1,i=await this.steps[this.stepOrder[this.activeStepIndex]]()),this.nextCommand=i.command||void 0,this.logStep({step:i}),!i.command&&!i.event&&!i.postAction&&await this.iterateStep()}else await this.complete()}}async onSync(t){if(this.inProgress&&this.activeStepIndex!==null){let r=this.stepOrder[this.activeStepIndex];t.size>0&&(r==="sandbox"||r==="staticAssets"&&Array.from(t).some(n=>n.includes("static")))&&await this.iterateStep()}}async handle(t){var r;if(this.inProgress&&this.activeStepIndex!==null){let n=this.stepOrder[this.activeStepIndex],i=await this.steps[n]();if(this.isExitCmd(t))return this.cli.project.sandboxActive||await this.cli.project.dev(),await this.complete({exit:!0});if(i.postAction&&(this.cli._staticViewInputMsg=void 0),this.isIterationCmd(t))return this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex]}),await this.iterateStep({skip:!0});if(i.command==="run"&&t==="run"&&(!this.cli.args[0]||i.runArg&&i.runArg!==this.cli.args[0])){this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${i.runArg}"`);return}else if(i.command&&t!==i.command){let s=this.cli.styles.purple(n==="build"?"build":i.command);this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${this.cli.styles.bold(s)}"`);return}else{if(i.command==="deploy"&&t==="deploy"&&!((r=this.cli.names)!=null&&r.instanceName)){this.cli.logWarning('You must provide a stage name to deploy to. Example: "deploy prod"');return}if(n==="editor"&&t==="code")await V1e.bash(this.cli);else{let s=V1e[t];if(t&&i.event==="sync"){this.cli.logWarning("Waiting for changes to sync to the sandbox...");return}if(!s){this.cli.logError(`Command "${t}" not found - expected "${i.command}"`);return}this.cli.logSpace(),await s(this.cli)}try{return this.cli.viewInput(),this.iterateStep()}catch(s){throw new Jh(s.message,"handle")}}}}async initTutorial(){var i,s,o,a,u,p,d,h;if(!this.cli.user)return await this.cli.quit("You must be logged in to start the Ampt tutorial");if(!this.cli.project.org)return await this.cli.quit("Expected Ampt organization to start the Ampt tutorial");this.name=`${(i=this.cli.user)==null?void 0:i.username}-ampt-tutorial`,this.inProgress=!0,this.tutorialModeStart=process.hrtime.bigint(),this.type=this.cli.fs.serviceFile?"basic":"full",Ae.debug({type:this.type,name:this.name},"initTutorial");let t=this.cli.project.org;switch(this.type){case"full":{if(!await this.cli.fs.detectGit())return await this.cli.quit("Git is required to start the Ampt tutorial");let m=async()=>{this.name=await this.cli.promptServiceName(this.name);let v=new Pt({org:this.cli.project.org,serviceName:this.name});if(await v.get().catch(()=>{}))return this.cli.logWarning(`App ${this.cli.styles.bold(this.cli.styles.purple(this.name))} already exists in ${this.cli.styles.bold(this.cli.styles.darkPurple(t.orgName))}`),await this.cli.confirm(!0,"Would you like to overwrite it?")?v:m();let x=await this.cli.fs.isCwdEmpty(),_=!1;if(x&&(_=await this.cli.confirm(!0,"Would you like to start the tutorial in the current directory?")),!_){if(this.cli.fs.dirExists(this.name))if(this.cli.logWarning(`Directory "./${this.name}" already exists.`),await this.cli.confirm(!0,"Would you like to overwrite it?"))this.cli.logInfo(`Overwriting directory: ${this.cli.styles.bold(this.name)}`),this.cli.fs.deleteServiceDir(this.name);else return m();this.cli.fs.createServiceDir(this.name),this.cli.logInfo(`Created directory: ${this.cli.styles.bold(this.name)}`)}return v};this.cli.project.service=await m();let g=(s=this.cli.user)==null?void 0:s.generateSandboxName();this.cli.project.instance=new or({org:t,service:this.cli.project.service,instanceName:g,cli:this.cli}),this.cli.viewSpinner("Cloning @ampt-templates/tutorial"),await this.cli.fs.cloneGitRepo({repoUrl:e.tutorialGitUrl}),await this.cli.fs.read({orgName:t.orgName,appName:this.name});break}case"basic":{if((a=(o=this.cli.fs.serviceFile)==null?void 0:o.ampt)!=null&&a.app){this.name=(p=(u=this.cli.fs.serviceFile)==null?void 0:u.ampt)==null?void 0:p.app,await this.cli.fs.read({orgName:t.orgName,appName:this.name}),this.stepOrder=e.basicTutorialSteps;let m=!!this.cli.fs.dataFile,g=(h=(d=this.cli.fs.serviceFile)==null?void 0:d.scripts)==null?void 0:h["ampt:build"],v=this.stepOrder.reduce((I,x)=>(x==="importData"||x==="postImportData")&&!m||(x==="build"||x==="postBuild")&&!g?I:[...I,x],[]);this.stepOrder=v}else return await this.cli.quit("Expected an Ampt app to start the Ampt tutorial");break}default:return await this.cli.quit("Expected a valid Ampt tutorial type")}await this.cli.fs.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)}),await this.cli.project.boot(this.type==="basic"?["analyze","detect","connect"]:["connect"]),this.type==="full"&&this.cli.logSpace(),this.cli.logGroup(this.welcomeMessage),this.activeStepIndex=0;let r=this.stepOrder[this.activeStepIndex],n=await this.steps[r]();this.reportAnalytics({exit:!1,event:"ampt.tutorial.started",step:r}),this.logStep({step:n})}logStep(t){let{step:r}=t;this.cli.logSpace(),r.postAction?(this.cli.logGroup([r.pre].flat(),!0),this.cli._staticViewInputMsg='Type "next" or hit enter to continue',this.cli.viewInput()):this.cli.logGroup([r.title,r.pre].flat(),!0)}setType(t){this.type=t}getDurationMins(){let t=process.hrtime.bigint()-this.tutorialModeStart;return Math.round(Number(t)/6e10)}async complete(t){var i,s;let{exit:r=!1}=t||{exit:!1},n=this.stepOrder[this.activeStepIndex];this.reportAnalytics({exit:r,step:r?n:void 0}),this.inProgress=!1,this.activeStepIndex=null,await((s=(i=this.cli)==null?void 0:i.user)==null?void 0:s.updatePreferences({showTutorial:!1})),this.completeMsg()}reportAnalytics(t){var s,o,a;let{event:r,step:n,exit:i=!1}=t;fr({eventName:r||(i?"ampt.tutorial.skipped":"ampt.tutorial.completed"),eventData:{type:this.type,step:n,durationMinutes:r?void 0:this.getDurationMins(),userName:(s=this.cli.user)==null?void 0:s.username,orgName:(o=this.cli.project.org)==null?void 0:o.orgName,serviceName:(a=this.cli.project.service)==null?void 0:a.serviceName}})}completeMsg(){this.cli.logGroup([this.cli.styles.bold("We hope you enjoy using Ampt!"),"If you have any questions or feedback, join our discord: https://getampt.com/discord","To read up on everything Ampt, check out our docs: https://getampt.com/docs",`You can always re-run this tutorial with the command "${this.cli.styles.bold("tutorial")}"`,`You can clear this output with the command "${this.cli.styles.bold("clear")}"`,"Happy coding! \u{1F680}"])}};$h.default.extend(M1e.default);$h.default.extend(U1e.default);$h.default.updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:(e,t,r,n)=>e<=10?`${e} seconds`:e<=30?"several seconds":e<60?"less than a minute":`${e} seconds`,m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}});var Ab=(vV(),XR(yV)),{version:H1e}=oh(),QMt={dim:Co.default.dim,darkPurple:Co.default.hex("#B367FF"),purple:Co.default.hex("#F952FF"),yellow:Co.default.hex("#FFC700"),blue:Co.default.hex("#727aff"),red:Co.default.rgb(255,99,99),grey:Co.default.hex("#324f59"),pastel:Co.default.hex("#dbd8ca"),bold:Co.default.bold,green:Co.default.hex("#22b9b7")},GA=class e{static defaultSpinnerFrames=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];session;messenger;version=H1e;installedGlobally=SV.default;os=process.platform;user;fs;tutorial;project;showLogo=!0;fromClone=!1;inputValue;timer;isShellActive;isInteractive;isDevServerActive;isAnimationEnabled=!1;isCommandRunningInShell;buildRunningInShell;commandRunningInShellPromise;styles;icons;argv;startupOptions;options;args;names;command;orgName;org;service;serviceName;_exitCode=0;isGitPod=!1;isCodeSpaces=!1;isWebIde=!1;isBeta=!1;_lastSyncedAt;_lastSyncedAtInterval;_staticViewInputMsg;_activeOrgName;_activeServiceName;_allowedInputCharacter;_isLoggedTopPadding;_commandsHistory;_viewType;_viewMessage;_spinnerMessage;_spinnerStep;_isPromptActive;_promptResponse;_timerInterval;_spinnerInterval;_inputSpinnerInterval;_inputSpinnerStartedAt;_inputSpinnerStoppedAt;_tipsInterval;_tipsFrequency;_tipsCollectionIndex;_spinnerFrequency;_spinnerFrames;_spinnerFrameIndex;_selectItems;_selectedItemIndex;_selectedItem;_onQuit;_quitting;_suggestions;_commandsHistoryIndex;_devTipsCollection=["type `dev` to start running the dev server","type `stop` to stop a running dev server"];_cloudScriptsCollection=["add a `ampt:dev` script to package.json to run code within the Ampt context"];_tipsCollection=[];_xdgOpenInstalled=null;constructor(t){process.title="Ampt CLI",this.session=t,this.session.loadAmptConfig(),this.messenger=new nA,this.messenger.on("offline",(0,CV.default)(()=>{this.logError("Event Messenger offline")},1e3,!0)),this.messenger.on("online",(0,CV.default)(()=>{this.logInfo("Event Messenger online")},1e3,!0)),this.inputValue="",this.startupOptions={},this.options={},this.args=[],this.argv=[],this.command=void 0,this.names=void 0,this.icons={},this.commandRunningInShellPromise=null,this._allowedInputCharacter=/^[a-zA-Z0-9 ~:!@#$%^&*()-_=+.<>{}[\]"'/]+$/,this._viewType=null,this._viewMessage=void 0,this._spinnerMessage=null,this._spinnerStep=null,this._isPromptActive=void 0,this._promptResponse=void 0,this._commandsHistory=[],this._spinnerFrequency=100,this._spinnerFrames=e.defaultSpinnerFrames,this._spinnerFrameIndex=0,this.showLogo=!process.env.IS_CHILD_PROCESS&&!this.isGitPod&&this._canRenderBolt(),this.styles=QMt,this._startLastSyncedAtInterval(),this._initIcons(),this._initSuggestions(),process.env.AMPT_IS_GITPOD==="true"&&(this.isGitPod=!0,this.isWebIde=!0),process.env.AMPT_IS_CODESPACES==="true"&&(this.isCodeSpaces=!0,this.isWebIde=!0),this.isWebIde&&(this.isAnimationEnabled=!1),this.isBeta=this.version.includes("beta"),this.isInteractive=process.stdin.isTTY,this.fs=new _w({session:this.session}),this.project=new TA(this),this.tutorial=new OA(this)}async login(){return new Sa}setExitCode(t){this._exitCode=t}async start(t){let{_:r,...n}=(0,IV.default)(process.argv);if(this.startupOptions=n,this.fs.verbose=this.startupOptions.verbose,this.fromClone=(t==null?void 0:t.fromClone)||!1,this.os==="linux"&&(this._xdgOpenInstalled=await this.fs.detectXdgOpen()),r[2]!=="clone"&&process.platform!=="win32")try{Ae.enable()}catch(i){console.error(i)}return this.run()}async run(t){try{if(this._parseCommand(t),this.tutorial.inProgress)return await this.tutorial.handle(this.command);if(this.command==="sandbox")return await Ab.sandbox(this);if(this.command==="git"||this.command==="code")return await Ab.bash(this);this.isShellActive||(this._hideCursor(),this.command!=="run"&&(this._logLogo(),this.viewSpinner("Loading")),(this.command==="start"||this.command==="tutorial")&&await this._autoUpdate()),this._watchKeyboard();let r=["clone"],n=["promote","test"];if((this.command==="start"||this.command==="tutorial")&&(this.isShellActive=!0),this.isShellActive&&r.includes(this.command))throw new wp(`Command "${this.command}" is currently not supported in the shell`);if(n.includes(this.command))throw new wp(`Command "${this.command}" is not available.`);if(!Ab[this.command]&&this.command!=="tutorial")throw new wp(`Command "${this.command}" is not a valid command`);if(!this.user&&(this.user=await Sa.init(),!this.user.isLoggedIn())){this.logInfo("You must login to proceeed.");try{await this.user.performLogin(this)}catch(i){if(i.name==="UserDisabledError")return this.logError(i.message||"Your account has been disabled. Please contact support."),this._stop(0);throw i}}await this.messenger.connect(),this.command==="tutorial"&&(this.command="start",this.options.tutorial=!0),this.command==="dashboard"&&(this.command="open"),await Ab[this.command](this),this.options={}}catch(r){if(r instanceof Jh||r instanceof wp)this.logError(r.message);else{if(r instanceof bh)return this.logError(r.message),this._stop(this._exitCode);if(r.name==="InstancesLimitError"){let n=["share","deploy"].includes(this.command);return this.handleInstanceLimitExceeded({isDeploying:n})}else return r.name==="ServicesLimitError"?this.handleServiceLimitExceeded():(this.session.captureException(r),this.logError(`Something went wrong - please contact support and provide ${this.session.getSessionId()} as a reference ID`),await this.session.flushSentry(),this._stop(1))}}return this.isShellActive?this.viewInput():this._stop(this._exitCode)}handleServiceLimitExceeded(){let t="You have reached your app limit. Please upgrade your plan or delete an app.";return this.quit(t)}handleInstanceLimitExceeded(t){let{isDeploying:r=!1}=t||{},n="You have reached your environment limit. Please upgrade your plan or delete an environment.";if(!r)return this.quit(n);this.logWarning("Deployment failed"),this.logError(n),this.viewInput()}setProject(t){this.project=t}viewInput(t=this._formatLastSyncedAt()){this._timerInterval=clearInterval(this._timerInterval),this._spinnerInterval=clearInterval(this._spinnerInterval),this._startLastSyncedAtInterval(),this._switchView({viewType:"input",viewMessage:t})}spinInput(){if(this._viewType!=="input"){Ae.error({_viewType:this._viewType},"wrong viewType in spinInput");return}this.isAnimationEnabled&&(this._inputSpinnerStartedAt=Date.now(),clearInterval(this._inputSpinnerInterval),this._inputSpinnerInterval=setInterval(()=>this.updateInputSpinner(),this._spinnerFrequency).unref())}viewSpinner(t="Loading",r){let{timer:n=!1}=r||{};if(!this.isInteractive){console.log(t);return}if(!this.isAnimationEnabled){this._switchView({viewType:"spinner",viewMessage:t});return}this._spinnerMessage=t,this._spinnerStep="",clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,n&&(this.timer=0,this._timerInterval=setInterval(()=>this.timer=+this.timer+1,1e3).unref()),this._spinnerInterval=setInterval(()=>this._updateSpinner((this._spinnerMessage||"Loading")+(this._spinnerStep?` (${this._spinnerStep})`:""),{timer:n}),this._spinnerFrequency).unref()}updateLastSyncedAt(t){this._lastSyncedAt=t}updateInputSpinner(){this._spinnerFrameIndex=++this._spinnerFrameIndex%this._spinnerFrames.length,this._switchView({viewType:"input"})}stopSpinningInput(){this._inputSpinnerInterval&&(clearInterval(this._inputSpinnerInterval),this._inputSpinnerStoppedAt=Date.now(),this._inputSpinnerInterval=void 0),this.viewInput()}updateSpinnerStep(t){if(!process.stdin.isTTY){console.log(t);return}this._spinnerStep=t}pause(){this._clearIntervals(),this._switchView({viewType:"pause"}),this._eraseCursorLineAndBelow()}async prompt(t,r={}){for(this._isPromptActive=!0,r.default&&(this.inputValue=r.default),this.viewInput(t);!this._promptResponse;)await Tu(50);let n=this._promptResponse;return this.logInfo(`You've entered ${this.styles.bold(n)}.`),this._promptResponse=null,this._isPromptActive=!1,n}async promptServiceName(t=null){let r=await this.prompt("Enter a name for your app",{default:t});return r.match(/^[a-z0-9-]+$/)?r:(this.logError("App name must consist only of lowercase characters and hyphens. Please try again."),await this.promptServiceName())}async confirm(t=!1,r){r&&this.logQuestion(r);let n=["no","yes"],i=await this.select(t?n.reverse():n);return i==="yes"}async select(t=[],r=0){if(clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,this._selectItems=t,this._selectedItemIndex=r,this._switchView({viewType:"select"}),this._selectItems.length===1)return this._selectedItem=this._selectItems[0],this._selectedItem;for(;!this._selectedItem;)await Tu(50);let n=this._selectedItem;return typeof n=="object"?this.logInfo(`You've selected ${this.styles.bold(n.title)}.`):this.logInfo(`You've selected ${this.styles.bold(n)}.`),this._selectedItem=null,this._selectedItemIndex=null,this._selectItems=[],n}async selectOrg(t,r){this.viewSpinner("Loading");let n,i=(t.orgs||[]).map(s=>s.orgName);return i.length>1?(this.logInfo(r||"Please select an organization."),n=await this.select(i)):n=i[0],n}async selectService(t,r){let n;this.viewSpinner("Loading");let i=(await t.listServicesWithInstances()).map(s=>s.serviceName);return Ae.debug({servicesList:i},"select service"),i.length>1?(this.logInfo(r||"Please select a service."),n=await this.select(i)):n=i[0],n}async selectInstance({service:t,instanceType:r,instanceName:n,message:i}){let o=(await(t==null?void 0:t.listInstances().catch(()=>[]))||[]).filter(p=>!r||p.instanceType===r).map(p=>({instanceName:p.instanceName,region:p.region,displayRegion:p.region||"",display:`${p.instanceName} (${p.region})`}));if(n)return o.find(p=>p.instanceName===n)||{instanceName:n,isNewInstance:!0};if(o.length===0)return{instanceName:void 0};if(o.length===1)return{instanceName:o[0].instanceName,isNewInstance:!1};this.logInfo(i||"Please select a stage.");let a=await this.select(o.map(p=>p.display));return{instanceName:o.find(p=>p.display===a).instanceName,isNewInstance:!1}}logSuccess(t,r=0){this.log(`${this.icons.tick} ${t}`,r)}logError(t,r=0){this.log(`${this.icons.cross} ${this.styles.bold(this.styles.red(t))}`,r)}logCancelled(){this.logError("Cancelled")}logInfo(t,r=0){this.log(`${this.icons.info} ${t}`,r)}logWarning(t,r=0){this.log(`${this.icons.warning} ${t}`,r)}logQuestion(t,r=0){this.log(`${this.icons.question} ${t}`,r)}logGroup(t,r=!0){t.forEach((n,i)=>{let o=r&&i===0?`${this.icons.arrow} ${this.styles.bold(n)}`:` ${this.icons.dot} ${n}`;this.log(o,i>0?2:0)})}logUrl(t,r=0){this.log(`${this.icons.arrow} ${t}`,r)}logTime(t,r=0){this.log(`${this.styles.dim(`${new Date(Date.now()).toLocaleTimeString()} ${this.icons.line}`)} ${t}`,r)}log(t="",r=0){this._ensureTopPadding(),this._eraseCursorLineAndBelow(),this._log(`${" ".repeat(r)}${t}
291
+ ${s}`)}}});var JMt,P1e=ae(()=>{"use strict";c();Zn();JMt=async e=>{e.viewSpinner("Loading");let t=e.fs;if(await t.read(),!t.serviceFile)throw new Error("You must be inside an Ampt app directory to run this command.");let{user:r}=e,n=e.options.org||t.serviceFile.ampt.org,i=e.options.app||t.serviceFile.ampt.app,s=e.args[0]||r.username;n||(n=await e.selectOrg(r)),e.viewSpinner("Loading");let o=new Jt({orgName:n});await o.isAuthorized()||(e.logError(`You don't have access to the "${n}" org.`),n=await e.selectOrg(r)),o.update({orgName:n}),e.viewSpinner("Loading");let a=new Pt({org:o,serviceName:i}),u=new or({org:o,service:a,instanceName:s});await u.get(),e.logUrl(u.url)}});var D1e,$Mt,q1e=ae(()=>{"use strict";c();D1e=Ce(oh()),$Mt=async e=>{e.log(`v${D1e.version}`)}});var yV={};jR(yV,{bash:()=>RMt,clone:()=>TMt,dashboard:()=>NMt,delete:()=>BMt,deploy:()=>kMt,docs:()=>OMt,export:()=>GMt,help:()=>FMt,import:()=>LMt,install:()=>ZMt,login:()=>WMt,logout:()=>PMt,open:()=>DMt,promote:()=>qMt,run:()=>HMt,sandbox:()=>MMt,serverless:()=>UMt,setup:()=>fV,share:()=>jMt,start:()=>XMt,stop:()=>YMt,test:()=>KMt,uninstall:()=>zMt,url:()=>JMt,version:()=>$Mt});var vV=ae(()=>{"use strict";c();u1e();p1e();d1e();f1e();h1e();m1e();g1e();v1e();b1e();I1e();_1e();C1e();x1e();S1e();T1e();N1e();O1e();hV();G1e();F1e();L1e();Z1e();W1e();P1e();q1e()});var tUt={};jR(tUt,{default:()=>eUt});module.exports=XR(tUt);c();c();(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},t=new Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="0a7a6b02-9379-44ec-b4d9-7a951c1a7a91",e._sentryDebugIdIdentifier="sentry-dbid-0a7a6b02-9379-44ec-b4d9-7a951c1a7a91")}catch{}})();c();c();c();var bV=Ce(require("os")),$h=Ce(CI()),M1e=Ce(QM()),U1e=Ce(eU()),Xs=Ce(sU()),j1e=Ce(bU()),Co=Ce(JU()),X1e=Ce(ej()),Xp=Ce(rj()),Y1e=Ce(oj()),IV=Ce(lj()),K1e=Ce(AX()),_V=Ce(wB()),CV=Ce(AB()),xV=require("child_process"),SV=Ce(i4()),z1e=require("fs/promises"),Qh=Ce(yl()),FA=Ce(h1());dr();CW();Zn();_h();c();Zn();dr();xs();c();var a1e=Ce(yl()),gV=Ce(require("path")),RA=Ce(require("assert"));Zn();xs();dr();oZ();hV();c();dr();ua();function mV(e){(async()=>{let{orgName:t,serviceName:r,instanceName:n}=e;try{await $e({method:"POST",body:e,endpoint:`/orgs/${t}/services/${r}/instances/${n}/metrics`})}catch(i){Wt.captureException(i),process.env.AMPT_DEBUG&&console.error(i)}})()}var Mu=class extends Error{function=null;constructor(t,r){super(t),this.function=r}};var TA=class e{initialized=!1;cli;org;service;instance;data;code;isGitInstalled=!1;isCodeInstalled=!1;isSeedingEnabled=!1;isReseedingEnabled=!1;devModeStart=void 0;messenger;sandboxActive=!1;syncInProgress=!1;queuedFilePaths=new Set;constructor(t){this.cli=t}static async checkIfServiceExists(t){return!!await t.get().catch(()=>{})}async handleGitError(){return this.cli.logWarning(`"${this.cli.styles.bold("git")}" is not installed on this system.`),await this.cli.quit("Please install git and try again.")}async runSystemChecks(){let[t,r]=await Promise.all([this.cli.fs.detectGit(),this.cli.fs.detectVsCode()]);this.isGitInstalled=t,this.isCodeInstalled=r}getSandboxUrl(){if(this.instance)return this.instance.url}getDashboardUrl(){if(this.org&&this.service&&this.instance)return`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${this.org.orgName}/apps/${this.service.serviceName}/environments/${this.instance.instanceName}`}async boot(t){let r=new Set(t);r&&r.size>0?(r.has("analyze")&&await this.analyze(),r.has("detect")&&await this.detect(),r.has("connect")&&await this.connect(),r.has("dev")&&await this.dev()):(await this.analyze(),await this.detect(),await this.connect(),await this.dev())}async selectOrg(){var s,o,a;let t=this.cli,r=t.user;if(!r)return await this.cli.quit("You must be logged in to use this command.");if(await r.listOrgs(),((s=r.orgs)==null?void 0:s.length)===0)return await t.quit("You do not have access to any organizations.");let n=t.options.org;((o=r.orgs)==null?void 0:o.length)===1&&!n?n=r.orgs[0].orgName:((a=r.orgs)==null?void 0:a.length)>1&&!n&&(n=await t.selectOrg(r));let i=new Jt({orgName:n});i.update({orgName:n}),this.org=i}async authorize(){var n,i,s;let t=this.cli.user,r=this.cli.options.org||((i=(n=this.cli.fs.serviceFile)==null?void 0:n.ampt)==null?void 0:i.org);if(r&&!t.hasAccessToOrg(r)&&(this.cli.logWarning(`Org "${r}" has either been deleted, renamed, or you no longer have access to it.`),r=void 0),r?this.org=new Jt({orgName:r}):(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"org"}}),await this.selectOrg(),await this.cli.fs.readServiceFileIfExists({orgName:r||((s=this.org)==null?void 0:s.orgName)})),!this.org)return await this.cli.quit("Ampt Organization is required");await this.org.isAuthorized()||(this.cli.logError(`You don't have access to the "${r}" org.`),await this.selectOrg()),this.cli._activeOrgName=this.org.orgName}async analyze(){this.cli.viewSpinner("Analyzing Project"),await fV(this.cli),await this.cli.checkForAmptPackageUpdates()}async hydrate(){if(!this.org){await this.cli.quit("Ampt Organization is required");return}if(!this.service){await this.cli.quit("Ampt App is required");return}if(!this.instance){await this.cli.quit("Ampt Environment is required");return}let[t,r,n,i]=await Promise.all([this.instance.get().catch(()=>{}),this.service.get().catch(()=>{}),this.org.fetch(),this.org.getRegions()]),s=this.cli.selectRegion({orgInfo:n,serviceInfo:r,instanceInfo:t,regions:i});if(!s){this.cli.logError("No region selected."),await this.cli.quit();return}this.instance.region=s.code}async detect(){var r,n,i;this.cli.viewSpinner("Starting");let t=this.cli.options.app||((n=(r=this.cli.fs.serviceFile)==null?void 0:r.ampt)==null?void 0:n.app);t||(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"service"}}),t=await this.cli.promptServiceName(),this.cli.viewSpinner("Saving"),await this.cli.fs.writeServiceFile({serviceName:t})),this.cli._activeServiceName=t,this.service||(this.service=new Pt({org:this.org,serviceName:t})),this.instance||(this.instance=new or({org:this.org,service:this.service,instanceName:(i=this.cli.user)==null?void 0:i.generateSandboxName()})),await this.hydrate()}async connect(){if((0,RA.default)(this.org,"Org is required"),(0,RA.default)(this.service,"Service is required"),(0,RA.default)(this.instance,"Instance is required"),!this.cli.user)return await this.cli.quit("You must be logged in");let t=this.org.orgName,r=this.service.serviceName;if(this.cli.viewSpinner("Connecting to your personal sandbox environment..."),this.devModeStart=process.hrtime.bigint(),await this.cli.isAmptShellRunning({orgName:t,serviceName:r}))return this.cli.logError(`The Ampt shell for app "${r}" in org "${t}" is already running in another terminal.`),await this.cli.quit();await this.cli.writeAmptShellActivityFile({orgName:t,serviceName:r}),this.cli.bindService({orgName:t,serviceName:r}),this.cli.onQuit(async()=>{var d;(0,a1e.removeSync)(fh(t,r)),await fi.stop(this.cli,{hasQuit:!0,orgName:t,serviceName:r});let u=await this.cli.fs.readJsonFileIfExists(this.cli.fs.serviceFilePath),p=process.hrtime.bigint();(d=this.messenger)==null||d.close(),fr({eventName:"ampt.dev.ended",eventData:{source:this.cli.isGitPod?"gitpod":"local",timeInSeconds:this.devModeStart?Number(p-this.devModeStart)/1e9:0,dependencies:Object.keys((u==null?void 0:u.dependencies)||{}),appName:`${t}:${r}`}})}),this.code=new is({org:this.org,service:this.service,instance:this.instance,user:this.cli.user,fullSync:this.cli.options["full-sync"],cli:this.cli,verbose:this.cli.options.verbose}),this.data=new Du({fs:this.cli.fs,org:this.org,service:this.service,instance:this.instance}),this.cli.session.setSentryContext({identifier:`${this.org.orgName}:${this.service.serviceName}:${this.instance.instanceName}`,service:this.service.serviceName,instance:this.instance.instanceName,org:this.org.orgName}),this.cli.viewSpinner("Syncing");let i=this.cli.viewSpinner.bind(this.cli),s=u=>i(`Syncing (${u})`),o=await this.code.sync(void 0,s);this.cli.updateLastSyncedAt(Date.now()),mV({...o,source:this.cli.isGitPod?"gitpod":"local",orgName:t,serviceName:this.service.serviceName,instanceName:this.instance.instanceName,appName:`${t}:${r}`,region:this.instance.region}),this.cli.viewSpinner("Connecting to real time logs");let[a]=await Promise.all([this.instance.connect({cli:this.cli}),this.cli.messenger.subscribe({userUid:this.cli.user.userId,orgName:t,appName:r,instanceName:this.instance.instanceName})]);this.messenger=a}async dev(t){var I;let{logDashboard:r=!1}=t||{},n=this.org,i=this.service,s=this.instance,o=this.code,a=n.orgName,u=i.serviceName,p=s.instanceName,d=this.cli.styles.purple(`@${a}`),h=this.cli.styles.blue(u),m=this.cli.styles.green(p),g=this.cli.styles.dim("/"),v=`Connected to ${this.cli.styles.bold(`${d}${g}${h}${g}${m}`)}`;if(this.cli.logSuccess(v),this.cli.logUrl(s.url),r){this.cli.logSpace(),this.cli.logInfo("View your app in the dashboard");let x=`${process.env.AMPT_DASHBOARD_URL_ROOT}/orgs/${a}/apps/${u}/environments/${p}`;this.cli.logUrl(x)}if(this.isReseedingEnabled&&this.cli.logSuccess("Enabled automatic data reseeding"),this.cli.viewInput(),this.cli.options.dev){let{url:x,region:_}=s,{credentials:A,env:E}=o;fi.start({credentials:A,env:E,url:x,cli:this.cli,fs:this.cli.fs,user:this.cli.user,scriptName:"dev",ifPresent:!1,orgName:a,serviceName:u,region:_}).catch(S=>{Ae.error({err:S},"Error starting dev server"),this.cli.logError("Something went wrong starting the dev server.")})}fr({eventName:"ampt.dev.enabled",eventData:{dependencies:Object.keys(((I=this.cli.fs.serviceFile)==null?void 0:I.dependencies)||{}),appName:`${a}:${u}`}}),this.isSeedingEnabled&&await this.seed(),this.cli.fs.watch(o.workspaceRoot,this.onFileChange.bind(this)),this.sandboxActive=!0}async onFileChange(t){(async()=>{let r=this.org.orgName,n=this.service.serviceName,i=this.instance.instanceName;if(!this.code)return await this.cli.quit("Sync engine is not active");for(let p of t)this.queuedFilePaths.add(p);let s=this.queuedFilePaths,o=await fi.isRunning({orgName:r,serviceName:n}),a=this.cli.buildRunningInShell;if(this.cli.isCommandRunningInShell&&!o&&(Ae.trace("waiting for command to finish"),await this.cli.commandRunningInShellPromise,Ae.trace("command finished")),this.syncInProgress){Ae.trace("sync in progress, skipping");return}this.syncInProgress=!0;let u;if(a)await this.cli.commandRunningInShellPromise,u=await this.code.sync();else for(;this.queuedFilePaths.size>0;){let p=this.queuedFilePaths;this.queuedFilePaths=new Set,this.isReseedingEnabled&&this.cli.fs.dataFilePath&&p.has(this.cli.fs.dataFilePath)&&(this.cli.viewSpinner("Seeding",{timer:!0}),await this.seed()),(!this.cli.isCommandRunningInShell||o)&&this.cli.spinInput(),Ae.trace({size:p.size,queued:this.queuedFilePaths.size},"starting sync"),u=await this.code.sync(p),Ae.trace({size:p.size,queued:this.queuedFilePaths.size},"sync complete")}mV({...u,source:this.cli.isGitPod?"gitpod":"local",orgName:r,serviceName:n,instanceName:i,appName:`${r}:${n}`,region:this.instance.region}),this.syncInProgress=!1,this.cli.updateLastSyncedAt(Date.now()),this.cli.isAnimationEnabled||this.cli.logSuccess("Successfully updated your code"),(!this.cli.isCommandRunningInShell||o)&&this.cli.stopSpinningInput(),this.cli.tutorial.inProgress&&await this.cli.tutorial.onSync(s)})().catch(r=>{Ae.error({method:"sync-callback",err:r},"Error syncing code"),this.cli.logError("Something went wrong syncing your code. Please try again.")})}async seed(){var t;this.data&&(this.cli.viewSpinner("Seeding"),await this.data.import(),this.cli.logSuccess(`Seeded data from the ${(t=this.cli.styles)==null?void 0:t.bold(this.cli.fs.dataFileName)} file.`),this.cli.viewInput())}async setupApp(t){var p,d,h,m;let{name:r}=t||{},{org:n}=this,{fs:i}=this.cli;if(n||await this.authorize(),!n)return await this.cli.quit("Ampt Organization is required");let s=r||((d=(p=i.serviceFile)==null?void 0:p.ampt)==null?void 0:d.app)||this.cli.options.app,o=await this.cli.promptServiceName(s),a=new Pt({org:n,serviceName:o});if(await e.checkIfServiceExists(a)&&(this.cli.logWarning(`App ${(m=this.cli.styles)==null?void 0:m.purple((h=this.cli.styles)==null?void 0:h.bold(`"${o}"`))} already exists for this org.`),this.cli.logQuestion("Would you like to overwrite it?"),!await this.cli.confirm()))return this.setupApp({name:r});Ae.info({serviceName:a.serviceName,orgName:n.orgName},"app init"),this.service=a}async assureServiceDir(){var i;let{fs:t}=this.cli;if(!this.service||!this.service.serviceName)throw new Mu("Expected App to be defined","assureServiceDir");let r=!1;if(await t.isCwdEmpty()&&(r=await this.cli.confirm(!0,"Would you like to use the current directory?")),!r){if(t.dirExists(this.service.serviceName)){this.cli.logWarning(`Directory "./${this.service.serviceName}" already exists.`);let s=await this.cli.confirm(!1,"Would you like to overwrite it?"),o=await this.cli.confirm(!1,"Are you sure? This will delete all files in the directory.");if(s&&o)t.deleteServiceDir(this.service.serviceName),Ae.debug(`Deleted directory ${this.service.serviceName}`);else return this.assureServiceDir()}t.createServiceDir(this.service.serviceName),this.cli.logSuccess(`Created directory ${this.cli.styles.bold(this.cli.styles.darkPurple(`./${this.service.serviceName}`))}`),await t.read({orgName:(i=this.org)==null?void 0:i.orgName}),Ae.debug(`Created directory ${this.service.serviceName}`)}}async setupTemplate(){let{fs:t}=this.cli,{template:r}=this.cli.options;if(!this.org)throw new Mu("Expected Org to be defined","setupTemplate");let n=r,[i,s]=await Promise.all([qS(this.cli),this.org.validateLimits()]);if(Ae.trace({templates:i.length,limitResult:s},"setupTemplate"),s.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(s.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();let o=i.find(a=>a.name===n);if(!o){this.cli.logWarning(`Template "${n}" not found.`),this.cli.logInfo("Please choose a template to generate.");let a=await this.cli.select(i);o=a,n=a.name}if(await this.setupApp({name:n}),await this.assureServiceDir(),!this.service)throw new Mu("Expected App to be defined","setupTemplate");if(!t.serviceRoot)throw new Mu("Expected serviceRoot to be defined","setupTemplate");await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:o,existingProject:!1}),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}async setup(){let{fs:t}=this.cli;if(this.org||await this.authorize(),!this.org)return await this.cli.quit("Ampt Organization is required");let[r,n]=await Promise.all([t.readJsonFileIfExists(gV.default.join(t.serviceRoot,"package.json")),t.isCwdEmpty()]);if(n&&await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();if(r&&!r.ampt){if(fr({eventName:"ampt.dev.prompt",eventData:{promptName:"migrateExistingApp"}}),this.cli.logInfo("This directory does not contain an Ampt project."),this.cli.logQuestion("Would you like to initialize it?"),await this.cli.confirm()){if(this.cli.viewSpinner("Migrating project to Ampt"),await this.setupApp({name:r.name||gV.default.basename(t.serviceRoot)}),!this.service||!this.service.serviceName)throw new Mu("Expected App to be defined","setup");if(await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,existingProject:!0}),this.cli.logInfo(`${this.cli.styles.bold(this.cli.styles.darkPurple(this.service.serviceName))} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();this.cli.viewSpinner("Installing Dependencies"),await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)});return}}else if(r)await t.initService({orgName:this.org.orgName,existingProject:!0});else{if(this.cli.logQuestion("Would you like to create a new app?"),!await this.cli.confirm())return await this.cli.quit("Stopped");this.cli.viewSpinner("Loading");let[s,o]=await Promise.all([qS(this.cli),this.org.validateLimits()]);if(o.serviceExceeded)return this.cli.handleServiceLimitExceeded();if(o.instanceExceeded)return this.cli.handleInstanceLimitExceeded();if(!this.isGitInstalled)return await this.handleGitError();fr({eventName:"ampt.dev.prompt",eventData:{promptName:"template"}}),this.cli.logInfo("Choose a template to generate.");let a=await this.cli.select(s);if(await this.setupApp({name:a.name}),await this.assureServiceDir(),!this.service||!this.service.serviceName)throw new Mu("Expected App to be defined","setup");if(this.cli.viewSpinner("Generating template..."),await t.initService({orgName:this.org.orgName,serviceName:this.service.serviceName,template:a,existingProject:!1}),t.dataFile&&(this.isSeedingEnabled=!0),this.cli._clearScreen(),this.cli.logSuccess(`${this.cli.styles.bold(this.service.serviceName)} initialized`),await this.shouldStartTutorial())return await this.cli.tutorial.initTutorial();await t.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)})}}async shouldStartTutorial(){var s,o;let{cli:t}=this,{session:r}=t,{showTutorial:n,allowDismiss:i}=r.shouldPromptTutorial();if(n){let a=["Yes","Skip for now"];i&&a.push("Don't show again"),t.logQuestion("Would you like to start the tutorial?");let u=await t.select(a);if(u==="Yes")return this.isSeedingEnabled=!0,!0;if(u=="Don't show again"){t.logInfo(`You can always run ${(s=t.styles)==null?void 0:s.bold("ampt tutorial")} to go through the tutorial.`),t.viewSpinner("Saving Preferences");try{await((o=t.user)==null?void 0:o.updatePreferences({showTutorial:!1}))}catch{t.logError("Failed to save preferences")}}}return!1}async init(){let{cli:t}=this,r=t.user;if(!r)return await t.quit("You must be logged in to use this command.");if(!r.orgs||!r.orgs.length)return await t.quit("You do not have access to any organizations.");await t.fs.read();try{await Promise.all([this.authorize(),this.runSystemChecks()]),this.isSeedingEnabled=t.options.seed||t.options.s||!1,this.isReseedingEnabled=t.options.reseed||t.options.rs||!1;let n=t.options.tutorial??!1,i=t.options.template??!1;if(Ae.debug({tutorialPassed:n,templatePassed:i},"Project.init"),i&&await this.setupTemplate(),n)return await t.tutorial.initTutorial();await this.setup(),this.initialized=!0}catch(n){return await t.quit(n.message)}}};var V1e=(vV(),XR(yV));var Jh=class extends Error{function=null;constructor(t,r){super(t),this.function=r}},OA=class e{static tutorialGitUrl="https://github.com/ampt-templates/tutorial";static exitCmd="end";static iterationCmds=["skip","next","done"];static fullTutorialSteps=["editor","sandbox","postSandbox","importData","postImportData","staticAssets","postStaticAssets","runningScripts","postRunningScripts","deploy","postDeploy","dashboard"];static basicTutorialSteps=["editor","sandbox","postSandbox","staticAssets","build","postBuild","importData","postImportData","runningScripts","deploy","dashboard"];welcomeMessage=["Welcome to Ampt!","This Ampt CLI tutorial allows you to exit anytime with 'end' and skip steps using 'skip'."];cli;name;type="basic";inProgress=!1;tutorialModeStart=void 0;nextCommand;activeStepIndex=null;stepOrder=e.fullTutorialSteps;steps={editor:async()=>{let t="To begin, let's open the project in a code editor.";return{title:"Open the project in an editor",pre:this.cli.project.isCodeInstalled?[t,'Run `code .` in the terminal to open the project in Visual Studio Code or type "done" to continue']:[t,'Open the project in your favorite code editor and type "done" to continue'],command:"code"}},sandbox:async()=>{var r,n;let t=["The URL above is your developer sandbox. Code changes are synced here in real-time","Your sandbox goes offline when you disconnect from the CLI","Open the URL in your favorite browser to see your app in action"];return this.type==="full"?t.push('Try making a change to "index.tsx", refresh, and see the changes in real-time!'):(t.push("Try making a change to the code, refresh, and see the changes in real-time!"),(n=(r=this.cli.fs.serviceFile)==null?void 0:r.scripts)!=null&&n["ampt:dev"]&&t.push(`Note, if you're building a frontend app, you can use the "dev" command to start the local development server`)),{title:"The Developer Sandbox",pre:t,event:"sync"}},postSandbox:async()=>({title:"Sandbox Synced",pre:["Sandbox synced!","Any logs or errors from your sandbox are displayed here",'The "main" field in your package.json is the entry point to your app, and is the first file that is executed when your app starts.','By default, this is "index.js" or "index.ts" in the root of your project.'],postAction:!0}),staticAssets:async()=>{let t=["The `static` directory is automatically synced and served from your Ampt environment","This is useful for serving images, fonts, and other static assets"];this.type==="full"?t.push('Try moving "test.html" into the "static" directory and see it update in the sandbox'):t.push("Add a file to your static directory, or hit enter to skip");let r=this.type==="full"?"sync":void 0;return{title:"Static Assets",pre:t,event:r}},postStaticAssets:async()=>{let t=this.cli.project.getSandboxUrl();return{postAction:!0,title:"Static Assets Synced",pre:["Static assets synced!",t?`Now, try navigating to ${t}/test.html to see the changes`:"Try navigating to the /test.html route to see the changes"]}},importData:async()=>({title:"Importing Data to @ampt/data",pre:['You can import data into your Ampt environment using the "import" command',"This command is useful for seeding your database with data for development and testing","Try running the import command now by typing `import` into the terminal"],command:"import"}),postImportData:async()=>({title:"Data Imported!",pre:["Data imported!",this.type==="full"?"Now, try refreshing the sandbox to see the changes in the environment":"Data seeded from your data file is now available in your environment"],postAction:!0}),runningScripts:async()=>{let t=["The Ampt shell allows you to run scripts within the context of your app","For scripts within your package.json, prefix them with 'ampt', e.g. 'ampt:test'"];this.type==="full"&&t.push('Try running the test script by typing "run test" into the terminal'),this.type==="basic"&&(t.push('To run a script, just type "run" followed by the script name, e.g. "run test" for "ampt:test"'),t.push('Ampt automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'));let r=this.type==="full"?"run":void 0,n=this.type==="full"?"test":void 0;return{title:"Running scripts within the Ampt context",pre:t,command:r,runArg:n}},postRunningScripts:()=>Promise.resolve({title:"Scripts Run!",pre:["Nice, you just ran the test script!",'Ampt also automatically handles JS or TS files, just provide the path after the "run" command, e.g. "run scripts/list-todos.ts"'],postAction:!0}),deploy:()=>Promise.resolve({title:"Deploying to a permanent environment",pre:["To deploy your current sandbox, use the 'deploy prod' command to create a new stage environment named 'prod'","Note, this can take a second, as Ampt provisions an entirely new environment for you in a separate AWS account"],post:["Stage deployed!","The URL above is a stage environment, and is always available."],command:"deploy"}),postDeploy:()=>Promise.resolve({title:"Stage Deployed!",pre:["Stage deployed!","The URL above is a stage environment, and is always available",'Updates to the stage environment are made using the "deploy" command, or automatically using Git CI/CD.'],postAction:!0}),dashboard:()=>Promise.resolve({title:"The Ampt Dashboard",pre:["The dashboard is where you can manage your Ampt environments, view logs, data, and more",'Try opening the your dashboard with the "dashboard" command'],command:"dashboard"}),build:()=>Promise.resolve({title:"Building the app",pre:['For projects with a build step, use "build" to execute the "ampt:build" script in package.json',"Build output is automatically synced and is available at your sandbox url"],command:"run",runArg:"build"}),postBuild:()=>Promise.resolve({title:"App built!",pre:["Depending on your project, you might need to configure its output to be served from the 'static' directory","For more details on your specific framework, check out the Ampt documentation at https://getampt.com/docs"],postAction:!0})};constructor(t){if(!t.project)throw new Jh("Project should be set before Tutorial is initialized","constructor");this.cli=t}isExitCmd(t){return t===e.exitCmd}isIterationCmd(t){return e.iterationCmds.includes(t)}async iterateStep(t){let{skip:r=!1}=t||{skip:!1};if(this.inProgress&&this.activeStepIndex!==null){let n=this.activeStepIndex+1;if(this.activeStepIndex===0&&!this.cli.project.sandboxActive&&(this.cli.logSpace(),await this.cli.project.dev({logDashboard:!1})),this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex],event:"ampt.tutorial.step_completed"}),n<this.stepOrder.length){this.activeStepIndex=n;let i=await this.steps[this.stepOrder[this.activeStepIndex]]();r&&i.postAction&&n+1<this.stepOrder.length&&(this.activeStepIndex=n+1,i=await this.steps[this.stepOrder[this.activeStepIndex]]()),this.nextCommand=i.command||void 0,this.logStep({step:i}),!i.command&&!i.event&&!i.postAction&&await this.iterateStep()}else await this.complete()}}async onSync(t){if(this.inProgress&&this.activeStepIndex!==null){let r=this.stepOrder[this.activeStepIndex];t.size>0&&(r==="sandbox"||r==="staticAssets"&&Array.from(t).some(n=>n.includes("static")))&&await this.iterateStep()}}async handle(t){var r;if(this.inProgress&&this.activeStepIndex!==null){let n=this.stepOrder[this.activeStepIndex],i=await this.steps[n]();if(this.isExitCmd(t))return this.cli.project.sandboxActive||await this.cli.project.dev(),await this.complete({exit:!0});if(i.postAction&&(this.cli._staticViewInputMsg=void 0),this.isIterationCmd(t))return this.reportAnalytics({exit:!1,step:this.stepOrder[this.activeStepIndex]}),await this.iterateStep({skip:!0});if(i.command==="run"&&t==="run"&&(!this.cli.args[0]||i.runArg&&i.runArg!==this.cli.args[0])){this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${i.runArg}"`);return}else if(i.command&&t!==i.command){let s=this.cli.styles.purple(n==="build"?"build":i.command);this.cli.logWarning(`Invalid command: "${this.cli.styles.bold(this.cli.styles.red(t))}" - expected "${this.cli.styles.bold(s)}"`);return}else{if(i.command==="deploy"&&t==="deploy"&&!((r=this.cli.names)!=null&&r.instanceName)){this.cli.logWarning('You must provide a stage name to deploy to. Example: "deploy prod"');return}if(n==="editor"&&t==="code")await V1e.bash(this.cli);else{let s=V1e[t];if(t&&i.event==="sync"){this.cli.logWarning("Waiting for changes to sync to the sandbox...");return}if(!s){this.cli.logError(`Command "${t}" not found - expected "${i.command}"`);return}this.cli.logSpace(),await s(this.cli)}try{return this.cli.viewInput(),this.iterateStep()}catch(s){throw new Jh(s.message,"handle")}}}}async initTutorial(){var i,s,o,a,u,p,d,h;if(!this.cli.user)return await this.cli.quit("You must be logged in to start the Ampt tutorial");if(!this.cli.project.org)return await this.cli.quit("Expected Ampt organization to start the Ampt tutorial");this.name=`${(i=this.cli.user)==null?void 0:i.username}-ampt-tutorial`,this.inProgress=!0,this.tutorialModeStart=process.hrtime.bigint(),this.type=this.cli.fs.serviceFile?"basic":"full",Ae.debug({type:this.type,name:this.name},"initTutorial");let t=this.cli.project.org;switch(this.type){case"full":{if(!await this.cli.fs.detectGit())return await this.cli.quit("Git is required to start the Ampt tutorial");let m=async()=>{this.name=await this.cli.promptServiceName(this.name);let v=new Pt({org:this.cli.project.org,serviceName:this.name});if(await v.get().catch(()=>{}))return this.cli.logWarning(`App ${this.cli.styles.bold(this.cli.styles.purple(this.name))} already exists in ${this.cli.styles.bold(this.cli.styles.darkPurple(t.orgName))}`),await this.cli.confirm(!0,"Would you like to overwrite it?")?v:m();let x=await this.cli.fs.isCwdEmpty(),_=!1;if(x&&(_=await this.cli.confirm(!0,"Would you like to start the tutorial in the current directory?")),!_){if(this.cli.fs.dirExists(this.name))if(this.cli.logWarning(`Directory "./${this.name}" already exists.`),await this.cli.confirm(!0,"Would you like to overwrite it?"))this.cli.logInfo(`Overwriting directory: ${this.cli.styles.bold(this.name)}`),this.cli.fs.deleteServiceDir(this.name);else return m();this.cli.fs.createServiceDir(this.name),this.cli.logInfo(`Created directory: ${this.cli.styles.bold(this.name)}`)}return v};this.cli.project.service=await m();let g=(s=this.cli.user)==null?void 0:s.generateSandboxName();this.cli.project.instance=new or({org:t,service:this.cli.project.service,instanceName:g,cli:this.cli}),this.cli.viewSpinner("Cloning @ampt-templates/tutorial"),await this.cli.fs.cloneGitRepo({repoUrl:e.tutorialGitUrl}),await this.cli.fs.read({orgName:t.orgName,appName:this.name});break}case"basic":{if((a=(o=this.cli.fs.serviceFile)==null?void 0:o.ampt)!=null&&a.app){this.name=(p=(u=this.cli.fs.serviceFile)==null?void 0:u.ampt)==null?void 0:p.app,await this.cli.fs.read({orgName:t.orgName,appName:this.name}),this.stepOrder=e.basicTutorialSteps;let m=!!this.cli.fs.dataFile,g=(h=(d=this.cli.fs.serviceFile)==null?void 0:d.scripts)==null?void 0:h["ampt:build"],v=this.stepOrder.reduce((I,x)=>(x==="importData"||x==="postImportData")&&!m||(x==="build"||x==="postBuild")&&!g?I:[...I,x],[]);this.stepOrder=v}else return await this.cli.quit("Expected an Ampt app to start the Ampt tutorial");break}default:return await this.cli.quit("Expected a valid Ampt tutorial type")}await this.cli.fs.installDependenciesIfExists({viewSpinner:this.cli.viewSpinner.bind(this.cli)}),await this.cli.project.boot(this.type==="basic"?["analyze","detect","connect"]:["connect"]),this.type==="full"&&this.cli.logSpace(),this.cli.logGroup(this.welcomeMessage),this.activeStepIndex=0;let r=this.stepOrder[this.activeStepIndex],n=await this.steps[r]();this.reportAnalytics({exit:!1,event:"ampt.tutorial.started",step:r}),this.logStep({step:n})}logStep(t){let{step:r}=t;this.cli.logSpace(),r.postAction?(this.cli.logGroup([r.pre].flat(),!0),this.cli._staticViewInputMsg='Type "next" or hit enter to continue',this.cli.viewInput()):this.cli.logGroup([r.title,r.pre].flat(),!0)}setType(t){this.type=t}getDurationMins(){let t=process.hrtime.bigint()-this.tutorialModeStart;return Math.round(Number(t)/6e10)}async complete(t){var i,s;let{exit:r=!1}=t||{exit:!1},n=this.stepOrder[this.activeStepIndex];this.reportAnalytics({exit:r,step:r?n:void 0}),this.inProgress=!1,this.activeStepIndex=null,await((s=(i=this.cli)==null?void 0:i.user)==null?void 0:s.updatePreferences({showTutorial:!1})),this.completeMsg()}reportAnalytics(t){var s,o,a;let{event:r,step:n,exit:i=!1}=t;fr({eventName:r||(i?"ampt.tutorial.skipped":"ampt.tutorial.completed"),eventData:{type:this.type,step:n,durationMinutes:r?void 0:this.getDurationMins(),userName:(s=this.cli.user)==null?void 0:s.username,orgName:(o=this.cli.project.org)==null?void 0:o.orgName,serviceName:(a=this.cli.project.service)==null?void 0:a.serviceName}})}completeMsg(){this.cli.logGroup([this.cli.styles.bold("We hope you enjoy using Ampt!"),"If you have any questions or feedback, join our discord: https://getampt.com/discord","To read up on everything Ampt, check out our docs: https://getampt.com/docs",`You can always re-run this tutorial with the command "${this.cli.styles.bold("tutorial")}"`,`You can clear this output with the command "${this.cli.styles.bold("clear")}"`,"Happy coding! \u{1F680}"])}};$h.default.extend(M1e.default);$h.default.extend(U1e.default);$h.default.updateLocale("en",{relativeTime:{future:"in %s",past:"%s ago",s:(e,t,r,n)=>e<=10?`${e} seconds`:e<=30?"several seconds":e<60?"less than a minute":`${e} seconds`,m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"}});var Ab=(vV(),XR(yV)),{version:H1e}=oh(),QMt={dim:Co.default.dim,darkPurple:Co.default.hex("#B367FF"),purple:Co.default.hex("#F952FF"),yellow:Co.default.hex("#FFC700"),blue:Co.default.hex("#727aff"),red:Co.default.rgb(255,99,99),grey:Co.default.hex("#324f59"),pastel:Co.default.hex("#dbd8ca"),bold:Co.default.bold,green:Co.default.hex("#22b9b7")},GA=class e{static defaultSpinnerFrames=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];session;messenger;version=H1e;installedGlobally=SV.default;os=process.platform;user;fs;tutorial;project;showLogo=!0;fromClone=!1;inputValue;timer;isShellActive;isInteractive;isDevServerActive;isAnimationEnabled=!1;isCommandRunningInShell;buildRunningInShell;commandRunningInShellPromise;styles;icons;argv;startupOptions;options;args;names;command;orgName;org;service;serviceName;_exitCode=0;isGitPod=!1;isCodeSpaces=!1;isWebIde=!1;isBeta=!1;_lastSyncedAt;_lastSyncedAtInterval;_staticViewInputMsg;_activeOrgName;_activeServiceName;_allowedInputCharacter;_isLoggedTopPadding;_commandsHistory;_viewType;_viewMessage;_spinnerMessage;_spinnerStep;_isPromptActive;_promptResponse;_timerInterval;_spinnerInterval;_inputSpinnerInterval;_inputSpinnerStartedAt;_inputSpinnerStoppedAt;_tipsInterval;_tipsFrequency;_tipsCollectionIndex;_spinnerFrequency;_spinnerFrames;_spinnerFrameIndex;_selectItems;_selectedItemIndex;_selectedItem;_onQuit;_quitting;_suggestions;_commandsHistoryIndex;_devTipsCollection=["type `dev` to start running the dev server","type `stop` to stop a running dev server"];_cloudScriptsCollection=["add a `ampt:dev` script to package.json to run code within the Ampt context"];_tipsCollection=[];_xdgOpenInstalled=null;constructor(t){process.title="Ampt CLI",this.session=t,this.session.loadAmptConfig(),this.messenger=new nA,this.messenger.on("offline",(0,CV.default)(()=>{this.logError("Event Messenger offline")},1e3,!0)),this.messenger.on("online",(0,CV.default)(()=>{this.logInfo("Event Messenger online")},1e3,!0)),this.inputValue="",this.startupOptions={},this.options={},this.args=[],this.argv=[],this.command=void 0,this.names=void 0,this.icons={},this.commandRunningInShellPromise=null,this._allowedInputCharacter=/^[a-zA-Z0-9 ~:!@#$%^&*()-_=+.<>{}[\]"'/]+$/,this._viewType=null,this._viewMessage=void 0,this._spinnerMessage=null,this._spinnerStep=null,this._isPromptActive=void 0,this._promptResponse=void 0,this._commandsHistory=[],this._spinnerFrequency=100,this._spinnerFrames=e.defaultSpinnerFrames,this._spinnerFrameIndex=0,this.showLogo=!process.env.IS_CHILD_PROCESS&&!this.isGitPod&&this._canRenderBolt(),this.styles=QMt,this._startLastSyncedAtInterval(),this._initIcons(),this._initSuggestions(),process.env.AMPT_IS_GITPOD==="true"&&(this.isGitPod=!0,this.isWebIde=!0),process.env.AMPT_IS_CODESPACES==="true"&&(this.isCodeSpaces=!0,this.isWebIde=!0),this.isWebIde&&(this.isAnimationEnabled=!1),this.isBeta=this.version.includes("beta"),this.isInteractive=process.stdin.isTTY,this.fs=new _w({session:this.session}),this.project=new TA(this),this.tutorial=new OA(this)}async login(){return new Sa}setExitCode(t){this._exitCode=t}async start(t){let{_:r,...n}=(0,IV.default)(process.argv);if(this.startupOptions=n,this.fs.verbose=this.startupOptions.verbose,this.fromClone=(t==null?void 0:t.fromClone)||!1,this.os==="linux"&&(this._xdgOpenInstalled=await this.fs.detectXdgOpen()),r[2]!=="clone"&&process.platform!=="win32")try{Ae.enable()}catch(i){console.error(i)}return this.run()}async run(t){try{if(this._parseCommand(t),this.tutorial.inProgress)return await this.tutorial.handle(this.command);if(this.command==="sandbox")return await Ab.sandbox(this);if(this.command==="git"||this.command==="code")return await Ab.bash(this);this.isShellActive||(this._hideCursor(),this.command!=="run"&&(this._logLogo(),this.viewSpinner("Loading")),(this.command==="start"||this.command==="tutorial")&&await this._autoUpdate()),this._watchKeyboard();let r=["clone"],n=["promote","test"];if((this.command==="start"||this.command==="tutorial")&&(this.isShellActive=!0),this.isShellActive&&r.includes(this.command))throw new wp(`Command "${this.command}" is currently not supported in the shell`);if(n.includes(this.command))throw new wp(`Command "${this.command}" is not available.`);if(!Ab[this.command]&&this.command!=="tutorial")throw new wp(`Command "${this.command}" is not a valid command`);if(!this.user&&(this.user=await Sa.init(),!this.user.isLoggedIn())){this.logInfo("You must login to proceeed.");try{await this.user.performLogin(this)}catch(i){if(i.name==="UserDisabledError")return this.logError(i.message||"Your account has been disabled. Please contact support."),this._stop(0);throw i}}await this.messenger.connect(),this.command==="tutorial"&&(this.command="start",this.options.tutorial=!0),this.command==="dashboard"&&(this.command="open"),await Ab[this.command](this),this.options={}}catch(r){if(r instanceof Jh||r instanceof wp)this.logError(r.message);else{if(r instanceof bh)return this.logError(r.message),this._stop(this._exitCode);if(r.name==="InstancesLimitError"){let n=["share","deploy"].includes(this.command);return this.handleInstanceLimitExceeded({isDeploying:n})}else return r.name==="ServicesLimitError"?this.handleServiceLimitExceeded():(this.session.captureException(r),this.logError(`Something went wrong - please contact support and provide ${this.session.getSessionId()} as a reference ID`),await this.session.flushSentry(),this._stop(1))}}return this.isShellActive?this.viewInput():this._stop(this._exitCode)}handleServiceLimitExceeded(){let t="You have reached your app limit. Please upgrade your plan or delete an app.";return this.quit(t)}handleInstanceLimitExceeded(t){let{isDeploying:r=!1}=t||{},n="You have reached your environment limit. Please upgrade your plan or delete an environment.";if(!r)return this.quit(n);this.logWarning("Deployment failed"),this.logError(n),this.viewInput()}setProject(t){this.project=t}viewInput(t=this._formatLastSyncedAt()){this._timerInterval=clearInterval(this._timerInterval),this._spinnerInterval=clearInterval(this._spinnerInterval),this._startLastSyncedAtInterval(),this._switchView({viewType:"input",viewMessage:t})}spinInput(){if(this._viewType!=="input"){Ae.error({_viewType:this._viewType},"wrong viewType in spinInput");return}this.isAnimationEnabled&&(this._inputSpinnerStartedAt=Date.now(),clearInterval(this._inputSpinnerInterval),this._inputSpinnerInterval=setInterval(()=>this.updateInputSpinner(),this._spinnerFrequency).unref())}viewSpinner(t="Loading",r){let{timer:n=!1}=r||{};if(!this.isInteractive){console.log(t);return}if(!this.isAnimationEnabled){this._switchView({viewType:"spinner",viewMessage:t});return}this._spinnerMessage=t,this._spinnerStep="",clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,n&&(this.timer=0,this._timerInterval=setInterval(()=>this.timer=+this.timer+1,1e3).unref()),this._spinnerInterval=setInterval(()=>this._updateSpinner((this._spinnerMessage||"Loading")+(this._spinnerStep?` (${this._spinnerStep})`:""),{timer:n}),this._spinnerFrequency).unref()}updateLastSyncedAt(t){this._lastSyncedAt=t}updateInputSpinner(){this._spinnerFrameIndex=++this._spinnerFrameIndex%this._spinnerFrames.length,this._switchView({viewType:"input"})}stopSpinningInput(){this._inputSpinnerInterval&&(clearInterval(this._inputSpinnerInterval),this._inputSpinnerStoppedAt=Date.now(),this._inputSpinnerInterval=void 0),this.viewInput()}updateSpinnerStep(t){if(!process.stdin.isTTY){console.log(t);return}this._spinnerStep=t}pause(){this._clearIntervals(),this._switchView({viewType:"pause"}),this._eraseCursorLineAndBelow()}async prompt(t,r={}){for(this._isPromptActive=!0,r.default&&(this.inputValue=r.default),this.viewInput(t);!this._promptResponse;)await Tu(50);let n=this._promptResponse;return this.logInfo(`You've entered ${this.styles.bold(n)}.`),this._promptResponse=null,this._isPromptActive=!1,n}async promptServiceName(t=null){let r=await this.prompt("Enter a name for your app",{default:t});return r.match(/^[a-z0-9-]+$/)?r:(this.logError("App name must consist only of lowercase characters and hyphens. Please try again."),await this.promptServiceName())}async confirm(t=!1,r){r&&this.logQuestion(r);let n=["no","yes"],i=await this.select(t?n.reverse():n);return i==="yes"}async select(t=[],r=0){if(clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,this._selectItems=t,this._selectedItemIndex=r,this._switchView({viewType:"select"}),this._selectItems.length===1)return this._selectedItem=this._selectItems[0],this._selectedItem;for(;!this._selectedItem;)await Tu(50);let n=this._selectedItem;return typeof n=="object"?this.logInfo(`You've selected ${this.styles.bold(n.title)}.`):this.logInfo(`You've selected ${this.styles.bold(n)}.`),this._selectedItem=null,this._selectedItemIndex=null,this._selectItems=[],n}async selectOrg(t,r){this.viewSpinner("Loading");let n,i=(t.orgs||[]).map(s=>s.orgName);return i.length>1?(this.logInfo(r||"Please select an organization."),n=await this.select(i)):n=i[0],n}async selectService(t,r){let n;this.viewSpinner("Loading");let i=(await t.listServicesWithInstances()).map(s=>s.serviceName);return Ae.debug({servicesList:i},"select service"),i.length>1?(this.logInfo(r||"Please select a service."),n=await this.select(i)):n=i[0],n}async selectInstance({service:t,instanceType:r,instanceName:n,message:i}){let o=(await(t==null?void 0:t.listInstances().catch(()=>[]))||[]).filter(p=>!r||p.instanceType===r).map(p=>({instanceName:p.instanceName,region:p.region,displayRegion:p.region||"",display:`${p.instanceName} (${p.region})`}));if(n)return o.find(p=>p.instanceName===n)||{instanceName:n,isNewInstance:!0};if(o.length===0)return{instanceName:void 0};if(o.length===1)return{instanceName:o[0].instanceName,isNewInstance:!1};this.logInfo(i||"Please select a stage.");let a=await this.select(o.map(p=>p.display));return{instanceName:o.find(p=>p.display===a).instanceName,isNewInstance:!1}}logSuccess(t,r=0){this.log(`${this.icons.tick} ${t}`,r)}logError(t,r=0){this.log(`${this.icons.cross} ${this.styles.bold(this.styles.red(t))}`,r)}logCancelled(){this.logError("Cancelled")}logInfo(t,r=0){this.log(`${this.icons.info} ${t}`,r)}logWarning(t,r=0){this.log(`${this.icons.warning} ${t}`,r)}logQuestion(t,r=0){this.log(`${this.icons.question} ${t}`,r)}logGroup(t,r=!0){t.forEach((n,i)=>{let o=r&&i===0?`${this.icons.arrow} ${this.styles.bold(n)}`:` ${this.icons.dot} ${n}`;this.log(o,i>0?2:0)})}logUrl(t,r=0){this.log(`${this.icons.arrow} ${t}`,r)}logTime(t,r=0){this.log(`${this.styles.dim(`${new Date(Date.now()).toLocaleTimeString()} ${this.icons.line}`)} ${t}`,r)}log(t="",r=0){this._ensureTopPadding(),this._eraseCursorLineAndBelow(),this._log(`${" ".repeat(r)}${t}
292
292
  `),this._view()}logSpace(){this.log(" ")}write(t="",r){let{error:n=!1}=r||{};this._ensureTopPadding(),this._eraseCursorLineAndBelow(),this._log(t,{error:n}),this._view()}onQuit(t){this._onQuit=t}async quit(t="Stopped"){return this.inputValue="",this._clearIntervals(),this._quitting||this.logError(t),this._eraseCursorLineAndBelow(),!this._quitting&&this._onQuit&&(this._quitting=!0,await Kce(this._onQuit(),1e3)),this.isDevServerActive&&await fi.stop(this,{orgName:this.orgName,serviceName:this.serviceName}),this._stop()}async startSession(){var t;try{await this.project.init()}catch(r){return await this.quit(`Something went wrong while starting the session: ${r.message}`)}if(!this.project)return await this.quit("Project was not initialized");this.tutorial.inProgress&&((t=this._suggestions)==null||t.push("skip","next","done")),this.tutorial.inProgress||await this.project.boot()}async checkForAmptPackageUpdates(){if(this.fs.shouldCheckForAmptDependencyUpdates()&&!this.isWebIde){this.viewSpinner("Checking for package updates");let t=await this.fs.detectOutdatedAmptDependencies();if(t.length&&!this.fromClone){this._printOutOfDatePackages(t),this.logSpace();let r=t.filter(n=>!n.majorChange);r.length&&(this.logQuestion("Would you like to update them now?"),await this.confirm(!0)?await this.fs.updateOutdatedAmptDependencies(this,r):(this.logInfo("Skipping package updates"),this.logWarning("You may experience issues using outdated @ampt packages.")))}}}async isAmptShellRunning(t){let{orgName:r,serviceName:n}=t;try{let i=fh(r,n),s=JSON.parse(await(0,z1e.readFile)(i,"utf8"));return aZ(s.pid)?!0:((0,Qh.removeSync)(fh(r,n)),!1)}catch{return!1}}async writeAmptShellActivityFile(t){let{orgName:r,serviceName:n}=t,i=fh(r,n);(0,Qh.ensureFileSync)(i),(0,Qh.writeFileSync)(i,JSON.stringify({pid:process.pid},null,4))}devServerOn(){this.isDevServerActive=!0,this.viewInput()}devServerOff(){this.isDevServerActive=!1,this.viewInput()}buildRunning(t){this.buildRunningInShell=t}bindService({orgName:t,serviceName:r}){this.orgName=t,this.serviceName=r}_switchView({viewType:t,viewMessage:r}){return t&&(this._viewType=t),typeof r<"u"&&(this._viewMessage=r),this._staticViewInputMsg&&(this._viewMessage=this._staticViewInputMsg),this._view()}_stop(t=0){this._clearIntervals(),process.stdin.pause(),this._eraseCursorLineAndBelow(),t===0&&this._log(`
293
293
  `),this._showCursor();try{if(/^win/.test(process.platform))(0,xV.execSync)(`taskkill /PID ${process.pid} /T /F`);else try{process.kill(-process.pid,"SIGINT")}catch{process.kill(-process.ppid,"SIGINT")}}catch(r){Ae.debug({error:r.message},"process.kill failed"),process.env.SLS_DEBUG&&this._log(r.message)}process.exit(t)}_clearIntervals(){clearInterval(this._timerInterval),clearInterval(this._spinnerInterval),clearInterval(this._inputSpinnerInterval),clearInterval(this._tipsInterval),clearInterval(this._lastSyncedAtInterval),this._timerInterval=void 0,this._spinnerInterval=void 0,this._inputSpinnerInterval=void 0,this._tipsInterval=void 0,this._lastSyncedAtInterval=void 0}_parseCommand(t){var a,u;let r=t&&t.length>0?eue(t):process.argv.slice(2),n=(0,IV.default)(r);this.command=(a=n._[0])==null?void 0:a.toLowerCase(),this.args=(u=n._)==null?void 0:u.slice(1);let{_:i,...s}=n;this.options=Object.assign({},this.startupOptions,s),this.argv=r,(this.options.help||this.options.h)&&(this.command="help"),(this.options.version||this.options.v)&&(this.command="version"),this.names=M8(this.args[0]),this.names.orgName=this.names.orgName||this.options.org,this.names.serviceName=this.names.serviceName||this.options.app,this.names.instanceName=this.names.instanceName||this.options.stage||this.options.env||this.options.instance,this.options.stage&&this.logWarning(`The ${this.styles.bold("--stage")} option is deprecated, and will be removed in a future release. Please use ${this.styles.bold("--env")} instead.`),this.options.instance&&this.logWarning(`The ${this.styles.bold("--instance")} option is deprecated, and will be removed in a future release. Please use ${this.styles.bold("--env")} instead.`),t==="start"&&delete Ab.start,!t&&(!this.command||this.command==="start")&&(this.command="start"),this.command==="dev"&&(this.isShellActive?(this.args[0]=this.command,this.command="run"):(this.command="start",this.options.dev=!0)),this.command==="build"&&(this.args[0]=this.command,this.command="run"),this.command==="npm"&&(this.command=this.args[0],this.args.shift(),this.argv.shift()),this.isAnimationEnabled=this.options.animation!==!1,Ae.debug({args:this.args},"cli args"),Ae.debug({...this.options},"cli options"),Ae.debug({...this.names},"cli names")}_logLogo(){if(!this.showLogo)return;let t=bV.default.EOL;t+="ampt ",t+=`${this.icons.bolt}`,process.env.AMPT_STAGE!=="prod"&&(t+=`(${process.env.AMPT_STAGE})`),this.isBeta&&(t+=`${this.styles.dim("[beta]")}`),t+=bV.default.EOL,this._log(t)}_log(t,r){let{error:n=!1}=r||{};n?process.stderr.write(t):process.stdout.write(t)}_showCursor(){this._log(Xp.default.cursorShow)}_hideCursor(){this._log(Xp.default.cursorHide)}_moveCursorLeft(){this._log(Xp.default.cursorLeft)}_moveCursorUp(t){this._log(Xp.default.cursorUp(t))}_eraseCursorLineAndBelow(){this._log(Xp.default.eraseDown)}_restorCursorPosition(t){let r=this._getRelativeVerticalCursorPosition(t);this._moveCursorUp(r),this._moveCursorLeft()}_getRelativeVerticalCursorPosition(t){let n=(0,Y1e.default)(t).split(`
294
294
  `),i=n.length;for(let o of n){let a=Number(o.length),u=Number(process.stdout.columns),p=Math.floor(a/u);i+=p}return 1+i}_view(){this._hideCursor();let t=this._getView();t&&(this._eraseCursorLineAndBelow(),this._log(`