UNPKG

lfi

Version:

A lazy functional iteration library supporting sync, async, and concurrent iteration.

2 lines 188 kB
const t=t=>t,n=t=>()=>t,a=t=>({[Symbol.iterator]:t}),e=t=>({[Symbol.asyncIterator]:t}),i=t=>{const{t:n,i:a}=o();return Promise.race([n,t(a)])},o=()=>{let t;return{t:new Promise((n=>{t=n})),i:t}},r=t=>Boolean(t&&"function"==typeof t.then),c=t=>{if(t.length<=1||f.has(t))return t;const n=s(t,((...n)=>n.length<t.length?c(t.bind(null,...n)):t(...n)));return f.add(n),n},s=(t,n)=>Object.defineProperties(n,{length:{value:t.length},name:{value:t.name}}),f=/*@__PURE__*/new WeakSet,l=/*@__PURE__*/c(((t,n)=>a((function*(){for(const a of n)yield t(a)})))),y=/*@__PURE__*/c(((t,n)=>e((async function*(){for await(const a of n)yield t(a)})))),u=/*@__PURE__*/c(((t,n)=>a=>n((async n=>a(await t(n)))))),d=/*@__PURE__*/c(((t,n)=>a((function*(){for(const a of n)yield*t(a)})))),w=/*@__PURE__*/c(((t,n)=>e((async function*(){for await(const a of n)yield*await t(a)})))),m=/*@__PURE__*/c(((t,n)=>a=>n((async n=>P(await t(n))(a))))),b=/*@__PURE__*/d(t),_=/*@__PURE__*/w(t),S=/*@__PURE__*/m(t),p=/*@__PURE__*/c((t=>a((function*(){let n=0;for(const a of t)yield[n++,a]})))),v=/*@__PURE__*/c((t=>e((async function*(){let n=0;for await(const a of t)yield[n++,a]})))),h=/*@__PURE__*/c((t=>async n=>{let a=0;await t((t=>n([a++,t])))})),g=(t,...n)=>n.reduce(((t,n)=>n(t)),t),k=(...t)=>n=>g(n,...t),z=t=>t[Symbol.asyncIterator]?t:e(t[Symbol.iterator]?()=>t[Symbol.iterator]():async function*(){let n,a=[],e=!1,i=o();for(t((t=>{if(a.push(t),i){const t=i;i=null,t.i()}})).then((()=>{e=!0,i?.i()})).catch((t=>{n=t,i?.i()}));!e;){if(n)throw yield*a,n;if(!a.length){await i.t;continue}const t=a;a=[],i=o(),yield*t}}),P=t=>"function"==typeof t?t:t[Symbol.iterator]?async n=>{await Promise.all(l(n,t))}:async n=>{const a=[];for await(const e of t){const t=n(e);r(t)&&a.push(t)}await Promise.all(a)},x={done:!0},E={next:()=>x},j={next:()=>Promise.resolve(x)},O=/*@__PURE__*/a((()=>E)),W=/*@__PURE__*/e((()=>j)),M=()=>Promise.resolve(),A=t=>a((()=>t[Symbol.iterator]())),N=t=>e((()=>t[Symbol.asyncIterator]())),$=t=>n=>t(n),B=/*@__PURE__*/c(((t,n)=>{const a=n[Symbol.iterator](),{done:e,value:i}=a.next();return e||!a.next().done?t():i})),D=/*@__PURE__*/c((async(t,n)=>{const a=n[Symbol.asyncIterator](),{done:e,value:i}=await a.next();return e||!(await a.next()).done?t():i})),I=/*@__PURE__*/c(((t,n)=>i((async a=>{let e,i;await n((async n=>{i?e||(e=!0,a(await t())):i={value:n}})),e||a(i?i.value:await t())})))),q=()=>{throw new Error("Did not contain exactly one value")},C=/*@__PURE__*/B(q),F=/*@__PURE__*/D(q),G=/*@__PURE__*/I(q),H=/*@__PURE__*/c((t=>{const n=t[Symbol.iterator](),{done:e,value:i}=n.next();return e?[O,O]:[A([i]),a((()=>n))]})),J=/*@__PURE__*/c((async t=>{const n=t[Symbol.asyncIterator](),{done:a,value:i}=await n.next();return a?[W,W]:[z([i]),e((()=>n))]})),K=/*@__PURE__*/c(((t,n)=>{const{finish:a,...e}=Q(n);return{...e,finish:n=>t(a(n))}})),L=/*@__PURE__*/c(((t,n)=>{const{finish:a,...e}=Q(n);return{...e,finish:async n=>t(await a(n))}})),Q=n=>{const a={finish:t};if("function"==typeof n)return a.add=n,a;for(const t of R){const e=n[t];e&&(a[t]=e.bind(n))}return a},R=["create","add","get","finish","combine"],T={},U=/*@__PURE__*/c(((t,n)=>{const{create:e,add:i,finish:o}=Q(t);return e?V(e(),i,o,n):a((function*(){const[t,a]=H(n);yield*l((t=>V(t,i,o,a)),t)}))})),V=(t,n,a,e)=>{for(const a of e)t=n(t,a);return a(t)},X=/*@__PURE__*/c(((t,n)=>{const{create:a,add:i,combine:o,finish:r}=Q(t),c=P(n);return a?o?tt(a,i,o,r,c):nt(a,i,r,c):e((async function*(){yield*await Z(i,r,c)}))})),Y=/*@__PURE__*/c(((t,n)=>{const{create:a,add:e,combine:i,finish:o}=Q(t);return a?i?tt(a,e,i,o,n):nt(a,e,o,n):async t=>{const a=await Z(e,o,n);a.length&&await t(a[0])}})),Z=async(t,n,a)=>{const e=[];return await a((async n=>{for(;e.length;)n=await t(n,e.pop());e.push(n)})),e.length?[await n(e[0])]:e},tt=async(t,n,a,e,i)=>{const o=[t()];return await i((async e=>{let i=await n(await(o.length?o.pop():t()),e);for(;o.length;)i=await a(i,o.pop());o.push(i)})),e(await o[0])},nt=async(t,n,a,e)=>{let i=Promise.resolve(t());return await e((t=>{i=i.then((a=>n(a,t)))})),a(await i)},at=/*@__PURE__*/n(/*@__PURE__*/Q({create:()=>[],add:(t,n)=>(t.push(n),t)})),et=(t,n)=>t.add(n),it=/*@__PURE__*/n(/*@__PURE__*/Q({create:()=>new Set,add:et})),ot=/*@__PURE__*/n(/*@__PURE__*/Q({create:()=>new WeakSet,add:et})),rt=/*@__PURE__*/n(/*@__PURE__*/Q({create:()=>({}),add:(t,[n,a])=>Object.defineProperty(t,n,{configurable:!0,enumerable:!0,writable:!0,value:a}),get:(t,n)=>ct.call(t,n)?t[n]:T})),ct=/*@__PURE__*/(()=>({}.hasOwnProperty))(),st={add:(t,[n,a])=>t.set(n,a),get:(t,n)=>t.has(n)?t.get(n):T},ft=/*@__PURE__*/n(/*@__PURE__*/Q(/*@__PURE__*/(()=>({create:()=>new Map,...st}))())),lt=/*@__PURE__*/n(/*@__PURE__*/Q(/*@__PURE__*/(()=>({create:()=>new WeakMap,...st}))())),yt=/*@__PURE__*/c(((t,n)=>{const{create:a,add:e,finish:i}=Q(t),{create:o,add:r,get:c}=Q(n);return{create:()=>({o:o(),l:[]}),add:(t,[n,i])=>{let o=c(t.o,n);return o===T?(o=a?e(a(),i):i,t.l.push(n)):o=e(o,i),t.o=r(t.o,[n,o]),t},finish:({o:t,l:n})=>n.reduce(((t,n)=>r(t,[n,i(c(t,n))])),t)}})),ut=t=>{const n=Array.isArray(t)?n=>U(at(),l((([,t])=>n(t)),t)):n=>U(rt(),l((([t,a])=>[t,n(a)]),t));t=Object.entries(t).map((([t,n])=>[t,Q(n)]));const a=(n,a)=>{for(const[e,i]of t)n[e]=a(n[e],i);return n},e=(t,n)=>a(t,((t,{add:a})=>a(t,n))),i=t=>a(t,((t,{finish:n})=>n(t)));return t.every((([,{create:t}])=>t))?{create:()=>n((({create:t})=>t())),add:e,finish:i}:{add:(t,a)=>e(wt(t,n),a),finish:t=>(t=i(wt(t,n)),dt.delete(t),t)}},dt=/*@__PURE__*/new WeakSet,wt=(t,n)=>{if(dt.has(t))return t;const a=n((({create:n,add:a})=>n?a(n(),t):t));return dt.add(a),a},mt=t=>({create:()=>{},add:(n,a)=>void 0===n?String(a):String(n)+t+String(a),finish:t=>t??""}),bt=t=>c(((n,a)=>t(mt(n),a))),_t=/*@__PURE__*/bt(U),St=/*@__PURE__*/bt(X),pt=/*@__PURE__*/bt(Y),vt=/*@__PURE__*/c(((t,n)=>d((n=>t(n)?[n]:[]),n))),ht=t=>c(((n,a)=>t((async t=>await n(t)?[t]:[]),a))),gt=/*@__PURE__*/ht(w),kt=/*@__PURE__*/ht(m),zt=/*@__PURE__*/c(((t,n)=>d((n=>xt(t(n))),n))),Pt=t=>c(((n,a)=>t((async t=>xt(await n(t))),a))),xt=t=>null==t?[]:[t],Et=/*@__PURE__*/Pt(w),jt=/*@__PURE__*/Pt(m),Ot=t=>c(((n,a)=>{const e=new Set(n);return t((t=>!e.has(t)),a)})),Wt=/*@__PURE__*/Ot(vt),Mt=/*@__PURE__*/Ot(gt),At=/*@__PURE__*/Ot(kt),Nt=/*@__PURE__*/c(((t,n)=>a((function*(){const a=new Set;for(const e of n){const n=t(e);a.has(n)||(a.add(n),yield e)}})))),$t=/*@__PURE__*/c(((t,n)=>e((async function*(){const a=new Set;for await(const e of n){const n=await t(e);a.has(n)||(a.add(n),yield e)}})))),Bt=/*@__PURE__*/c(((t,n)=>a=>{const e=new Set;return n((async n=>{const i=await t(n);e.has(i)||(e.add(i),await a(n))}))})),Dt=/*@__PURE__*/Nt(t),It=/*@__PURE__*/$t(t),qt=/*@__PURE__*/Bt(t),Ct=/*@__PURE__*/c(((t,n)=>a((function*(){for(const a of n)if(t(a))return void(yield a)})))),Ft=/*@__PURE__*/c(((t,n)=>e((async function*(){for await(const a of n)if(await t(a))return void(yield a)})))),Gt=/*@__PURE__*/c(((t,n)=>a=>i((async e=>{let i=!1;await n((async n=>{i||!await t(n)||i||(i=!0,await a(n),e())}))})))),Ht=/*@__PURE__*/c(((t,n)=>a((function*(){let a;for(const e of n)t(e)&&(a={value:e});a&&(yield a.value)})))),Jt=/*@__PURE__*/c(((t,n)=>e((async function*(){let a;for await(const e of n)await t(e)&&(a={value:e});a&&(yield a.value)})))),Kt=/*@__PURE__*/c(((t,n)=>async a=>{let e;await n((async n=>{await t(n)&&(e={value:n})})),e&&await a(e.value)})),Lt=({u:t,m:n})=>a=>Object.entries(a).every((([a,e])=>t(a,e)||Qt(`\`${a}\` must be ${n}: ${e}`))),Qt=t=>{throw new Error(t)},Rt=/*@__PURE__*/Lt({u:(t,n)=>Number.isSafeInteger(n),m:"an integer"}),Tt=/*@__PURE__*/Lt({u:(t,n)=>Rt({[t]:n})&&n>=0,m:"a non-negative integer"}),Ut=/*@__PURE__*/Lt({u:(t,n)=>Rt({[t]:n})&&n>0,m:"a positive integer"}),Vt=/*@__PURE__*/Lt({u:(t,{_:n,S:a})=>n[a]()!=n[a](),m:"a pure iterable"}),Xt=/*@__PURE__*/Lt({u:(t,[n,a])=>n<=a,m:"a range"}),Yt=t=>n=>a((()=>(n[t]?.()??Object[t](n))[Symbol.iterator]())),Zt=/*@__PURE__*/Yt("keys"),tn=/*@__PURE__*/Yt("values"),nn=/*@__PURE__*/Yt("entries"),an=/*@__PURE__*/c(((t,n)=>a((function*(){for(let a=n;null!=a;a=t(a))yield a})))),en=/*@__PURE__*/c(((t,n)=>e((async function*(){for(let a=n;null!=a;a=await t(a))yield a})))),on=t=>a((function*(){for(;;)yield t})),rn=t=>(Vt({iterable:{_:t,S:Symbol.iterator}}),a((function*(){const n=t[Symbol.iterator](),{value:e,done:i}=n.next();if(!i)for(yield e,yield*a((()=>n));;)yield*t}))),cn=t=>(Vt({asyncIterable:{_:t,S:Symbol.asyncIterator}}),e((async function*(){const n=t[Symbol.asyncIterator](),{value:a,done:e}=await n.next();if(!e)for(yield a,yield*{[Symbol.asyncIterator]:()=>n};;)yield*t}))),sn=t=>c(((n,a)=>{Rt({start:n,end:a});const e=t(n,a,1);return e.step=e=>(Ut({step:e}),t(n,a,e)),e})),fn=/*@__PURE__*/sn(((t,n,e)=>a(t<n?function*(){for(let a=t;a<n;a+=e)yield a}:function*(){for(let a=t;a>n;a-=e)yield a}))),ln=/*@__PURE__*/sn(((t,n,e)=>a(t<n?function*(){for(let a=t;a<=n;a+=e)yield a}:function*(){for(let a=t;a>=n;a-=e)yield a}))),yn=/*@__PURE__*/c(((t,n)=>{for(const a of n)if(!t(a))return!1;return!0})),un=/*@__PURE__*/c((async(t,n)=>{for await(const a of n)if(!await t(a))return!1;return!0})),dn=/*@__PURE__*/c(((t,n)=>i((async a=>{let e=!1;return await n((async n=>{e||await t(n)||e||(e=!0,a(!1))})),!0})))),wn=/*@__PURE__*/c(((t,n)=>{for(const a of n)if(t(a))return!0;return!1})),mn=/*@__PURE__*/c((async(t,n)=>{for await(const a of n)if(await t(a))return!0;return!1})),bn=/*@__PURE__*/c(((t,n)=>i((async a=>{let e=!1;return await n((async n=>{e||!await t(n)||e||(e=!0,a(!0))})),!1})))),_n=/*@__PURE__*/c(((t,n)=>!wn(t,n))),Sn=t=>c((async(n,a)=>!await t(n,a))),pn=/*@__PURE__*/Sn(mn),vn=/*@__PURE__*/Sn(bn),hn=t=>c(((n,a)=>t((t=>Object.is(t,n)),a))),gn=/*@__PURE__*/hn(wn),kn=/*@__PURE__*/hn(mn),zn=/*@__PURE__*/hn(bn),Pn=/*@__PURE__*/c(((t,n)=>l((n=>(t(n),n)),n))),xn=t=>c(((n,a)=>t((async t=>(await n(t),t)),a))),En=/*@__PURE__*/xn(y),jn=/*@__PURE__*/xn(u),On=/*@__PURE__*/c(((t,n)=>{for(const a of n)t(a)})),Wn=/*@__PURE__*/c((async(t,n)=>{for await(const a of n)await t(a)})),Mn=/*@__PURE__*/c(((t,n)=>n(t))),An=t=>n=>t((()=>{}),n),Nn=/*@__PURE__*/An(On),$n=/*@__PURE__*/An(Wn),Bn=/*@__PURE__*/An(Mn),Dn=t=>{const n=[],e=t[Symbol.iterator]();return a((function*(){let t=0;for(;;){if(t<n.length){yield n[t++];continue}const{value:a,done:i}=e.next();if(i)break;n.push(a),t++,yield a}}))},In=t=>{const n=[],a=t[Symbol.asyncIterator]();return e((async function*(){let t=0;for(;;){if(t<n.length){yield n[t++];continue}const{value:e,done:i}=await a.next();if(i)break;n.push(e),t++,yield e}}))},qn=t=>{let n;const a=[],e=[];let i=!1;return async o=>{i||(e.push(o),n||(n=t((async t=>{a.push(t),await P(e)((n=>n(t)))})).then((()=>i=!0)))),await Promise.all([P(a)(o),n])}},Cn=/*@__PURE__*/c(((t,n)=>a((function*(){let a=!0;for(const e of n)a&&t(e)||(a=!1,yield e)})))),Fn=/*@__PURE__*/c(((t,n)=>e((async function*(){let a=!0;for await(const e of n)a&&await t(e)&&a||(a=!1,yield e)})))),Gn=/*@__PURE__*/c(((t,n)=>a=>{let e=!0;return n((async n=>{e&&await t(n)&&e||(e=!1,await a(n))}))})),Hn=/*@__PURE__*/c(((t,n)=>a((function*(){for(const a of n){if(!t(a))break;yield a}})))),Jn=/*@__PURE__*/c(((t,n)=>e((async function*(){for await(const a of n){if(!await t(a))break;yield a}})))),Kn=/*@__PURE__*/c(((t,n)=>a=>i((e=>{let i=!0;return n((async n=>{i&&await t(n)&&i?await a(n):(i=!1,e())}))})))),Ln=(t,n,a)=>c(((e,i)=>(Tt({count:e}),g(a(i),t((([t])=>t<e)),n((([,t])=>t)))))),Qn=/*@__PURE__*/Ln(Cn,l,p),Rn=/*@__PURE__*/Ln(Fn,y,v),Tn=/*@__PURE__*/Ln(Gn,u,h),Un=/*@__PURE__*/Ln(Hn,l,p),Vn=/*@__PURE__*/Ln(Jn,y,v),Xn=/*@__PURE__*/Ln(Kn,u,h),Yn=/*@__PURE__*/Un(1),Zn=/*@__PURE__*/Vn(1),ta=/*@__PURE__*/Xn(1),na=/*@__PURE__*/Ht((()=>!0)),aa=/*@__PURE__*/Jt((()=>!0)),ea=/*@__PURE__*/Kt((()=>!0)),ia=(t,n,a)=>c(((e,i,o)=>(Tt({start:e}),Tt({end:i}),Xt({"start,end":[e,i]}),e===i?t:g(o,n(e),a(i-e))))),oa=/*@__PURE__*/ia(O,Qn,Un),ra=/*@__PURE__*/ia(W,Rn,Vn),ca=/*@__PURE__*/ia(M,Tn,Xn),sa=t=>c(((n,a)=>(Tt({index:n}),t(n,n+1,a)))),fa=/*@__PURE__*/sa(oa),la=/*@__PURE__*/sa(ra),ya=/*@__PURE__*/sa(ca),ua=/*@__PURE__*/c(((t,n)=>(Ut({size:t}),a((function*(){let a=[];for(const e of n)a.push(e),a.length<t||(yield a,a=[]);a.length&&(yield a)}))))),da=/*@__PURE__*/c(((t,n)=>(Ut({size:t}),e((async function*(){let a=[];for await(const e of n)a.push(e),a.length<t||(yield a,a=[]);a.length&&(yield a)}))))),wa=/*@__PURE__*/c(((t,n)=>(Ut({size:t}),async a=>{let e=[];await n((async n=>{if(e.push(n),e.length<t)return;const i=e;e=[],await a(i)})),e.length&&await a(e)}))),ma=/*@__PURE__*/c(((t,n)=>{const{p:e,v:i,h:o}=Sa(t);return Ut({size:e}),a((function*(){const t=pa(e);for(const a of n)(t.k(a)===e||i)&&(yield t.P());o&&(yield*t.h(i))}))})),ba=/*@__PURE__*/c(((t,n)=>{const{p:a,v:i,h:o}=Sa(t);return Ut({size:a}),e((async function*(){const t=pa(a);for await(const e of n)(t.k(e)===a||i)&&(yield t.P());o&&(yield*t.h(i))}))})),_a=/*@__PURE__*/c(((t,n)=>{const{p:a,v:e,h:i}=Sa(t);return Ut({size:a}),async t=>{const o=pa(a);await n((async n=>{(o.k(n)===a||e)&&await t(o.P())})),i&&await Promise.all(l(t,o.h(e)))}})),Sa=t=>{const{size:n,partialStart:a=!1,partialEnd:e=!1}="number"==typeof t?{size:t}:t;return{p:n,v:a,h:e}},pa=t=>{let n=0,a=0;const e=Array.from({length:t});return{k:i=>(e[n]=i,n=(n+1)%t,a=Math.min(a+1,t),a),P:(i=0)=>{const o=t-a+n+i;return Array.from({length:a-i},((n,a)=>e[(o+a)%t]))},*h(n){for(let e=a<t&&!n?0:1;e<a;e++)yield this.P(e)}}},va=(...t)=>b(t),ha=(...t)=>_(z(t)),ga=(...t)=>S(P(t)),ka=(...t)=>a((function*(){if(0===t.length)return;const n=t.map((t=>t[Symbol.iterator]())),a=t.map((()=>{}));for(;n.every(((t,n)=>{const e=t.next();return a[n]=e.value,!e.done}));)yield[...a]})),za=(...t)=>e((async function*(){if(0===t.length)return;const n=t.map((t=>z(t)[Symbol.asyncIterator]())),a=t.map((()=>{}));for(;await dn((async([t,n])=>{const e=await n.next();return a[t]=e.value,!e.done}),P(n.entries()));)yield[...a]})),Pa=(...t)=>n=>i((async a=>{if(0===t.length)return;const e=t.map((()=>[])),i=[];let o=1/0,r=!1;await Promise.all(l((async([c,s])=>{const f=e[c];await P(s)((async c=>{if(r)return;const s=f.length;if(s>=o)return;f.push(c),s>=i.length&&i.push(t.length),i[s]--;if(!(0===s&&0===i[0]))return;i.shift();const l=e.map((t=>t.shift()));o--,await n(l),r||0!==o||(r=!0,a())})),f.length>0?o=Math.min(o,f.length):(r=!0,a())}),t.entries()))})),xa=/*@__PURE__*/n({create:()=>0,add:t=>t+1}),Ea=/*@__PURE__*/U(/*@__PURE__*/xa()),ja=/*@__PURE__*/X(/*@__PURE__*/xa()),Oa=/*@__PURE__*/Y(/*@__PURE__*/xa()),Wa=/*@__PURE__*/n({create:()=>0,add:(t,n)=>t+n}),Ma=/*@__PURE__*/U(/*@__PURE__*/Wa()),Aa=/*@__PURE__*/X(/*@__PURE__*/Wa()),Na=/*@__PURE__*/Y(/*@__PURE__*/Wa()),$a=/*@__PURE__*/n(/*@__PURE__*/K((([t,n])=>0===n?NaN:t/n),/*@__PURE__*/ut([/*@__PURE__*/Wa(),/*@__PURE__*/xa()]))),Ba=/*@__PURE__*/U(/*@__PURE__*/$a()),Da=/*@__PURE__*/X(/*@__PURE__*/$a()),Ia=/*@__PURE__*/Y(/*@__PURE__*/$a()),qa=/*@__PURE__*/new WeakSet,Ca=t=>{if(qa.has(t))return t;const n={j:t,O:t};return qa.add(n),n},Fa=t=>qa.has(t)?{min:t.j,max:t.O}:{min:t,max:t},Ga=t=>Q(((n,a)=>t(n,a)<=0?n:a)),Ha=t=>Q(((n,a)=>t(n,a)>=0?n:a)),Ja=t=>K(Fa,((n,a)=>{const e=Ca(n);return t(a,e.j)<0?e.j=a:t(a,e.O)>0&&(e.O=a),e})),Ka=t=>Q((async(n,a)=>await t(n,a)<=0?n:a)),La=t=>Q((async(n,a)=>await t(n,a)>=0?n:a)),Qa=t=>{const n=Ka(t).add,a=La(t).add;return L(Fa,(async(e,i)=>{const o=Ca(e);return qa.has(i)?[o.j,o.O]=await Promise.all([n(i.j,o.j),a(i.O,o.O)]):await t(i,o.j)<0?o.j=i:await t(i,o.O)>0&&(o.O=i),o}))},Ra=t=>n=>t(((t,a)=>n(t)-n(a))),Ta=/*@__PURE__*/Ra(Ga),Ua=/*@__PURE__*/Ra(Ha),Va=/*@__PURE__*/Ra(Ja),Xa=t=>n=>t((async(t,a)=>{const[e,i]=await Promise.all([n(t),n(a)]);return e-i})),Ya=/*@__PURE__*/Xa(Ka),Za=/*@__PURE__*/Xa(La),te=/*@__PURE__*/Xa(Qa),ne=/*@__PURE__*/n(/*@__PURE__*/Ta(t)),ae=/*@__PURE__*/n(/*@__PURE__*/Ua(t)),ee=/*@__PURE__*/n(/*@__PURE__*/Va(t)),ie=(t,n)=>c(((a,e)=>t(n(a),e))),oe=/*@__PURE__*/ie(U,Ga),re=/*@__PURE__*/ie(U,Ha),ce=/*@__PURE__*/ie(U,Ja),se=/*@__PURE__*/ie(X,Ka),fe=/*@__PURE__*/ie(X,La),le=/*@__PURE__*/ie(X,Qa),ye=/*@__PURE__*/ie(Y,Ka),ue=/*@__PURE__*/ie(Y,La),de=/*@__PURE__*/ie(Y,Qa),we=/*@__PURE__*/ie(U,Ta),me=/*@__PURE__*/ie(U,Ua),be=/*@__PURE__*/ie(U,Va),_e=/*@__PURE__*/ie(X,Ya),Se=/*@__PURE__*/ie(X,Za),pe=/*@__PURE__*/ie(X,te),ve=/*@__PURE__*/ie(Y,Ya),he=/*@__PURE__*/ie(Y,Za),ge=/*@__PURE__*/ie(Y,te),ke=/*@__PURE__*/we(t),ze=/*@__PURE__*/me(t),Pe=/*@__PURE__*/be(t),xe=/*@__PURE__*/_e(t),Ee=/*@__PURE__*/Se(t),je=/*@__PURE__*/pe(t),Oe=/*@__PURE__*/ve(t),We=/*@__PURE__*/he(t),Me=/*@__PURE__*/ge(t);export{T as NO_ENTRY,yn as all,un as allAsync,dn as allConcur,wn as any,mn as anyAsync,bn as anyConcur,z as asAsync,P as asConcur,fa as at,la as atAsync,ya as atConcur,Dn as cache,In as cacheAsync,qn as cacheConcur,ua as chunk,da as chunkAsync,wa as chunkConcur,k as compose,va as concat,ha as concatAsync,ga as concatConcur,Nn as consume,$n as consumeAsync,Bn as consumeConcur,Ea as count,ja as countAsync,Oa as countConcur,c as curry,rn as cycle,cn as cycleAsync,Qn as drop,Rn as dropAsync,Tn as dropConcur,Cn as dropWhile,Fn as dropWhileAsync,Gn as dropWhileConcur,Pn as each,En as eachAsync,jn as eachConcur,O as empty,W as emptyAsync,M as emptyConcur,nn as entries,Wt as exclude,Mt as excludeAsync,At as excludeConcur,vt as filter,gt as filterAsync,kt as filterConcur,zt as filterMap,Et as filterMapAsync,jt as filterMapConcur,Ct as find,Ft as findAsync,Gt as findConcur,Ht as findLast,Jt as findLastAsync,Kt as findLastConcur,Yn as first,Zn as firstAsync,ta as firstConcur,d as flatMap,w as flatMapAsync,m as flatMapConcur,b as flatten,_ as flattenAsync,S as flattenConcur,On as forEach,Wn as forEachAsync,Mn as forEachConcur,an as generate,en as generateAsync,C as get,F as getAsync,G as getConcur,gn as includes,kn as includesAsync,zn as includesConcur,p as index,v as indexAsync,h as indexConcur,_t as join,St as joinAsync,pt as joinConcur,Zt as keys,na as last,aa as lastAsync,ea as lastConcur,l as map,y as mapAsync,L as mapAsyncReducer,u as mapConcur,K as mapReducer,ze as max,Ee as maxAsync,re as maxBy,fe as maxByAsync,ue as maxByConcur,We as maxConcur,me as maxWith,Se as maxWithAsync,he as maxWithConcur,Ba as mean,Da as meanAsync,Ia as meanConcur,ke as min,xe as minAsync,oe as minBy,se as minByAsync,ye as minByConcur,Oe as minConcur,Pe as minMax,je as minMaxAsync,ce as minMaxBy,le as minMaxByAsync,de as minMaxByConcur,Me as minMaxConcur,be as minMaxWith,pe as minMaxWithAsync,ge as minMaxWithConcur,we as minWith,_e as minWithAsync,ve as minWithConcur,H as next,J as nextAsync,_n as none,pn as noneAsync,vn as noneConcur,Q as normalizeReducer,A as opaque,N as opaqueAsync,$ as opaqueConcur,B as or,D as orAsync,I as orConcur,g as pipe,ln as rangeTo,fn as rangeUntil,U as reduce,X as reduceAsync,Y as reduceConcur,on as repeat,oa as slice,ra as sliceAsync,ca as sliceConcur,Ma as sum,Aa as sumAsync,Na as sumConcur,Un as take,Vn as takeAsync,Xn as takeConcur,Hn as takeWhile,Jn as takeWhileAsync,Kn as takeWhileConcur,at as toArray,xa as toCount,yt as toGrouped,mt as toJoin,ft as toMap,ae as toMax,Ha as toMaxBy,La as toMaxByAsync,Ua as toMaxWith,Za as toMaxWithAsync,$a as toMean,ne as toMin,Ga as toMinBy,Ka as toMinByAsync,ee as toMinMax,Ja as toMinMaxBy,Qa as toMinMaxByAsync,Va as toMinMaxWith,te as toMinMaxWithAsync,Ta as toMinWith,Ya as toMinWithAsync,ut as toMultiple,rt as toObject,it as toSet,Wa as toSum,lt as toWeakMap,ot as toWeakSet,Dt as unique,It as uniqueAsync,Nt as uniqueBy,$t as uniqueByAsync,Bt as uniqueByConcur,qt as uniqueConcur,tn as values,ma as window,ba as windowAsync,_a as windowConcur,ka as zip,za as zipAsync,Pa as zipConcur}; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWluLmpzIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZXJuYWwvaGVscGVycy5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL3RyYW5zZm9ybXMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9jb3JlLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvb3B0aW9uYWxzLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvcmVkdWNlcnMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9jb2xsZWN0aW9ucy5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL2ZpbHRlcnMuanMiLCIuLi9zcmMvaW50ZXJuYWwvcHJlY29uZGl0aW9ucy5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL2dlbmVyYXRvcnMuanMiLCIuLi9zcmMvb3BlcmF0aW9ucy9wcmVkaWNhdGVzLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvc2lkZS1lZmZlY3RzLmpzIiwiLi4vc3JjL29wZXJhdGlvbnMvc3BsaWNlcy5qcyIsIi4uL3NyYy9vcGVyYXRpb25zL3N0YXRpc3RpY3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGlkZW50aXR5ID0gdmFsdWUgPT4gdmFsdWVcblxuZXhwb3J0IGNvbnN0IHRodW5rID0gdmFsdWUgPT4gKCkgPT4gdmFsdWVcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUl0ZXJhYmxlID0gZm4gPT4gKHsgW1N5bWJvbC5pdGVyYXRvcl06IGZuIH0pXG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBc3luY0l0ZXJhYmxlID0gZm4gPT4gKHsgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTogZm4gfSlcblxuZXhwb3J0IGNvbnN0IHByb21pc2VXaXRoRWFybHlSZXNvbHZlID0gZm4gPT4ge1xuICBjb25zdCB7IF9wcm9taXNlOiBwcm9taXNlLCBfcmVzb2x2ZTogcmVzb2x2ZSB9ID0gZGVmZXJyZWQoKVxuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCBmbihyZXNvbHZlKV0pXG59XG5cbmV4cG9ydCBjb25zdCBkZWZlcnJlZCA9ICgpID0+IHtcbiAgbGV0IHJlc29sdmVcbiAgcmV0dXJuIHtcbiAgICBfcHJvbWlzZTogbmV3IFByb21pc2UociA9PiB7XG4gICAgICByZXNvbHZlID0gclxuICAgIH0pLFxuICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBpc1Byb21pc2UgPSB2YWx1ZSA9PlxuICBCb29sZWFuKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSBgZnVuY3Rpb25gKVxuXG5leHBvcnQgY29uc3QgY3VycnkgPSBmbiA9PiB7XG4gIGlmIChmbi5sZW5ndGggPD0gMSB8fCBjdXJyaWVkRnVuY3Rpb25zLmhhcyhmbikpIHtcbiAgICByZXR1cm4gZm5cbiAgfVxuXG4gIGNvbnN0IGN1cnJpZWQgPSB3cmFwRnVuY3Rpb24oZm4sICguLi5hcmdzKSA9PlxuICAgIGFyZ3MubGVuZ3RoIDwgZm4ubGVuZ3RoID8gY3VycnkoZm4uYmluZChudWxsLCAuLi5hcmdzKSkgOiBmbiguLi5hcmdzKSxcbiAgKVxuICBjdXJyaWVkRnVuY3Rpb25zLmFkZChjdXJyaWVkKVxuXG4gIHJldHVybiBjdXJyaWVkXG59XG5cbmNvbnN0IHdyYXBGdW5jdGlvbiA9IChwcmV2aW91c0ZuLCBuZXdGbikgPT5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmV3Rm4sIHtcbiAgICBsZW5ndGg6IHsgdmFsdWU6IHByZXZpb3VzRm4ubGVuZ3RoIH0sXG4gICAgbmFtZTogeyB2YWx1ZTogcHJldmlvdXNGbi5uYW1lIH0sXG4gIH0pXG5cbmNvbnN0IGN1cnJpZWRGdW5jdGlvbnMgPSBuZXcgV2Vha1NldCgpXG4iLCJpbXBvcnQge1xuICBjcmVhdGVBc3luY0l0ZXJhYmxlLFxuICBjcmVhdGVJdGVyYWJsZSxcbiAgY3VycnksXG4gIGlkZW50aXR5LFxufSBmcm9tICcuLi9pbnRlcm5hbC9oZWxwZXJzLmpzJ1xuaW1wb3J0IHsgYXNDb25jdXIgfSBmcm9tICcuL2NvcmUuanMnXG5cbmV4cG9ydCBjb25zdCBtYXAgPSBjdXJyeSgoZm4sIGl0ZXJhYmxlKSA9PlxuICBjcmVhdGVJdGVyYWJsZShmdW5jdGlvbiogKCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgIHlpZWxkIGZuKHZhbHVlKVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBtYXBBc3luYyA9IGN1cnJ5KChmbiwgYXN5bmNJdGVyYWJsZSkgPT5cbiAgY3JlYXRlQXN5bmNJdGVyYWJsZShhc3luYyBmdW5jdGlvbiogKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgYXN5bmNJdGVyYWJsZSkge1xuICAgICAgeWllbGQgZm4odmFsdWUpXG4gICAgfVxuICB9KSxcbilcblxuZXhwb3J0IGNvbnN0IG1hcENvbmN1ciA9IGN1cnJ5KFxuICAoZm4sIGNvbmN1ckl0ZXJhYmxlKSA9PiBhcHBseSA9PlxuICAgIGNvbmN1ckl0ZXJhYmxlKGFzeW5jIHZhbHVlID0+IGFwcGx5KGF3YWl0IGZuKHZhbHVlKSkpLFxuKVxuXG5leHBvcnQgY29uc3QgZmxhdE1hcCA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gIGNyZWF0ZUl0ZXJhYmxlKGZ1bmN0aW9uKiAoKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgICAgeWllbGQqIGZuKHZhbHVlKVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBmbGF0TWFwQXN5bmMgPSBjdXJyeSgoZm4sIGFzeW5jSXRlcmFibGUpID0+XG4gIGNyZWF0ZUFzeW5jSXRlcmFibGUoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGFzeW5jSXRlcmFibGUpIHtcbiAgICAgIHlpZWxkKiBhd2FpdCBmbih2YWx1ZSlcbiAgICB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgZmxhdE1hcENvbmN1ciA9IGN1cnJ5KFxuICAoZm4sIGNvbmN1ckl0ZXJhYmxlKSA9PiBhcHBseSA9PlxuICAgIGNvbmN1ckl0ZXJhYmxlKGFzeW5jIHZhbHVlID0+IGFzQ29uY3VyKGF3YWl0IGZuKHZhbHVlKSkoYXBwbHkpKSxcbilcblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW4gPSBmbGF0TWFwKGlkZW50aXR5KVxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5Bc3luYyA9IGZsYXRNYXBBc3luYyhpZGVudGl0eSlcbmV4cG9ydCBjb25zdCBmbGF0dGVuQ29uY3VyID0gZmxhdE1hcENvbmN1cihpZGVudGl0eSlcblxuZXhwb3J0IGNvbnN0IGluZGV4ID0gY3VycnkoaXRlcmFibGUgPT5cbiAgY3JlYXRlSXRlcmFibGUoZnVuY3Rpb24qICgpIHtcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgICAgeWllbGQgW2luZGV4KyssIHZhbHVlXVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBpbmRleEFzeW5jID0gY3VycnkoYXN5bmNJdGVyYWJsZSA9PlxuICBjcmVhdGVBc3luY0l0ZXJhYmxlKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IGluZGV4ID0gMFxuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgYXN5bmNJdGVyYWJsZSkge1xuICAgICAgeWllbGQgW2luZGV4KyssIHZhbHVlXVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBpbmRleENvbmN1ciA9IGN1cnJ5KGNvbmN1ckl0ZXJhYmxlID0+IGFzeW5jIGFwcGx5ID0+IHtcbiAgbGV0IGluZGV4ID0gMFxuICBhd2FpdCBjb25jdXJJdGVyYWJsZSh2YWx1ZSA9PiBhcHBseShbaW5kZXgrKywgdmFsdWVdKSlcbn0pXG4iLCJpbXBvcnQge1xuICBjcmVhdGVBc3luY0l0ZXJhYmxlLFxuICBjcmVhdGVJdGVyYWJsZSxcbiAgZGVmZXJyZWQsXG4gIGlzUHJvbWlzZSxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycy5qcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vdHJhbnNmb3Jtcy5qcydcblxuZXhwb3J0IHsgY3VycnkgfSBmcm9tICcuLi9pbnRlcm5hbC9oZWxwZXJzLmpzJ1xuXG5leHBvcnQgY29uc3QgcGlwZSA9ICh2YWx1ZSwgLi4uZm5zKSA9PiBmbnMucmVkdWNlKChhY2MsIGZuKSA9PiBmbihhY2MpLCB2YWx1ZSlcblxuZXhwb3J0IGNvbnN0IGNvbXBvc2UgPVxuICAoLi4uZm5zKSA9PlxuICB2YWx1ZSA9PlxuICAgIHBpcGUodmFsdWUsIC4uLmZucylcblxuZXhwb3J0IGNvbnN0IGFzQXN5bmMgPSBpdGVyYWJsZSA9PiB7XG4gIGlmIChpdGVyYWJsZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gaXRlcmFibGVcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVBc3luY0l0ZXJhYmxlKFxuICAgIGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl1cbiAgICAgID8gKCkgPT4gaXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpXG4gICAgICA6IGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgbGV0IGJ1ZmZlciA9IFtdXG4gICAgICAgICAgbGV0IGRvbmUgPSBmYWxzZVxuICAgICAgICAgIGxldCBub25FbXB0eUJ1ZmZlckRlZmVycmVkID0gZGVmZXJyZWQoKVxuICAgICAgICAgIGxldCBkZWZlcnJlZEVycm9yXG5cbiAgICAgICAgICBpdGVyYWJsZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSlcbiAgICAgICAgICAgIGlmIChub25FbXB0eUJ1ZmZlckRlZmVycmVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREZWZlcnJlZCA9IG5vbkVtcHR5QnVmZmVyRGVmZXJyZWRcbiAgICAgICAgICAgICAgbm9uRW1wdHlCdWZmZXJEZWZlcnJlZCA9IG51bGxcbiAgICAgICAgICAgICAgY3VycmVudERlZmVycmVkLl9yZXNvbHZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBkb25lID0gdHJ1ZVxuICAgICAgICAgICAgICBub25FbXB0eUJ1ZmZlckRlZmVycmVkPy5fcmVzb2x2ZSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgZGVmZXJyZWRFcnJvciA9IGVycm9yXG4gICAgICAgICAgICAgIG5vbkVtcHR5QnVmZmVyRGVmZXJyZWQ/Ll9yZXNvbHZlKClcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICB3aGlsZSAoIWRvbmUpIHtcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEVycm9yKSB7XG4gICAgICAgICAgICAgIHlpZWxkKiBidWZmZXJcbiAgICAgICAgICAgICAgdGhyb3cgZGVmZXJyZWRFcnJvclxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgYXdhaXQgbm9uRW1wdHlCdWZmZXJEZWZlcnJlZC5fcHJvbWlzZVxuICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50QnVmZmVyID0gYnVmZmVyXG4gICAgICAgICAgICBidWZmZXIgPSBbXVxuICAgICAgICAgICAgbm9uRW1wdHlCdWZmZXJEZWZlcnJlZCA9IGRlZmVycmVkKClcbiAgICAgICAgICAgIHlpZWxkKiBjdXJyZW50QnVmZmVyXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICApXG59XG5cbmV4cG9ydCBjb25zdCBhc0NvbmN1ciA9IGl0ZXJhYmxlID0+IHtcbiAgaWYgKHR5cGVvZiBpdGVyYWJsZSA9PT0gYGZ1bmN0aW9uYCkge1xuICAgIHJldHVybiBpdGVyYWJsZVxuICB9XG5cbiAgaWYgKGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gYXN5bmMgYXBwbHkgPT4ge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobWFwKGFwcGx5LCBpdGVyYWJsZSkpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFzeW5jIGFwcGx5ID0+IHtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdXG5cbiAgICAvLyBUT0RPOiBTd2l0Y2ggdG8gZnJvbUFzeW5jIG9uY2Ugd2Ugb25seSBzdXBwb3J0IE5vZGUgdjIyXG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBpdGVyYWJsZSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXBwbHkodmFsdWUpXG4gICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChyZXN1bHQpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gIH1cbn1cblxuY29uc3QgcmVzdWx0ID0geyBkb25lOiB0cnVlIH1cbmNvbnN0IGl0ZXJhdG9yID0geyBuZXh0OiAoKSA9PiByZXN1bHQgfVxuY29uc3QgYXN5bmNJdGVyYXRvciA9IHsgbmV4dDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkgfVxuXG5leHBvcnQgY29uc3QgZW1wdHkgPSBjcmVhdGVJdGVyYWJsZSgoKSA9PiBpdGVyYXRvcilcbmV4cG9ydCBjb25zdCBlbXB0eUFzeW5jID0gY3JlYXRlQXN5bmNJdGVyYWJsZSgoKSA9PiBhc3luY0l0ZXJhdG9yKVxuZXhwb3J0IGNvbnN0IGVtcHR5Q29uY3VyID0gKCkgPT4gUHJvbWlzZS5yZXNvbHZlKClcblxuZXhwb3J0IGNvbnN0IG9wYXF1ZSA9IGl0ZXJhYmxlID0+XG4gIGNyZWF0ZUl0ZXJhYmxlKCgpID0+IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKSlcbmV4cG9ydCBjb25zdCBvcGFxdWVBc3luYyA9IGFzeW5jSXRlcmFibGUgPT5cbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSgoKSA9PiBhc3luY0l0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpKVxuZXhwb3J0IGNvbnN0IG9wYXF1ZUNvbmN1ciA9IGNvbmN1ckl0ZXJhYmxlID0+IGFwcGx5ID0+IGNvbmN1ckl0ZXJhYmxlKGFwcGx5KVxuIiwiaW1wb3J0IHtcbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSxcbiAgY3JlYXRlSXRlcmFibGUsXG4gIGN1cnJ5LFxuICBwcm9taXNlV2l0aEVhcmx5UmVzb2x2ZSxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycy5qcydcbmltcG9ydCB7IGFzQXN5bmMsIGVtcHR5LCBlbXB0eUFzeW5jLCBvcGFxdWUgfSBmcm9tICcuL2NvcmUuanMnXG5cbmV4cG9ydCBjb25zdCBvciA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gaXRlcmF0b3IubmV4dCgpXG4gIHJldHVybiBkb25lIHx8ICFpdGVyYXRvci5uZXh0KCkuZG9uZSA/IGZuKCkgOiB2YWx1ZVxufSlcblxuZXhwb3J0IGNvbnN0IG9yQXN5bmMgPSBjdXJyeShhc3luYyAoZm4sIGFzeW5jSXRlcmFibGUpID0+IHtcbiAgY29uc3QgYXN5bmNJdGVyYXRvciA9IGFzeW5jSXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgYXN5bmNJdGVyYXRvci5uZXh0KClcblxuICByZXR1cm4gZG9uZSB8fCAhKGF3YWl0IGFzeW5jSXRlcmF0b3IubmV4dCgpKS5kb25lID8gZm4oKSA6IHZhbHVlXG59KVxuXG5leHBvcnQgY29uc3Qgb3JDb25jdXIgPSBjdXJyeSgoZm4sIGNvbmN1ckl0ZXJhYmxlKSA9PlxuICBwcm9taXNlV2l0aEVhcmx5UmVzb2x2ZShhc3luYyByZXNvbHZlID0+IHtcbiAgICBsZXQgcmVzb2x2ZWRcbiAgICBsZXQgcmVzdWx0XG5cbiAgICBhd2FpdCBjb25jdXJJdGVyYWJsZShhc3luYyB2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXN1bHQgPSB7IHZhbHVlIH1cbiAgICAgIH0gZWxzZSBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgIHJlc29sdmVkID0gdHJ1ZVxuICAgICAgICByZXNvbHZlKGF3YWl0IGZuKCkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmUocmVzdWx0ID8gcmVzdWx0LnZhbHVlIDogYXdhaXQgZm4oKSlcbiAgICB9XG4gIH0pLFxuKVxuXG5jb25zdCBlcnJvciA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKGBEaWQgbm90IGNvbnRhaW4gZXhhY3RseSBvbmUgdmFsdWVgKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0ID0gb3IoZXJyb3IpXG5leHBvcnQgY29uc3QgZ2V0QXN5bmMgPSBvckFzeW5jKGVycm9yKVxuZXhwb3J0IGNvbnN0IGdldENvbmN1ciA9IG9yQ29uY3VyKGVycm9yKVxuXG5leHBvcnQgY29uc3QgbmV4dCA9IGN1cnJ5KGl0ZXJhYmxlID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKClcbiAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gaXRlcmF0b3IubmV4dCgpXG5cbiAgcmV0dXJuIGRvbmVcbiAgICA/IFtlbXB0eSwgZW1wdHldXG4gICAgOiBbb3BhcXVlKFt2YWx1ZV0pLCBjcmVhdGVJdGVyYWJsZSgoKSA9PiBpdGVyYXRvcildXG59KVxuXG5leHBvcnQgY29uc3QgbmV4dEFzeW5jID0gY3VycnkoYXN5bmMgYXN5bmNJdGVyYWJsZSA9PiB7XG4gIGNvbnN0IGFzeW5jSXRlcmF0b3IgPSBhc3luY0l0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGFzeW5jSXRlcmF0b3IubmV4dCgpXG5cbiAgcmV0dXJuIGRvbmVcbiAgICA/IFtlbXB0eUFzeW5jLCBlbXB0eUFzeW5jXVxuICAgIDogW2FzQXN5bmMoW3ZhbHVlXSksIGNyZWF0ZUFzeW5jSXRlcmFibGUoKCkgPT4gYXN5bmNJdGVyYXRvcildXG59KVxuIiwiaW1wb3J0IHtcbiAgY3JlYXRlQXN5bmNJdGVyYWJsZSxcbiAgY3JlYXRlSXRlcmFibGUsXG4gIGN1cnJ5LFxuICBpZGVudGl0eSxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvaGVscGVycy5qcydcbmltcG9ydCB7IGFzQ29uY3VyIH0gZnJvbSAnLi9jb3JlLmpzJ1xuaW1wb3J0IHsgbmV4dCB9IGZyb20gJy4vb3B0aW9uYWxzLmpzJ1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi90cmFuc2Zvcm1zLmpzJ1xuXG5leHBvcnQgY29uc3QgbWFwUmVkdWNlciA9IGN1cnJ5KChmbiwgcmVkdWNlcikgPT4ge1xuICBjb25zdCB7IGZpbmlzaCwgLi4ucmVzdFJlZHVjZXIgfSA9IG5vcm1hbGl6ZVJlZHVjZXIocmVkdWNlcilcbiAgcmV0dXJuIHsgLi4ucmVzdFJlZHVjZXIsIGZpbmlzaDogdmFsdWUgPT4gZm4oZmluaXNoKHZhbHVlKSkgfVxufSlcblxuZXhwb3J0IGNvbnN0IG1hcEFzeW5jUmVkdWNlciA9IGN1cnJ5KChmbiwgYXN5bmNSZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IHsgZmluaXNoLCAuLi5yZXN0QXN5bmNSZWR1Y2VyIH0gPSBub3JtYWxpemVSZWR1Y2VyKGFzeW5jUmVkdWNlcilcbiAgcmV0dXJuIHsgLi4ucmVzdEFzeW5jUmVkdWNlciwgZmluaXNoOiBhc3luYyB2YWx1ZSA9PiBmbihhd2FpdCBmaW5pc2godmFsdWUpKSB9XG59KVxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplUmVkdWNlciA9IHJlZHVjZXIgPT4ge1xuICBjb25zdCBub3JtYWxpemVkUmVkdWNlciA9IHsgZmluaXNoOiBpZGVudGl0eSB9XG4gIGlmICh0eXBlb2YgcmVkdWNlciA9PT0gYGZ1bmN0aW9uYCkge1xuICAgIG5vcm1hbGl6ZWRSZWR1Y2VyLmFkZCA9IHJlZHVjZXJcbiAgICByZXR1cm4gbm9ybWFsaXplZFJlZHVjZXJcbiAgfVxuXG4gIGZvciAoY29uc3QgbWV0aG9kTmFtZSBvZiBSRURVQ0VSX01FVEhPRF9OQU1FUykge1xuICAgIGNvbnN0IG1ldGhvZCA9IHJlZHVjZXJbbWV0aG9kTmFtZV1cbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICBub3JtYWxpemVkUmVkdWNlclttZXRob2ROYW1lXSA9IG1ldGhvZC5iaW5kKHJlZHVjZXIpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZWR1Y2VyXG59XG5cbmNvbnN0IFJFRFVDRVJfTUVUSE9EX05BTUVTID0gW2BjcmVhdGVgLCBgYWRkYCwgYGdldGAsIGBmaW5pc2hgLCBgY29tYmluZWBdXG5cbmV4cG9ydCBjb25zdCBOT19FTlRSWSA9IHt9XG5cbmV4cG9ydCBjb25zdCByZWR1Y2UgPSBjdXJyeSgocmVkdWNlciwgaXRlcmFibGUpID0+IHtcbiAgY29uc3QgeyBjcmVhdGUsIGFkZCwgZmluaXNoIH0gPSBub3JtYWxpemVSZWR1Y2VyKHJlZHVjZXIpXG4gIGlmIChjcmVhdGUpIHtcbiAgICByZXR1cm4gcmVkdWNlSW50ZXJuYWwoY3JlYXRlKCksIGFkZCwgZmluaXNoLCBpdGVyYWJsZSlcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVJdGVyYWJsZShmdW5jdGlvbiogKCkge1xuICAgIGNvbnN0IFtmaXJzdCwgcmVzdF0gPSBuZXh0KGl0ZXJhYmxlKVxuICAgIHlpZWxkKiBtYXAodmFsdWUgPT4gcmVkdWNlSW50ZXJuYWwodmFsdWUsIGFkZCwgZmluaXNoLCByZXN0KSwgZmlyc3QpXG4gIH0pXG59KVxuXG5jb25zdCByZWR1Y2VJbnRlcm5hbCA9IChhY2MsIGFkZCwgZmluaXNoLCBpdGVyYWJsZSkgPT4ge1xuICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgYWNjID0gYWRkKGFjYywgdmFsdWUpXG4gIH1cblxuICByZXR1cm4gZmluaXNoKGFjYylcbn1cblxuZXhwb3J0IGNvbnN0IHJlZHVjZUFzeW5jID0gY3VycnkoKGFzeW5jUmVkdWNlciwgYXN5bmNJdGVyYWJsZSkgPT4ge1xuICBjb25zdCB7IGNyZWF0ZSwgYWRkLCBjb21iaW5lLCBmaW5pc2ggfSA9IG5vcm1hbGl6ZVJlZHVjZXIoYXN5bmNSZWR1Y2VyKVxuICBjb25zdCBjb25jdXJJdGVyYWJsZSA9IGFzQ29uY3VyKGFzeW5jSXRlcmFibGUpXG4gIGlmICghY3JlYXRlKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUFzeW5jSXRlcmFibGUoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICAgIHlpZWxkKiBhd2FpdCByZWR1Y2VDb25jdXJXaXRob3V0Q3JlYXRlKGFkZCwgZmluaXNoLCBjb25jdXJJdGVyYWJsZSlcbiAgICB9KVxuICB9XG4gIGlmICghY29tYmluZSkge1xuICAgIHJldHVybiByZWR1Y2VDb25jdXJXaXRoQ3JlYXRlV2l0aG91dENvbWJpbmUoXG4gICAgICBjcmVhdGUsXG4gICAgICBhZGQsXG4gICAgICBmaW5pc2gsXG4gICAgICBjb25jdXJJdGVyYWJsZSxcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlZHVjZUNvbmN1cldpdGhDcmVhdGVXaXRoQ29tYmluZShcbiAgICBjcmVhdGUsXG4gICAgYWRkLFxuICAgIGNvbWJpbmUsXG4gICAgZmluaXNoLFxuICAgIGNvbmN1ckl0ZXJhYmxlLFxuICApXG59KVxuXG5leHBvcnQgY29uc3QgcmVkdWNlQ29uY3VyID0gY3VycnkoKGFzeW5jUmVkdWNlciwgY29uY3VySXRlcmFibGUpID0+IHtcbiAgY29uc3QgeyBjcmVhdGUsIGFkZCwgY29tYmluZSwgZmluaXNoIH0gPSBub3JtYWxpemVSZWR1Y2VyKGFzeW5jUmVkdWNlcilcbiAgaWYgKCFjcmVhdGUpIHtcbiAgICByZXR1cm4gYXN5bmMgYXBwbHkgPT4ge1xuICAgICAgY29uc3QgYWNjcyA9IGF3YWl0IHJlZHVjZUNvbmN1cldpdGhvdXRDcmVhdGUoYWRkLCBmaW5pc2gsIGNvbmN1ckl0ZXJhYmxlKVxuICAgICAgaWYgKGFjY3MubGVuZ3RoKSB7XG4gICAgICAgIGF3YWl0IGFwcGx5KGFjY3NbMF0pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghY29tYmluZSkge1xuICAgIHJldHVybiByZWR1Y2VDb25jdXJXaXRoQ3JlYXRlV2l0aG91dENvbWJpbmUoXG4gICAgICBjcmVhdGUsXG4gICAgICBhZGQsXG4gICAgICBmaW5pc2gsXG4gICAgICBjb25jdXJJdGVyYWJsZSxcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlZHVjZUNvbmN1cldpdGhDcmVhdGVXaXRoQ29tYmluZShcbiAgICBjcmVhdGUsXG4gICAgYWRkLFxuICAgIGNvbWJpbmUsXG4gICAgZmluaXNoLFxuICAgIGNvbmN1ckl0ZXJhYmxlLFxuICApXG59KVxuXG5jb25zdCByZWR1Y2VDb25jdXJXaXRob3V0Q3JlYXRlID0gYXN5bmMgKGFkZCwgZmluaXNoLCBjb25jdXJJdGVyYWJsZSkgPT4ge1xuICBjb25zdCBhY2NzID0gW11cblxuICBhd2FpdCBjb25jdXJJdGVyYWJsZShhc3luYyBhY2MgPT4ge1xuICAgIHdoaWxlIChhY2NzLmxlbmd0aCkge1xuICAgICAgYWNjID0gYXdhaXQgYWRkKGFjYywgYWNjcy5wb3AoKSlcbiAgICB9XG5cbiAgICBhY2NzLnB1c2goYWNjKVxuICB9KVxuXG4gIHJldHVybiBhY2NzLmxlbmd0aCA/IFthd2FpdCBmaW5pc2goYWNjc1swXSldIDogYWNjc1xufVxuXG5jb25zdCByZWR1Y2VDb25jdXJXaXRoQ3JlYXRlV2l0aENvbWJpbmUgPSBhc3luYyAoXG4gIGNyZWF0ZSxcbiAgYWRkLFxuICBjb21iaW5lLFxuICBmaW5pc2gsXG4gIGNvbmN1ckl0ZXJhYmxlLFxuKSA9PiB7XG4gIGNvbnN0IGFjY3MgPSBbY3JlYXRlKCldXG5cbiAgYXdhaXQgY29uY3VySXRlcmFibGUoYXN5bmMgdmFsdWUgPT4ge1xuICAgIGxldCBhY2MgPSBhd2FpdCBhZGQoYXdhaXQgKGFjY3MubGVuZ3RoID8gYWNjcy5wb3AoKSA6IGNyZWF0ZSgpKSwgdmFsdWUpXG5cbiAgICB3aGlsZSAoYWNjcy5sZW5ndGgpIHtcbiAgICAgIGFjYyA9IGF3YWl0IGNvbWJpbmUoYWNjLCBhY2NzLnBvcCgpKVxuICAgIH1cblxuICAgIGFjY3MucHVzaChhY2MpXG4gIH0pXG5cbiAgcmV0dXJuIGZpbmlzaChhd2FpdCBhY2NzWzBdKVxufVxuXG5jb25zdCByZWR1Y2VDb25jdXJXaXRoQ3JlYXRlV2l0aG91dENvbWJpbmUgPSBhc3luYyAoXG4gIGNyZWF0ZSxcbiAgYWRkLFxuICBmaW5pc2gsXG4gIGNvbmN1ckl0ZXJhYmxlLFxuKSA9PiB7XG4gIGxldCBhY2NQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNyZWF0ZSgpKVxuICBhd2FpdCBjb25jdXJJdGVyYWJsZSh2YWx1ZSA9PiB7XG4gICAgYWNjUHJvbWlzZSA9IGFjY1Byb21pc2UudGhlbihhY2MgPT4gYWRkKGFjYywgdmFsdWUpKVxuICB9KVxuICByZXR1cm4gZmluaXNoKGF3YWl0IGFjY1Byb21pc2UpXG59XG4iLCJpbXBvcnQgeyBjdXJyeSwgdGh1bmsgfSBmcm9tICcuLi9pbnRlcm5hbC9oZWxwZXJzLmpzJ1xuaW1wb3J0IHtcbiAgTk9fRU5UUlksXG4gIG5vcm1hbGl6ZVJlZHVjZXIsXG4gIHJlZHVjZSxcbiAgcmVkdWNlQXN5bmMsXG4gIHJlZHVjZUNvbmN1cixcbn0gZnJvbSAnLi9yZWR1Y2Vycy5qcydcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vdHJhbnNmb3Jtcy5qcydcblxuZXhwb3J0IGNvbnN0IHRvQXJyYXkgPSB0aHVuayhcbiAgbm9ybWFsaXplUmVkdWNlcih7XG4gICAgY3JlYXRlOiAoKSA9PiBbXSxcbiAgICBhZGQ6IChhY2MsIHZhbHVlKSA9PiB7XG4gICAgICBhY2MucHVzaCh2YWx1ZSlcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LFxuICB9KSxcbilcblxuY29uc3Qgc2V0QWRkID0gKGFjYywgdmFsdWUpID0+IGFjYy5hZGQodmFsdWUpXG5leHBvcnQgY29uc3QgdG9TZXQgPSB0aHVuayhcbiAgbm9ybWFsaXplUmVkdWNlcih7IGNyZWF0ZTogKCkgPT4gbmV3IFNldCgpLCBhZGQ6IHNldEFkZCB9KSxcbilcbmV4cG9ydCBjb25zdCB0b1dlYWtTZXQgPSB0aHVuayhcbiAgbm9ybWFsaXplUmVkdWNlcih7IGNyZWF0ZTogKCkgPT4gbmV3IFdlYWtTZXQoKSwgYWRkOiBzZXRBZGQgfSksXG4pXG5cbmV4cG9ydCBjb25zdCB0b09iamVjdCA9IHRodW5rKFxuICBub3JtYWxpemVSZWR1Y2VyKHtcbiAgICBjcmVhdGU6ICgpID0+ICh7fSksXG4gICAgYWRkOiAoYWNjLCBba2V5LCB2YWx1ZV0pID0+XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWNjLCBrZXksIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWUsXG4gICAgICB9KSxcbiAgICBnZXQ6IChhY2MsIGtleSkgPT4gKGhhc093bi5jYWxsKGFjYywga2V5KSA/IGFjY1trZXldIDogTk9fRU5UUlkpLFxuICB9KSxcbilcbmNvbnN0IGhhc093biA9IHt9Lmhhc093blByb3BlcnR5XG5cbmNvbnN0IG1hcEFkZEdldCA9IHtcbiAgYWRkOiAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IGFjYy5zZXQoa2V5LCB2YWx1ZSksXG4gIGdldDogKGFjYywga2V5KSA9PiAoYWNjLmhhcyhrZXkpID8gYWNjLmdldChrZXkpIDogTk9fRU5UUlkpLFxufVxuZXhwb3J0IGNvbnN0IHRvTWFwID0gdGh1bmsoXG4gIG5vcm1hbGl6ZVJlZHVjZXIoeyBjcmVhdGU6ICgpID0+IG5ldyBNYXAoKSwgLi4ubWFwQWRkR2V0IH0pLFxuKVxuZXhwb3J0IGNvbnN0IHRvV2Vha01hcCA9IHRodW5rKFxuICBub3JtYWxpemVSZWR1Y2VyKHsgY3JlYXRlOiAoKSA9PiBuZXcgV2Vha01hcCgpLCAuLi5tYXBBZGRHZXQgfSksXG4pXG5cbmV4cG9ydCBjb25zdCB0b0dyb3VwZWQgPSBjdXJyeSgoaW5uZXJSZWR1Y2VyLCBvdXRlclJlZHVjZXIpID0+IHtcbiAgY29uc3Qge1xuICAgIGNyZWF0ZTogY3JlYXRlSW5uZXIsXG4gICAgYWRkOiBhZGRJbm5lcixcbiAgICBmaW5pc2g6IGZpbmlzaElubmVyLFxuICB9ID0gbm9ybWFsaXplUmVkdWNlcihpbm5lclJlZHVjZXIpXG4gIGNvbnN0IHtcbiAgICBjcmVhdGU6IGNyZWF0ZU91dGVyLFxuICAgIGFkZDogYWRkT3V0ZXIsXG4gICAgZ2V0OiBnZXRPdXRlcixcbiAgfSA9IG5vcm1hbGl6ZVJlZHVjZXIob3V0ZXJSZWR1Y2VyKVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlOiAoKSA9PiAoeyBfYWNjOiBjcmVhdGVPdXRlcigpLCBfa2V5czogW10gfSksXG4gICAgYWRkOiAoYWNjLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGxldCBncm91cCA9IGdldE91dGVyKGFjYy5fYWNjLCBrZXkpXG4gICAgICBpZiAoZ3JvdXAgPT09IE5PX0VOVFJZKSB7XG4gICAgICAgIGdyb3VwID0gY3JlYXRlSW5uZXIgPyBhZGRJbm5lcihjcmVhdGVJbm5lcigpLCB2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICBhY2MuX2tleXMucHVzaChrZXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBncm91cCA9IGFkZElubmVyKGdyb3VwLCB2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgYWNjLl9hY2MgPSBhZGRPdXRlcihhY2MuX2FjYywgW2tleSwgZ3JvdXBdKVxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sXG4gICAgZmluaXNoOiAoeyBfYWNjLCBfa2V5cyB9KSA9PlxuICAgICAgX2tleXMucmVkdWNlKFxuICAgICAgICAoYWNjLCBrZXkpID0+IGFkZE91dGVyKGFjYywgW2tleSwgZmluaXNoSW5uZXIoZ2V0T3V0ZXIoYWNjLCBrZXkpKV0pLFxuICAgICAgICBfYWNjLFxuICAgICAgKSxcbiAgfVxufSlcblxuZXhwb3J0IGNvbnN0IHRvTXVsdGlwbGUgPSByZWR1Y2VycyA9PiB7XG4gIGNvbnN0IG1hcFJlZHVjZXJzID0gQXJyYXkuaXNBcnJheShyZWR1Y2VycylcbiAgICA/IGZuID0+XG4gICAgICAgIHJlZHVjZShcbiAgICAgICAgICB0b0FycmF5KCksXG4gICAgICAgICAgbWFwKChbLCByZWR1Y2VyXSkgPT4gZm4ocmVkdWNlciksIHJlZHVjZXJzKSxcbiAgICAgICAgKVxuICAgIDogZm4gPT5cbiAgICAgICAgcmVkdWNlKFxuICAgICAgICAgIHRvT2JqZWN0KCksXG4gICAgICAgICAgbWFwKChba2V5LCByZWR1Y2VyXSkgPT4gW2tleSwgZm4ocmVkdWNlcildLCByZWR1Y2VycyksXG4gICAgICAgIClcbiAgcmVkdWNlcnMgPSBPYmplY3QuZW50cmllcyhyZWR1Y2VycykubWFwKChba2V5LCByZWR1Y2VyXSkgPT4gW1xuICAgIGtleSxcbiAgICBub3JtYWxpemVSZWR1Y2VyKHJlZHVjZXIpLFxuICBdKVxuXG4gIGNvbnN0IGFwcGx5UmVkdWNlcnMgPSAoYWNjLCBmbikgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgcmVkdWNlcl0gb2YgcmVkdWNlcnMpIHtcbiAgICAgIGFjY1trZXldID0gZm4oYWNjW2tleV0sIHJlZHVjZXIpXG4gICAgfVxuICAgIHJldHVybiBhY2NcbiAgfVxuXG4gIGNvbnN0IGFkZCA9IChhY2MsIHZhbHVlKSA9PlxuICAgIGFwcGx5UmVkdWNlcnMoYWNjLCAoYWNjLCB7IGFkZCB9KSA9PiBhZGQoYWNjLCB2YWx1ZSkpXG4gIGNvbnN0IGZpbmlzaCA9IGFjYyA9PiBhcHBseVJlZHVjZXJzKGFjYywgKGFjYywgeyBmaW5pc2ggfSkgPT4gZmluaXNoKGFjYykpXG4gIGlmIChyZWR1Y2Vycy5ldmVyeSgoWywgeyBjcmVhdGUgfV0pID0+IGNyZWF0ZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlOiAoKSA9PiBtYXBSZWR1Y2VycygoeyBjcmVhdGUgfSkgPT4gY3JlYXRlKCkpLFxuICAgICAgYWRkLFxuICAgICAgZmluaXNoLFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYWRkOiAoYWNjLCB2YWx1ZSkgPT4gYWRkKGFzTXVsdGlwbGUoYWNjLCBtYXBSZWR1Y2VycyksIHZhbHVlKSxcbiAgICBmaW5pc2g6IGFjYyA9PiB7XG4gICAgICBhY2MgPSBmaW5pc2goYXNNdWx0aXBsZShhY2MsIG1hcFJlZHVjZXJzKSlcbiAgICAgIG11bHRpcGxlU2V0LmRlbGV0ZShhY2MpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSxcbiAgfVxufVxuXG5jb25zdCBtdWx0aXBsZVNldCA9IG5ldyBXZWFrU2V0KClcbmNvbnN0IGFzTXVsdGlwbGUgPSAodmFsdWUsIG1hcFJlZHVjZXJzKSA9PiB7XG4gIGlmIChtdWx0aXBsZVNldC5oYXModmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBjb25zdCBtdWx0aXBsZSA9IG1hcFJlZHVjZXJzKCh7IGNyZWF0ZSwgYWRkIH0pID0+XG4gICAgY3JlYXRlID8gYWRkKGNyZWF0ZSgpLCB2YWx1ZSkgOiB2YWx1ZSxcbiAgKVxuICBtdWx0aXBsZVNldC5hZGQobXVsdGlwbGUpXG4gIHJldHVybiBtdWx0aXBsZVxufVxuXG5leHBvcnQgY29uc3QgdG9Kb2luID0gc2VwYXJhdG9yID0+ICh7XG4gIGNyZWF0ZTogKCkgPT4ge30sXG4gIGFkZDogKGFjYywgdmFsdWUpID0+XG4gICAgYWNjID09PSB1bmRlZmluZWQgPyBTdHJpbmcodmFsdWUpIDogU3RyaW5nKGFjYykgKyBzZXBhcmF0b3IgKyBTdHJpbmcodmFsdWUpLFxuICBmaW5pc2g6IGFjYyA9PiBhY2MgPz8gYGAsXG59KVxuXG5jb25zdCBjcmVhdGVKb2luID0gcmVkdWNlID0+XG4gIGN1cnJ5KChzZXBhcmF0b3IsIGl0ZXJhYmxlKSA9PiByZWR1Y2UodG9Kb2luKHNlcGFyYXRvciksIGl0ZXJhYmxlKSlcblxuZXhwb3J0IGNvbnN0IGpvaW4gPSBjcmVhdGVKb2luKHJlZHVjZSlcbmV4cG9ydCBjb25zdCBqb2luQXN5bmMgPSBjcmVhdGVKb2luKHJlZHVjZUFzeW5jKVxuZXhwb3J0IGNvbnN0IGpvaW5Db25jdXIgPSBjcmVhdGVKb2luKHJlZHVjZUNvbmN1cilcbiIsImltcG9ydCB7XG4gIGNyZWF0ZUFzeW5jSXRlcmFibGUsXG4gIGNyZWF0ZUl0ZXJhYmxlLFxuICBjdXJyeSxcbiAgaWRlbnRpdHksXG4gIHByb21pc2VXaXRoRWFybHlSZXNvbHZlLFxufSBmcm9tICcuLi9pbnRlcm5hbC9oZWxwZXJzLmpzJ1xuaW1wb3J0IHsgZmxhdE1hcCwgZmxhdE1hcEFzeW5jLCBmbGF0TWFwQ29uY3VyIH0gZnJvbSAnLi90cmFuc2Zvcm1zLmpzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gY3VycnkoKGZuLCBpdGVyYWJsZSkgPT5cbiAgZmxhdE1hcCh2YWx1ZSA9PiAoZm4odmFsdWUpID8gW3ZhbHVlXSA6IFtdKSwgaXRlcmFibGUpLFxuKVxuXG5jb25zdCBjcmVhdGVBc3luY0ZpbHRlciA9IGZsYXRNYXAgPT5cbiAgY3VycnkoKGZuLCBpdGVyYWJsZSkgPT5cbiAgICBmbGF0TWFwKGFzeW5jIHZhbHVlID0+ICgoYXdhaXQgZm4odmFsdWUpKSA/IFt2YWx1ZV0gOiBbXSksIGl0ZXJhYmxlKSxcbiAgKVxuXG5leHBvcnQgY29uc3QgZmlsdGVyQXN5bmMgPSBjcmVhdGVBc3luY0ZpbHRlcihmbGF0TWFwQXN5bmMpXG5leHBvcnQgY29uc3QgZmlsdGVyQ29uY3VyID0gY3JlYXRlQXN5bmNGaWx0ZXIoZmxhdE1hcENvbmN1cilcblxuZXhwb3J0IGNvbnN0IGZpbHRlck1hcCA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gIGZsYXRNYXAodmFsdWUgPT4gZmlsdGVyTWFwSW5uZXIoZm4odmFsdWUpKSwgaXRlcmFibGUpLFxuKVxuXG5jb25zdCBjcmVhdGVBc3luY0ZpbHRlck1hcCA9IGZsYXRNYXAgPT5cbiAgY3VycnkoKGZuLCBpdGVyYWJsZSkgPT5cbiAgICBmbGF0TWFwKGFzeW5jIHZhbHVlID0+IGZpbHRlck1hcElubmVyKGF3YWl0IGZuKHZhbHVlKSksIGl0ZXJhYmxlKSxcbiAgKVxuXG5jb25zdCBmaWx0ZXJNYXBJbm5lciA9IHZhbHVlID0+ICh2YWx1ZSA9PSBudWxsID8gW10gOiBbdmFsdWVdKVxuXG5leHBvcnQgY29uc3QgZmlsdGVyTWFwQXN5bmMgPSBjcmVhdGVBc3luY0ZpbHRlck1hcChmbGF0TWFwQXN5bmMpXG5leHBvcnQgY29uc3QgZmlsdGVyTWFwQ29uY3VyID0gY3JlYXRlQXN5bmNGaWx0ZXJNYXAoZmxhdE1hcENvbmN1cilcblxuY29uc3QgY3JlYXRlRXhjbHVkZSA9IGZpbHRlciA9PlxuICBjdXJyeSgoZXhjbHVkZWQsIGl0ZXJhYmxlKSA9PiB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldChleGNsdWRlZClcbiAgICByZXR1cm4gZmlsdGVyKHZhbHVlID0+ICFzZXQuaGFzKHZhbHVlKSwgaXRlcmFibGUpXG4gIH0pXG5cbmV4cG9ydCBjb25zdCBleGNsdWRlID0gY3JlYXRlRXhjbHVkZShmaWx0ZXIpXG5leHBvcnQgY29uc3QgZXhjbHVkZUFzeW5jID0gY3JlYXRlRXhjbHVkZShmaWx0ZXJBc3luYylcbmV4cG9ydCBjb25zdCBleGNsdWRlQ29uY3VyID0gY3JlYXRlRXhjbHVkZShmaWx0ZXJDb25jdXIpXG5cbmV4cG9ydCBjb25zdCB1bmlxdWVCeSA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gIGNyZWF0ZUl0ZXJhYmxlKGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGl0ZXJhYmxlKSB7XG4gICAgICBjb25zdCBieSA9IGZuKHZhbHVlKVxuICAgICAgaWYgKHNldC5oYXMoYnkpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHNldC5hZGQoYnkpXG4gICAgICB5aWVsZCB2YWx1ZVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCB1bmlxdWVCeUFzeW5jID0gY3VycnkoKGZuLCBhc3luY0l0ZXJhYmxlKSA9PlxuICBjcmVhdGVBc3luY0l0ZXJhYmxlKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldCgpXG5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGFzeW5jSXRlcmFibGUpIHtcbiAgICAgIGNvbnN0IGJ5ID0gYXdhaXQgZm4odmFsdWUpXG4gICAgICBpZiAoc2V0LmhhcyhieSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2V0LmFkZChieSlcbiAgICAgIHlpZWxkIHZhbHVlXG4gICAgfVxuICB9KSxcbilcblxuZXhwb3J0IGNvbnN0IHVuaXF1ZUJ5Q29uY3VyID0gY3VycnkoKGZuLCBjb25jdXJJdGVyYWJsZSkgPT4gYXBwbHkgPT4ge1xuICBjb25zdCBzZXQgPSBuZXcgU2V0KClcblxuICByZXR1cm4gY29uY3VySXRlcmFibGUoYXN5bmMgdmFsdWUgPT4ge1xuICAgIGNvbnN0IGJ5ID0gYXdhaXQgZm4odmFsdWUpXG4gICAgaWYgKHNldC5oYXMoYnkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXQuYWRkKGJ5KVxuICAgIGF3YWl0IGFwcGx5KHZhbHVlKVxuICB9KVxufSlcblxuZXhwb3J0IGNvbnN0IHVuaXF1ZSA9IHVuaXF1ZUJ5KGlkZW50aXR5KVxuZXhwb3J0IGNvbnN0IHVuaXF1ZUFzeW5jID0gdW5pcXVlQnlBc3luYyhpZGVudGl0eSlcbmV4cG9ydCBjb25zdCB1bmlxdWVDb25jdXIgPSB1bmlxdWVCeUNvbmN1cihpZGVudGl0eSlcblxuZXhwb3J0IGNvbnN0IGZpbmQgPSBjdXJyeSgoZm4sIGl0ZXJhYmxlKSA9PlxuICBjcmVhdGVJdGVyYWJsZShmdW5jdGlvbiogKCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgIGlmIChmbih2YWx1ZSkpIHtcbiAgICAgICAgeWllbGQgdmFsdWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9KSxcbilcblxuZXhwb3J0IGNvbnN0IGZpbmRBc3luYyA9IGN1cnJ5KChmbiwgYXN5bmNJdGVyYWJsZSkgPT5cbiAgY3JlYXRlQXN5bmNJdGVyYWJsZShhc3luYyBmdW5jdGlvbiogKCkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgdmFsdWUgb2YgYXN5bmNJdGVyYWJsZSkge1xuICAgICAgaWYgKGF3YWl0IGZuKHZhbHVlKSkge1xuICAgICAgICB5aWVsZCB2YWx1ZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgZmluZENvbmN1ciA9IGN1cnJ5KFxuICAoZm4sIGNvbmN1ckl0ZXJhYmxlKSA9PiBhcHBseSA9PlxuICAgIHByb21pc2VXaXRoRWFybHlSZXNvbHZlKGFzeW5jIHJlc29sdmUgPT4ge1xuICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgIGF3YWl0IGNvbmN1ckl0ZXJhYmxlKGFzeW5jIHZhbHVlID0+IHtcbiAgICAgICAgaWYgKGZvdW5kIHx8ICEoYXdhaXQgZm4odmFsdWUpKSB8fCBmb3VuZCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGFwcGx5KHZhbHVlKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdCA9IGN1cnJ5KChmbiwgaXRlcmFibGUpID0+XG4gIGNyZWF0ZUl0ZXJhYmxlKGZ1bmN0aW9uKiAoKSB7XG4gICAgbGV0IGxhc3RcblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgaXRlcmFibGUpIHtcbiAgICAgIGlmIChmbih2YWx1ZSkpIHtcbiAgICAgICAgbGFzdCA9IHsgdmFsdWUgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChsYXN0KSB7XG4gICAgICB5aWVsZCBsYXN0LnZhbHVlXG4gICAgfVxuICB9KSxcbilcblxuZXhwb3J0IGNvbnN0IGZpbmRMYXN0QXN5bmMgPSBjdXJyeSgoZm4sIGFzeW5jSXRlcmFibGUpID0+XG4gIGNyZWF0ZUFzeW5jSXRlcmFibGUoYXN5bmMgZnVuY3Rpb24qICgpIHtcbiAgICBsZXQgbGFzdFxuXG4gICAgZm9yIGF3YWl0IChjb25zdCB2YWx1ZSBvZiBhc3luY0l0ZXJhYmxlKSB7XG4gICAgICBpZiAoYXdhaXQgZm4odmFsdWUpKSB7XG4gICAgICAgIGxhc3QgPSB7IHZhbHVlIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGFzdCkge1xuICAgICAgeWllbGQgbGFzdC52YWx1ZVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdENvbmN1ciA9IGN1cnJ5KChmbiwgY29uY3VySXRlcmFibGUpID0+IGFzeW5jIGFwcGx5ID0+IHtcbiAgbGV0IGxhc3RcblxuICBhd2FpdCBjb25jdXJJdGVyYWJsZShhc3luYyB2YWx1ZSA9PiB7XG4gICAgaWYgKGF3YWl0IGZuKHZhbHVlKSkge1xuICAgICAgbGFzdCA9IHsgdmFsdWUgfVxuICAgIH1cbiAgfSlcblxuICBpZiAobGFzdCkge1xuICAgIGF3YWl0IGFwcGx5KGxhc3QudmFsdWUpXG4gIH1cbn0pXG4iLCJjb25zdCBjcmVhdGVBc3NlcnQgPVxuICAoeyBfcHJlZGljYXRlLCBfbWVzc2FnZSB9KSA9PlxuICBjb25maWcgPT5cbiAgICBPYmplY3QuZW50cmllcyhjb25maWcpLmV2ZXJ5KFxuICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgIF9wcmVkaWNhdGUobmFtZSwgdmFsdWUpIHx8XG4gICAgICAgIGVycm9yKGBcXGAke25hbWV9XFxgIG11c3QgYmUgJHtfbWVzc2FnZX06ICR7dmFsdWV9YCksXG4gICAgKVxuXG5leHBvcnQgY29uc3QgZXJyb3IgPSBtZXNzYWdlID0+IHtcbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG59XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRJbnRlZ2VyID0gY3JlYXRlQXNzZXJ0KHtcbiAgX3ByZWRpY2F0ZTogKF8sIHZhbHVlKSA9PiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZSksXG4gIF9tZXNzYWdlOiBgYW4gaW50ZWdlcmAsXG59KVxuXG5leHBvcnQgY29uc3QgYXNzZXJ0Tm9uTmVnYXRpdmVJbnRlZ2VyID0gY3JlYXRlQXNzZXJ0KHtcbiAgX3ByZWRpY2F0ZTogKG5hbWUsIHZhbHVlKSA9PiBhc3NlcnRJbnRlZ2VyKHsgW25hbWVdOiB2YWx1ZSB9KSAmJiB2YWx1ZSA+PSAwLFxuICBfbWVzc2FnZTogYGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgLFxufSlcblxuZXhwb3J0IGNvbnN0IGFzc2VydFBvc2l0aXZlSW50ZWdlciA9IGNyZWF0ZUFzc2VydCh7XG4gIF9wcmVkaWNhdGU6IChuYW1lLCB2YWx1ZSkgPT4gYXNzZXJ0SW50ZWdlcih7IFtuYW1lXTogdmFsdWUgfSkgJiYgdmFsdWUgPiAwLFxuICBfbWVzc2FnZTogYGEgcG9zaXRpdmUgaW50ZWdlcmAsXG59KVxuXG5leHBvcnQgY29uc3QgYXNzZXJ0UHVyZUl0ZXJhYmxlID0gY3JlYXRlQXNzZXJ0KHtcbiAgX3ByZWRpY2F0ZTogKF8sIHsgX3ZhbHVlOiB2YWx1ZSwgX3N5bWJvbDogc3ltYm9sIH0pID0+XG4gICAgdmFsdWVbc3ltYm9sXSgpICE9PSB2YWx1ZVtzeW1ib2xdKCksXG4gIF9tZXNzYWdlOiBgYSBwdXJlIGl0ZXJhYmxlYCxcbn0pXG5cbmV4cG9ydCBjb25zdCBhc3NlcnRSYW5nZSA9IGNyZWF0ZUFzc2VydCh7XG4gIF9wcmVkaWNhdGU6IChfLCBbc3RhcnQsIGVuZF0pID0+IHN0YXJ0IDw9IGVuZCxcbiAgX21lc3NhZ2U6IGBhIHJhbmdlYCxcbn0pXG4iLCJpbXBvcnQge1xuICBjcmVhdGVBc3luY0l0ZXJhYmxlLFxuICBjcmVhdGVJdGVyYWJsZSxcbiAgY3VycnksXG59IGZyb20gJy4uL2ludGVybmFsL2hlbHBlcnMuanMnXG5pbXBvcnQge1xuICBhc3NlcnRJbnRlZ2VyLFxuICBhc3NlcnRQb3NpdGl2ZUludGVnZXIsXG4gIGFzc2VydFB1cmVJdGVyYWJsZSxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvcHJlY29uZGl0aW9ucy5qcydcblxuY29uc3QgaXRlcmFibGUgPSBuYW1lID0+IG9iamVjdCA9PlxuICBjcmVhdGVJdGVyYWJsZSgoKSA9PlxuICAgIChvYmplY3RbbmFtZV0/LigpID8/IE9iamVjdFtuYW1lXShvYmplY3QpKVtTeW1ib2wuaXRlcmF0b3JdKCksXG4gIClcbmV4cG9ydCBjb25zdCBrZXlzID0gaXRlcmFibGUoYGtleXNgKVxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IGl0ZXJhYmxlKGB2YWx1ZXNgKVxuZXhwb3J0IGNvbnN0IGVudHJpZXMgPSBpdGVyYWJsZShgZW50cmllc2ApXG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZSA9IGN1cnJ5KChmbiwgc2VlZCkgPT5cbiAgY3JlYXRlSXRlcmFibGUoZnVuY3Rpb24qICgpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSA9IHNlZWQ7IHZhbHVlICE9IG51bGw7IHZhbHVlID0gZm4odmFsdWUpKSB7XG4gICAgICB5aWVsZCB2YWx1ZVxuICAgIH1cbiAgfSksXG4pXG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUFzeW5jID0gY3VycnkoKGZuLCBzZWVkKSA9PlxuICBjcmVhdGVBc3luY0l0ZXJhYmxlKGFzeW5jIGZ1bmN0aW9uKiAoKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgPSBzZWVkOyB2YWx1ZSAhPSBudWxsOyB2YWx1ZSA9IGF3YWl0IGZuKHZhbHVlKSkge1xuICAgICAgeWllbGQgdmFsdWVcbiAgICB9XG4gIH0pLFxuKVxuXG5leHBvcnQgY29uc3QgcmVwZWF0ID0gdmFsdWUgPT5cbiAgY3JlYXRlSXRlcmFibGUoZnVuY3Rpb24qICgpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgeWllbGQgdmFsdWVcbiAgICB9XG4gIH0pXG5cbmV4cG9ydCBjb25zdCBjeWNsZSA9IGl0ZXJhYmxlID0+IHtcbiAgYXNzZXJ0UHVyZUl0ZXJhYmxlKHtcbiAgICBpdGVyYWJsZTogeyBfdmFsdWU6IGl0ZXJhYmxlLCBfc3ltYm9sOiBTeW1ib2wuaXRlcmF0b3IgfSxcbiAgfSlcblxuICByZXR1cm4gY3JlYXRlSXRlcmFibGUoZnVuY3Rpb24qICgpIHtcbiAgICBjb25zdCBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKVxuICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGl0ZXJhdG9yLm5leHQoKVxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGVtcHR5IGl0ZXJhYmxlISBSZXR1cm4gZWFybHkgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcC5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHlpZWxkIHZhbHVlXG4gICAgeWllbGQqIGNyZWF0ZUl0ZXJhYmxlKCgpID0+IGl0ZXJhdG9yKVxuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHlpZWxkKiBpdGVyYWJsZVxuICA