>>0?1:0),r+=P,e+=v+(r>>>0>>0?1:0),r+=ne,e+=Oe+(r>>>0>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Ae=R&le^~R&de,ke=x&ee^~x&te,P=w&q^w&Q^q&Q,mt=L&H^L&z^H&z,Oe=(L<<4|w>>>28)^(w<<30|L>>>2)^(w<<25|L>>>7),ne=(w<<4|L>>>28)^(L<<30|w>>>2)^(L<<25|w>>>7),yt=o[2*t],Pe=o[2*t+1],v=re+((R<<18|x>>>14)^(R<<14|x>>>18)^(x<<23|R>>>9)),k=Ee+((x<<18|R>>>14)^(x<<14|R>>>18)^(R<<23|x>>>9))+(v>>>0>>0?1:0),v=v+ke,k=k+(Ae+(v>>>0>>0?1:0)),v=v+Pe,k=k+(yt+(v>>>0>>0?1:0)),v=v+r|0,k=k+(e+(v>>>0>>0?1:0));r=ne+mt,e=Oe+P+(r>>>0>>0?1:0),Ee=de,re=te,de=le,te=ee,le=R,ee=x,x=Z+v|0,R=we+k+(x>>>0>>0?1:0)|0,we=Q,Z=z,Q=q,z=H,q=w,H=L,L=v+r|0,w=k+e+(L>>>0>>0?1:0)|0}s=n[1]=s+L|0,n[0]=i+w+(s>>>0>>0?1:0)|0,u=n[3]=u+H|0,n[2]=a+q+(u>>>0>>0?1:0)|0,h=n[5]=h+z|0,n[4]=f+Q+(h>>>0>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+we+(y>>>0>>0?1:0)|0,g=n[9]=g+x|0,n[8]=d+R+(g>>>0>>0?1:0)|0,C=n[11]=C+ee|0,n[10]=D+le+(C>>>0>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0>>0?1:0)|0,he=n[15]=he+re|0,n[14]=Re+Ee+(he>>>0>>0?1:0)|0}};c.mode.ccm={name:"ccm",F:[],listenProgress:function(t){c.mode.ccm.F.push(t)},unListenProgress:function(t){t=c.mode.ccm.F.indexOf(t),-1u)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&f>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=a.bitLength(e)/8,65279>=r?s=[a.partial(16,r)]:4294967295>=r&&(s=a.concat([a.partial(16,65534)],[r])),s=a.concat(s,e),e=0;eo||16h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:a.clamp(e,f)}}};c.misc.hmac=function(t,e){this.W=e=e||c.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;nn||0>r)throw new c.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=c.codec.utf8String.toBits(t)),typeof e=="string"&&(e=c.codec.utf8String.toBits(e)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),this.K=new c.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n>>1;this.h[s].update([n,this.M++,2,e,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new c.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,a===this.A&&(this.isReady()!==this.A&&rt("seeded",Math.max(this.u,this.i)),rt("progress",this.getProgress()))},isReady:function(t){return t=this.R[t!==void 0?t:this.L],this.u&&this.u>=t?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=t?this.I|this.A:this.A},getProgress:function(t){return t=this.R[t||this.L],this.u>=t||this.i>t?1:this.i/t},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:ce(this,this.la),mouseCollector:ce(this,this.na),keyboardCollector:ce(this,this.ja),accelerometerCollector:ce(this,this.ca),touchCollector:ce(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new c.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(t,e){this.J[t][this.ea++]=e},removeEventListener:function(t,e){var r,n,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.push(n);for(r=0;re&&(t.m[e]=t.m[e]+1|0,!t.m[e]);e++);return t.K.encrypt(t.m)}function ce(t,e){return function(){e.apply(t,arguments)}}c.random=new c.prng(6);e:try{if(ve=typeof Y<"u"&&Y.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.randomBytes(128),ae=new Uint32Array(new Uint8Array(ae).buffer),c.random.addEntropy(ae,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(ue=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(ue);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(ue);else break e;c.random.addEntropy(ue,1024,"crypto['getRandomValues']")}}catch(t){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(t))}var ae,ye,ue,ve,ge;c.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(t,e,r,n){r=r||{},n=n||{};var o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.iv.length||4=e.iter||e.ts!==64&&e.ts!==96&&e.ts!==128||e.ks!==128&&e.ks!==192&&e.ks!==256||!e.iv||2>e.iv.length||4(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var $e=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pt={withStackTrace:!1},qe=(t,e,r=Pt)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function G(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ye(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function I(t){return this instanceof I?(this.v=t,this):new I(t)}function Ve(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(D){return new Promise(function(C,j){i.push([d,D,C,j])>1||u(d,D)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(D){y(i[0][3],D)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Tt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function It(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof Ye=="function"?Ye(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new b(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new b(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(G(this,void 0,void 0,function*(){try{return new b(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return Mt(e)}static combineWithAllErrors(e){return Ut(e)}map(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new b(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new b(r.value)})))}andTee(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new b(r.value)})))}mapErr(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isOk()?new b(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new b(r.value)})))}match(e,r){return this._promise.then(n=>n.match(e,r))}unwrapOr(e){return this._promise.then(r=>r.unwrapOr(e))}safeUnwrap(){return Ve(this,arguments,function*(){return yield I(yield I(yield*Tt(It(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return Ve(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new b(t))),O=t=>new E(Promise.resolve(new S(t))),pr=E.fromPromise,mr=E.fromSafePromise,yr=E.fromThrowable,Qe=t=>{let e=F([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},Mt=t=>E.fromSafePromise(Promise.all(t)).andThen(Qe),Ze=t=>{let e=F([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Ut=t=>E.fromSafePromise(Promise.all(t)).andThen(Ze),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return F(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Qe(o)}t.combine=r;function n(o){return Ze(o)}t.combineWithAllErrors=n})(_e||(_e={}));var F=t=>new b(t);function N(t){return new S(t)}var b=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return F(e(this.value))}mapErr(e){return F(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(r=>this.value)}andTee(e){try{e(this.value)}catch{}return F(this.value)}orElse(e){return F(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,r){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw qe("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw qe("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},vr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});T(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);T(this,"message","An error occured while trying to connect to WebSocket")}};var J=t=>{if(t instanceof Error)return t;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(t)}catch{}return new Error(e)};var $=class{constructor(e,r){if(!e||e.length!=64)throw Error("Charset must contain 64 characters");this._charset=e,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(e){let r=e.byteLength;if(!r)return"";let n=new Uint8Array(e),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}Decode(e){if(e=(e||"").replace(/[\s]/g,""),!e)return new ArrayBuffer(0);if(!this._valid.test(e))throw Error("Invalid base64 input sequence");let r=Math.floor(e.length*.75);e[e.length-2]=="="?r-=2:e[e.length-1]=="="&&r--;let n=new Uint8Array(r),o,i,s,a,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function De(t){return Nt.Decode(t)}var st=Ie(ot());var B=class extends W{};var V=class extends B{constructor(){super(...arguments);T(this,"message","Unable to decrypt the provided data")}};var ct=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(st.default.decrypt(t,r)))}catch(r){return O(new V(void 0,{cause:J(r)}))}};var at=(t,e)=>Ht(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new V(void 0,{cause:J(n)})));var Ht=t=>E.fromPromise(crypto.subtle.importKey("raw",De(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:J(e)}));var ut=(t,e)=>e.algo===void 0||e.algo===0?ct(t,e):at(t,e);var _={},ft=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(rr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ut(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(X(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):X(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?qt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(X(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),X(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(X(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Yt=(t,e)=>{let r=tr(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},Vt=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.CONNECTING,Se=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.OPEN,ht=t=>Ce(er(t),t,`${JSON.stringify({id:t.keys.server,mod_token:t.actionToken,cancel:!0,i:t.queueIndex})}XXMOJOXXuseless`);var qt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},Ce(Zt(t),t,JSON.stringify(e))};var Ce=(t,e,r)=>Se(t)?(_[t].send(r),M(void 0)):lt(t).andThen(()=>(_[t].onmessage=n=>Yt(n,e),Ce(t,e,r))),lt=(t,e=0)=>(!Se(t)&&!Vt(t)&&(_[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{_[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),_[t].onopen=()=>{m.emit("SOCKET_OPENED")},_[t].onclose=()=>{},_[t].onerror=()=>++e<=ft?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ft}`),lt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Se(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>J(e));var dt=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},Zt=t=>dt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString(),er=t=>dt(new URL(t.serverUrl),"upload").toString(),tr=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},rr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||($e(),pt=!0),m.on("UPLOAD_CANCELLED",e=>{self.postMessage({event:"UPLOAD_CANCELLED",success:e})}),nr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var nr=t=>ht(t.args.lufiFile);
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vc3JjL3dvcmtlci9jYW5jZWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7dmFyIHNqY2w9e2NpcGhlcjp7fSxoYXNoOnt9LGtleWV4Y2hhbmdlOnt9LG1vZGU6e30sbWlzYzp7fSxjb2RlYzp7fSxleGNlcHRpb246e2NvcnJ1cHQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ09SUlVQVDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0saW52YWxpZDpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJJTlZBTElEOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxidWc6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQlVHOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxub3RSZWFkeTpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJOT1QgUkVBRFk6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9fX07XG5zamNsLmNpcGhlci5hZXM9ZnVuY3Rpb24oYSl7dGhpcy53WzBdWzBdWzBdfHx0aGlzLkMoKTt2YXIgYixjLGQsZSxmPXRoaXMud1swXVs0XSxnPXRoaXMud1sxXTtiPWEubGVuZ3RoO3ZhciBoPTE7aWYoNCE9PWImJjYhPT1iJiY4IT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGtleSBzaXplXCIpO3RoaXMuYj1bZD1hLnNsaWNlKDApLGU9W11dO2ZvcihhPWI7YTw0KmIrMjg7YSsrKXtjPWRbYS0xXTtpZigwPT09YSVifHw4PT09YiYmND09PWElYiljPWZbYz4+PjI0XTw8MjReZltjPj4xNiYyNTVdPDwxNl5mW2M+PjgmMjU1XTw8OF5mW2MmMjU1XSwwPT09YSViJiYoYz1jPDw4XmM+Pj4yNF5oPDwyNCxoPWg8PDFeMjgzKihoPj43KSk7ZFthXT1kW2EtYl1eY31mb3IoYj0wO2E7YisrLGEtLSljPWRbYiYzP2E6YS00XSxlW2JdPTQ+PWF8fDQ+Yj9jOmdbMF1bZltjPj4+MjRdXV5nWzFdW2ZbYz4+MTYmMjU1XV1eZ1syXVtmW2M+PjgmMjU1XV1eZ1szXVtmW2MmXG4yNTVdXX07XG5zamNsLmNpcGhlci5hZXMucHJvdG90eXBlPXtlbmNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMCl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFhKHRoaXMsYSwxKX0sdzpbW1tdLFtdLFtdLFtdLFtdXSxbW10sW10sW10sW10sW11dXSxDOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy53WzBdLGI9dGhpcy53WzFdLGM9YVs0XSxkPWJbNF0sZSxmLGcsaD1bXSxrPVtdLG4sbCxtLHA7Zm9yKGU9MDsweDEwMD5lO2UrKylrWyhoW2VdPWU8PDFeMjgzKihlPj43KSleZV09ZTtmb3IoZj1nPTA7IWNbZl07Zl49bnx8MSxnPWtbZ118fDEpZm9yKG09Z15nPDwxXmc8PDJeZzw8M15nPDw0LG09bT4+OF5tJjI1NV45OSxjW2ZdPW0sZFttXT1mLGw9aFtlPWhbbj1oW2ZdXV0scD0weDEwMTAxMDEqbF4weDEwMDAxKmVeMHgxMDEqbl4weDEwMTAxMDAqZixsPTB4MTAxKmhbbV1eMHgxMDEwMTAwKm0sZT0wOzQ+ZTtlKyspYVtlXVtmXT1sPWw8PDI0Xmw+Pj44LGJbZV1bbV09cD1wPDwyNF5wPj4+ODtmb3IoZT1cbjA7NT5lO2UrKylhW2VdPWFbZV0uc2xpY2UoMCksYltlXT1iW2VdLnNsaWNlKDApfX07XG5mdW5jdGlvbiBhYShhLGIsYyl7aWYoNCE9PWIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBhZXMgYmxvY2sgc2l6ZVwiKTt2YXIgZD1hLmJbY10sZT1iWzBdXmRbMF0sZj1iW2M/MzoxXV5kWzFdLGc9YlsyXV5kWzJdO2I9YltjPzE6M11eZFszXTt2YXIgaCxrLG4sbD1kLmxlbmd0aC80LTIsbSxwPTQsej1bMCwwLDAsMF07aD1hLndbY107YT1oWzBdO3ZhciBBPWhbMV0sQz1oWzJdLEI9aFszXSxEPWhbNF07Zm9yKG09MDttPGw7bSsrKWg9YVtlPj4+MjRdXkFbZj4+MTYmMjU1XV5DW2c+PjgmMjU1XV5CW2ImMjU1XV5kW3BdLGs9YVtmPj4+MjRdXkFbZz4+MTYmMjU1XV5DW2I+PjgmMjU1XV5CW2UmMjU1XV5kW3ArMV0sbj1hW2c+Pj4yNF1eQVtiPj4xNiYyNTVdXkNbZT4+OCYyNTVdXkJbZiYyNTVdXmRbcCsyXSxiPWFbYj4+PjI0XV5BW2U+PjE2JjI1NV1eQ1tmPj44JjI1NV1eQltnJjI1NV1eZFtwKzNdLHArPTQsZT1oLGY9ayxnPW47Zm9yKG09XG4wOzQ+bTttKyspeltjPzMmLW06bV09RFtlPj4+MjRdPDwyNF5EW2Y+PjE2JjI1NV08PDE2XkRbZz4+OCYyNTVdPDw4XkRbYiYyNTVdXmRbcCsrXSxoPWUsZT1mLGY9ZyxnPWIsYj1oO3JldHVybiB6fVxuc2pjbC5iaXRBcnJheT17Yml0U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe2E9c2pjbC5iaXRBcnJheS5ZKGEuc2xpY2UoYi8zMiksMzItKGImMzEpKS5zbGljZSgxKTtyZXR1cm4gdm9pZCAwPT09Yz9hOnNqY2wuYml0QXJyYXkuY2xhbXAoYSxjLWIpfSxleHRyYWN0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLmZsb29yKC1iLWMmMzEpO3JldHVybigoYitjLTFeYikmLTMyP2FbYi8zMnwwXTw8MzItZF5hW2IvMzIrMXwwXT4+PmQ6YVtiLzMyfDBdPj4+ZCkmKDE8PGMpLTF9LGNvbmNhdDpmdW5jdGlvbihhLGIpe2lmKDA9PT1hLmxlbmd0aHx8MD09PWIubGVuZ3RoKXJldHVybiBhLmNvbmNhdChiKTt2YXIgYz1hW2EubGVuZ3RoLTFdLGQ9c2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGMpO3JldHVybiAzMj09PWQ/YS5jb25jYXQoYik6c2pjbC5iaXRBcnJheS5ZKGIsZCxjfDAsYS5zbGljZSgwLGEubGVuZ3RoLTEpKX0sYml0TGVuZ3RoOmZ1bmN0aW9uKGEpe3ZhciBiPWEubGVuZ3RoO3JldHVybiAwPT09XG5iPzA6MzIqKGItMSkrc2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGFbYi0xXSl9LGNsYW1wOmZ1bmN0aW9uKGEsYil7aWYoMzIqYS5sZW5ndGg8YilyZXR1cm4gYTthPWEuc2xpY2UoMCxNYXRoLmNlaWwoYi8zMikpO3ZhciBjPWEubGVuZ3RoO2I9YiYzMTswPGMmJmImJihhW2MtMV09c2pjbC5iaXRBcnJheS5wYXJ0aWFsKGIsYVtjLTFdJjIxNDc0ODM2NDg+PmItMSwxKSk7cmV0dXJuIGF9LHBhcnRpYWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAzMj09PWE/YjooYz9ifDA6Yjw8MzItYSkrMHgxMDAwMDAwMDAwMCphfSxnZXRQYXJ0aWFsOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnJvdW5kKGEvMHgxMDAwMDAwMDAwMCl8fDMyfSxlcXVhbDpmdW5jdGlvbihhLGIpe2lmKHNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpIT09c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYikpcmV0dXJuITE7dmFyIGM9MCxkO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspY3w9YVtkXV5iW2RdO3JldHVybiAwPT09XG5jfSxZOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2U9MDtmb3Iodm9pZCAwPT09ZCYmKGQ9W10pOzMyPD1iO2ItPTMyKWQucHVzaChjKSxjPTA7aWYoMD09PWIpcmV0dXJuIGQuY29uY2F0KGEpO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKGN8YVtlXT4+PmIpLGM9YVtlXTw8MzItYjtlPWEubGVuZ3RoP2FbYS5sZW5ndGgtMV06MDthPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChlKTtkLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGIrYSYzMSwzMjxiK2E/YzpkLnBvcCgpLDEpKTtyZXR1cm4gZH0sUDpmdW5jdGlvbihhLGIpe3JldHVyblthWzBdXmJbMF0sYVsxXV5iWzFdLGFbMl1eYlsyXSxhWzNdXmJbM11dfSxieXRlc3dhcE06ZnVuY3Rpb24oYSl7dmFyIGIsYztmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWM9YVtiXSxhW2JdPWM+Pj4yNHxjPj4+OCYweGZmMDB8KGMmMHhmZjAwKTw8OHxjPDwyNDtyZXR1cm4gYX19O1xuc2pjbC5jb2RlYy51dGY4U3RyaW5nPXtmcm9tQml0czpmdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSksZCxlO2ZvcihkPTA7ZDxjLzg7ZCsrKTA9PT0oZCYzKSYmKGU9YVtkLzRdKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGU+Pj44Pj4+OD4+PjgpLGU8PD04O3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGIpKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe2E9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGEpKTt2YXIgYj1bXSxjLGQ9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWQ9ZDw8OHxhLmNoYXJDb2RlQXQoYyksMz09PShjJjMpJiYoYi5wdXNoKGQpLGQ9MCk7YyYzJiZiLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDgqKGMmMyksZCkpO3JldHVybiBifX07XG5zamNsLmNvZGVjLmhleD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYis9KChhW2NdfDApKzB4ZjAwMDAwMDAwMDAwKS50b1N0cmluZygxNikuc3Vic3RyKDQpO3JldHVybiBiLnN1YnN0cigwLHNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLzQpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkO2E9YS5yZXBsYWNlKC9cXHN8MHgvZyxcIlwiKTtkPWEubGVuZ3RoO2E9YStcIjAwMDAwMDAwXCI7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrPTgpYy5wdXNoKHBhcnNlSW50KGEuc3Vic3RyKGIsOCksMTYpXjApO3JldHVybiBzamNsLmJpdEFycmF5LmNsYW1wKGMsNCpkKX19O1xuc2pjbC5jb2RlYy5iYXNlNjQ9e1M6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsZnJvbUJpdHM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiXCIsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaD1zamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtjJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihjPTA7NipkLmxlbmd0aDxoOylkKz1mLmNoYXJBdCgoZ15hW2NdPj4+ZSk+Pj4yNiksNj5lPyhnPWFbY108PDYtZSxlKz0yNixjKyspOihnPDw9NixlLT02KTtmb3IoO2QubGVuZ3RoJjMmJiFiOylkKz1cIj1cIjtyZXR1cm4gZH0sdG9CaXRzOmZ1bmN0aW9uKGEsYil7YT1hLnJlcGxhY2UoL1xcc3w9L2csXCJcIik7dmFyIGM9W10sZCxlPTAsZj1zamNsLmNvZGVjLmJhc2U2NC5TLGc9MCxoO2ImJihmPWYuc3Vic3RyKDAsNjIpK1wiLV9cIik7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyl7aD1mLmluZGV4T2YoYS5jaGFyQXQoZCkpO1xuaWYoMD5oKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwidGhpcyBpc24ndCBiYXNlNjQhXCIpOzI2PGU/KGUtPTI2LGMucHVzaChnXmg+Pj5lKSxnPWg8PDMyLWUpOihlKz02LGdePWg8PDMyLWUpfWUmNTYmJmMucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoZSY1NixnLDEpKTtyZXR1cm4gY319O3NqY2wuY29kZWMuYmFzZTY0dXJsPXtmcm9tQml0czpmdW5jdGlvbihhKXtyZXR1cm4gc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoYSwxLDEpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhhLDEpfX07c2pjbC5oYXNoLnNoYTI1Nj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGEyNTYuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGEyNTYpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGEyNTYucHJvdG90eXBlPXtibG9ja1NpemU6NTEyLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5nPXRoaXMuby5zbGljZSgwKTt0aGlzLmY9W107dGhpcy5jPTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO3ZhciBiLGM9dGhpcy5mPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuZixhKTtiPXRoaXMuYzthPXRoaXMuYz1iK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2lmKDB4MWZmZmZmZmZmZmZmZmY8YSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3ZhciBkPW5ldyBVaW50MzJBcnJheShjKSxlPTA7Zm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoZC5zdWJhcnJheSgxNiplLFxuMTYqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMTYqZSl9ZWxzZSBmb3IoYj01MTIrYi0oNTEyK2ImMHgxZmYpO2I8PWE7Yis9NTEyKXRoaXMubChjLnNwbGljZSgwLDE2KSk7cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLmYsYz10aGlzLmcsYj1zamNsLmJpdEFycmF5LmNvbmNhdChiLFtzamNsLmJpdEFycmF5LnBhcnRpYWwoMSwxKV0pO2ZvcihhPWIubGVuZ3RoKzI7YSYxNTthKyspYi5wdXNoKDApO2IucHVzaChNYXRoLmZsb29yKHRoaXMuYy8weDEwMDAwMDAwMCkpO2ZvcihiLnB1c2godGhpcy5jfDApO2IubGVuZ3RoOyl0aGlzLmwoYi5zcGxpY2UoMCwxNikpO3RoaXMucmVzZXQoKTtyZXR1cm4gY30sbzpbXSxiOltdLEM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiAweDEwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKXwwfWZvcih2YXIgYj0wLGM9MixkLGU7NjQ+YjtjKyspe2U9ITA7Zm9yKGQ9MjtkKmQ8PWM7ZCsrKWlmKDA9PT1jJWQpe2U9XG4hMTticmVha31lJiYoOD5iJiYodGhpcy5vW2JdPWEoTWF0aC5wb3coYywuNSkpKSx0aGlzLmJbYl09YShNYXRoLnBvdyhjLDEvMykpLGIrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXMuZyxmPXRoaXMuYixnPWVbMF0saD1lWzFdLGs9ZVsyXSxuPWVbM10sbD1lWzRdLG09ZVs1XSxwPWVbNl0sej1lWzddO2ZvcihiPTA7NjQ+YjtiKyspMTY+Yj9jPWFbYl06KGM9YVtiKzEmMTVdLGQ9YVtiKzE0JjE1XSxjPWFbYiYxNV09KGM+Pj43XmM+Pj4xOF5jPj4+M15jPDwyNV5jPDwxNCkrKGQ+Pj4xN15kPj4+MTleZD4+PjEwXmQ8PDE1XmQ8PDEzKSthW2ImMTVdK2FbYis5JjE1XXwwKSxjPWMreisobD4+PjZebD4+PjExXmw+Pj4yNV5sPDwyNl5sPDwyMV5sPDw3KSsocF5sJihtXnApKStmW2JdLHo9cCxwPW0sbT1sLGw9bitjfDAsbj1rLGs9aCxoPWcsZz1jKyhoJmtebiYoaF5rKSkrKGg+Pj4yXmg+Pj4xM15oPj4+MjJeaDw8MzBeaDw8MTleaDw8MTApfDA7ZVswXT1lWzBdK2d8XG4wO2VbMV09ZVsxXStofDA7ZVsyXT1lWzJdK2t8MDtlWzNdPWVbM10rbnwwO2VbNF09ZVs0XStsfDA7ZVs1XT1lWzVdK218MDtlWzZdPWVbNl0rcHwwO2VbN109ZVs3XSt6fDB9fTtzamNsLmhhc2guc2hhNTEyPWZ1bmN0aW9uKGEpe3RoaXMuYlswXXx8dGhpcy5DKCk7YT8odGhpcy5nPWEuZy5zbGljZSgwKSx0aGlzLmY9YS5mLnNsaWNlKDApLHRoaXMuYz1hLmMpOnRoaXMucmVzZXQoKX07c2pjbC5oYXNoLnNoYTUxMi5oYXNoPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgc2pjbC5oYXNoLnNoYTUxMikudXBkYXRlKGEpLmZpbmFsaXplKCl9O1xuc2pjbC5oYXNoLnNoYTUxMi5wcm90b3R5cGU9e2Jsb2NrU2l6ZToxMDI0LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5nPXRoaXMuby5zbGljZSgwKTt0aGlzLmY9W107dGhpcy5jPTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO3ZhciBiLGM9dGhpcy5mPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuZixhKTtiPXRoaXMuYzthPXRoaXMuYz1iK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2lmKDB4MWZmZmZmZmZmZmZmZmY8YSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3ZhciBkPW5ldyBVaW50MzJBcnJheShjKSxlPTA7Zm9yKGI9MTAyNCtiLSgxMDI0K2ImMTAyMyk7Yjw9YTtiKz0xMDI0KXRoaXMubChkLnN1YmFycmF5KDMyKlxuZSwzMiooZSsxKSkpLGUrPTE7Yy5zcGxpY2UoMCwzMiplKX1lbHNlIGZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoYy5zcGxpY2UoMCwzMikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCs0O2EmMzE7YSsrKWIucHVzaCgwKTtiLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaChNYXRoLmZsb29yKHRoaXMuYy8weDEwMDAwMDAwMCkpO2ZvcihiLnB1c2godGhpcy5jfDApO2IubGVuZ3RoOyl0aGlzLmwoYi5zcGxpY2UoMCwzMikpO3RoaXMucmVzZXQoKTtyZXR1cm4gY30sbzpbXSxpYTpbMTIzNzIyMzIsMTMyODEwODMsOTc2Mjg1OSwxOTE0NjA5LDE1MTA2NzY5LDQwOTA5MTEsNDMwODMzMSw4MjY2MTA1XSxiOltdLGthOlsyNjY2MDE4LDE1Njg5MTY1LDUwNjE0MjMsOTAzNDY4NCxcbjQ3NjQ5ODQsMzgwOTUzLDE2NTg3NzksNzE3NjQ3MiwxOTcxODYsNzM2ODYzOCwxNDk4NzkxNiwxNjc1Nzk4Niw4MDk2MTExLDE0ODAzNjksMTMwNDYzMjUsNjg5MTE1NiwxNTgxMzMzMCw1MTg3MDQzLDkyMjk3NDksMTEzMTIyMjksMjgxODY3NywxMDkzNzQ3NSw0MzI0MzA4LDExMzU1NDEsNjc0MTkzMSwxMTgwOTI5NiwxNjQ1ODA0NywxNTY2NjkxNiwxMTA0Njg1MCw2OTgxNDksMjI5OTk5LDk0NTc3NiwxMzc3NDg0NCwyNTQxODYyLDEyODU2MDQ1LDk4MTA5MTEsMTE0OTQzNjYsNzg0NDUyMCwxNTU3NjgwNiw4NTMzMzA3LDE1Nzk1MDQ0LDQzMzc2NjUsMTYyOTE3MjksNTU1MzcxMiwxNTY4NDEyMCw2NjYyNDE2LDc0MTM4MDIsMTIzMDg5MjAsMTM4MTYwMDgsNDMwMzY5OSw5MzY2NDI1LDEwMTc2NjgwLDEzMTk1ODc1LDQyOTUzNzEsNjU0NjI5MSwxMTcxMjY3NSwxNTcwODkyNCwxNTE5NDU2LDE1NzcyNTMwLDY1Njg0MjgsNjQ5NTc4NCw4NTY4Mjk3LDEzMDA3MTI1LDc0OTIzOTUsMjUxNTM1NixcbjEyNjMyNTgzLDE0NzQwMjU0LDcyNjI1ODQsMTUzNTkzMCwxMzE0NjI3OCwxNjMyMTk2NiwxODUzMjExLDI5NDI3NiwxMzA1MTAyNywxMzIyMTU2NCwxMDUxOTgwLDQwODAzMTAsNjY1MTQzNCwxNDA4ODk0MCw0Njc1NjA3XSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mdW5jdGlvbiBiKGEpe3JldHVybiAweDEwMDAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpJjI1NX1mb3IodmFyIGM9MCxkPTIsZSxmOzgwPmM7ZCsrKXtmPSEwO2ZvcihlPTI7ZSplPD1kO2UrKylpZigwPT09ZCVlKXtmPSExO2JyZWFrfWYmJig4PmMmJih0aGlzLm9bMipjXT1hKE1hdGgucG93KGQsLjUpKSx0aGlzLm9bMipjKzFdPWIoTWF0aC5wb3coZCwuNSkpPDwyNHx0aGlzLmlhW2NdKSx0aGlzLmJbMipjXT1hKE1hdGgucG93KGQsMS8zKSksdGhpcy5iWzIqYysxXT1iKE1hdGgucG93KGQsMS8zKSk8PDI0fHRoaXMua2FbY10sYysrKX19LGw6ZnVuY3Rpb24oYSl7dmFyIGIsXG5jLGQ9dGhpcy5nLGU9dGhpcy5iLGY9ZFswXSxnPWRbMV0saD1kWzJdLGs9ZFszXSxuPWRbNF0sbD1kWzVdLG09ZFs2XSxwPWRbN10sej1kWzhdLEE9ZFs5XSxDPWRbMTBdLEI9ZFsxMV0sRD1kWzEyXSxQPWRbMTNdLGVhPWRbMTRdLFE9ZFsxNV0sdDtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt0PUFycmF5KDE2MCk7Zm9yKHZhciByPTA7MzI+cjtyKyspdFtyXT1hW3JdfWVsc2UgdD1hO3ZhciByPWYsdT1nLEc9aCxFPWssSD1uLEY9bCxWPW0sST1wLHc9eix2PUEsUj1DLEo9QixTPUQsSz1QLFc9ZWEsTD1RO2ZvcihhPTA7ODA+YTthKyspe2lmKDE2PmEpYj10WzIqYV0sYz10WzIqYSsxXTtlbHNle2M9dFsyKihhLTE1KV07dmFyIHE9dFsyKihhLTE1KSsxXTtiPShxPDwzMXxjPj4+MSleKHE8PDI0fGM+Pj44KV5jPj4+Nzt2YXIgeD0oYzw8MzF8cT4+PjEpXihjPDwyNHxxPj4+OCleKGM8PDI1fHE+Pj43KTtjPXRbMiooYS0yKV07dmFyIHk9dFsyKihhLTIpKzFdLFxucT0oeTw8MTN8Yz4+PjE5KV4oYzw8M3x5Pj4+MjkpXmM+Pj42LHk9KGM8PDEzfHk+Pj4xOSleKHk8PDN8Yz4+PjI5KV4oYzw8MjZ8eT4+PjYpLFg9dFsyKihhLTcpXSxZPXRbMiooYS0xNildLE09dFsyKihhLTE2KSsxXTtjPXgrdFsyKihhLTcpKzFdO2I9YitYKyhjPj4+MDx4Pj4+MD8xOjApO2MrPXk7Yis9cSsoYz4+PjA8eT4+PjA/MTowKTtjKz1NO2IrPVkrKGM+Pj4wPE0+Pj4wPzE6MCl9dFsyKmFdPWJ8PTA7dFsyKmErMV09Y3w9MDt2YXIgWD13JlJefncmUyxmYT12JkpefnYmSyx5PXImR15yJkheRyZILGphPXUmRV51JkZeRSZGLFk9KHU8PDR8cj4+PjI4KV4ocjw8MzB8dT4+PjIpXihyPDwyNXx1Pj4+NyksTT0ocjw8NHx1Pj4+MjgpXih1PDwzMHxyPj4+MileKHU8PDI1fHI+Pj43KSxrYT1lWzIqYV0sZ2E9ZVsyKmErMV0scT1MKygodzw8MTh8dj4+PjE0KV4odzw8MTR8dj4+PjE4KV4odjw8MjN8dz4+PjkpKSx4PVcrKCh2PDwxOHx3Pj4+MTQpXih2PDwxNHx3Pj4+MTgpXih3PDxcbjIzfHY+Pj45KSkrKHE+Pj4wPEw+Pj4wPzE6MCkscT1xK2ZhLHg9eCsoWCsocT4+PjA8ZmE+Pj4wPzE6MCkpLHE9cStnYSx4PXgrKGthKyhxPj4+MDxnYT4+PjA/MTowKSkscT1xK2N8MCx4PXgrKGIrKHE+Pj4wPGM+Pj4wPzE6MCkpO2M9TStqYTtiPVkreSsoYz4+PjA8TT4+PjA/MTowKTtXPVM7TD1LO1M9UjtLPUo7Uj13O0o9djt2PUkrcXwwO3c9Vit4Kyh2Pj4+MDxJPj4+MD8xOjApfDA7Vj1IO0k9RjtIPUc7Rj1FO0c9cjtFPXU7dT1xK2N8MDtyPXgrYisodT4+PjA8cT4+PjA/MTowKXwwfWc9ZFsxXT1nK3V8MDtkWzBdPWYrcisoZz4+PjA8dT4+PjA/MTowKXwwO2s9ZFszXT1rK0V8MDtkWzJdPWgrRysoaz4+PjA8RT4+PjA/MTowKXwwO2w9ZFs1XT1sK0Z8MDtkWzRdPW4rSCsobD4+PjA8Rj4+PjA/MTowKXwwO3A9ZFs3XT1wK0l8MDtkWzZdPW0rVisocD4+PjA8ST4+PjA/MTowKXwwO0E9ZFs5XT1BK3Z8MDtkWzhdPXordysoQT4+PjA8dj4+PjA/MTowKXwwO0I9ZFsxMV09QitKfFxuMDtkWzEwXT1DK1IrKEI+Pj4wPEo+Pj4wPzE6MCl8MDtQPWRbMTNdPVArS3wwO2RbMTJdPUQrUysoUD4+PjA8Sz4+PjA/MTowKXwwO1E9ZFsxNV09UStMfDA7ZFsxNF09ZWErVysoUT4+PjA8TD4+PjA/MTowKXwwfX07XG5zamNsLm1vZGUuY2NtPXtuYW1lOlwiY2NtXCIsRjpbXSxsaXN0ZW5Qcm9ncmVzczpmdW5jdGlvbihhKXtzamNsLm1vZGUuY2NtLkYucHVzaChhKX0sdW5MaXN0ZW5Qcm9ncmVzczpmdW5jdGlvbihhKXthPXNqY2wubW9kZS5jY20uRi5pbmRleE9mKGEpOy0xPGEmJnNqY2wubW9kZS5jY20uRi5zcGxpY2UoYSwxKX0sZGE6ZnVuY3Rpb24oYSl7dmFyIGI9c2pjbC5tb2RlLmNjbS5GLnNsaWNlKCksYztmb3IoYz0wO2M8Yi5sZW5ndGg7Yys9MSliW2NdKGEpfSxlbmNyeXB0OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZz1iLnNsaWNlKDApLGg9c2pjbC5iaXRBcnJheSxrPWguYml0TGVuZ3RoKGMpLzgsbj1oLmJpdExlbmd0aChnKS84O2U9ZXx8NjQ7ZD1kfHxbXTtpZig3PmspdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGl2IG11c3QgYmUgYXQgbGVhc3QgNyBieXRlc1wiKTtmb3IoZj0yOzQ+ZiYmbj4+PjgqZjtmKyspO2Y8MTUtayYmKGY9MTUtayk7Yz1oLmNsYW1wKGMsXG44KigxNS1mKSk7Yj1zamNsLm1vZGUuY2NtLlUoYSxiLGMsZCxlLGYpO2c9c2pjbC5tb2RlLmNjbS5WKGEsZyxjLGIsZSxmKTtyZXR1cm4gaC5jb25jYXQoZy5kYXRhLGcudGFnKX0sZGVjcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe2U9ZXx8NjQ7ZD1kfHxbXTt2YXIgZj1zamNsLmJpdEFycmF5LGc9Zi5iaXRMZW5ndGgoYykvOCxoPWYuYml0TGVuZ3RoKGIpLGs9Zi5jbGFtcChiLGgtZSksbj1mLmJpdFNsaWNlKGIsaC1lKSxoPShoLWUpLzg7aWYoNz5nKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGI9Mjs0PmImJmg+Pj44KmI7YisrKTtiPDE1LWcmJihiPTE1LWcpO2M9Zi5jbGFtcChjLDgqKDE1LWIpKTtrPXNqY2wubW9kZS5jY20uVihhLGssYyxuLGUsYik7YT1zamNsLm1vZGUuY2NtLlUoYSxrLmRhdGEsYyxkLGUsYik7aWYoIWYuZXF1YWwoay50YWcsYSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmNvcnJ1cHQoXCJjY206IHRhZyBkb2Vzbid0IG1hdGNoXCIpO1xucmV0dXJuIGsuZGF0YX0sbWE6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPVtdLGg9c2pjbC5iaXRBcnJheSxrPWguUDtkPVtoLnBhcnRpYWwoOCwoYi5sZW5ndGg/NjQ6MCl8ZC0yPDwyfGYtMSldO2Q9aC5jb25jYXQoZCxjKTtkWzNdfD1lO2Q9YS5lbmNyeXB0KGQpO2lmKGIubGVuZ3RoKWZvcihjPWguYml0TGVuZ3RoKGIpLzgsNjUyNzk+PWM/Zz1baC5wYXJ0aWFsKDE2LGMpXToweGZmZmZmZmZmPj1jJiYoZz1oLmNvbmNhdChbaC5wYXJ0aWFsKDE2LDY1NTM0KV0sW2NdKSksZz1oLmNvbmNhdChnLGIpLGI9MDtiPGcubGVuZ3RoO2IrPTQpZD1hLmVuY3J5cHQoayhkLGcuc2xpY2UoYixiKzQpLmNvbmNhdChbMCwwLDBdKSkpO3JldHVybiBkfSxVOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1zamNsLmJpdEFycmF5LGg9Zy5QO2UvPTg7aWYoZSUyfHw0PmV8fDE2PGUpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGludmFsaWQgdGFnIGxlbmd0aFwiKTtcbmlmKDB4ZmZmZmZmZmY8ZC5sZW5ndGh8fDB4ZmZmZmZmZmY8Yi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImNjbTogY2FuJ3QgZGVhbCB3aXRoIDRHaUIgb3IgbW9yZSBkYXRhXCIpO2M9c2pjbC5tb2RlLmNjbS5tYShhLGQsYyxlLGcuYml0TGVuZ3RoKGIpLzgsZik7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrPTQpYz1hLmVuY3J5cHQoaChjLGIuc2xpY2UoZCxkKzQpLmNvbmNhdChbMCwwLDBdKSkpO3JldHVybiBnLmNsYW1wKGMsOCplKX0sVjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD1zamNsLmJpdEFycmF5O2c9aC5QO3ZhciBrPWIubGVuZ3RoLG49aC5iaXRMZW5ndGgoYiksbD1rLzUwLG09bDtjPWguY29uY2F0KFtoLnBhcnRpYWwoOCxmLTEpXSxjKS5jb25jYXQoWzAsMCwwXSkuc2xpY2UoMCw0KTtkPWguYml0U2xpY2UoZyhkLGEuZW5jcnlwdChjKSksMCxlKTtpZighaylyZXR1cm57dGFnOmQsZGF0YTpbXX07Zm9yKGc9MDtnPGs7Zys9NClnPmwmJihzamNsLm1vZGUuY2NtLmRhKGcvXG5rKSxsKz1tKSxjWzNdKyssZT1hLmVuY3J5cHQoYyksYltnXV49ZVswXSxiW2crMV1ePWVbMV0sYltnKzJdXj1lWzJdLGJbZyszXV49ZVszXTtyZXR1cm57dGFnOmQsZGF0YTpoLmNsYW1wKGIsbil9fX07c2pjbC5taXNjLmhtYWM9ZnVuY3Rpb24oYSxiKXt0aGlzLlc9Yj1ifHxzamNsLmhhc2guc2hhMjU2O3ZhciBjPVtbXSxbXV0sZCxlPWIucHJvdG90eXBlLmJsb2NrU2l6ZS8zMjt0aGlzLkI9W25ldyBiLG5ldyBiXTthLmxlbmd0aD5lJiYoYT1iLmhhc2goYSkpO2ZvcihkPTA7ZDxlO2QrKyljWzBdW2RdPWFbZF1eOTA5NTIyNDg2LGNbMV1bZF09YVtkXV4xNTQ5NTU2ODI4O3RoaXMuQlswXS51cGRhdGUoY1swXSk7dGhpcy5CWzFdLnVwZGF0ZShjWzFdKTt0aGlzLk89bmV3IGIodGhpcy5CWzBdKX07XG5zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZW5jcnlwdD1zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUubWFjPWZ1bmN0aW9uKGEpe2lmKHRoaXMuWil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImVuY3J5cHQgb24gYWxyZWFkeSB1cGRhdGVkIGhtYWMgY2FsbGVkIVwiKTt0aGlzLnVwZGF0ZShhKTtyZXR1cm4gdGhpcy5kaWdlc3QoYSl9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuTz1uZXcgdGhpcy5XKHRoaXMuQlswXSk7dGhpcy5aPSExfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMuWj0hMDt0aGlzLk8udXBkYXRlKGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5PLmZpbmFsaXplKCksYT0obmV3IHRoaXMuVyh0aGlzLkJbMV0pKS51cGRhdGUoYSkuZmluYWxpemUoKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGF9O1xuc2pjbC5taXNjLnBia2RmMj1mdW5jdGlvbihhLGIsYyxkLGUpe2M9Y3x8MUU0O2lmKDA+ZHx8MD5jKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBwYXJhbXMgdG8gcGJrZGYyXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtlPWV8fHNqY2wubWlzYy5obWFjO2E9bmV3IGUoYSk7dmFyIGYsZyxoLGssbj1bXSxsPXNqY2wuYml0QXJyYXk7Zm9yKGs9MTszMipuLmxlbmd0aDwoZHx8MSk7aysrKXtlPWY9YS5lbmNyeXB0KGwuY29uY2F0KGIsW2tdKSk7Zm9yKGc9MTtnPGM7ZysrKWZvcihmPWEuZW5jcnlwdChmKSxoPTA7aDxmLmxlbmd0aDtoKyspZVtoXV49ZltoXTtuPW4uY29uY2F0KGUpfWQmJihuPWwuY2xhbXAobixkKSk7cmV0dXJuIG59O1xuc2pjbC5wcm5nPWZ1bmN0aW9uKGEpe3RoaXMuaD1bbmV3IHNqY2wuaGFzaC5zaGEyNTZdO3RoaXMucz1bMF07dGhpcy5OPTA7dGhpcy5HPXt9O3RoaXMuTT0wO3RoaXMuVD17fTt0aGlzLlg9dGhpcy5pPXRoaXMudT10aGlzLmZhPTA7dGhpcy5iPVswLDAsMCwwLDAsMCwwLDBdO3RoaXMubT1bMCwwLDAsMF07dGhpcy5LPXZvaWQgMDt0aGlzLkw9YTt0aGlzLkQ9ITE7dGhpcy5KPXtwcm9ncmVzczp7fSxzZWVkZWQ6e319O3RoaXMuQT10aGlzLmVhPTA7dGhpcy5IPTE7dGhpcy5JPTI7dGhpcy5hYT0weDEwMDAwO3RoaXMuUj1bMCw0OCw2NCw5NiwxMjgsMTkyLDB4MTAwLDM4NCw1MTIsNzY4LDEwMjRdO3RoaXMuYmE9M0U0O3RoaXMuJD04MH07XG5zamNsLnBybmcucHJvdG90eXBlPXtyYW5kb21Xb3JkczpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ7ZD10aGlzLmlzUmVhZHkoYik7dmFyIGU7aWYoZD09PXRoaXMuQSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24ubm90UmVhZHkoXCJnZW5lcmF0b3IgaXNuJ3Qgc2VlZGVkXCIpO2lmKGQmdGhpcy5JKXtkPSEoZCZ0aGlzLkgpO2U9W107dmFyIGY9MCxnO3RoaXMuWD1lWzBdPShuZXcgRGF0ZSkudmFsdWVPZigpK3RoaXMuYmE7Zm9yKGc9MDsxNj5nO2crKyllLnB1c2goMHgxMDAwMDAwMDAqTWF0aC5yYW5kb20oKXwwKTtmb3IoZz0wO2c8dGhpcy5oLmxlbmd0aCYmKGU9ZS5jb25jYXQodGhpcy5oW2ddLmZpbmFsaXplKCkpLGYrPXRoaXMuc1tnXSx0aGlzLnNbZ109MCxkfHwhKHRoaXMuTiYxPDxnKSk7ZysrKTt0aGlzLk4+PTE8PHRoaXMuaC5sZW5ndGgmJih0aGlzLmgucHVzaChuZXcgc2pjbC5oYXNoLnNoYTI1NiksdGhpcy5zLnB1c2goMCkpO3RoaXMuaS09ZjtmPnRoaXMudSYmKHRoaXMudT1cbmYpO3RoaXMuTisrO3RoaXMuYj1zamNsLmhhc2guc2hhMjU2Lmhhc2godGhpcy5iLmNvbmNhdChlKSk7dGhpcy5LPW5ldyBzamNsLmNpcGhlci5hZXModGhpcy5iKTtmb3IoZD0wOzQ+ZCYmKHRoaXMubVtkXT10aGlzLm1bZF0rMXwwLCF0aGlzLm1bZF0pO2QrKyk7fWZvcihkPTA7ZDxhO2QrPTQpMD09PShkKzEpJXRoaXMuYWEmJmJhKHRoaXMpLGU9Tih0aGlzKSxjLnB1c2goZVswXSxlWzFdLGVbMl0sZVszXSk7YmEodGhpcyk7cmV0dXJuIGMuc2xpY2UoMCxhKX0sc2V0RGVmYXVsdFBhcmFub2lhOmZ1bmN0aW9uKGEsYil7aWYoMD09PWEmJlwiU2V0dGluZyBwYXJhbm9pYT0wIHdpbGwgcnVpbiB5b3VyIHNlY3VyaXR5OyB1c2UgaXQgb25seSBmb3IgdGVzdGluZ1wiIT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIik7dGhpcy5MPWF9LGFkZEVudHJvcHk6ZnVuY3Rpb24oYSxcbmIsYyl7Yz1jfHxcInVzZXJcIjt2YXIgZCxlLGY9KG5ldyBEYXRlKS52YWx1ZU9mKCksZz10aGlzLkdbY10saD10aGlzLmlzUmVhZHkoKSxrPTA7ZD10aGlzLlRbY107dm9pZCAwPT09ZCYmKGQ9dGhpcy5UW2NdPXRoaXMuZmErKyk7dm9pZCAwPT09ZyYmKGc9dGhpcy5HW2NdPTApO3RoaXMuR1tjXT0odGhpcy5HW2NdKzEpJXRoaXMuaC5sZW5ndGg7c3dpdGNoKHR5cGVvZiBhKXtjYXNlIFwibnVtYmVyXCI6dm9pZCAwPT09YiYmKGI9MSk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywxLGIsZiwxLGF8MF0pO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtpZihcIltvYmplY3QgVWludDMyQXJyYXldXCI9PT1jKXtlPVtdO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZS5wdXNoKGFbY10pO2E9ZX1lbHNlIGZvcihcIltvYmplY3QgQXJyYXldXCIhPT1jJiYoaz0xKSxjPTA7YzxhLmxlbmd0aCYmIWs7YysrKVwibnVtYmVyXCIhPT10eXBlb2YgYVtjXSYmXG4oaz0xKTtpZighayl7aWYodm9pZCAwPT09Yilmb3IoYz1iPTA7YzxhLmxlbmd0aDtjKyspZm9yKGU9YVtjXTswPGU7KWIrKyxlPWU+Pj4xO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMixiLGYsYS5sZW5ndGhdLmNvbmNhdChhKSl9YnJlYWs7Y2FzZSBcInN0cmluZ1wiOnZvaWQgMD09PWImJihiPWEubGVuZ3RoKTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDMsYixmLGEubGVuZ3RoXSk7dGhpcy5oW2ddLnVwZGF0ZShhKTticmVhaztkZWZhdWx0Oms9MX1pZihrKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJyYW5kb206IGFkZEVudHJvcHkgb25seSBzdXBwb3J0cyBudW1iZXIsIGFycmF5IG9mIG51bWJlcnMgb3Igc3RyaW5nXCIpO3RoaXMuc1tnXSs9Yjt0aGlzLmkrPWI7aD09PXRoaXMuQSYmKHRoaXMuaXNSZWFkeSgpIT09dGhpcy5BJiZjYShcInNlZWRlZFwiLE1hdGgubWF4KHRoaXMudSx0aGlzLmkpKSxjYShcInByb2dyZXNzXCIsdGhpcy5nZXRQcm9ncmVzcygpKSl9LFxuaXNSZWFkeTpmdW5jdGlvbihhKXthPXRoaXMuUlt2b2lkIDAhPT1hP2E6dGhpcy5MXTtyZXR1cm4gdGhpcy51JiZ0aGlzLnU+PWE/dGhpcy5zWzBdPnRoaXMuJCYmKG5ldyBEYXRlKS52YWx1ZU9mKCk+dGhpcy5YP3RoaXMuSXx0aGlzLkg6dGhpcy5IOnRoaXMuaT49YT90aGlzLkl8dGhpcy5BOnRoaXMuQX0sZ2V0UHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT10aGlzLlJbYT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudT49YT8xOnRoaXMuaT5hPzE6dGhpcy5pL2F9LHN0YXJ0Q29sbGVjdG9yczpmdW5jdGlvbigpe2lmKCF0aGlzLkQpe3RoaXMuYT17bG9hZFRpbWVDb2xsZWN0b3I6Tyh0aGlzLHRoaXMubGEpLG1vdXNlQ29sbGVjdG9yOk8odGhpcyx0aGlzLm5hKSxrZXlib2FyZENvbGxlY3RvcjpPKHRoaXMsdGhpcy5qYSksYWNjZWxlcm9tZXRlckNvbGxlY3RvcjpPKHRoaXMsdGhpcy5jYSksdG91Y2hDb2xsZWN0b3I6Tyh0aGlzLHRoaXMucGEpfTtpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixcbnRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsdGhpcy5hLmFjY2VsZXJvbWV0ZXJDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsdGhpcy5hLnRvdWNoQ29sbGVjdG9yLCExKTtlbHNlIGlmKGRvY3VtZW50LmF0dGFjaEV2ZW50KWRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yKSxkb2N1bWVudC5hdHRhY2hFdmVudChcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yKTtlbHNlIHRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjYW4ndCBhdHRhY2ggZXZlbnRcIik7XG50aGlzLkQ9ITB9fSxzdG9wQ29sbGVjdG9yczpmdW5jdGlvbigpe3RoaXMuRCYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyPyh3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSkpOmRvY3VtZW50LmRldGFjaEV2ZW50JiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJvbmxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25tb3VzZW1vdmVcIixcbnRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvcikpLHRoaXMuRD0hMSl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLkpbYV1bdGhpcy5lYSsrXT1ifSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMuSlthXSxmPVtdO2ZvcihkIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShkKSYmZVtkXT09PWImJmYucHVzaChkKTtmb3IoYz0wO2M8Zi5sZW5ndGg7YysrKWQ9ZltjXSxkZWxldGUgZVtkXX0samE6ZnVuY3Rpb24oKXtUKHRoaXMsMSl9LG5hOmZ1bmN0aW9uKGEpe3ZhciBiLGM7dHJ5e2I9YS54fHxhLmNsaWVudFh8fGEub2Zmc2V0WHx8MCxjPWEueXx8YS5jbGllbnRZfHxhLm9mZnNldFl8fDB9Y2F0Y2goZCl7Yz1iPTB9MCE9YiYmMCE9YyYmdGhpcy5hZGRFbnRyb3B5KFtiLGNdLDIsXCJtb3VzZVwiKTtUKHRoaXMsMCl9LHBhOmZ1bmN0aW9uKGEpe2E9XG5hLnRvdWNoZXNbMF18fGEuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5hZGRFbnRyb3B5KFthLnBhZ2VYfHxhLmNsaWVudFgsYS5wYWdlWXx8YS5jbGllbnRZXSwxLFwidG91Y2hcIik7VCh0aGlzLDApfSxsYTpmdW5jdGlvbigpe1QodGhpcywyKX0sY2E6ZnVuY3Rpb24oYSl7YT1hLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueHx8YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnl8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS56O2lmKHdpbmRvdy5vcmllbnRhdGlvbil7dmFyIGI9d2luZG93Lm9yaWVudGF0aW9uO1wibnVtYmVyXCI9PT10eXBlb2YgYiYmdGhpcy5hZGRFbnRyb3B5KGIsMSxcImFjY2VsZXJvbWV0ZXJcIil9YSYmdGhpcy5hZGRFbnRyb3B5KGEsMixcImFjY2VsZXJvbWV0ZXJcIik7VCh0aGlzLDApfX07XG5mdW5jdGlvbiBjYShhLGIpe3ZhciBjLGQ9c2pjbC5yYW5kb20uSlthXSxlPVtdO2ZvcihjIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShjKSYmZS5wdXNoKGRbY10pO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspZVtjXShiKX1mdW5jdGlvbiBUKGEsYil7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3c/YS5hZGRFbnRyb3B5KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiLFwibG9hZHRpbWVcIik6YS5hZGRFbnRyb3B5KChuZXcgRGF0ZSkudmFsdWVPZigpLGIsXCJsb2FkdGltZVwiKX1mdW5jdGlvbiBiYShhKXthLmI9TihhKS5jb25jYXQoTihhKSk7YS5LPW5ldyBzamNsLmNpcGhlci5hZXMoYS5iKX1mdW5jdGlvbiBOKGEpe2Zvcih2YXIgYj0wOzQ+YiYmKGEubVtiXT1hLm1bYl0rMXwwLCFhLm1bYl0pO2IrKyk7cmV0dXJuIGEuSy5lbmNyeXB0KGEubSl9XG5mdW5jdGlvbiBPKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7Yi5hcHBseShhLGFyZ3VtZW50cyl9fXNqY2wucmFuZG9tPW5ldyBzamNsLnBybmcoNik7XG5hOnRyeXt2YXIgVSxkYSxaLGhhO2lmKGhhPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyl7dmFyIGlhO3RyeXtpYT1yZXF1aXJlKFwiY3J5cHRvXCIpfWNhdGNoKGEpe2lhPW51bGx9aGE9ZGE9aWF9aWYoaGEmJmRhLnJhbmRvbUJ5dGVzKVU9ZGEucmFuZG9tQnl0ZXMoMTI4KSxVPW5ldyBVaW50MzJBcnJheSgobmV3IFVpbnQ4QXJyYXkoVSkpLmJ1ZmZlciksc2pjbC5yYW5kb20uYWRkRW50cm9weShVLDEwMjQsXCJjcnlwdG9bJ3JhbmRvbUJ5dGVzJ11cIik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7Wj1uZXcgVWludDMyQXJyYXkoMzIpO2lmKHdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO2Vsc2UgaWYod2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoWik7XG5lbHNlIGJyZWFrIGE7c2pjbC5yYW5kb20uYWRkRW50cm9weShaLDEwMjQsXCJjcnlwdG9bJ2dldFJhbmRvbVZhbHVlcyddXCIpfX1jYXRjaChhKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmNvbnNvbGUmJihjb25zb2xlLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciBjb2xsZWN0aW5nIGVudHJvcHkgZnJvbSB0aGUgYnJvd3NlcjpcIiksY29uc29sZS5sb2coYSkpfVxuc2pjbC5qc29uPXtkZWZhdWx0czp7djoxLGl0ZXI6MUU0LGtzOjEyOCx0czo2NCxtb2RlOlwiY2NtXCIsYWRhdGE6XCJcIixjaXBoZXI6XCJhZXNcIn0saGE6ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTtkPWR8fHt9O3ZhciBlPXNqY2wuanNvbixmPWUuaih7aXY6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoNCwwKX0sZS5kZWZhdWx0cyksZztlLmooZixjKTtjPWYuYWRhdGE7XCJzdHJpbmdcIj09PXR5cGVvZiBmLnNhbHQmJihmLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGYuc2FsdCkpO1wic3RyaW5nXCI9PT10eXBlb2YgZi5pdiYmKGYuaXY9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGYuaXYpKTtpZighc2pjbC5tb2RlW2YubW9kZV18fCFzamNsLmNpcGhlcltmLmNpcGhlcl18fFwic3RyaW5nXCI9PT10eXBlb2YgYSYmMTAwPj1mLml0ZXJ8fDY0IT09Zi50cyYmOTYhPT1mLnRzJiYxMjghPT1mLnRzfHwxMjghPT1mLmtzJiYxOTIhPT1mLmtzJiYweDEwMCE9PWYua3N8fDI+Zi5pdi5sZW5ndGh8fFxuNDxmLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZW5jcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsZiksYT1nLmtleS5zbGljZSgwLGYua3MvMzIpLGYuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5wdWJsaWNLZXkmJihnPWEua2VtKCksZi5rZW10YWc9Zy50YWcsYT1nLmtleS5zbGljZSgwLGYua3MvMzIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGImJihiPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYikpO1wic3RyaW5nXCI9PT10eXBlb2YgYyYmKGYuYWRhdGE9Yz1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGMpKTtnPW5ldyBzamNsLmNpcGhlcltmLmNpcGhlcl0oYSk7ZS5qKGQsZik7ZC5rZXk9YTtmLmN0PVwiY2NtXCI9PT1mLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZcbmIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9zamNsLmFycmF5QnVmZmVyLmNjbS5lbmNyeXB0KGcsYixmLml2LGMsZi50cyk6c2pjbC5tb2RlW2YubW9kZV0uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpO3JldHVybiBmfSxlbmNyeXB0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXNqY2wuanNvbixmPWUuaGEuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBlLmVuY29kZShmKX0sZ2E6ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTtkPWR8fHt9O3ZhciBlPXNqY2wuanNvbjtiPWUuaihlLmooZS5qKHt9LGUuZGVmYXVsdHMpLGIpLGMsITApO3ZhciBmLGc7Zj1iLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgYi5zYWx0JiYoYi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGIuaXYmJihiLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLml2KSk7aWYoIXNqY2wubW9kZVtiLm1vZGVdfHwhc2pjbC5jaXBoZXJbYi5jaXBoZXJdfHxcInN0cmluZ1wiPT09XG50eXBlb2YgYSYmMTAwPj1iLml0ZXJ8fDY0IT09Yi50cyYmOTYhPT1iLnRzJiYxMjghPT1iLnRzfHwxMjghPT1iLmtzJiYxOTIhPT1iLmtzJiYweDEwMCE9PWIua3N8fCFiLml2fHwyPmIuaXYubGVuZ3RofHw0PGIuaXYubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNyeXB0OiBpbnZhbGlkIHBhcmFtZXRlcnNcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhPyhnPXNqY2wubWlzYy5jYWNoZWRQYmtkZjIoYSxiKSxhPWcua2V5LnNsaWNlKDAsYi5rcy8zMiksYi5zYWx0PWcuc2FsdCk6c2pjbC5lY2MmJmEgaW5zdGFuY2VvZiBzamNsLmVjYy5lbEdhbWFsLnNlY3JldEtleSYmKGE9YS51bmtlbShzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5rZW10YWcpKS5zbGljZSgwLGIua3MvMzIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYmJihmPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoZikpO2c9bmV3IHNqY2wuY2lwaGVyW2IuY2lwaGVyXShhKTtmPVwiY2NtXCI9PT1cbmIubW9kZSYmc2pjbC5hcnJheUJ1ZmZlciYmc2pjbC5hcnJheUJ1ZmZlci5jY20mJmIuY3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9zamNsLmFycmF5QnVmZmVyLmNjbS5kZWNyeXB0KGcsYi5jdCxiLml2LGIudGFnLGYsYi50cyk6c2pjbC5tb2RlW2IubW9kZV0uZGVjcnlwdChnLGIuY3QsYi5pdixmLGIudHMpO2UuaihkLGIpO2Qua2V5PWE7cmV0dXJuIDE9PT1jLnJhdz9mOnNqY2wuY29kZWMudXRmOFN0cmluZy5mcm9tQml0cyhmKX0sZGVjcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb247cmV0dXJuIGUuZ2EoYSxlLmRlY29kZShiKSxjLGQpfSxlbmNvZGU6ZnVuY3Rpb24oYSl7dmFyIGIsYz1cIntcIixkPVwiXCI7Zm9yKGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpKXtpZighYi5tYXRjaCgvXlthLXowLTldKyQvaSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY29kZTogaW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpO2MrPWQrJ1wiJytcbmIrJ1wiOic7ZD1cIixcIjtzd2l0Y2godHlwZW9mIGFbYl0pe2Nhc2UgXCJudW1iZXJcIjpjYXNlIFwiYm9vbGVhblwiOmMrPWFbYl07YnJlYWs7Y2FzZSBcInN0cmluZ1wiOmMrPSdcIicrZXNjYXBlKGFbYl0pKydcIic7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOmMrPSdcIicrc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoYVtiXSwwKSsnXCInO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImpzb24gZW5jb2RlOiB1bnN1cHBvcnRlZCB0eXBlXCIpO319cmV0dXJuIGMrXCJ9XCJ9LGRlY29kZTpmdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzL2csXCJcIik7aWYoIWEubWF0Y2goL15cXHsuKlxcfSQvKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjb2RlOiB0aGlzIGlzbid0IGpzb24hXCIpO2E9YS5yZXBsYWNlKC9eXFx7fFxcfSQvZyxcIlwiKS5zcGxpdCgvLC8pO3ZhciBiPXt9LGMsZDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZighKGQ9YVtjXS5tYXRjaCgvXlxccyooPzooW1wiJ10/KShbYS16XVthLXowLTldKilcXDEpXFxzKjpcXHMqKD86KC0/XFxkKyl8XCIoW2EtejAtOStcXC8lKl8uQD1cXC1dKilcInwodHJ1ZXxmYWxzZSkpJC9pKSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTtcbm51bGwhPWRbM10/YltkWzJdXT1wYXJzZUludChkWzNdLDEwKTpudWxsIT1kWzRdP2JbZFsyXV09ZFsyXS5tYXRjaCgvXihjdHxhZGF0YXxzYWx0fGl2KSQvKT9zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZFs0XSk6dW5lc2NhcGUoZFs0XSk6bnVsbCE9ZFs1XSYmKGJbZFsyXV09XCJ0cnVlXCI9PT1kWzVdKX1yZXR1cm4gYn0sajpmdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YSYmKGE9e30pO2lmKHZvaWQgMD09PWIpcmV0dXJuIGE7Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSl7aWYoYyYmdm9pZCAwIT09YVtkXSYmYVtkXSE9PWJbZF0pdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJyZXF1aXJlZCBwYXJhbWV0ZXIgb3ZlcnJpZGRlblwiKTthW2RdPWJbZF19cmV0dXJuIGF9LHJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9e30sZDtmb3IoZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJmFbZF0hPT1iW2RdJiYoY1tkXT1hW2RdKTtyZXR1cm4gY30scWE6ZnVuY3Rpb24oYSxcbmIpe3ZhciBjPXt9LGQ7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyl2b2lkIDAhPT1hW2JbZF1dJiYoY1tiW2RdXT1hW2JbZF1dKTtyZXR1cm4gY319O3NqY2wuZW5jcnlwdD1zamNsLmpzb24uZW5jcnlwdDtzamNsLmRlY3J5cHQ9c2pjbC5qc29uLmRlY3J5cHQ7c2pjbC5taXNjLm9hPXt9O3NqY2wubWlzYy5jYWNoZWRQYmtkZjI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1zamNsLm1pc2Mub2EsZDtiPWJ8fHt9O2Q9Yi5pdGVyfHwxRTM7Yz1jW2FdPWNbYV18fHt9O2Q9Y1tkXT1jW2RdfHx7Zmlyc3RTYWx0OmIuc2FsdCYmYi5zYWx0Lmxlbmd0aD9iLnNhbHQuc2xpY2UoMCk6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoMiwwKX07Yz12b2lkIDA9PT1iLnNhbHQ/ZC5maXJzdFNhbHQ6Yi5zYWx0O2RbY109ZFtjXXx8c2pjbC5taXNjLnBia2RmMihhLGMsYi5pdGVyKTtyZXR1cm57a2V5OmRbY10uc2xpY2UoMCksc2FsdDpjLnNsaWNlKDApfX07XG5cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1zamNsKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gc2pjbH0pO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsIG51bGwsIG51bGwsIG51bGwsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHNqY2wgZnJvbSBcImx1Zmktc2pjbFwiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvciBhIHN0cmluZyB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb24uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSB8IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGVuY3J5cHRlZERhdGEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZW5jcnlwdGVkRGF0YVxuICAgICAgOiAoZW5jcnlwdGVkRGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBva0FzeW5jKGI2NGRlY29kZShzamNsLmRlY3J5cHQoa2V5LCBkYXRhKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHNqY2wuZW5jcnlwdChrZXksIGI2NGVuY29kZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLlNqY2wsXG4gICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICBpdjogSlNPTi5wYXJzZShlbmNyeXB0ZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLml2LFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKHNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDgsIDEwKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKHNqY2wuaGFzaC5zaGE1MTIuaGFzaChwYXNzd29yZCkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMobmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSk7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBrZXkgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IFNqY2wuIFNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGFuIGVxdWFsIHN5bWJvbCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgV2ViQ3J5cHRvIEFQSSAoYnkgdXNpbmcgYmFzZTY0dXJsKSwgaXQncyBlYXN5IHRvIGRldGVjdFxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NqY2xLZXkgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGtleVtrZXkubGVuZ3RoIC0gMV0gPT09IFwiPVwiO1xufTtcbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgRGVjcnlwdGlvbkVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlOiBzdHJpbmcgPSBcIlVuYWJsZSB0byBkZWNyeXB0IHRoZSBwcm92aWRlZCBkYXRhXCI7XG59XG4iLCAiaW1wb3J0IHtcbiAgRGVjb2RlIGFzIGI2NHVybGRlY29kZSxcbiAgRW5jb2RlIGFzIGI2NHVybGVuY29kZSxcbn0gZnJvbSBcImFycmF5YnVmZmVyLWVuY29kaW5nL2Jhc2U2NC91cmxcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIGVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWQ6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PiB7XG4gIHJldHVybiBpbXBvcnRLZXkoa2V5KS5hbmRUaGVuKChpbXBvcnRlZEtleSkgPT5cbiAgICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgIGl2OiBlbmNyeXB0ZWQuaXYgYXMgVWludDhBcnJheSxcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIGVuY3J5cHRlZC5kYXRhIGFzIEFycmF5QnVmZmVyLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApXG4gICk7XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PiB7XG4gICAgY29uc3QgaXYgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEyKSk7XG4gICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXYsXG4gICAgICAgIH0sXG4gICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICksXG4gICAgICAoZXJyb3IpID0+XG4gICAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgfSksXG4gICAgKS5hbmRUaGVuKChlbmNyeXB0ZWQpID0+IHtcbiAgICAgIHJldHVybiBva0FzeW5jKHtcbiAgICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbiAgICAgICAgZGF0YTogZW5jcnlwdGVkLFxuICAgICAgICBpdixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgc3RyaW5nIGludG8gYSBDcnlwdG9LZXksIHVzYWJsZSBpbiBXZWIgQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpbXBvcnRLZXkgPSAoa2V5OiBzdHJpbmcpOiBSZXN1bHRBc3luYzxDcnlwdG9LZXksIENyeXB0b0Vycm9yPiA9PiB7XG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBjcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicmF3XCIsXG4gICAgICBiNjR1cmxkZWNvZGUoa2V5KSxcbiAgICAgIHsgbmFtZTogXCJBRVMtR0NNXCIgfSxcbiAgICAgIGZhbHNlLFxuICAgICAgW1xuICAgICAgICBcImVuY3J5cHRcIixcbiAgICAgICAgXCJkZWNyeXB0XCIsXG4gICAgICBdLFxuICAgICksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGltcG9ydCBjcnlwdG9ncmFwaHkga2V5XCIsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgV2ViIENyeXB0byBBUEkuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKCk6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICBjcnlwdG8uc3VidGxlXG4gICAgICAgIC5nZW5lcmF0ZUtleShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICAgIGxlbmd0aDogMjU2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiXSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoZ2VuZXJhdGVkS2V5KSA9PlxuICAgICAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgICAgIC5leHBvcnRLZXkoXCJyYXdcIiwgZ2VuZXJhdGVkS2V5KVxuICAgICAgICAgICAgLnRoZW4oKGtleSkgPT4gcmVzb2x2ZShiNjR1cmxlbmNvZGUoa2V5KSkpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gYmFzZTY0IGVuY29kZSB0aGUgdXJsXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHJlamVjdChlcnJvcikpXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gZ2VuZXJhdGUga2V5XCIsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIFdlYkNyeXB0byBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICBjb25zdCBwcm9taXNlID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgIGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KFxuICAgICAgICAgIFwiU0hBLTUxMlwiLFxuICAgICAgICAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwYXNzd29yZCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICkubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIHByb21pc2UoKSxcbiAgICAoZXJyb3IpID0+IG5ldyBIYXNoaW5nRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICk7XG59O1xuIiwgImltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHR5cGUgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0ICogYXMgc2pjbCBmcm9tIFwifi9hcGkvY3J5cHRvL3NqY2wudHNcIjtcbmltcG9ydCAqIGFzIHdlYiBmcm9tIFwifi9hcGkvY3J5cHRvL3dlYi50c1wiO1xuaW1wb3J0IHR5cGUgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvYmplY3QgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT5cbiAgdmFsdWUuYWxnbyA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmRlY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5kZWNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgdXNpbmcgdGhlIHByb3ZpZGVkIGtleSBhbmQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT5cbiAgKGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsKVxuICAgID8gc2pjbC5lbmNyeXB0KGtleSwgdmFsdWUpXG4gICAgOiB3ZWIuZW5jcnlwdChrZXksIHZhbHVlKTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5ldyBrZXkgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvblxuICpcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoXG4gIGFsZ28gPSBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT5cbiAgYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wgPyBzamNsLmdlbmVyYXRlS2V5KCkgOiB3ZWIuZ2VuZXJhdGVLZXkoKTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgdGhlIHByb3ZpZGVkIGFsZ29yaXRobVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbFxuICAgID8gc2pjbC5oYXNoUGFzc3dvcmQocGFzc3dvcmQpXG4gICAgOiB3ZWIuaGFzaFBhc3N3b3JkKHBhc3N3b3JkKTtcbiIsICJpbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB7IFNvY2tldFBhdGggfSBmcm9tIFwifi9lbnVtL3NvY2tldC1wYXRoLnRzXCI7XG5pbXBvcnQgeyBVcGxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3VwbG9hZC91cGxvYWQtZXJyb3IudHNcIjtcbmltcG9ydCB7IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudFVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvY2xpZW50LXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNhbmNlbE1ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jYW5jZWwtbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItZG93bmxvYWQtY2h1bmstc3VjY2Vzcy1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJVcGxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci11cGxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vdHlwZS9zZXJ2ZXItZG93bmxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IGV2ZW50cywgdXBkYXRlRmlsZSB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwifi9hcGkvY3J5cHRvLnRzXCI7XG5pbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5cbmV4cG9ydCBjb25zdCBzb2NrZXRzOiB7XG4gIFtrZXk6IHN0cmluZ106IFdlYlNvY2tldDtcbn0gPSB7fTtcblxuY29uc3QgTUFYX0VSUk9SUyA9IDU7XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgY2FuY2VsIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25DYW5jZWxNZXNzYWdlID0gKFxuICBkYXRhOiBTZXJ2ZXJDYW5jZWxNZXRhZGF0YSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIEVycm9yPiA9PiB7XG4gIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9DQU5DRUxMRUQsIGRhdGEuc3VjY2Vzcyk7XG5cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgZG93bmxvYWQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSByZXNwb25zZVxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkRvd25sb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IHN0cmluZyxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2Uuc3BsaXQoXCJYWE1PSk9YWFwiKTtcbiAgY29uc3QgbWV0YWRhdGFTdHJpbmcgPSByZXN1bHQuc2hpZnQoKTtcblxuICBpZiAobWV0YWRhdGFTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gSlNPTi5wYXJzZShtZXRhZGF0YVN0cmluZykgYXMgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhO1xuXG4gICAgaWYgKGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YShtZXRhZGF0YSkpIHtcbiAgICAgIGNvbnN0IGRhdGFTdHJpbmcgPSByZXN1bHQuc2hpZnQoKTtcblxuICAgICAgaWYgKGRhdGFTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cmluZyk7XG5cbiAgICAgICAgLy8gSWYgZmlsZSB3YXMgdXBsb2FkZWQgdXNpbmcgTHVmaSBBUElcbiAgICAgICAgaWYgKGVuY3J5cHRlZERhdGEuaXYpIHtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLml2ID0gbmV3IFVpbnQ4QXJyYXkoT2JqZWN0LnZhbHVlcyhlbmNyeXB0ZWREYXRhLml2KSk7XG4gICAgICAgICAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZGVjb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyeXB0by5kZWNyeXB0KGx1ZmlGaWxlLmtleXMuY2xpZW50LCBlbmNyeXB0ZWREYXRhKS5hbmRUaGVuKFxuICAgICAgICAgIChkZWNyeXB0ZWRQYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0eXBlb2YgZGVjcnlwdGVkUGFydCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IChuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGVjcnlwdGVkUGFydCkuYnVmZmVyIGFzIEFycmF5QnVmZmVyKVxuICAgICAgICAgICAgICA6IGRlY3J5cHRlZFBhcnQ7XG5cbiAgICAgICAgICAgIC8vIElmIGZpcnN0IGNodW5rXG4gICAgICAgICAgICBpZiAobWV0YWRhdGEucGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgICAgICAgICAgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSxcbiAgICAgICAgICAgICAgICBkZWxBdEZpcnN0VmlldzogbWV0YWRhdGEuZGVsX2F0X2ZpcnN0X3ZpZXcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IG1ldGFkYXRhLmRlbGF5LFxuICAgICAgICAgICAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogbWV0YWRhdGEuc2l6ZSxcbiAgICAgICAgICAgICAgICB0b3RhbENodW5rczogbWV0YWRhdGEudG90YWwsXG4gICAgICAgICAgICAgICAgdHlwZTogbWV0YWRhdGEudHlwZSxcbiAgICAgICAgICAgICAgICB6aXBwZWQ6IG1ldGFkYXRhLnppcHBlZCxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkNIVU5LX0RPV05MT0FERUQsIGJ1ZmZlciwgbWV0YWRhdGEucGFydCk7XG5cbiAgICAgICAgICAgIGlmIChsdWZpRmlsZS5jaHVua3NSZWFkeSA9PT0gbWV0YWRhdGEudG90YWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVuZERvd25sb2FkKGx1ZmlGaWxlKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9DT01QTEVURSk7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCByZXRyaWV2ZSBtZXRhZGF0YSBmcm9tIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlclwiLFxuICAgICAgICApO1xuXG4gICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IobWV0YWRhdGEubXNnKTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoXG4gICAgICBcIkNhbm5vdCByZXRyaWV2ZSBtZXRhZGF0YSBmcm9tIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlclwiLFxuICAgICk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciB1cGxvYWQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSByZXNwb25zZVxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvblVwbG9hZE1lc3NhZ2UgPSAoXG4gIHJlc3BvbnNlOiBTZXJ2ZXJVcGxvYWRDaHVua01ldGFkYXRhLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBVcGxvYWRFcnJvcj4gPT4ge1xuICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgIC8vIElmIGZpcnN0IGNodW5rXG4gICAgaWYgKHJlc3BvbnNlLmogPT09IDApIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgVXBsb2FkIG9mICR7bHVmaUZpbGUua2V5cy5jbGllbnR9IHN0YXJ0ZWRgKTtcblxuICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgICBrZXlzOiB7IGNsaWVudDogbHVmaUZpbGUua2V5cy5jbGllbnQsIHNlcnZlcjogcmVzcG9uc2Uuc2hvcnQgfSxcbiAgICAgICAgYWN0aW9uVG9rZW46IHJlc3BvbnNlLnRva2VuLFxuICAgICAgICBxdWV1ZUluZGV4OiByZXNwb25zZS5pLFxuICAgICAgfSk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9TVEFSVEVEKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkX2F0LFxuICAgIH0pO1xuXG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfVVBMT0FERUQpO1xuXG4gICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBsdWZpRmlsZS50b3RhbENodW5rcykge1xuICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuQ09NUExFVEUgfSk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9DT01QTEVURSk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuICAgIH1cblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IocmVzcG9uc2UubXNnKTtcbiAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG5cbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbiBzb2NrZXRzIFwib25tZXNzYWdlXCIgZXZlbnRcbiAqXG4gKiBAcGFyYW0gZVxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25NZXNzYWdlID0gKFxuICBlOiBNZXNzYWdlRXZlbnQsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGNvbnN0IGRhdGEgPSB0cnlQYXJzZUpzb24oZS5kYXRhKTtcbiAgbGV0IGNhbGxiYWNrO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgaWYgKCFkYXRhLmFjdGlvbiAmJiBkYXRhLm1zZykge1xuICAgICAgLy8gSWYgZXJyb3JcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKGRhdGEubXNnKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFwiZGVsYXlcIiBpbiBkYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25VcGxvYWRNZXNzYWdlKGRhdGEsIGx1ZmlGaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25DYW5jZWxNZXNzYWdlKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayA9IG9uRG93bmxvYWRNZXNzYWdlKGUuZGF0YSwgbHVmaUZpbGUpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBJcyBzb2NrZXQgY29ubmVjdGluZz9cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNDb25uZWN0aW5nID0gKHNvY2tldEtleTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBzb2NrZXRzICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuXG4vKipcbiAqIElzIHNvY2tldCBzcGF3bmVkP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NwYXduZWQgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU47XG5cbi8qKlxuICogQXNrIFdlYlNvY2tldCB0byBjYW5jZWwgYW4gdXBsb2FkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2FuY2VsVXBsb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgdXBsb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBgJHtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGx1ZmlGaWxlLmtleXMuc2VydmVyLFxuICAgICAgICBtb2RfdG9rZW46IGx1ZmlGaWxlLmFjdGlvblRva2VuLFxuICAgICAgICBjYW5jZWw6IHRydWUsXG4gICAgICAgIGk6IGx1ZmlGaWxlLnF1ZXVlSW5kZXgsXG4gICAgICB9KVxuICAgIH1YWE1PSk9YWHVzZWxlc3NgLFxuICApO1xufTtcblxuLyoqXG4gKiBEb3dubG9hZCBhIHBhcnQgb2YgdGhlIGZpbGUgdGhyb3VnaCB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gY2h1bmtOdW1iZXJcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIGNodW5rTnVtYmVyOiBudW1iZXIsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgcGFydDogY2h1bmtOdW1iZXIgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFRlbGwgdGhlIFdlYlNvY2tldCB0aGUgZG93bmxvYWQgZW5kZWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmREb3dubG9hZCA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgbGV0IG1lc3NhZ2U6IHsgZW5kZWQ6IHRydWU7IGZpbGVfcHdkPzogc3RyaW5nIH07XG5cbiAgaWYgKGx1ZmlGaWxlLnBhc3N3b3JkKSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUsIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCB9O1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSB7IGVuZGVkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgZG93bmxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICApO1xufTtcblxuLyoqXG4gKiBVcGxvYWQgYSBjaHVuayBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBtZXRhZGF0YVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRDaHVuayA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBtZXRhZGF0YTogQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGVuY3J5cHRlZERhdGEuZGF0YSA9IGI2NGVuY29kZShlbmNyeXB0ZWREYXRhLmRhdGEgYXMgQXJyYXlCdWZmZXIpO1xuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke0pTT04uc3RyaW5naWZ5KG1ldGFkYXRhKX1YWE1PSk9YWCR7SlNPTi5zdHJpbmdpZnkoZW5jcnlwdGVkRGF0YSl9YCxcbiAgKTtcbn07XG5cbi8qKlxuICogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBzb2NrZXRVcmxcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gaGFzUHJpb3JpdHlcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHNlbmRNZXNzYWdlID0gKFxuICBzb2NrZXRVcmw6IHN0cmluZyxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBpZiAoIWlzU3Bhd25lZChzb2NrZXRVcmwpKSB7XG4gICAgcmV0dXJuIHNwYXduKHNvY2tldFVybCkuYW5kVGhlbigoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldFVybF0ub25tZXNzYWdlID0gKGUpID0+IG9uTWVzc2FnZShlLCBsdWZpRmlsZSk7XG4gICAgICByZXR1cm4gc2VuZE1lc3NhZ2Uoc29ja2V0VXJsLCBsdWZpRmlsZSwgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc29ja2V0c1tzb2NrZXRVcmxdLnNlbmQobWVzc2FnZSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICB9XG59O1xuXG4vKipcbiAqIFNwYXduIGEgbmV3IFdlYlNvY2tldCBvciByZXVzZSBhbiBleGlzdGluZyBvbmUuXG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHBhcmFtIGVycm9yQ291bnRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzcGF3biA9IChcbiAgc29ja2V0S2V5OiBzdHJpbmcsXG4gIGVycm9yQ291bnQgPSAwLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBpZiAoIWlzU3Bhd25lZChzb2NrZXRLZXkpICYmICFpc0Nvbm5lY3Rpbmcoc29ja2V0S2V5KSkge1xuICAgIC8vIGNvbnNvbGUuaW5mbyhgU3Bhd25pbmcgV2ViU29ja2V0ICR7c29ja2V0VXJsfWApO1xuICAgIHNvY2tldHNbc29ja2V0S2V5XSA9IG5ldyBXZWJTb2NrZXQoc29ja2V0S2V5KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoKSA9PiB7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuICAgIH0pO1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBvcGVuYCk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFTkVEKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFdlYnNvY2tldCAke3NvY2tldEtleX0gaGFzIGJlZW4gY2xvc2VkYCk7XG4gICAgfTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaWYgKCsrZXJyb3JDb3VudCA8PSBNQVhfRVJST1JTKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYEFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uIFRyeWluZyBhZ2Fpbi4gJHtlcnJvckNvdW50fSAvICR7TUFYX0VSUk9SU31gLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBzcGF3bihzb2NrZXRLZXksIGVycm9yQ291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09ORVJST1IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgbmV3IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICAgIGBVbmFibGUgdG8gY29ubmVjdCB0byBXZWJTb2NrZXQgJHtzb2NrZXRLZXl9LmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHdhaXRGb3JDb25uZWN0aW9uKHNvY2tldEtleSlcbiAgICAuYW5kVGhlbigoKSA9PiBva0FzeW5jKHNvY2tldEtleSkpXG4gICAgLm9yRWxzZSgoZXJyb3IpID0+IGVyckFzeW5jKGVycm9yKSk7XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIFdlYlNvY2tldCB0byBvcGVuLiBSZXR1cm5zIGFuIGVycm9yIGlmIHRvbyBtYW55IGNvbm5lY3Rpb24gYXR0ZW1wdHMgYXJlIG1hZGUuXG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JDb25uZWN0aW9uID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIWlzU3Bhd25lZChzb2NrZXRLZXkpKSB7XG4gICAgICAgIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50cy5vbihFVkVOVC5TT0NLRVRfT05FUlJPUiwgKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiBlbnN1cmVFcnJvcihlcnJvcik7XG4gICAgfSxcbiAgKTtcblxuLyoqXG4gKiBDbG9zZSB0aGUgV2ViU29ja2V0XG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2xvc2UgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgY29uc3QgdGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRFcnJvcihcIlVuYWJsZSB0byBjbG9zZSB0aGUgV2ViU29ja2V0XCIpKTtcbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXRLZXkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShzb2NrZXRLZXkpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYW4gaW5zdGFuY2UgVVJMIGluIGEgV2ViU29ja2V0IFVSTFxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZVVybFxuICogQHBhcmFtIHBhdGhuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYnVpbGRTb2NrZXRVcmwgPSAoaW5zdGFuY2VVcmw6IFVSTCwgcGF0aG5hbWU6IHN0cmluZyk6IFVSTCA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5zdGFuY2VVcmwpO1xuICB1cmwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIiA/IFwid3M6XCIgOiBcIndzczpcIjtcbiAgdXJsLnBhdGhuYW1lICs9IHBhdGhuYW1lO1xuXG4gIHJldHVybiBuZXcgVVJMKHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZFNvY2tldFVybCA9IChsdWZpRmlsZTogTHVmaUZpbGUpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYnVpbGRTb2NrZXRVcmwoXG4gICAgbmV3IFVSTChsdWZpRmlsZS5zZXJ2ZXJVcmwpLFxuICAgIFNvY2tldFBhdGguRE9XTkxPQUQgKyBgLyR7bHVmaUZpbGUua2V5cy5zZXJ2ZXJ9YCxcbiAgKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgdXBsb2FkIFVSTCBmb3IgdGhlIHNvY2tldC4gUmV0dXJucyBhIHN0cmluZyBzaW5jZSBpdCdzIG1vc3RseSB1c2VkIGFzIHNvY2tldHMga2V5XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBsb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksIFNvY2tldFBhdGguVVBMT0FEKVxuICAgIC50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBUcnkgdG8gcGFyc2UgYSBzdHJpbmcgaW50byBhIEpTT04uIFJldHVybnMgZmFsc2UgaWYgbm90IHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCB0cnlQYXJzZUpzb24gPSAoZGF0YTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgIGlmIChwYXJzZWRPYmplY3QgJiYgdHlwZW9mIHBhcnNlZE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChfZSkge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdHlwZSBvZiB0aGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgaXMgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgPSAoXG4gIG1lc3NhZ2U6IFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YSxcbik6IG1lc3NhZ2UgaXMgU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9PlxuICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJiBtZXNzYWdlICE9PSBudWxsICYmICEoXCJtc2dcIiBpbiBtZXNzYWdlKTtcbiIsICJpbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IGV2ZW50cywgaW5pdCB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCB7IGNhbmNlbFVwbG9hZCBhcyB3c0NhbmNlbFVwbG9hZCB9IGZyb20gXCJ+L2FwaS93ZWJzb2NrZXQudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmRlY2xhcmUgY29uc3Qgc2VsZjogV29ya2VyO1xubGV0IGlzSW5pdGlhdGVkID0gZmFsc2U7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgaWYgKCFpc0luaXRpYXRlZCkge1xuICAgIGluaXQoKTtcbiAgICBpc0luaXRpYXRlZCA9IHRydWU7XG4gIH1cblxuICBldmVudHMub24oRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULlVQTE9BRF9DQU5DRUxMRUQsIHN1Y2Nlc3MgfSk7XG4gIH0pO1xuXG4gIGNhbmNlbFVwbG9hZChldmVudC5kYXRhKS5tYXBFcnIoKGVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgIGVycm9yLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNhbmNlbFVwbG9hZCA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PlxuICB3c0Nh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RUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVMLEVBQUVELEVBQUUsT0FBTyxJQUFJTyxFQUFFLEVBQUUsR0FBT04sSUFBSixHQUFXQSxJQUFKLEdBQVdBLElBQUosRUFBTSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLHNCQUFzQixFQUE2QixJQUEzQixLQUFLLEVBQUUsQ0FBQ0ksRUFBRUgsRUFBRSxNQUFNLENBQUMsRUFBRUksRUFBRSxDQUFDLENBQUMsRUFBTUosRUFBRUMsRUFBRUQsRUFBRSxFQUFFQyxFQUFFLEdBQUdELElBQUtFLEVBQUVDLEVBQUVILEVBQUUsQ0FBQyxHQUFTQSxFQUFFQyxJQUFOLEdBQWFBLElBQUosR0FBV0QsRUFBRUMsSUFBTixLQUFRQyxFQUFFRyxFQUFFSCxJQUFJLEVBQUUsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUdHLEVBQUVILEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRUcsRUFBRUgsRUFBRSxHQUFHLEVBQU1GLEVBQUVDLElBQU4sSUFBVUMsRUFBRUEsR0FBRyxFQUFFQSxJQUFJLEdBQUdLLEdBQUcsR0FBR0EsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsS0FBSUosRUFBRUgsQ0FBQyxFQUFFRyxFQUFFSCxFQUFFQyxDQUFDLEVBQUVDLEVBQUUsSUFBSUQsRUFBRSxFQUFFRCxFQUFFQyxJQUFJRCxJQUFJRSxFQUFFQyxFQUFFRixFQUFFLEVBQUVELEVBQUVBLEVBQUUsQ0FBQyxFQUFFSSxFQUFFSCxDQUFDLEVBQUUsR0FBR0QsR0FBRyxFQUFFQyxFQUFFQyxFQUFFSSxFQUFFLENBQUMsRUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FBRyxFQUFFYSxFQUFFWixFQUFFLEdBQUcsRUFBRUYsRUFBRVUsRUFBRSxDQUFDLEVBQUVaLEVBQUVELEVBQUVDLElBQUksRUFBRSxFQUFFYyxFQUFFWCxHQUFHLEdBQUcsR0FBRyxFQUFFWSxFQUFFWCxHQUFHLEVBQUUsR0FBRyxFQUFFWSxFQUFFWCxFQUFFLEdBQUcsRUFBRUgsRUFBRVUsRUFBRSxDQUFDLEVBQUVBLEdBQUcsRUFBRVQsRUFBRUcsRUFBRUYsRUFBRUksRUFBRUgsRUFBRUksRUFBRSxJQUFJRSxFQUNyZixFQUFFLEVBQUVBLEVBQUVBLElBQUlFLEVBQUVaLEVBQUUsRUFBRSxDQUFDVSxFQUFFQSxDQUFDLEVBQUVNLEVBQUVkLElBQUksRUFBRSxHQUFHLEdBQUdjLEVBQUViLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBR2EsRUFBRVosR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFWSxFQUFFakIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLEdBQUcsRUFBRU4sRUFBRUgsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUwsRUFBRUEsRUFBRU0sRUFBRSxPQUFPTyxDQUFDLENBQ2hIZixFQUFLLFNBQVMsQ0FBQyxTQUFTLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxPQUFBRixFQUFFRCxFQUFLLFNBQVMsRUFBRUMsRUFBRSxNQUFNQyxFQUFFLEVBQUUsRUFBRSxJQUFJQSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBa0JDLElBQVQsT0FBV0YsRUFBRUQsRUFBSyxTQUFTLE1BQU1DLEVBQUVFLEVBQUVELENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0QsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUUsS0FBSyxNQUFNLENBQUNGLEVBQUVDLEVBQUUsRUFBRSxFQUFFLFFBQVFELEVBQUVDLEVBQUUsRUFBRUQsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUdFLEVBQUVILEVBQUVDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLENBQUMsSUFBSUUsSUFBSSxHQUFHRCxHQUFHLENBQUMsRUFBRSxPQUFPLFNBQVNGLEVBQUVDLEVBQUUsQ0FBQyxHQUFPRCxFQUFFLFNBQU4sR0FBa0JDLEVBQUUsU0FBTixFQUFhLE9BQU9ELEVBQUUsT0FBT0MsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUVBLEVBQUUsT0FBTyxDQUFDLEVBQUVHLEVBQUVKLEVBQUssU0FBUyxXQUFXRyxDQUFDLEVBQUUsT0FBWUMsSUFBTCxHQUFPSCxFQUFFLE9BQU9DLENBQUMsRUFBRUYsRUFBSyxTQUFTLEVBQUVFLEVBQUVFLEVBQUVELEVBQUUsRUFBRUYsRUFBRSxNQUFNLEVBQUVBLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsU0FBU0EsRUFBRSxDQUFDLElBQUlDLEVBQUVELEVBQUUsT0FBTyxPQUNuZkMsSUFEMGYsRUFDeGYsRUFBRSxJQUFJQSxFQUFFLEdBQUdGLEVBQUssU0FBUyxXQUFXQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxTQUFTRCxFQUFFQyxFQUFFLENBQUMsR0FBRyxHQUFHRCxFQUFFLE9BQU9DLEVBQUUsT0FBT0QsRUFBRUEsRUFBRUEsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdBQUdGLEdBQUcsT0FBTyxhQUFhRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUVBLElBQUksRUFBRSxP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SyxFQUFFLEdBQUdFLEVBQUUsQ0FBQyxDQUFDLEVBQVNKLENBQUMsQ0FBQyxFQUFFSCxFQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsU0FBU0MsRUFBRSxDQUFDLE9BQU9ELEVBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFB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QUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJRSxFQUFFLEVBQUVBLEVBQUUsS0FBSyxFQUFFLFNBQVNGLEVBQUVBLEVBQUUsT0FBTyxLQUFLLEVBQUVFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRUQsR0FBRyxLQUFLLEVBQUVDLENBQUMsRUFBRSxLQUFLLEVBQUVBLENBQUMsRUFBRSxFQUFFSCxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUdHLElBQUlBLElBQUksQ0FDalQsSUFEa1QsS0FBSyxHQUFHLEdBQUcsS0FBSyxFQUFFLFNBQVMsS0FBSyxFQUFFLEtBQUssSUFBSVAsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHTSxFQUFFQSxFQUFFLEtBQUssSUFBSSxLQUFLLEVBQ3ZmQSxHQUFHLEtBQUssSUFBSSxLQUFLLEVBQUVOLEVBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxFQUFFLE9BQU9LLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJTCxFQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBTUksRUFBRSxFQUFFLEVBQUVBLElBQUksS0FBSyxFQUFFQSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFQSxDQUFDLEdBQUdBLElBQUksQ0FBQyxDQUFDLElBQUlBLEVBQUUsRUFBRUEsRUFBRUgsRUFBRUcsR0FBRyxHQUFPQSxFQUFFLEdBQUcsS0FBSyxLQUFmLEdBQW1COEMsR0FBRyxJQUFJLEVBQUU3QyxFQUFFOEMsR0FBRSxJQUFJLEVBQUVoRCxFQUFFLEtBQUtFLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBQTZDLEdBQUcsSUFBSSxFQUFTL0MsRUFBRSxNQUFNLEVBQUVGLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixTQUFTQSxFQUFFQyxFQUFFLENBQUMsR0FBT0QsSUFBSixHQUErRUMsSUFBeEUsc0VBQTBFLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEscUVBQXFFLEVBQUUsS0FBSyxFQUFFQyxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUNsZ0JDLEVBQUVDLEVBQUUsQ0FBQ0EsRUFBRUEsR0FBRyxPQUFPLElBQUlDLEVBQUVDLEVBQUVDLEVBQUcsSUFBSSxPQUFNLFFBQVEsRUFBRUMsRUFBRSxLQUFLLEVBQUVKLENBQUMsRUFBRUssRUFBRSxLQUFLLFFBQVEsRUFBRUUsRUFBRSxFQUFvSCxPQUFsSE4sRUFBRSxLQUFLLEVBQUVELENBQUMsRUFBV0MsSUFBVCxTQUFhQSxFQUFFLEtBQUssRUFBRUQsQ0FBQyxFQUFFLEtBQUssTUFBZUksSUFBVCxTQUFhQSxFQUFFLEtBQUssRUFBRUosQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFQSxDQUFDLEdBQUcsS0FBSyxFQUFFQSxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUUsT0FBYyxPQUFPRixFQUFFLENBQUMsSUFBSyxTQUFrQkMsSUFBVCxTQUFhQSxFQUFFLEdBQUcsS0FBSyxFQUFFSyxDQUFDLEVBQUUsT0FBTyxDQUFDSCxFQUFFLEtBQUssSUFBSSxFQUFFRixFQUFFSSxFQUFFLEVBQUVMLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFLLFNBQTZDLEdBQXBDRSxFQUFFLE9BQU8sVUFBVSxTQUFTLEtBQUtGLENBQUMsRUFBOEJFLElBQXpCLHVCQUEyQixDQUFNLElBQUxFLEVBQUUsQ0FBQyxFQUFNRixFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUUsRUFBRSxLQUFLSixFQUFFRSxDQUFDLENBQUMsRUFBRUYsRUFBRUksQ0FBQyxLQUFNLEtBQXVCRixJQUFuQixtQkFBdUJPLEVBQUUsR0FBR1AsRUFBRSxFQUFFQSxFQUFFRixFQUFFLFFBQVEsQ0FBQ1MsRUFBRVAsSUFBZSxPQUFPRixFQUFFRSxDQUFDLEdBQXJCLFdBQzlkTyxFQUFFLEdBQUcsR0FBRyxDQUFDQSxFQUFFLENBQUMsR0FBWVIsSUFBVCxPQUFXLElBQUlDLEVBQUVELEVBQUUsRUFBRUMsRUFBRUYsRUFBRSxPQUFPRSxJQUFJLElBQUlFLEVBQUVKLEVBQUVFLENBQUMsRUFBRSxFQUFFRSxHQUFHSCxJQUFJRyxFQUFFQSxJQUFJLEVBQUUsS0FBSyxFQUFFRSxDQUFDLEVBQUUsT0FBTyxDQUFDSCxFQUFFLEtBQUssSUFBSSxFQUFFRixFQUFFSSxFQUFFTCxFQUFFLE1BQU0sRUFBRSxPQUFPQSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSyxTQUFrQkMsSUFBVCxTQUFhQSxFQUFFRCxFQUFFLFFBQVEsS0FBSyxFQUFFTSxDQUFDLEVBQUUsT0FBTyxDQUFDSCxFQUFFLEtBQUssSUFBSSxFQUFFRixFQUFFSSxFQUFFTCxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRU0sQ0FBQyxFQUFFLE9BQU9OLENBQUMsRUFBRSxNQUFNLFFBQVFTLEVBQUUsQ0FBQyxDQUFDLEdBQUdBLEVBQUUsTUFBTSxJQUFJVixFQUFLLFVBQVUsSUFBSSxxRUFBcUUsRUFBRSxLQUFLLEVBQUVPLENBQUMsR0FBR0wsRUFBRSxLQUFLLEdBQUdBLEVBQUVNLElBQUksS0FBSyxJQUFJLEtBQUssUUFBUSxJQUFJLEtBQUssR0FBRzRDLEdBQUcsU0FBUyxLQUFLLElBQUksS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUVBLEdBQUcsV0FBVyxLQUFLLFlBQVksQ0FBQyxFQUFFLEVBQ3RmLFFBQVEsU0FBU25ELEVBQUUsQ0FBQyxPQUFBQSxFQUFFLEtBQUssRUFBV0EsSUFBVCxPQUFXQSxFQUFFLEtBQUssQ0FBQyxFQUFTLEtBQUssR0FBRyxLQUFLLEdBQUdBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUksSUFBSSxPQUFNLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHQSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsWUFBWSxTQUFTQSxFQUFFLENBQUMsT0FBQUEsRUFBRSxLQUFLLEVBQUVBLEdBQUksS0FBSyxDQUFDLEVBQVMsS0FBSyxHQUFHQSxHQUFJLEtBQUssRUFBRUEsRUFBVCxFQUFhLEtBQUssRUFBRUEsQ0FBQyxFQUFFLGdCQUFnQixVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFtTCxHQUFsTCxLQUFLLEVBQUUsQ0FBQyxrQkFBa0JvRCxHQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsZUFBZUEsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLGtCQUFrQkEsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLHVCQUF1QkEsR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLGVBQWVBLEdBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFLLE9BQU8saUJBQWlCLE9BQU8saUJBQWlCLE9BQy9nQixLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLGlCQUFpQixZQUFZLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxPQUFPLGlCQUFpQixXQUFXLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE9BQU8saUJBQWlCLGVBQWUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxpQkFBaUIsWUFBWSxLQUFLLEVBQUUsZUFBZSxFQUFFLFVBQVUsU0FBUyxZQUFZLFNBQVMsWUFBWSxTQUFTLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLFlBQVksY0FBYyxLQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsWUFBWSxXQUFXLEtBQUssRUFBRSxpQkFBaUIsTUFBTyxPQUFNLElBQUlyRCxFQUFLLFVBQVUsSUFBSSxvQkFBb0IsRUFDamlCLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLFVBQVUsQ0FBQyxLQUFLLElBQUksT0FBTyxxQkFBcUIsT0FBTyxvQkFBb0IsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxPQUFPLG9CQUFvQixZQUFZLEtBQUssRUFBRSxlQUFlLEVBQUUsRUFBRSxPQUFPLG9CQUFvQixXQUFXLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sb0JBQW9CLGVBQWUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxvQkFBb0IsWUFBWSxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsU0FBUyxjQUFjLFNBQVMsWUFBWSxTQUFTLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxTQUFTLFlBQVksY0FDaGdCLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxZQUFZLFdBQVcsS0FBSyxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsaUJBQWlCLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELENBQUMsRUFBRSxLQUFLLElBQUksRUFBRUMsQ0FBQyxFQUFFLG9CQUFvQixTQUFTRCxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVKLENBQUMsRUFBRUssRUFBRSxDQUFDLEVBQUUsSUFBSUYsS0FBS0MsRUFBRUEsRUFBRSxlQUFlRCxDQUFDLEdBQUdDLEVBQUVELENBQUMsSUFBSUYsR0FBR0ksRUFBRSxLQUFLRixDQUFDLEVBQUUsSUFBSUQsRUFBRSxFQUFFQSxFQUFFRyxFQUFFLE9BQU9ILElBQUlDLEVBQUVFLEVBQUVILENBQUMsRUFBRSxPQUFPRSxFQUFFRCxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQ2tELEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxHQUFHLENBQUNELEVBQUVELEVBQUUsR0FBR0EsRUFBRSxTQUFTQSxFQUFFLFNBQVMsRUFBRUUsRUFBRUYsRUFBRSxHQUFHQSxFQUFFLFNBQVNBLEVBQUUsU0FBUyxDQUFDLE1BQVMsQ0FBQ0UsRUFBRUQsRUFBRSxDQUFDLENBQUlBLEdBQUgsR0FBU0MsR0FBSCxHQUFNLEtBQUssV0FBVyxDQUFDRCxFQUFFQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVtRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTckQsRUFBRSxDQUFDQSxFQUN2ZkEsRUFBRSxRQUFRLENBQUMsR0FBR0EsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQ0EsRUFBRSxPQUFPQSxFQUFFLFFBQVFBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUNBLEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNyRCxFQUFFLENBQXdHLEdBQXZHQSxFQUFFQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixFQUFLLE9BQU8sWUFBWSxDQUFDLElBQUlDLEVBQUUsT0FBTyxZQUF1QixPQUFPQSxHQUFsQixVQUFxQixLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQ0QsR0FBRyxLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLEVBQUVxRCxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM1osU0FBU0YsR0FBR25ELEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFSixFQUFLLE9BQU8sRUFBRUMsQ0FBQyxFQUFFSSxFQUFFLENBQUMsRUFBRSxJQUFJRixLQUFLQyxFQUFFQSxFQUFFLGVBQWVELENBQUMsR0FBR0UsRUFBRSxLQUFLRCxFQUFFRCxDQUFDLENBQUMsRUFBRSxJQUFJQSxFQUFFLEVBQUVBLEVBQUVFLEVBQUUsT0FBT0YsSUFBSUUsRUFBRUYsQ0FBQyxFQUFFRCxDQUFDLENBQUMsQ0FBQyxTQUFTb0QsR0FBRXJELEVBQUVDLEVBQUUsQ0FBZSxPQUFPLE9BQXJCLEtBQTZCLE9BQU8sYUFBMEIsT0FBTyxPQUFPLFlBQVksS0FBdkMsV0FBMkNELEVBQUUsV0FBVyxPQUFPLFlBQVksSUFBSSxFQUFFQyxFQUFFLFVBQVUsRUFBRUQsRUFBRSxXQUFZLElBQUksT0FBTSxRQUFRLEVBQUVDLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBU2dELEdBQUdqRCxFQUFFLENBQUNBLEVBQUUsRUFBRWtELEdBQUVsRCxDQUFDLEVBQUUsT0FBT2tELEdBQUVsRCxDQUFDLENBQUMsRUFBRUEsRUFBRSxFQUFFLElBQUlELEVBQUssT0FBTyxJQUFJQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVNrRCxHQUFFbEQsRUFBRSxDQUFDLFFBQVFDLEVBQUUsRUFBRSxFQUFFQSxJQUFJRCxFQUFFLEVBQUVDLENBQUMsRUFBRUQsRUFBRSxFQUFFQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUNELEVBQUUsRUFBRUMsQ0FBQyxHQUFHQSxJQUFJLENBQUMsT0FBT0QsRUFBRSxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxDQUFDLENBQ3BlLFNBQVNvRCxHQUFFcEQsRUFBRUMsRUFBRSxDQUFDLE9BQU8sVUFBVSxDQUFDQSxFQUFFLE1BQU1ELEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQ0QsRUFBSyxPQUFPLElBQUlBLEVBQUssS0FBSyxDQUFDLEVBQ25GQyxFQUFFLEdBQUcsQ0FBZSxHQUFHc0QsR0FBaUIsT0FBT3hELEVBQXJCLEtBQTZCQSxFQUFPLFFBQVEsQ0FBUSxHQUFHLENBQUN5RCxHQUFHLEdBQVEsUUFBUSxDQUFDLE1BQVMsQ0FBQ0EsR0FBRyxJQUFJLENBQUNELEdBQUdFLEdBQUdELEVBQUUsQ0FBQyxHQUFHRCxJQUFJRSxHQUFHLFlBQVlDLEdBQUVELEdBQUcsWUFBWSxHQUFHLEVBQUVDLEdBQUUsSUFBSSxZQUFhLElBQUksV0FBV0EsRUFBQyxFQUFHLE1BQU0sRUFBRTFELEVBQUssT0FBTyxXQUFXMEQsR0FBRSxLQUFLLHVCQUF1QixVQUF3QixPQUFPLE9BQXJCLEtBQTJDLE9BQU8sWUFBckIsSUFBaUMsQ0FBdUIsR0FBdEJDLEdBQUUsSUFBSSxZQUFZLEVBQUUsRUFBSyxPQUFPLFFBQVEsT0FBTyxPQUFPLGdCQUFnQixPQUFPLE9BQU8sZ0JBQWdCQSxFQUFDLFVBQVUsT0FBTyxVQUFVLE9BQU8sU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLGdCQUFnQkEsRUFBQyxNQUNyaEIsT0FBTTFELEVBQUVELEVBQUssT0FBTyxXQUFXMkQsR0FBRSxLQUFLLDJCQUEyQixDQUFDLENBQUMsT0FBTzFELEVBQUUsQ0FBZSxPQUFPLE9BQXJCLEtBQTZCLE9BQU8sVUFBVSxRQUFRLElBQUkseURBQXlELEVBQUUsUUFBUSxJQUFJQSxDQUFDLEVBQUUsQ0FENU0sSUFBQXlELEdBQUVELEdBQUdFLEdBQUVKLEdBQTBEQyxHQUUzRXhELEVBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsS0FBSyxNQUFNLE1BQU0sR0FBRyxPQUFPLEtBQUssRUFBRSxHQUFHLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQ0QsRUFBRUEsR0FBRyxDQUFDLEVBQUVDLEVBQUVBLEdBQUcsQ0FBQyxFQUFFLElBQUlDLEVBQUVMLEVBQUssS0FBS00sRUFBRUQsRUFBRSxFQUFFLENBQUMsR0FBR0wsRUFBSyxPQUFPLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRUssRUFBRSxRQUFRLEVBQUVFLEVBQXVKLEdBQXJKRixFQUFFLEVBQUVDLEVBQUVILENBQUMsRUFBRUEsRUFBRUcsRUFBRSxNQUFpQixPQUFPQSxFQUFFLE1BQXBCLFdBQTJCQSxFQUFFLEtBQUtOLEVBQUssTUFBTSxPQUFPLE9BQU9NLEVBQUUsSUFBSSxHQUFjLE9BQU9BLEVBQUUsSUFBcEIsV0FBeUJBLEVBQUUsR0FBR04sRUFBSyxNQUFNLE9BQU8sT0FBT00sRUFBRSxFQUFFLEdBQU0sQ0FBQ04sRUFBSyxLQUFLTSxFQUFFLElBQUksR0FBRyxDQUFDTixFQUFLLE9BQU9NLEVBQUUsTUFBTSxHQUFjLE9BQU9MLEdBQWxCLFVBQXFCLEtBQUtLLEVBQUUsTUFBV0EsRUFBRSxLQUFQLElBQWdCQSxFQUFFLEtBQVAsSUFBaUJBLEVBQUUsS0FBUixLQUFrQkEsRUFBRSxLQUFSLEtBQWtCQSxFQUFFLEtBQVIsS0FBb0JBLEVBQUUsS0FBVixLQUFjLEVBQUVBLEVBQUUsR0FBRyxRQUNqZixFQUFFQSxFQUFFLEdBQUcsT0FBTyxNQUFNLElBQUlOLEVBQUssVUFBVSxRQUFRLGtDQUFrQyxFQUFFLE9BQVcsT0FBT0MsR0FBbEIsVUFBcUJNLEVBQUVQLEVBQUssS0FBSyxhQUFhQyxFQUFFSyxDQUFDLEVBQUVMLEVBQUVNLEVBQUUsSUFBSSxNQUFNLEVBQUVELEVBQUUsR0FBRyxFQUFFLEVBQUVBLEVBQUUsS0FBS0MsRUFBRSxNQUFNUCxFQUFLLEtBQUtDLGFBQWFELEVBQUssSUFBSSxRQUFRLFlBQVlPLEVBQUVOLEVBQUUsSUFBSSxFQUFFSyxFQUFFLE9BQU9DLEVBQUUsSUFBSU4sRUFBRU0sRUFBRSxJQUFJLE1BQU0sRUFBRUQsRUFBRSxHQUFHLEVBQUUsR0FBYyxPQUFPSixHQUFsQixXQUFzQkEsRUFBRUYsRUFBSyxNQUFNLFdBQVcsT0FBT0UsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCRyxFQUFFLE1BQU1ILEVBQUVILEVBQUssTUFBTSxXQUFXLE9BQU9HLENBQUMsR0FBR0ksRUFBRSxJQUFJUCxFQUFLLE9BQU9NLEVBQUUsTUFBTSxFQUFFTCxDQUFDLEVBQUVJLEVBQUUsRUFBRUQsRUFBRUUsQ0FBQyxFQUFFRixFQUFFLElBQUlILEVBQUVLLEVBQUUsR0FBV0EsRUFBRSxPQUFWLE9BQWdCTixFQUFLLGFBQWFBLEVBQUssWUFBWSxLQUN2ZkUsYUFBYSxZQUFZRixFQUFLLFlBQVksSUFBSSxRQUFRTyxFQUFFTCxFQUFFSSxFQUFFLEdBQUdILEVBQUVHLEVBQUUsRUFBRSxFQUFFTixFQUFLLEtBQUtNLEVBQUUsSUFBSSxFQUFFLFFBQVFDLEVBQUVMLEVBQUVJLEVBQUUsR0FBR0gsRUFBRUcsRUFBRSxFQUFFLEVBQVNBLENBQUMsRUFBRSxRQUFRLFNBQVNMLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFTCxFQUFLLEtBQUtNLEVBQUVELEVBQUUsR0FBRyxNQUFNQSxFQUFFLFNBQVMsRUFBRSxPQUFPQSxFQUFFLE9BQU9DLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBU0wsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDRCxFQUFFQSxHQUFHLENBQUMsRUFBRUMsRUFBRUEsR0FBRyxDQUFDLEVBQUUsSUFBSUMsRUFBRUwsRUFBSyxLQUFLRSxFQUFFRyxFQUFFLEVBQUVBLEVBQUUsRUFBRUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsRUFBRSxRQUFRLEVBQUVILENBQUMsRUFBRUMsRUFBRSxFQUFFLEVBQUUsSUFBSUcsRUFBRUMsRUFBOEksR0FBNUlELEVBQUVKLEVBQUUsTUFBaUIsT0FBT0EsRUFBRSxNQUFwQixXQUEyQkEsRUFBRSxLQUFLRixFQUFLLE1BQU0sT0FBTyxPQUFPRSxFQUFFLElBQUksR0FBYyxPQUFPQSxFQUFFLElBQXBCLFdBQXlCQSxFQUFFLEdBQUdGLEVBQUssTUFBTSxPQUFPLE9BQU9FLEVBQUUsRUFBRSxHQUFNLENBQUNGLEVBQUssS0FBS0UsRUFBRSxJQUFJLEdBQUcsQ0FBQ0YsRUFBSyxPQUFPRSxFQUFFLE1BQU0sR0FDL2UsT0FBT0QsR0FEMmUsVUFDeGUsS0FBS0MsRUFBRSxNQUFXQSxFQUFFLEtBQVAsSUFBZ0JBLEVBQUUsS0FBUCxJQUFpQkEsRUFBRSxLQUFSLEtBQWtCQSxFQUFFLEtBQVIsS0FBa0JBLEVBQUUsS0FBUixLQUFvQkEsRUFBRSxLQUFWLEtBQWMsQ0FBQ0EsRUFBRSxJQUFJLEVBQUVBLEVBQUUsR0FBRyxRQUFRLEVBQUVBLEVBQUUsR0FBRyxPQUFPLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEsa0NBQWtDLEVBQUUsT0FBVyxPQUFPQyxHQUFsQixVQUFxQk0sRUFBRVAsRUFBSyxLQUFLLGFBQWFDLEVBQUVDLENBQUMsRUFBRUQsRUFBRU0sRUFBRSxJQUFJLE1BQU0sRUFBRUwsRUFBRSxHQUFHLEVBQUUsRUFBRUEsRUFBRSxLQUFLSyxFQUFFLE1BQU1QLEVBQUssS0FBS0MsYUFBYUQsRUFBSyxJQUFJLFFBQVEsWUFBWUMsRUFBRUEsRUFBRSxNQUFNRCxFQUFLLE1BQU0sT0FBTyxPQUFPRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRUEsRUFBRSxHQUFHLEVBQUUsR0FBYyxPQUFPSSxHQUFsQixXQUFzQkEsRUFBRU4sRUFBSyxNQUFNLFdBQVcsT0FBT00sQ0FBQyxHQUFHQyxFQUFFLElBQUlQLEVBQUssT0FBT0UsRUFBRSxNQUFNLEVBQUVELENBQUMsRUFBRUssRUFDL2VKLEVBQUUsT0FEK2UsT0FDemVGLEVBQUssYUFBYUEsRUFBSyxZQUFZLEtBQUtFLEVBQUUsY0FBYyxZQUFZRixFQUFLLFlBQVksSUFBSSxRQUFRTyxFQUFFTCxFQUFFLEdBQUdBLEVBQUUsR0FBR0EsRUFBRSxJQUFJSSxFQUFFSixFQUFFLEVBQUUsRUFBRUYsRUFBSyxLQUFLRSxFQUFFLElBQUksRUFBRSxRQUFRSyxFQUFFTCxFQUFFLEdBQUdBLEVBQUUsR0FBR0ksRUFBRUosRUFBRSxFQUFFLEVBQUVHLEVBQUUsRUFBRUQsRUFBRUYsQ0FBQyxFQUFFRSxFQUFFLElBQUlILEVBQWFFLEVBQUUsTUFBTixFQUFVRyxFQUFFTixFQUFLLE1BQU0sV0FBVyxTQUFTTSxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVNMLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFTCxFQUFLLEtBQUssT0FBT0ssRUFBRSxHQUFHSixFQUFFSSxFQUFFLE9BQU9ILENBQUMsRUFBRUMsRUFBRUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxTQUFTSCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJQyxFQUFFLEdBQUcsSUFBSUYsS0FBS0QsRUFBRSxHQUFHQSxFQUFFLGVBQWVDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQ0EsRUFBRSxNQUFNLGNBQWMsRUFBRSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLG9DQUFvQyxFQUM3ZCxPQUQrZEcsR0FBR0MsRUFBRSxJQUNqZkYsRUFBRSxLQUFLRSxFQUFFLElBQVcsT0FBT0gsRUFBRUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxTQUFTLElBQUssVUFBVUMsR0FBR0YsRUFBRUMsQ0FBQyxFQUFFLE1BQU0sSUFBSyxTQUFTQyxHQUFHLElBQUksT0FBT0YsRUFBRUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLElBQUssU0FBU0MsR0FBRyxJQUFJSCxFQUFLLE1BQU0sT0FBTyxTQUFTQyxFQUFFQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksTUFBTSxRQUFRLE1BQU0sSUFBSUYsRUFBSyxVQUFVLElBQUksK0JBQStCLENBQUUsQ0FBQyxDQUFDLE9BQU9HLEVBQUUsR0FBRyxFQUFFLE9BQU8sU0FBU0YsRUFBRSxDQUF1QixHQUF0QkEsRUFBRUEsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFLLENBQUNBLEVBQUUsTUFBTSxVQUFVLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUEsRUFBRSxRQUFRLFdBQVcsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFJLENBQUMsR0FBRyxFQUFFQyxFQUFFSCxFQUFFRSxDQUFDLEVBQUUsTUFBTSw2RkFBNkYsR0FBRyxNQUFNLElBQUlILEVBQUssVUFBVSxRQUFRLCtCQUErQixFQUMxb0JJLEVBQUUsQ0FBQyxHQUFULEtBQVdGLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFRQSxFQUFFLENBQUMsR0FBVCxLQUFXRixFQUFFRSxFQUFFLENBQUMsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRSxNQUFNLHNCQUFzQixFQUFFSixFQUFLLE1BQU0sT0FBTyxPQUFPSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxDQUFDLEVBQVFBLEVBQUUsQ0FBQyxHQUFULE9BQWFGLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQVdBLEVBQUUsQ0FBQyxJQUFaLE9BQWMsQ0FBQyxPQUFPRixDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFQyxFQUFFQyxFQUFFLENBQW9CLEdBQVZGLElBQVQsU0FBYUEsRUFBRSxDQUFDLEdBQWVDLElBQVQsT0FBVyxPQUFPRCxFQUFFLFFBQVFHLEtBQUtGLEVBQUUsR0FBR0EsRUFBRSxlQUFlRSxDQUFDLEVBQUUsQ0FBQyxHQUFHRCxHQUFZRixFQUFFRyxDQUFDLElBQVosUUFBZUgsRUFBRUcsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEVBQUUsTUFBTSxJQUFJSixFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUcsQ0FBQyxFQUFFRixFQUFFRSxDQUFDLENBQUMsQ0FBQyxPQUFPSCxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUVGLEVBQUssT0FBTyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUVHLEVB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QUksSUFBSUYsQ0FBVyxFQUMvQixPQUFBRSxFQUFJLFNBQVdBLEVBQUksV0FBYSxRQUFVLE1BQVEsT0FDbERBLEVBQUksVUFBWUQsRUFFVCxJQUFJLElBQUlDLEVBQUksT0FBU0EsRUFBSSxRQUFRLENBQzFDLEVBUWFDLEdBQXFCQyxHQUN6QkwsR0FDTCxJQUFJLElBQUlLLEVBQVMsU0FBUyxFQUMxQixXQUFzQixJQUFJQSxFQUFTLEtBQUssTUFBTSxFQUNoRCxFQUFFLFNBQVMsRUFTQUMsR0FBbUJELEdBQ3ZCTCxHQUFlLElBQUksSUFBSUssRUFBUyxTQUFTLFVBQW9CLEVBQ2pFLFNBQVMsRUFTUkUsR0FBZ0JDLEdBQWlCLENBQ3JDLEdBQUksQ0FDRixJQUFNQyxFQUFlLEtBQUssTUFBTUQsQ0FBSSxFQUVwQyxHQUFJQyxHQUFnQixPQUFPQSxHQUFpQixTQUMxQyxPQUFPQSxDQUdYLE1BQWEsQ0FFYixDQUNBLE1BQU8sRUFDVCxFQVFhQyxHQUNYQyxHQUVBLE9BQU9BLEdBQVksVUFBWUEsSUFBWSxNQUFRLEVBQUUsUUFBU0EsR0M5Z0JoRSxJQUFJQyxHQUFjLEdBRWxCLEtBQUssVUFBYUMsR0FBd0IsQ0FDbkNELEtBQ0hFLEdBQUssRUFDTEYsR0FBYyxJQUdoQkcsRUFBTyxzQkFBNEJDLEdBQXFCLENBQ3RELEtBQUssWUFBWSxDQUFFLHlCQUErQixRQUFBQSxDQUFRLENBQUMsQ0FDN0QsQ0FBQyxFQUVEQyxHQUFhSixFQUFNLElBQUksRUFBRSxPQUFRSyxHQUFVLENBQ3pDLEtBQUssWUFBWSxDQUNmLHlCQUNBLE1BQUFBLENBQ0YsQ0FBZ0IsQ0FDbEIsQ0FBQyxDQUNILEVBRUEsSUFBTUQsR0FDSkUsR0FFQUYsR0FBZUUsRUFBYyxLQUFLLFFBQVEiLAogICJuYW1lcyI6IFsicmVxdWlyZV9ldmVudHMiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJyZXF1aXJlX3NqY2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzamNsIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJhYSIsICJrIiwgIm4iLCAibCIsICJtIiwgInAiLCAieiIsICJBIiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJHIiwgIkUiLCAiSCIsICJGIiwgIlYiLCAiSSIsICJ3IiwgInYiLCAiUiIsICJKIiwgIlMiLCAiSyIsICJXIiwgIkwiLCAicSIsICJ4IiwgInkiLCAiWCIsICJZIiwgIk0iLCAiZmEiLCAiamEiLCAia2EiLCAiZ2EiLCAiYmEiLCAiTiIsICJjYSIsICJPIiwgIlQiLCAiaGEiLCAiaWEiLCAiZGEiLCAiVSIsICJaIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAiaW5pdCIsICJldmVudHMiLCAiZXJyb3IiLCAiZGVmYXVsdEVycm9yQ29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJtZXNzYWdlIiwgInJlc3VsdCIsICJjb25maWciLCAiZGF0YSIsICJtYXliZVN0YWNrIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fYXdhaXQiLCAidiIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImciLCAicSIsICJ2ZXJiIiwgImF3YWl0UmV0dXJuIiwgImYiLCAibiIsICJhIiwgImIiLCAicmVzdW1lIiwgInNldHRsZSIsICJyIiwgImZ1bGZpbGwiLCAiX19hc3luY0RlbGVnYXRvciIsICJwIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZCIsICJSZXN1bHRBc3luYyIsICJfUmVzdWx0QXN5bmMiLCAicmVzIiwgInByb21pc2UiLCAibmV3UHJvbWlzZSIsICJ2YWx1ZSIsICJPayIsICJlcnJvckZuIiwgImUiLCAiRXJyIiwgImZuIiwgImFyZ3MiLCAiX19hd2FpdGVyIiwgImVycm9yIiwgImFzeW5jUmVzdWx0TGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzIiwgImYiLCAibmV3UmVzIiwgIm5ld1ZhbHVlIiwgIm9rIiwgIl9lcnIiLCAidCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiQmFzZUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJjYXVzZSIsICJjb250ZXh0IiwgIl9fcHVibGljRmllbGQiLCAiV2ViU29ja2V0RXJyb3IiLCAiQmFzZUVycm9yIiwgIldlYlNvY2tldENvbm5lY3Rpb25FcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImVuc3VyZUVycm9yIiwgInZhbHVlIiwgInN0cmluZ2lmaWVkIiwgIkVuY29kaW5nIiwgImNoYXJzZXQiLCAibm9QYWRkaW5nIiwgImFiIiwgImxlbiIsICJ2aWV3IiwgInJlcyIsICJzdHIiLCAidmlld0xlbiIsICJlbmMxIiwgImVuYzIiLCAiZW5jMyIsICJlbmM0IiwgImkiLCAiaiIsICJvYmoiLCAiRW5jb2RpbmciLCAiRGVjb2RlIiwgInN0ciIsICJvYmoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgImltcG9ydF9sdWZpX3NqY2wiLCAiQ3J5cHRvRXJyb3IiLCAiQmFzZUVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZERhdGEiLCAiZGF0YSIsICJva0FzeW5jIiwgIkRlY29kZSIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWQiLCAiaW1wb3J0S2V5IiwgImltcG9ydGVkS2V5IiwgIlJlc3VsdEFzeW5jIiwgImVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJpbXBvcnRLZXkiLCAia2V5IiwgIlJlc3VsdEFzeW5jIiwgIkRlY29kZSIsICJlcnJvciIsICJDcnlwdG9FcnJvciIsICJlbnN1cmVFcnJvciIsICJkZWNyeXB0IiwgImtleSIsICJ2YWx1ZSIsICJzb2NrZXRzIiwgIk1BWF9FUlJPUlMiLCAib25DYW5jZWxNZXNzYWdlIiwgImRhdGEiLCAiZXZlbnRzIiwgIm9rQXN5bmMiLCAib25Eb3dubG9hZE1lc3NhZ2UiLCAicmVzcG9uc2UiLCAibHVmaUZpbGUiLCAicmVzdWx0IiwgIm1ldGFkYXRhU3RyaW5nIiwgIm1ldGFkYXRhIiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJkYXRhU3RyaW5nIiwgImVuY3J5cHRlZERhdGEiLCAiRGVjb2RlIiwgImRlY3J5cHQiLCAiZGVjcnlwdGVkUGFydCIsICJidWZmZXIiLCAidXBkYXRlRmlsZSIsICJlbmREb3dubG9hZCIsICJlcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJlcnJBc3luYyIsICJvblVwbG9hZE1lc3NhZ2UiLCAib25NZXNzYWdlIiwgImUiLCAidHJ5UGFyc2VKc29uIiwgImNhbGxiYWNrIiwgImlzQ29ubmVjdGluZyIsICJzb2NrZXRLZXkiLCAiaXNTcGF3bmVkIiwgImNhbmNlbFVwbG9hZCIsICJzZW5kTWVzc2FnZSIsICJ1cGxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAibHVmaUZpbGUiLCAibWVzc2FnZSIsICJzZW5kTWVzc2FnZSIsICJkb3dubG9hZFNvY2tldFVybCIsICJzZW5kTWVzc2FnZSIsICJzb2NrZXRVcmwiLCAibHVmaUZpbGUiLCAibWVzc2FnZSIsICJpc1NwYXduZWQiLCAic29ja2V0cyIsICJva0FzeW5jIiwgInNwYXduIiwgImUiLCAib25NZXNzYWdlIiwgInNvY2tldEtleSIsICJlcnJvckNvdW50IiwgImlzQ29ubmVjdGluZyIsICJldmVudHMiLCAiTUFYX0VSUk9SUyIsICJlcnJBc3luYyIsICJXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IiLCAid2FpdEZvckNvbm5lY3Rpb24iLCAiZXJyb3IiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZW5zdXJlRXJyb3IiLCAiYnVpbGRTb2NrZXRVcmwiLCAiaW5zdGFuY2VVcmwiLCAicGF0aG5hbWUiLCAidXJsIiwgImRvd25sb2FkU29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgInVwbG9hZFNvY2tldFVybCIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAic3VjY2VzcyIsICJjYW5jZWxVcGxvYWQiLCAiZXJyb3IiLCAid29ya2VyTWVzc2FnZSJdCn0K
+var vt=Object.create;var Le=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?Le(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Te=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&Le(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Ie=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?Le(r,"default",{value:t,enumerable:!0}):r,t));var T=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var Ke=Te((sr,xe)=>{"use strict";var K=typeof Reflect=="object"?Reflect:null,Me=K&&typeof K.apply=="function"?K.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;K&&typeof K.ownKeys=="function"?pe=K.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function _t(t){console&&console.warn&&console.warn(t)}var je=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}xe.exports=p;xe.exports.once=Ct;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Ue=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Ue},set:function(t){if(typeof t!="number"||t<0||je(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Ue=t}});p.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||je(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function Ne(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return Ne(this)};p.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")Me(u,this,r);else for(var f=u.length,h=He(u,f),n=0;n0&&s.length>o&&!s.warned){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=t,a.type=e,a.count=s.length,_t(a)}return t}p.prototype.addListener=function(e,r){return Be(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Be(this,e,r,!0)};function Dt(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function We(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Dt.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,We(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,We(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():bt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Fe(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?St(o):He(o,o.length)}p.prototype.listeners=function(e){return Fe(this,e,!0)};p.prototype.rawListeners=function(e){return Fe(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):Je.call(t,e)};p.prototype.listenerCount=Je;function Je(t){var e=this._events;if(e!==void 0){var r=e[t];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function He(t,e){for(var r=new Array(e),n=0;n{"use strict";var c={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};c.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var a=1;if(e!==4&&e!==6&&e!==8)throw new c.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^a<<24,a=a<<1^283*(a>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return tt(this,t,0)},decrypt:function(t){return tt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function tt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var a,u,f,h=n.length/4-2,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],D=a[2],C=a[3],j=a[4];for(l=0;l>>24]^g[i>>16&255]^D[s>>8&255]^C[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^D[e>>8&255]^C[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^D[o>>8&255]^C[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^D[i>>8&255]^C[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}c.bitArray={bitSlice:function(t,e,r){return t=c.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:c.bitArray.clamp(t,r-e)},extract:function(t,e,r){var n=Math.floor(-e-r&31);return((e+r-1^e)&-32?t[e/32|0]<<32-n^t[e/32+1|0]>>>n:t[e/32|0]>>>n)&(1<>e-1,1)),t},partial:function(t,e,r){return t===32?e:(r?e|0:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(c.bitArray.bitLength(t)!==c.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n>>e),r=t[o]<<32-e;return o=t.length?t[t.length-1]:0,t=c.bitArray.getPartial(o),n.push(c.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};c.codec.utf8String={fromBits:function(t){var e="",r=c.bitArray.bitLength(t),n,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=c.codec.base64.S,s=0,a;for(e&&(i=i.substr(0,62)+"-_"),n=0;na)throw new c.exception.invalid("this isn't base64!");26>>o),s=a<<32-o):(o+=6,s^=a<<32-o)}return o&56&&r.push(c.bitArray.partial(o&56,s,1)),r}};c.codec.base64url={fromBits:function(t){return c.codec.base64.fromBits(t,1,1)},toBits:function(t){return c.codec.base64.toBits(t,1)}};c.hash.sha256=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};c.hash.sha256.hash=function(t){return new c.hash.sha256().update(t).finalize()};c.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=c.codec.utf8String.toBits(t));var e,r=this.f=c.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+c.bitArray.bitLength(t),9007199254740991e;r++){for(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(8>e&&(this.o[e]=t(Math.pow(r,.5))),this.b[e]=t(Math.pow(r,1/3)),e++)}},l:function(t){var e,r,n,o=this.g,i=this.b,s=o[0],a=o[1],u=o[2],f=o[3],h=o[4],l=o[5],y=o[6],d=o[7];for(e=0;64>e;e++)16>e?r=t[e]:(r=t[e+1&15],n=t[e+14&15],r=t[e&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+t[e&15]+t[e+9&15]|0),r=r+d+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(y^h&(l^y))+i[e],d=y,y=l,l=h,h=f+r|0,f=u,u=a,a=s,s=r+(a&u^f&(a^u))+(a>>>2^a>>>13^a>>>22^a<<30^a<<19^a<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+a|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+y|0,o[7]=o[7]+d|0}};c.hash.sha512=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};c.hash.sha512.hash=function(t){return new c.hash.sha512().update(t).finalize()};c.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=c.codec.utf8String.toBits(t));var e,r=this.f=c.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+c.bitArray.bitLength(t),9007199254740991r;n++){for(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(8>r&&(this.o[2*r]=t(Math.pow(n,.5)),this.o[2*r+1]=e(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=t(Math.pow(n,1/3)),this.b[2*r+1]=e(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(t){var e,r,n=this.g,o=this.b,i=n[0],s=n[1],a=n[2],u=n[3],f=n[4],h=n[5],l=n[6],y=n[7],d=n[8],g=n[9],D=n[10],C=n[11],j=n[12],fe=n[13],Re=n[14],he=n[15],A;if(typeof Uint32Array<"u"){A=Array(160);for(var w=0;32>w;w++)A[w]=t[w]}else A=t;var w=i,L=s,q=a,H=u,Q=f,z=h,we=l,Z=y,R=d,x=g,le=D,ee=C,de=j,te=fe,Ee=Re,re=he;for(t=0;80>t;t++){if(16>t)e=A[2*t],r=A[2*t+1];else{r=A[2*(t-15)];var v=A[2*(t-15)+1];e=(v<<31|r>>>1)^(v<<24|r>>>8)^r>>>7;var k=(r<<31|v>>>1)^(r<<24|v>>>8)^(r<<25|v>>>7);r=A[2*(t-2)];var P=A[2*(t-2)+1],v=(P<<13|r>>>19)^(r<<3|P>>>29)^r>>>6,P=(r<<13|P>>>19)^(P<<3|r>>>29)^(r<<26|P>>>6),Ae=A[2*(t-7)],Oe=A[2*(t-16)],ne=A[2*(t-16)+1];r=k+A[2*(t-7)+1],e=e+Ae+(r>>>0>>0?1:0),r+=P,e+=v+(r>>>0>>0?1:0),r+=ne,e+=Oe+(r>>>0>>0?1:0)}A[2*t]=e|=0,A[2*t+1]=r|=0;var Ae=R&le^~R&de,ke=x&ee^~x&te,P=w&q^w&Q^q&Q,mt=L&H^L&z^H&z,Oe=(L<<4|w>>>28)^(w<<30|L>>>2)^(w<<25|L>>>7),ne=(w<<4|L>>>28)^(L<<30|w>>>2)^(L<<25|w>>>7),yt=o[2*t],Pe=o[2*t+1],v=re+((R<<18|x>>>14)^(R<<14|x>>>18)^(x<<23|R>>>9)),k=Ee+((x<<18|R>>>14)^(x<<14|R>>>18)^(R<<23|x>>>9))+(v>>>0>>0?1:0),v=v+ke,k=k+(Ae+(v>>>0>>0?1:0)),v=v+Pe,k=k+(yt+(v>>>0>>0?1:0)),v=v+r|0,k=k+(e+(v>>>0>>0?1:0));r=ne+mt,e=Oe+P+(r>>>0>>0?1:0),Ee=de,re=te,de=le,te=ee,le=R,ee=x,x=Z+v|0,R=we+k+(x>>>0>>0?1:0)|0,we=Q,Z=z,Q=q,z=H,q=w,H=L,L=v+r|0,w=k+e+(L>>>0>>0?1:0)|0}s=n[1]=s+L|0,n[0]=i+w+(s>>>0>>0?1:0)|0,u=n[3]=u+H|0,n[2]=a+q+(u>>>0>>0?1:0)|0,h=n[5]=h+z|0,n[4]=f+Q+(h>>>0>>0?1:0)|0,y=n[7]=y+Z|0,n[6]=l+we+(y>>>0>>0?1:0)|0,g=n[9]=g+x|0,n[8]=d+R+(g>>>0>>0?1:0)|0,C=n[11]=C+ee|0,n[10]=D+le+(C>>>0>>0?1:0)|0,fe=n[13]=fe+te|0,n[12]=j+de+(fe>>>0>>0?1:0)|0,he=n[15]=he+re|0,n[14]=Re+Ee+(he>>>0>>0?1:0)|0}};c.mode.ccm={name:"ccm",F:[],listenProgress:function(t){c.mode.ccm.F.push(t)},unListenProgress:function(t){t=c.mode.ccm.F.indexOf(t),-1u)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=a.clamp(r,8*(15-i)),e=c.mode.ccm.U(t,e,r,n,o,i),s=c.mode.ccm.V(t,s,r,e,o,i),a.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=c.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),a=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new c.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&f>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),a=c.mode.ccm.V(t,a,r,u,o,e),t=c.mode.ccm.U(t,a.data,r,n,o,e),!i.equal(a.tag,t))throw new c.exception.corrupt("ccm: tag doesn't match");return a.data},ma:function(t,e,r,n,o,i){var s=[],a=c.bitArray,u=a.P;if(n=[a.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=a.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=a.bitLength(e)/8,65279>=r?s=[a.partial(16,r)]:4294967295>=r&&(s=a.concat([a.partial(16,65534)],[r])),s=a.concat(s,e),e=0;eo||16h&&(c.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:a.clamp(e,f)}}};c.misc.hmac=function(t,e){this.W=e=e||c.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;nn||0>r)throw new c.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=c.codec.utf8String.toBits(t)),typeof e=="string"&&(e=c.codec.utf8String.toBits(e)),o=o||c.misc.hmac,t=new o(t);var i,s,a,u,f=[],h=c.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=c.hash.sha256.hash(this.b.concat(o)),this.K=new c.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n>>1;this.h[s].update([n,this.M++,2,e,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new c.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,a===this.A&&(this.isReady()!==this.A&&rt("seeded",Math.max(this.u,this.i)),rt("progress",this.getProgress()))},isReady:function(t){return t=this.R[t!==void 0?t:this.L],this.u&&this.u>=t?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=t?this.I|this.A:this.A},getProgress:function(t){return t=this.R[t||this.L],this.u>=t||this.i>t?1:this.i/t},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:ce(this,this.la),mouseCollector:ce(this,this.na),keyboardCollector:ce(this,this.ja),accelerometerCollector:ce(this,this.ca),touchCollector:ce(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new c.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(t,e){this.J[t][this.ea++]=e},removeEventListener:function(t,e){var r,n,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.push(n);for(r=0;re&&(t.m[e]=t.m[e]+1|0,!t.m[e]);e++);return t.K.encrypt(t.m)}function ce(t,e){return function(){e.apply(t,arguments)}}c.random=new c.prng(6);e:try{if(ve=typeof Y<"u"&&Y.exports){try{ge=Lt("crypto")}catch{ge=null}ve=ye=ge}if(ve&&ye.randomBytes)ae=ye.randomBytes(128),ae=new Uint32Array(new Uint8Array(ae).buffer),c.random.addEntropy(ae,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(ue=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(ue);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(ue);else break e;c.random.addEntropy(ue,1024,"crypto['getRandomValues']")}}catch(t){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(t))}var ae,ye,ue,ve,ge;c.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(t,e,r,n){r=r||{},n=n||{};var o=c.json,i=o.j({iv:c.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=c.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=c.codec.base64.toBits(i.iv)),!c.mode[i.mode]||!c.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.iv.length||4=e.iter||e.ts!==64&&e.ts!==96&&e.ts!==128||e.ks!==128&&e.ks!==192&&e.ks!==256||!e.iv||2>e.iv.length||4(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t);var $e=()=>{m.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),m.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pt={withStackTrace:!1},qe=(t,e,r=Pt)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function G(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function a(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(a,u)}f((n=n.apply(t,e||[])).next())})}function Ye(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function I(t){return this instanceof I?(this.v=t,this):new I(t)}function Ve(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),a("next"),a("throw"),a("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(d){return function(g){return Promise.resolve(g).then(d,l)}}function a(d,g){n[d]&&(o[d]=function(D){return new Promise(function(C,j){i.push([d,D,C,j])>1||u(d,D)})},g&&(o[d]=g(o[d])))}function u(d,g){try{f(n[d](g))}catch(D){y(i[0][3],D)}}function f(d){d.value instanceof I?Promise.resolve(d.value.v).then(h,l):y(i[0][2],d)}function h(d){u("next",d)}function l(d){u("throw",d)}function y(d,g){d(g),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Tt(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:I(t[o](s)),done:!1}:i?i(s):s}:i}}function It(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof Ye=="function"?Ye(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(a,u){s=t[i](s),o(a,u,s.done,s.value)})}}function o(i,s,a,u){Promise.resolve(u).then(function(f){i({value:f,done:a})},s)}}var E=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new b(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new b(o)).catch(o=>new S(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(G(this,void 0,void 0,function*(){try{return new b(yield e(...n))}catch(o){return new S(r?r(o):o)}}))}static combine(e){return Mt(e)}static combineWithAllErrors(e){return Ut(e)}map(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?new S(r.error):new b(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);let n=yield e(r.value);return n.isErr()?new S(n.error):new b(r.value)})))}andTee(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){if(r.isErr())return new S(r.error);try{yield e(r.value)}catch{}return new b(r.value)})))}mapErr(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isOk()?new b(r.value):new S(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new S(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>G(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new b(r.value)})))}match(e,r){return this._promise.then(n=>n.match(e,r))}unwrapOr(e){return this._promise.then(r=>r.unwrapOr(e))}safeUnwrap(){return Ve(this,arguments,function*(){return yield I(yield I(yield*Tt(It(yield I(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return Ve(this,arguments,function*(){let r=yield I(this._promise);return r.isErr()&&(yield yield I(O(r.error))),yield I(r.value)})}},M=t=>new E(Promise.resolve(new b(t))),O=t=>new E(Promise.resolve(new S(t))),pr=E.fromPromise,mr=E.fromSafePromise,yr=E.fromThrowable,Qe=t=>{let e=F([]);for(let r of t)if(r.isErr()){e=N(r.error);break}else e.map(n=>n.push(r.value));return e},Mt=t=>E.fromSafePromise(Promise.all(t)).andThen(Qe),Ze=t=>{let e=F([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=N([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Ut=t=>E.fromSafePromise(Promise.all(t)).andThen(Ze),_e;(function(t){function e(o,i){return(...s)=>{try{let a=o(...s);return F(a)}catch(a){return N(i?i(a):a)}}}t.fromThrowable=e;function r(o){return Qe(o)}t.combine=r;function n(o){return Ze(o)}t.combineWithAllErrors=n})(_e||(_e={}));var F=t=>new b(t);function N(t){return new S(t)}var b=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return F(e(this.value))}mapErr(e){return F(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(r=>this.value)}andTee(e){try{e(this.value)}catch{}return F(this.value)}orElse(e){return F(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return E.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,r){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw qe("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},S=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return N(this.error)}mapErr(e){return N(e(this.error))}andThrough(e){return N(this.error)}andTee(e){return N(this.error)}andThen(e){return N(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return O(this.error)}asyncAndThrough(e){return O(this.error)}asyncMap(e){return O(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield N(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw qe("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},vr=_e.fromThrowable;var W=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});T(this,"context");this.name=this.constructor.name,this.context=i}};var U=class extends W{};var oe=class extends U{constructor(){super(...arguments);T(this,"message","An error occured while trying to connect to WebSocket")}};var J=t=>{if(t instanceof Error)return t;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(t)}catch{}return new Error(e)};var $=class{constructor(e,r){if(!e||e.length!=64)throw Error("Charset must contain 64 characters");this._charset=e,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(e){let r=e.byteLength;if(!r)return"";let n=new Uint8Array(e),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}Decode(e){if(e=(e||"").replace(/[\s]/g,""),!e)return new ArrayBuffer(0);if(!this._valid.test(e))throw Error("Invalid base64 input sequence");let r=Math.floor(e.length*.75);e[e.length-2]=="="?r-=2:e[e.length-1]=="="&&r--;let n=new Uint8Array(r),o,i,s,a,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|a;return n.buffer}};var jt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function ie(t){return jt.Decode(t)}var Nt=new $("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function De(t){return Nt.Decode(t)}var st=Ie(ot());var B=class extends W{};var V=class extends B{constructor(){super(...arguments);T(this,"message","Unable to decrypt the provided data")}};var ct=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return M(ie(st.default.decrypt(t,r)))}catch(r){return O(new V(void 0,{cause:J(r)}))}};var at=(t,e)=>Ht(t).andThen(r=>E.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new V(void 0,{cause:J(n)})));var Ht=t=>E.fromPromise(crypto.subtle.importKey("raw",De(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new B("Unable to import cryptography key",{cause:J(e)}));var ut=(t,e)=>e.algo===void 0||e.algo===0?ct(t,e):at(t,e);var _={},ft=5,Xt=t=>(m.emit("UPLOAD_CANCELLED",t.success),M(void 0)),Gt=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(rr(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=ie(s.data)),ut(e.keys.client,s).andThen(a=>{let u=typeof a=="string"?new TextEncoder().encode(a).buffer:a;return o.part===0?(X(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),m.emit("DOWNLOAD_STARTED")):X(e,{chunksReady:e.chunksReady+1}),m.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?qt(e).andThen(()=>(m.emit("DOWNLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED"),M(void 0))):M(void 0)})}else{let s=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",s),O(s)}}else{let i=new U(o.msg);return m.emit("OPERATION_FAILED",i),O(i)}}else{let o=new U("Cannot retrieve metadata from data received by the server");return m.emit("OPERATION_FAILED",o),O(o)}},$t=(t,e)=>{if(t.success)return t.j===0&&(X(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),m.emit("UPLOAD_STARTED")),X(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),m.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(X(e,{uploadStatus:1}),m.emit("UPLOAD_COMPLETE"),m.emit("SOCKET_OPERATION_TERMINATED")),M(void 0);{let r=new U(t.msg);return m.emit("OPERATION_FAILED",r),O(r)}},Yt=(t,e)=>{let r=tr(t.data),n;if(r)if(!r.action&&r.msg){let o=new U(r.msg);return m.emit("OPERATION_FAILED",o),O(o)}else"delay"in r?n=$t(r,e):n=Xt(r);else n=Gt(t.data,e);return n},Vt=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.CONNECTING,Se=t=>_!==void 0&&_[t]!==void 0&&_[t].readyState===WebSocket.OPEN,ht=t=>Ce(er(t),t,`${JSON.stringify({id:t.keys.server,mod_token:t.actionToken,cancel:!0,i:t.queueIndex})}XXMOJOXXuseless`);var qt=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},Ce(Zt(t),t,JSON.stringify(e))};var Ce=(t,e,r)=>Se(t)?(_[t].send(r),M(void 0)):lt(t).andThen(()=>(_[t].onmessage=n=>Yt(n,e),Ce(t,e,r))),lt=(t,e=0)=>(!Se(t)&&!Vt(t)&&(_[t]=new WebSocket(t),m.once("SOCKET_OPERATION_TERMINATED",()=>{_[t].close()}),m.once("OPERATION_FAILED",()=>{m.emit("SOCKET_OPERATION_TERMINATED")}),_[t].onopen=()=>{m.emit("SOCKET_OPENED")},_[t].onclose=()=>{},_[t].onerror=()=>++e<=ft?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${ft}`),lt(t,e)):(m.emit("SOCKET_ONERROR"),O(new oe(`Unable to connect to WebSocket ${t}.`)))),Qt(t).andThen(()=>M(t)).orElse(r=>O(r))),Qt=t=>E.fromPromise(new Promise((e,r)=>{Se(t)?e(void 0):(m.once("SOCKET_OPENED",()=>{e(void 0)}),m.on("SOCKET_ONERROR",()=>{r(new oe)}))}),e=>J(e));var dt=(t,e)=>{let r=new URL(t);return["ws:","wss:"].includes(r.protocol)||(r.protocol=r.protocol==="http:"?"ws:":"wss:"),r.pathname+=e,new URL(r.origin+r.pathname)},Zt=t=>dt(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString(),er=t=>dt(new URL(t.serverUrl),"upload").toString(),tr=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},rr=t=>typeof t=="object"&&t!==null&&!("msg"in t);var pt=!1;self.onmessage=t=>{pt||($e(),pt=!0),m.on("UPLOAD_CANCELLED",e=>{self.postMessage({event:"UPLOAD_CANCELLED",success:e})}),nr(t.data).mapErr(e=>{self.postMessage({event:"OPERATION_FAILED",error:e})})};var nr=t=>ht(t.args.lufiFile);
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vc3JjL3dvcmtlci9jYW5jZWwudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnID8gUmVmbGVjdCA6IG51bGxcbnZhciBSZWZsZWN0QXBwbHkgPSBSICYmIHR5cGVvZiBSLmFwcGx5ID09PSAnZnVuY3Rpb24nXG4gID8gUi5hcHBseVxuICA6IGZ1bmN0aW9uIFJlZmxlY3RBcHBseSh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHRhcmdldCwgcmVjZWl2ZXIsIGFyZ3MpO1xuICB9XG5cbnZhciBSZWZsZWN0T3duS2V5c1xuaWYgKFIgJiYgdHlwZW9mIFIub3duS2V5cyA9PT0gJ2Z1bmN0aW9uJykge1xuICBSZWZsZWN0T3duS2V5cyA9IFIub3duS2V5c1xufSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldClcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXQpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIFJlZmxlY3RPd25LZXlzID0gZnVuY3Rpb24gUmVmbGVjdE93bktleXModGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFByb2Nlc3NFbWl0V2FybmluZyh3YXJuaW5nKSB7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUud2FybikgY29uc29sZS53YXJuKHdhcm5pbmcpO1xufVxuXG52YXIgTnVtYmVySXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gTnVtYmVySXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICBFdmVudEVtaXR0ZXIuaW5pdC5jYWxsKHRoaXMpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG5tb2R1bGUuZXhwb3J0cy5vbmNlID0gb25jZTtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHNDb3VudCA9IDA7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbnZhciBkZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbmZ1bmN0aW9uIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImxpc3RlbmVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2YgbGlzdGVuZXIpO1xuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShFdmVudEVtaXR0ZXIsICdkZWZhdWx0TWF4TGlzdGVuZXJzJywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkZWZhdWx0TWF4TGlzdGVuZXJzO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uKGFyZykge1xuICAgIGlmICh0eXBlb2YgYXJnICE9PSAnbnVtYmVyJyB8fCBhcmcgPCAwIHx8IE51bWJlcklzTmFOKGFyZykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgXCJkZWZhdWx0TWF4TGlzdGVuZXJzXCIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyArIGFyZyArICcuJyk7XG4gICAgfVxuICAgIGRlZmF1bHRNYXhMaXN0ZW5lcnMgPSBhcmc7XG4gIH1cbn0pO1xuXG5FdmVudEVtaXR0ZXIuaW5pdCA9IGZ1bmN0aW9uKCkge1xuXG4gIGlmICh0aGlzLl9ldmVudHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdGhpcy5fZXZlbnRzID09PSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykge1xuICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICB9XG5cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn07XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIHNldE1heExpc3RlbmVycyhuKSB7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgbiA8IDAgfHwgTnVtYmVySXNOYU4obikpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiblwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBuICsgJy4nKTtcbiAgfVxuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbmZ1bmN0aW9uIF9nZXRNYXhMaXN0ZW5lcnModGhhdCkge1xuICBpZiAodGhhdC5fbWF4TGlzdGVuZXJzID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICByZXR1cm4gdGhhdC5fbWF4TGlzdGVuZXJzO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmdldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uIGdldE1heExpc3RlbmVycygpIHtcbiAgcmV0dXJuIF9nZXRNYXhMaXN0ZW5lcnModGhpcyk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KHR5cGUpIHtcbiAgdmFyIGFyZ3MgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICB2YXIgZG9FcnJvciA9ICh0eXBlID09PSAnZXJyb3InKTtcblxuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICBpZiAoZXZlbnRzICE9PSB1bmRlZmluZWQpXG4gICAgZG9FcnJvciA9IChkb0Vycm9yICYmIGV2ZW50cy5lcnJvciA9PT0gdW5kZWZpbmVkKTtcbiAgZWxzZSBpZiAoIWRvRXJyb3IpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKGRvRXJyb3IpIHtcbiAgICB2YXIgZXI7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMClcbiAgICAgIGVyID0gYXJnc1swXTtcbiAgICBpZiAoZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgLy8gTm90ZTogVGhlIGNvbW1lbnRzIG9uIHRoZSBgdGhyb3dgIGxpbmVzIGFyZSBpbnRlbnRpb25hbCwgdGhleSBzaG93XG4gICAgICAvLyB1cCBpbiBOb2RlJ3Mgb3V0cHV0IGlmIHRoaXMgcmVzdWx0cyBpbiBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLlxuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgfVxuICAgIC8vIEF0IGxlYXN0IGdpdmUgc29tZSBraW5kIG9mIGNvbnRleHQgdG8gdGhlIHVzZXJcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmhhbmRsZWQgZXJyb3IuJyArIChlciA/ICcgKCcgKyBlci5tZXNzYWdlICsgJyknIDogJycpKTtcbiAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgIHRocm93IGVycjsgLy8gVW5oYW5kbGVkICdlcnJvcicgZXZlbnRcbiAgfVxuXG4gIHZhciBoYW5kbGVyID0gZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIFJlZmxlY3RBcHBseShoYW5kbGVyLCB0aGlzLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuID0gaGFuZGxlci5sZW5ndGg7XG4gICAgdmFyIGxpc3RlbmVycyA9IGFycmF5Q2xvbmUoaGFuZGxlciwgbGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgUmVmbGVjdEFwcGx5KGxpc3RlbmVyc1tpXSwgdGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmZ1bmN0aW9uIF9hZGRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBwcmVwZW5kKSB7XG4gIHZhciBtO1xuICB2YXIgZXZlbnRzO1xuICB2YXIgZXhpc3Rpbmc7XG5cbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0YXJnZXQuX2V2ZW50c0NvdW50ID0gMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAgIC8vIGFkZGluZyBpdCB0byB0aGUgbGlzdGVuZXJzLCBmaXJzdCBlbWl0IFwibmV3TGlzdGVuZXJcIi5cbiAgICBpZiAoZXZlbnRzLm5ld0xpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRhcmdldC5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lciA/IGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gICAgICAvLyBSZS1hc3NpZ24gYGV2ZW50c2AgYmVjYXVzZSBhIG5ld0xpc3RlbmVyIGhhbmRsZXIgY291bGQgaGF2ZSBjYXVzZWQgdGhlXG4gICAgICAvLyB0aGlzLl9ldmVudHMgdG8gYmUgYXNzaWduZWQgdG8gYSBuZXcgb2JqZWN0XG4gICAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cztcbiAgICB9XG4gICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV07XG4gIH1cblxuICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gICAgKyt0YXJnZXQuX2V2ZW50c0NvdW50O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgICAgZXhpc3RpbmcgPSBldmVudHNbdHlwZV0gPVxuICAgICAgICBwcmVwZW5kID8gW2xpc3RlbmVyLCBleGlzdGluZ10gOiBbZXhpc3RpbmcsIGxpc3RlbmVyXTtcbiAgICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB9IGVsc2UgaWYgKHByZXBlbmQpIHtcbiAgICAgIGV4aXN0aW5nLnVuc2hpZnQobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBleGlzdGluZy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICAgIG0gPSBfZ2V0TWF4TGlzdGVuZXJzKHRhcmdldCk7XG4gICAgaWYgKG0gPiAwICYmIGV4aXN0aW5nLmxlbmd0aCA+IG0gJiYgIWV4aXN0aW5nLndhcm5lZCkge1xuICAgICAgZXhpc3Rpbmcud2FybmVkID0gdHJ1ZTtcbiAgICAgIC8vIE5vIGVycm9yIGNvZGUgZm9yIHRoaXMgc2luY2UgaXQgaXMgYSBXYXJuaW5nXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgIHZhciB3ID0gbmV3IEVycm9yKCdQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5sZW5ndGggKyAnICcgKyBTdHJpbmcodHlwZSkgKyAnIGxpc3RlbmVycyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luY3JlYXNlIGxpbWl0Jyk7XG4gICAgICB3Lm5hbWUgPSAnTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nJztcbiAgICAgIHcuZW1pdHRlciA9IHRhcmdldDtcbiAgICAgIHcudHlwZSA9IHR5cGU7XG4gICAgICB3LmNvdW50ID0gZXhpc3RpbmcubGVuZ3RoO1xuICAgICAgUHJvY2Vzc0VtaXRXYXJuaW5nKHcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICByZXR1cm4gX2FkZExpc3RlbmVyKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBmYWxzZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHByZXBlbmRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gICAgfTtcblxuZnVuY3Rpb24gb25jZVdyYXBwZXIoKSB7XG4gIGlmICghdGhpcy5maXJlZCkge1xuICAgIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSwgdGhpcy53cmFwRm4pO1xuICAgIHRoaXMuZmlyZWQgPSB0cnVlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsIGFyZ3VtZW50cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gX29uY2VXcmFwKHRhcmdldCwgdHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIHN0YXRlID0geyBmaXJlZDogZmFsc2UsIHdyYXBGbjogdW5kZWZpbmVkLCB0YXJnZXQ6IHRhcmdldCwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyIH07XG4gIHZhciB3cmFwcGVkID0gb25jZVdyYXBwZXIuYmluZChzdGF0ZSk7XG4gIHdyYXBwZWQubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgc3RhdGUud3JhcEZuID0gd3JhcHBlZDtcbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UodHlwZSwgbGlzdGVuZXIpIHtcbiAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gIHRoaXMub24odHlwZSwgX29uY2VXcmFwKHRoaXMsIHR5cGUsIGxpc3RlbmVyKSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kT25jZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIHRoaXMucHJlcGVuZExpc3RlbmVyKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuLy8gRW1pdHMgYSAncmVtb3ZlTGlzdGVuZXInIGV2ZW50IGlmIGFuZCBvbmx5IGlmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XG4gICAgICB2YXIgbGlzdCwgZXZlbnRzLCBwb3NpdGlvbiwgaSwgb3JpZ2luYWxMaXN0ZW5lcjtcblxuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGxpc3QgPSBldmVudHNbdHlwZV07XG4gICAgICBpZiAobGlzdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8IGxpc3QubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgIGlmICgtLXRoaXMuX2V2ZW50c0NvdW50ID09PSAwKVxuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0Lmxpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbGlzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwb3NpdGlvbiA9IC0xO1xuXG4gICAgICAgIGZvciAoaSA9IGxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHwgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0W2ldLmxpc3RlbmVyO1xuICAgICAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgICBpZiAocG9zaXRpb24gPT09IDApXG4gICAgICAgICAgbGlzdC5zaGlmdCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzcGxpY2VPbmUobGlzdCwgcG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKVxuICAgICAgICAgIGV2ZW50c1t0eXBlXSA9IGxpc3RbMF07XG5cbiAgICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBvcmlnaW5hbExpc3RlbmVyIHx8IGxpc3RlbmVyKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQWxsTGlzdGVuZXJzKHR5cGUpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMsIGV2ZW50cywgaTtcblxuICAgICAgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICAgICAgaWYgKGV2ZW50cy5yZW1vdmVMaXN0ZW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnRzW3R5cGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZGVsZXRlIGV2ZW50c1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGV2ZW50cyk7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLl9ldmVudHNDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5lcnMgPSBldmVudHNbdHlwZV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGlzdGVuZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzKTtcbiAgICAgIH0gZWxzZSBpZiAobGlzdGVuZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTElGTyBvcmRlclxuICAgICAgICBmb3IgKGkgPSBsaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuZnVuY3Rpb24gX2xpc3RlbmVycyh0YXJnZXQsIHR5cGUsIHVud3JhcCkge1xuICB2YXIgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBbXTtcblxuICB2YXIgZXZsaXN0ZW5lciA9IGV2ZW50c1t0eXBlXTtcbiAgaWYgKGV2bGlzdGVuZXIgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKVxuICAgIHJldHVybiB1bndyYXAgPyBbZXZsaXN0ZW5lci5saXN0ZW5lciB8fCBldmxpc3RlbmVyXSA6IFtldmxpc3RlbmVyXTtcblxuICByZXR1cm4gdW53cmFwID9cbiAgICB1bndyYXBMaXN0ZW5lcnMoZXZsaXN0ZW5lcikgOiBhcnJheUNsb25lKGV2bGlzdGVuZXIsIGV2bGlzdGVuZXIubGVuZ3RoKTtcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnModHlwZSkge1xuICByZXR1cm4gX2xpc3RlbmVycyh0aGlzLCB0eXBlLCB0cnVlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmF3TGlzdGVuZXJzID0gZnVuY3Rpb24gcmF3TGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbGlzdGVuZXJDb3VudC5jYWxsKGVtaXR0ZXIsIHR5cGUpO1xuICB9XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQgPSBsaXN0ZW5lckNvdW50O1xuZnVuY3Rpb24gbGlzdGVuZXJDb3VudCh0eXBlKSB7XG4gIHZhciBldmVudHMgPSB0aGlzLl9ldmVudHM7XG5cbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG5cbiAgICBpZiAodHlwZW9mIGV2bGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAoZXZsaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZXZlbnROYW1lcyA9IGZ1bmN0aW9uIGV2ZW50TmFtZXMoKSB7XG4gIHJldHVybiB0aGlzLl9ldmVudHNDb3VudCA+IDAgPyBSZWZsZWN0T3duS2V5cyh0aGlzLl9ldmVudHMpIDogW107XG59O1xuXG5mdW5jdGlvbiBhcnJheUNsb25lKGFyciwgbikge1xuICB2YXIgY29weSA9IG5ldyBBcnJheShuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpXG4gICAgY29weVtpXSA9IGFycltpXTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbmZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKDsgaW5kZXggKyAxIDwgbGlzdC5sZW5ndGg7IGluZGV4KyspXG4gICAgbGlzdFtpbmRleF0gPSBsaXN0W2luZGV4ICsgMV07XG4gIGxpc3QucG9wKCk7XG59XG5cbmZ1bmN0aW9uIHVud3JhcExpc3RlbmVycyhhcnIpIHtcbiAgdmFyIHJldCA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXQubGVuZ3RoOyArK2kpIHtcbiAgICByZXRbaV0gPSBhcnJbaV0ubGlzdGVuZXIgfHwgYXJyW2ldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIG9uY2UoZW1pdHRlciwgbmFtZSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGZ1bmN0aW9uIGVycm9yTGlzdGVuZXIoZXJyKSB7XG4gICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKG5hbWUsIHJlc29sdmVyKTtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgaWYgKHR5cGVvZiBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgICByZXNvbHZlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgfTtcblxuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCBuYW1lLCByZXNvbHZlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBhZGRFcnJvckhhbmRsZXJJZkV2ZW50RW1pdHRlcihlbWl0dGVyLCBlcnJvckxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgaGFuZGxlciwgZmxhZ3MpIHtcbiAgaWYgKHR5cGVvZiBlbWl0dGVyLm9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsICdlcnJvcicsIGhhbmRsZXIsIGZsYWdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgbGlzdGVuZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICBlbWl0dGVyLm9uY2UobmFtZSwgbGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbWl0dGVyLm9uKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEV2ZW50VGFyZ2V0IGRvZXMgbm90IGhhdmUgYGVycm9yYCBldmVudCBzZW1hbnRpY3MgbGlrZSBOb2RlXG4gICAgLy8gRXZlbnRFbWl0dGVycywgd2UgZG8gbm90IGxpc3RlbiBmb3IgYGVycm9yYCBldmVudHMgaGVyZS5cbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIobmFtZSwgZnVuY3Rpb24gd3JhcExpc3RlbmVyKGFyZykge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBidWlsdGluIGB7IG9uY2U6IHRydWUgfWAgc3VwcG9ydCBzbyB3ZVxuICAgICAgLy8gaGF2ZSB0byBkbyBpdCBtYW51YWxseS5cbiAgICAgIGlmIChmbGFncy5vbmNlKSB7XG4gICAgICAgIGVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCB3cmFwTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgbGlzdGVuZXIoYXJnKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJlbWl0dGVyXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGVtaXR0ZXIpO1xuICB9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7dmFyIHNqY2w9e2NpcGhlcjp7fSxoYXNoOnt9LGtleWV4Y2hhbmdlOnt9LG1vZGU6e30sbWlzYzp7fSxjb2RlYzp7fSxleGNlcHRpb246e2NvcnJ1cHQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQ09SUlVQVDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0saW52YWxpZDpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJJTlZBTElEOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxidWc6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiQlVHOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfSxub3RSZWFkeTpmdW5jdGlvbihhKXt0aGlzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJOT1QgUkVBRFk6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9fX07XG5zamNsLmNpcGhlci5hZXM9ZnVuY3Rpb24oYSl7dGhpcy53WzBdWzBdWzBdfHx0aGlzLkMoKTt2YXIgYixjLGQsZSxmPXRoaXMud1swXVs0XSxnPXRoaXMud1sxXTtiPWEubGVuZ3RoO3ZhciBoPTE7aWYoNCE9PWImJjYhPT1iJiY4IT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGtleSBzaXplXCIpO3RoaXMuYj1bZD1hLnNsaWNlKDApLGU9W11dO2ZvcihhPWI7YTw0KmIrMjg7YSsrKXtjPWRbYS0xXTtpZigwPT09YSVifHw4PT09YiYmND09PWElYiljPWZbYz4+PjI0XTw8MjReZltjPj4xNiYyNTVdPDwxNl5mW2M+PjgmMjU1XTw8OF5mW2MmMjU1XSwwPT09YSViJiYoYz1jPDw4XmM+Pj4yNF5oPDwyNCxoPWg8PDFeMjgzKihoPj43KSk7ZFthXT1kW2EtYl1eY31mb3IoYj0wO2E7YisrLGEtLSljPWRbYiYzP2E6YS00XSxlW2JdPTQ+PWF8fDQ+Yj9jOmdbMF1bZltjPj4+MjRdXV5nWzFdW2ZbYz4+MTYmMjU1XV1eZ1syXVtmW2M+PjgmMjU1XV1eZ1szXVtmW2MmXG4yNTVdXX07XG5zamNsLmNpcGhlci5hZXMucHJvdG90eXBlPXtlbmNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMCl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFhKHRoaXMsYSwxKX0sdzpbW1tdLFtdLFtdLFtdLFtdXSxbW10sW10sW10sW10sW11dXSxDOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy53WzBdLGI9dGhpcy53WzFdLGM9YVs0XSxkPWJbNF0sZSxmLGcsaD1bXSxrPVtdLG4sbCxtLHA7Zm9yKGU9MDsweDEwMD5lO2UrKylrWyhoW2VdPWU8PDFeMjgzKihlPj43KSleZV09ZTtmb3IoZj1nPTA7IWNbZl07Zl49bnx8MSxnPWtbZ118fDEpZm9yKG09Z15nPDwxXmc8PDJeZzw8M15nPDw0LG09bT4+OF5tJjI1NV45OSxjW2ZdPW0sZFttXT1mLGw9aFtlPWhbbj1oW2ZdXV0scD0weDEwMTAxMDEqbF4weDEwMDAxKmVeMHgxMDEqbl4weDEwMTAxMDAqZixsPTB4MTAxKmhbbV1eMHgxMDEwMTAwKm0sZT0wOzQ+ZTtlKyspYVtlXVtmXT1sPWw8PDI0Xmw+Pj44LGJbZV1bbV09cD1wPDwyNF5wPj4+ODtmb3IoZT1cbjA7NT5lO2UrKylhW2VdPWFbZV0uc2xpY2UoMCksYltlXT1iW2VdLnNsaWNlKDApfX07XG5mdW5jdGlvbiBhYShhLGIsYyl7aWYoNCE9PWIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBhZXMgYmxvY2sgc2l6ZVwiKTt2YXIgZD1hLmJbY10sZT1iWzBdXmRbMF0sZj1iW2M/MzoxXV5kWzFdLGc9YlsyXV5kWzJdO2I9YltjPzE6M11eZFszXTt2YXIgaCxrLG4sbD1kLmxlbmd0aC80LTIsbSxwPTQsej1bMCwwLDAsMF07aD1hLndbY107YT1oWzBdO3ZhciBBPWhbMV0sQz1oWzJdLEI9aFszXSxEPWhbNF07Zm9yKG09MDttPGw7bSsrKWg9YVtlPj4+MjRdXkFbZj4+MTYmMjU1XV5DW2c+PjgmMjU1XV5CW2ImMjU1XV5kW3BdLGs9YVtmPj4+MjRdXkFbZz4+MTYmMjU1XV5DW2I+PjgmMjU1XV5CW2UmMjU1XV5kW3ArMV0sbj1hW2c+Pj4yNF1eQVtiPj4xNiYyNTVdXkNbZT4+OCYyNTVdXkJbZiYyNTVdXmRbcCsyXSxiPWFbYj4+PjI0XV5BW2U+PjE2JjI1NV1eQ1tmPj44JjI1NV1eQltnJjI1NV1eZFtwKzNdLHArPTQsZT1oLGY9ayxnPW47Zm9yKG09XG4wOzQ+bTttKyspeltjPzMmLW06bV09RFtlPj4+MjRdPDwyNF5EW2Y+PjE2JjI1NV08PDE2XkRbZz4+OCYyNTVdPDw4XkRbYiYyNTVdXmRbcCsrXSxoPWUsZT1mLGY9ZyxnPWIsYj1oO3JldHVybiB6fVxuc2pjbC5iaXRBcnJheT17Yml0U2xpY2U6ZnVuY3Rpb24oYSxiLGMpe2E9c2pjbC5iaXRBcnJheS5ZKGEuc2xpY2UoYi8zMiksMzItKGImMzEpKS5zbGljZSgxKTtyZXR1cm4gdm9pZCAwPT09Yz9hOnNqY2wuYml0QXJyYXkuY2xhbXAoYSxjLWIpfSxleHRyYWN0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1NYXRoLmZsb29yKC1iLWMmMzEpO3JldHVybigoYitjLTFeYikmLTMyP2FbYi8zMnwwXTw8MzItZF5hW2IvMzIrMXwwXT4+PmQ6YVtiLzMyfDBdPj4+ZCkmKDE8PGMpLTF9LGNvbmNhdDpmdW5jdGlvbihhLGIpe2lmKDA9PT1hLmxlbmd0aHx8MD09PWIubGVuZ3RoKXJldHVybiBhLmNvbmNhdChiKTt2YXIgYz1hW2EubGVuZ3RoLTFdLGQ9c2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGMpO3JldHVybiAzMj09PWQ/YS5jb25jYXQoYik6c2pjbC5iaXRBcnJheS5ZKGIsZCxjfDAsYS5zbGljZSgwLGEubGVuZ3RoLTEpKX0sYml0TGVuZ3RoOmZ1bmN0aW9uKGEpe3ZhciBiPWEubGVuZ3RoO3JldHVybiAwPT09XG5iPzA6MzIqKGItMSkrc2pjbC5iaXRBcnJheS5nZXRQYXJ0aWFsKGFbYi0xXSl9LGNsYW1wOmZ1bmN0aW9uKGEsYil7aWYoMzIqYS5sZW5ndGg8YilyZXR1cm4gYTthPWEuc2xpY2UoMCxNYXRoLmNlaWwoYi8zMikpO3ZhciBjPWEubGVuZ3RoO2I9YiYzMTswPGMmJmImJihhW2MtMV09c2pjbC5iaXRBcnJheS5wYXJ0aWFsKGIsYVtjLTFdJjIxNDc0ODM2NDg+PmItMSwxKSk7cmV0dXJuIGF9LHBhcnRpYWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiAzMj09PWE/YjooYz9ifDA6Yjw8MzItYSkrMHgxMDAwMDAwMDAwMCphfSxnZXRQYXJ0aWFsOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnJvdW5kKGEvMHgxMDAwMDAwMDAwMCl8fDMyfSxlcXVhbDpmdW5jdGlvbihhLGIpe2lmKHNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpIT09c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYikpcmV0dXJuITE7dmFyIGM9MCxkO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspY3w9YVtkXV5iW2RdO3JldHVybiAwPT09XG5jfSxZOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2U9MDtmb3Iodm9pZCAwPT09ZCYmKGQ9W10pOzMyPD1iO2ItPTMyKWQucHVzaChjKSxjPTA7aWYoMD09PWIpcmV0dXJuIGQuY29uY2F0KGEpO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspZC5wdXNoKGN8YVtlXT4+PmIpLGM9YVtlXTw8MzItYjtlPWEubGVuZ3RoP2FbYS5sZW5ndGgtMV06MDthPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChlKTtkLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGIrYSYzMSwzMjxiK2E/YzpkLnBvcCgpLDEpKTtyZXR1cm4gZH0sUDpmdW5jdGlvbihhLGIpe3JldHVyblthWzBdXmJbMF0sYVsxXV5iWzFdLGFbMl1eYlsyXSxhWzNdXmJbM11dfSxieXRlc3dhcE06ZnVuY3Rpb24oYSl7dmFyIGIsYztmb3IoYj0wO2I8YS5sZW5ndGg7KytiKWM9YVtiXSxhW2JdPWM+Pj4yNHxjPj4+OCYweGZmMDB8KGMmMHhmZjAwKTw8OHxjPDwyNDtyZXR1cm4gYX19O1xuc2pjbC5jb2RlYy51dGY4U3RyaW5nPXtmcm9tQml0czpmdW5jdGlvbihhKXt2YXIgYj1cIlwiLGM9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSksZCxlO2ZvcihkPTA7ZDxjLzg7ZCsrKTA9PT0oZCYzKSYmKGU9YVtkLzRdKSxiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGU+Pj44Pj4+OD4+PjgpLGU8PD04O3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGIpKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe2E9dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGEpKTt2YXIgYj1bXSxjLGQ9MDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWQ9ZDw8OHxhLmNoYXJDb2RlQXQoYyksMz09PShjJjMpJiYoYi5wdXNoKGQpLGQ9MCk7YyYzJiZiLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDgqKGMmMyksZCkpO3JldHVybiBifX07XG5zamNsLmNvZGVjLmhleD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspYis9KChhW2NdfDApKzB4ZjAwMDAwMDAwMDAwKS50b1N0cmluZygxNikuc3Vic3RyKDQpO3JldHVybiBiLnN1YnN0cigwLHNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLzQpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXSxkO2E9YS5yZXBsYWNlKC9cXHN8MHgvZyxcIlwiKTtkPWEubGVuZ3RoO2E9YStcIjAwMDAwMDAwXCI7Zm9yKGI9MDtiPGEubGVuZ3RoO2IrPTgpYy5wdXNoKHBhcnNlSW50KGEuc3Vic3RyKGIsOCksMTYpXjApO3JldHVybiBzamNsLmJpdEFycmF5LmNsYW1wKGMsNCpkKX19O1xuc2pjbC5jb2RlYy5iYXNlNjQ9e1M6XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsZnJvbUJpdHM6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVwiXCIsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaD1zamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtjJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihjPTA7NipkLmxlbmd0aDxoOylkKz1mLmNoYXJBdCgoZ15hW2NdPj4+ZSk+Pj4yNiksNj5lPyhnPWFbY108PDYtZSxlKz0yNixjKyspOihnPDw9NixlLT02KTtmb3IoO2QubGVuZ3RoJjMmJiFiOylkKz1cIj1cIjtyZXR1cm4gZH0sdG9CaXRzOmZ1bmN0aW9uKGEsYil7YT1hLnJlcGxhY2UoL1xcc3w9L2csXCJcIik7dmFyIGM9W10sZCxlPTAsZj1zamNsLmNvZGVjLmJhc2U2NC5TLGc9MCxoO2ImJihmPWYuc3Vic3RyKDAsNjIpK1wiLV9cIik7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyl7aD1mLmluZGV4T2YoYS5jaGFyQXQoZCkpO1xuaWYoMD5oKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwidGhpcyBpc24ndCBiYXNlNjQhXCIpOzI2PGU/KGUtPTI2LGMucHVzaChnXmg+Pj5lKSxnPWg8PDMyLWUpOihlKz02LGdePWg8PDMyLWUpfWUmNTYmJmMucHVzaChzamNsLmJpdEFycmF5LnBhcnRpYWwoZSY1NixnLDEpKTtyZXR1cm4gY319O3NqY2wuY29kZWMuYmFzZTY0dXJsPXtmcm9tQml0czpmdW5jdGlvbihhKXtyZXR1cm4gc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoYSwxLDEpfSx0b0JpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhhLDEpfX07c2pjbC5oYXNoLnNoYTI1Nj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGEyNTYuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGEyNTYpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGEyNTYucHJvdG90eXBlPXtibG9ja1NpemU6NTEyLHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5nPXRoaXMuby5zbGljZSgwKTt0aGlzLmY9W107dGhpcy5jPTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO3ZhciBiLGM9dGhpcy5mPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuZixhKTtiPXRoaXMuYzthPXRoaXMuYz1iK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2lmKDB4MWZmZmZmZmZmZmZmZmY8YSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3ZhciBkPW5ldyBVaW50MzJBcnJheShjKSxlPTA7Zm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoZC5zdWJhcnJheSgxNiplLFxuMTYqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMTYqZSl9ZWxzZSBmb3IoYj01MTIrYi0oNTEyK2ImMHgxZmYpO2I8PWE7Yis9NTEyKXRoaXMubChjLnNwbGljZSgwLDE2KSk7cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLmYsYz10aGlzLmcsYj1zamNsLmJpdEFycmF5LmNvbmNhdChiLFtzamNsLmJpdEFycmF5LnBhcnRpYWwoMSwxKV0pO2ZvcihhPWIubGVuZ3RoKzI7YSYxNTthKyspYi5wdXNoKDApO2IucHVzaChNYXRoLmZsb29yKHRoaXMuYy8weDEwMDAwMDAwMCkpO2ZvcihiLnB1c2godGhpcy5jfDApO2IubGVuZ3RoOyl0aGlzLmwoYi5zcGxpY2UoMCwxNikpO3RoaXMucmVzZXQoKTtyZXR1cm4gY30sbzpbXSxiOltdLEM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGEpe3JldHVybiAweDEwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKXwwfWZvcih2YXIgYj0wLGM9MixkLGU7NjQ+YjtjKyspe2U9ITA7Zm9yKGQ9MjtkKmQ8PWM7ZCsrKWlmKDA9PT1jJWQpe2U9XG4hMTticmVha31lJiYoOD5iJiYodGhpcy5vW2JdPWEoTWF0aC5wb3coYywuNSkpKSx0aGlzLmJbYl09YShNYXRoLnBvdyhjLDEvMykpLGIrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXMuZyxmPXRoaXMuYixnPWVbMF0saD1lWzFdLGs9ZVsyXSxuPWVbM10sbD1lWzRdLG09ZVs1XSxwPWVbNl0sej1lWzddO2ZvcihiPTA7NjQ+YjtiKyspMTY+Yj9jPWFbYl06KGM9YVtiKzEmMTVdLGQ9YVtiKzE0JjE1XSxjPWFbYiYxNV09KGM+Pj43XmM+Pj4xOF5jPj4+M15jPDwyNV5jPDwxNCkrKGQ+Pj4xN15kPj4+MTleZD4+PjEwXmQ8PDE1XmQ8PDEzKSthW2ImMTVdK2FbYis5JjE1XXwwKSxjPWMreisobD4+PjZebD4+PjExXmw+Pj4yNV5sPDwyNl5sPDwyMV5sPDw3KSsocF5sJihtXnApKStmW2JdLHo9cCxwPW0sbT1sLGw9bitjfDAsbj1rLGs9aCxoPWcsZz1jKyhoJmtebiYoaF5rKSkrKGg+Pj4yXmg+Pj4xM15oPj4+MjJeaDw8MzBeaDw8MTleaDw8MTApfDA7ZVswXT1lWzBdK2d8XG4wO2VbMV09ZVsxXStofDA7ZVsyXT1lWzJdK2t8MDtlWzNdPWVbM10rbnwwO2VbNF09ZVs0XStsfDA7ZVs1XT1lWzVdK218MDtlWzZdPWVbNl0rcHwwO2VbN109ZVs3XSt6fDB9fTtzamNsLmhhc2guc2hhNTEyPWZ1bmN0aW9uKGEpe3RoaXMuYlswXXx8dGhpcy5DKCk7YT8odGhpcy5nPWEuZy5zbGljZSgwKSx0aGlzLmY9YS5mLnNsaWNlKDApLHRoaXMuYz1hLmMpOnRoaXMucmVzZXQoKX07c2pjbC5oYXNoLnNoYTUxMi5oYXNoPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgc2pjbC5oYXNoLnNoYTUxMikudXBkYXRlKGEpLmZpbmFsaXplKCl9O1xuc2pjbC5oYXNoLnNoYTUxMi5wcm90b3R5cGU9e2Jsb2NrU2l6ZToxMDI0LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5nPXRoaXMuby5zbGljZSgwKTt0aGlzLmY9W107dGhpcy5jPTA7cmV0dXJuIHRoaXN9LHVwZGF0ZTpmdW5jdGlvbihhKXtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO3ZhciBiLGM9dGhpcy5mPXNqY2wuYml0QXJyYXkuY29uY2F0KHRoaXMuZixhKTtiPXRoaXMuYzthPXRoaXMuYz1iK3NqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpO2lmKDB4MWZmZmZmZmZmZmZmZmY8YSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIkNhbm5vdCBoYXNoIG1vcmUgdGhhbiAyXjUzIC0gMSBiaXRzXCIpO2lmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe3ZhciBkPW5ldyBVaW50MzJBcnJheShjKSxlPTA7Zm9yKGI9MTAyNCtiLSgxMDI0K2ImMTAyMyk7Yjw9YTtiKz0xMDI0KXRoaXMubChkLnN1YmFycmF5KDMyKlxuZSwzMiooZSsxKSkpLGUrPTE7Yy5zcGxpY2UoMCwzMiplKX1lbHNlIGZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoYy5zcGxpY2UoMCwzMikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCs0O2EmMzE7YSsrKWIucHVzaCgwKTtiLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaChNYXRoLmZsb29yKHRoaXMuYy8weDEwMDAwMDAwMCkpO2ZvcihiLnB1c2godGhpcy5jfDApO2IubGVuZ3RoOyl0aGlzLmwoYi5zcGxpY2UoMCwzMikpO3RoaXMucmVzZXQoKTtyZXR1cm4gY30sbzpbXSxpYTpbMTIzNzIyMzIsMTMyODEwODMsOTc2Mjg1OSwxOTE0NjA5LDE1MTA2NzY5LDQwOTA5MTEsNDMwODMzMSw4MjY2MTA1XSxiOltdLGthOlsyNjY2MDE4LDE1Njg5MTY1LDUwNjE0MjMsOTAzNDY4NCxcbjQ3NjQ5ODQsMzgwOTUzLDE2NTg3NzksNzE3NjQ3MiwxOTcxODYsNzM2ODYzOCwxNDk4NzkxNiwxNjc1Nzk4Niw4MDk2MTExLDE0ODAzNjksMTMwNDYzMjUsNjg5MTE1NiwxNTgxMzMzMCw1MTg3MDQzLDkyMjk3NDksMTEzMTIyMjksMjgxODY3NywxMDkzNzQ3NSw0MzI0MzA4LDExMzU1NDEsNjc0MTkzMSwxMTgwOTI5NiwxNjQ1ODA0NywxNTY2NjkxNiwxMTA0Njg1MCw2OTgxNDksMjI5OTk5LDk0NTc3NiwxMzc3NDg0NCwyNTQxODYyLDEyODU2MDQ1LDk4MTA5MTEsMTE0OTQzNjYsNzg0NDUyMCwxNTU3NjgwNiw4NTMzMzA3LDE1Nzk1MDQ0LDQzMzc2NjUsMTYyOTE3MjksNTU1MzcxMiwxNTY4NDEyMCw2NjYyNDE2LDc0MTM4MDIsMTIzMDg5MjAsMTM4MTYwMDgsNDMwMzY5OSw5MzY2NDI1LDEwMTc2NjgwLDEzMTk1ODc1LDQyOTUzNzEsNjU0NjI5MSwxMTcxMjY3NSwxNTcwODkyNCwxNTE5NDU2LDE1NzcyNTMwLDY1Njg0MjgsNjQ5NTc4NCw4NTY4Mjk3LDEzMDA3MTI1LDc0OTIzOTUsMjUxNTM1NixcbjEyNjMyNTgzLDE0NzQwMjU0LDcyNjI1ODQsMTUzNTkzMCwxMzE0NjI3OCwxNjMyMTk2NiwxODUzMjExLDI5NDI3NiwxMzA1MTAyNywxMzIyMTU2NCwxMDUxOTgwLDQwODAzMTAsNjY1MTQzNCwxNDA4ODk0MCw0Njc1NjA3XSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mdW5jdGlvbiBiKGEpe3JldHVybiAweDEwMDAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpJjI1NX1mb3IodmFyIGM9MCxkPTIsZSxmOzgwPmM7ZCsrKXtmPSEwO2ZvcihlPTI7ZSplPD1kO2UrKylpZigwPT09ZCVlKXtmPSExO2JyZWFrfWYmJig4PmMmJih0aGlzLm9bMipjXT1hKE1hdGgucG93KGQsLjUpKSx0aGlzLm9bMipjKzFdPWIoTWF0aC5wb3coZCwuNSkpPDwyNHx0aGlzLmlhW2NdKSx0aGlzLmJbMipjXT1hKE1hdGgucG93KGQsMS8zKSksdGhpcy5iWzIqYysxXT1iKE1hdGgucG93KGQsMS8zKSk8PDI0fHRoaXMua2FbY10sYysrKX19LGw6ZnVuY3Rpb24oYSl7dmFyIGIsXG5jLGQ9dGhpcy5nLGU9dGhpcy5iLGY9ZFswXSxnPWRbMV0saD1kWzJdLGs9ZFszXSxuPWRbNF0sbD1kWzVdLG09ZFs2XSxwPWRbN10sej1kWzhdLEE9ZFs5XSxDPWRbMTBdLEI9ZFsxMV0sRD1kWzEyXSxQPWRbMTNdLGVhPWRbMTRdLFE9ZFsxNV0sdDtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt0PUFycmF5KDE2MCk7Zm9yKHZhciByPTA7MzI+cjtyKyspdFtyXT1hW3JdfWVsc2UgdD1hO3ZhciByPWYsdT1nLEc9aCxFPWssSD1uLEY9bCxWPW0sST1wLHc9eix2PUEsUj1DLEo9QixTPUQsSz1QLFc9ZWEsTD1RO2ZvcihhPTA7ODA+YTthKyspe2lmKDE2PmEpYj10WzIqYV0sYz10WzIqYSsxXTtlbHNle2M9dFsyKihhLTE1KV07dmFyIHE9dFsyKihhLTE1KSsxXTtiPShxPDwzMXxjPj4+MSleKHE8PDI0fGM+Pj44KV5jPj4+Nzt2YXIgeD0oYzw8MzF8cT4+PjEpXihjPDwyNHxxPj4+OCleKGM8PDI1fHE+Pj43KTtjPXRbMiooYS0yKV07dmFyIHk9dFsyKihhLTIpKzFdLFxucT0oeTw8MTN8Yz4+PjE5KV4oYzw8M3x5Pj4+MjkpXmM+Pj42LHk9KGM8PDEzfHk+Pj4xOSleKHk8PDN8Yz4+PjI5KV4oYzw8MjZ8eT4+PjYpLFg9dFsyKihhLTcpXSxZPXRbMiooYS0xNildLE09dFsyKihhLTE2KSsxXTtjPXgrdFsyKihhLTcpKzFdO2I9YitYKyhjPj4+MDx4Pj4+MD8xOjApO2MrPXk7Yis9cSsoYz4+PjA8eT4+PjA/MTowKTtjKz1NO2IrPVkrKGM+Pj4wPE0+Pj4wPzE6MCl9dFsyKmFdPWJ8PTA7dFsyKmErMV09Y3w9MDt2YXIgWD13JlJefncmUyxmYT12JkpefnYmSyx5PXImR15yJkheRyZILGphPXUmRV51JkZeRSZGLFk9KHU8PDR8cj4+PjI4KV4ocjw8MzB8dT4+PjIpXihyPDwyNXx1Pj4+NyksTT0ocjw8NHx1Pj4+MjgpXih1PDwzMHxyPj4+MileKHU8PDI1fHI+Pj43KSxrYT1lWzIqYV0sZ2E9ZVsyKmErMV0scT1MKygodzw8MTh8dj4+PjE0KV4odzw8MTR8dj4+PjE4KV4odjw8MjN8dz4+PjkpKSx4PVcrKCh2PDwxOHx3Pj4+MTQpXih2PDwxNHx3Pj4+MTgpXih3PDxcbjIzfHY+Pj45KSkrKHE+Pj4wPEw+Pj4wPzE6MCkscT1xK2ZhLHg9eCsoWCsocT4+PjA8ZmE+Pj4wPzE6MCkpLHE9cStnYSx4PXgrKGthKyhxPj4+MDxnYT4+PjA/MTowKSkscT1xK2N8MCx4PXgrKGIrKHE+Pj4wPGM+Pj4wPzE6MCkpO2M9TStqYTtiPVkreSsoYz4+PjA8TT4+PjA/MTowKTtXPVM7TD1LO1M9UjtLPUo7Uj13O0o9djt2PUkrcXwwO3c9Vit4Kyh2Pj4+MDxJPj4+MD8xOjApfDA7Vj1IO0k9RjtIPUc7Rj1FO0c9cjtFPXU7dT1xK2N8MDtyPXgrYisodT4+PjA8cT4+PjA/MTowKXwwfWc9ZFsxXT1nK3V8MDtkWzBdPWYrcisoZz4+PjA8dT4+PjA/MTowKXwwO2s9ZFszXT1rK0V8MDtkWzJdPWgrRysoaz4+PjA8RT4+PjA/MTowKXwwO2w9ZFs1XT1sK0Z8MDtkWzRdPW4rSCsobD4+PjA8Rj4+PjA/MTowKXwwO3A9ZFs3XT1wK0l8MDtkWzZdPW0rVisocD4+PjA8ST4+PjA/MTowKXwwO0E9ZFs5XT1BK3Z8MDtkWzhdPXordysoQT4+PjA8dj4+PjA/MTowKXwwO0I9ZFsxMV09QitKfFxuMDtkWzEwXT1DK1IrKEI+Pj4wPEo+Pj4wPzE6MCl8MDtQPWRbMTNdPVArS3wwO2RbMTJdPUQrUysoUD4+PjA8Sz4+PjA/MTowKXwwO1E9ZFsxNV09UStMfDA7ZFsxNF09ZWErVysoUT4+PjA8TD4+PjA/MTowKXwwfX07XG5zamNsLm1vZGUuY2NtPXtuYW1lOlwiY2NtXCIsRjpbXSxsaXN0ZW5Qcm9ncmVzczpmdW5jdGlvbihhKXtzamNsLm1vZGUuY2NtLkYucHVzaChhKX0sdW5MaXN0ZW5Qcm9ncmVzczpmdW5jdGlvbihhKXthPXNqY2wubW9kZS5jY20uRi5pbmRleE9mKGEpOy0xPGEmJnNqY2wubW9kZS5jY20uRi5zcGxpY2UoYSwxKX0sZGE6ZnVuY3Rpb24oYSl7dmFyIGI9c2pjbC5tb2RlLmNjbS5GLnNsaWNlKCksYztmb3IoYz0wO2M8Yi5sZW5ndGg7Yys9MSliW2NdKGEpfSxlbmNyeXB0OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZz1iLnNsaWNlKDApLGg9c2pjbC5iaXRBcnJheSxrPWguYml0TGVuZ3RoKGMpLzgsbj1oLmJpdExlbmd0aChnKS84O2U9ZXx8NjQ7ZD1kfHxbXTtpZig3PmspdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGl2IG11c3QgYmUgYXQgbGVhc3QgNyBieXRlc1wiKTtmb3IoZj0yOzQ+ZiYmbj4+PjgqZjtmKyspO2Y8MTUtayYmKGY9MTUtayk7Yz1oLmNsYW1wKGMsXG44KigxNS1mKSk7Yj1zamNsLm1vZGUuY2NtLlUoYSxiLGMsZCxlLGYpO2c9c2pjbC5tb2RlLmNjbS5WKGEsZyxjLGIsZSxmKTtyZXR1cm4gaC5jb25jYXQoZy5kYXRhLGcudGFnKX0sZGVjcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe2U9ZXx8NjQ7ZD1kfHxbXTt2YXIgZj1zamNsLmJpdEFycmF5LGc9Zi5iaXRMZW5ndGgoYykvOCxoPWYuYml0TGVuZ3RoKGIpLGs9Zi5jbGFtcChiLGgtZSksbj1mLmJpdFNsaWNlKGIsaC1lKSxoPShoLWUpLzg7aWYoNz5nKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGI9Mjs0PmImJmg+Pj44KmI7YisrKTtiPDE1LWcmJihiPTE1LWcpO2M9Zi5jbGFtcChjLDgqKDE1LWIpKTtrPXNqY2wubW9kZS5jY20uVihhLGssYyxuLGUsYik7YT1zamNsLm1vZGUuY2NtLlUoYSxrLmRhdGEsYyxkLGUsYik7aWYoIWYuZXF1YWwoay50YWcsYSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmNvcnJ1cHQoXCJjY206IHRhZyBkb2Vzbid0IG1hdGNoXCIpO1xucmV0dXJuIGsuZGF0YX0sbWE6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPVtdLGg9c2pjbC5iaXRBcnJheSxrPWguUDtkPVtoLnBhcnRpYWwoOCwoYi5sZW5ndGg/NjQ6MCl8ZC0yPDwyfGYtMSldO2Q9aC5jb25jYXQoZCxjKTtkWzNdfD1lO2Q9YS5lbmNyeXB0KGQpO2lmKGIubGVuZ3RoKWZvcihjPWguYml0TGVuZ3RoKGIpLzgsNjUyNzk+PWM/Zz1baC5wYXJ0aWFsKDE2LGMpXToweGZmZmZmZmZmPj1jJiYoZz1oLmNvbmNhdChbaC5wYXJ0aWFsKDE2LDY1NTM0KV0sW2NdKSksZz1oLmNvbmNhdChnLGIpLGI9MDtiPGcubGVuZ3RoO2IrPTQpZD1hLmVuY3J5cHQoayhkLGcuc2xpY2UoYixiKzQpLmNvbmNhdChbMCwwLDBdKSkpO3JldHVybiBkfSxVOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1zamNsLmJpdEFycmF5LGg9Zy5QO2UvPTg7aWYoZSUyfHw0PmV8fDE2PGUpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJjY206IGludmFsaWQgdGFnIGxlbmd0aFwiKTtcbmlmKDB4ZmZmZmZmZmY8ZC5sZW5ndGh8fDB4ZmZmZmZmZmY8Yi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImNjbTogY2FuJ3QgZGVhbCB3aXRoIDRHaUIgb3IgbW9yZSBkYXRhXCIpO2M9c2pjbC5tb2RlLmNjbS5tYShhLGQsYyxlLGcuYml0TGVuZ3RoKGIpLzgsZik7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrPTQpYz1hLmVuY3J5cHQoaChjLGIuc2xpY2UoZCxkKzQpLmNvbmNhdChbMCwwLDBdKSkpO3JldHVybiBnLmNsYW1wKGMsOCplKX0sVjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGcsaD1zamNsLmJpdEFycmF5O2c9aC5QO3ZhciBrPWIubGVuZ3RoLG49aC5iaXRMZW5ndGgoYiksbD1rLzUwLG09bDtjPWguY29uY2F0KFtoLnBhcnRpYWwoOCxmLTEpXSxjKS5jb25jYXQoWzAsMCwwXSkuc2xpY2UoMCw0KTtkPWguYml0U2xpY2UoZyhkLGEuZW5jcnlwdChjKSksMCxlKTtpZighaylyZXR1cm57dGFnOmQsZGF0YTpbXX07Zm9yKGc9MDtnPGs7Zys9NClnPmwmJihzamNsLm1vZGUuY2NtLmRhKGcvXG5rKSxsKz1tKSxjWzNdKyssZT1hLmVuY3J5cHQoYyksYltnXV49ZVswXSxiW2crMV1ePWVbMV0sYltnKzJdXj1lWzJdLGJbZyszXV49ZVszXTtyZXR1cm57dGFnOmQsZGF0YTpoLmNsYW1wKGIsbil9fX07c2pjbC5taXNjLmhtYWM9ZnVuY3Rpb24oYSxiKXt0aGlzLlc9Yj1ifHxzamNsLmhhc2guc2hhMjU2O3ZhciBjPVtbXSxbXV0sZCxlPWIucHJvdG90eXBlLmJsb2NrU2l6ZS8zMjt0aGlzLkI9W25ldyBiLG5ldyBiXTthLmxlbmd0aD5lJiYoYT1iLmhhc2goYSkpO2ZvcihkPTA7ZDxlO2QrKyljWzBdW2RdPWFbZF1eOTA5NTIyNDg2LGNbMV1bZF09YVtkXV4xNTQ5NTU2ODI4O3RoaXMuQlswXS51cGRhdGUoY1swXSk7dGhpcy5CWzFdLnVwZGF0ZShjWzFdKTt0aGlzLk89bmV3IGIodGhpcy5CWzBdKX07XG5zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZW5jcnlwdD1zamNsLm1pc2MuaG1hYy5wcm90b3R5cGUubWFjPWZ1bmN0aW9uKGEpe2lmKHRoaXMuWil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImVuY3J5cHQgb24gYWxyZWFkeSB1cGRhdGVkIGhtYWMgY2FsbGVkIVwiKTt0aGlzLnVwZGF0ZShhKTtyZXR1cm4gdGhpcy5kaWdlc3QoYSl9O3NqY2wubWlzYy5obWFjLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuTz1uZXcgdGhpcy5XKHRoaXMuQlswXSk7dGhpcy5aPSExfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEpe3RoaXMuWj0hMDt0aGlzLk8udXBkYXRlKGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5PLmZpbmFsaXplKCksYT0obmV3IHRoaXMuVyh0aGlzLkJbMV0pKS51cGRhdGUoYSkuZmluYWxpemUoKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGF9O1xuc2pjbC5taXNjLnBia2RmMj1mdW5jdGlvbihhLGIsYyxkLGUpe2M9Y3x8MUU0O2lmKDA+ZHx8MD5jKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiaW52YWxpZCBwYXJhbXMgdG8gcGJrZGYyXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYSYmKGE9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhhKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtlPWV8fHNqY2wubWlzYy5obWFjO2E9bmV3IGUoYSk7dmFyIGYsZyxoLGssbj1bXSxsPXNqY2wuYml0QXJyYXk7Zm9yKGs9MTszMipuLmxlbmd0aDwoZHx8MSk7aysrKXtlPWY9YS5lbmNyeXB0KGwuY29uY2F0KGIsW2tdKSk7Zm9yKGc9MTtnPGM7ZysrKWZvcihmPWEuZW5jcnlwdChmKSxoPTA7aDxmLmxlbmd0aDtoKyspZVtoXV49ZltoXTtuPW4uY29uY2F0KGUpfWQmJihuPWwuY2xhbXAobixkKSk7cmV0dXJuIG59O1xuc2pjbC5wcm5nPWZ1bmN0aW9uKGEpe3RoaXMuaD1bbmV3IHNqY2wuaGFzaC5zaGEyNTZdO3RoaXMucz1bMF07dGhpcy5OPTA7dGhpcy5HPXt9O3RoaXMuTT0wO3RoaXMuVD17fTt0aGlzLlg9dGhpcy5pPXRoaXMudT10aGlzLmZhPTA7dGhpcy5iPVswLDAsMCwwLDAsMCwwLDBdO3RoaXMubT1bMCwwLDAsMF07dGhpcy5LPXZvaWQgMDt0aGlzLkw9YTt0aGlzLkQ9ITE7dGhpcy5KPXtwcm9ncmVzczp7fSxzZWVkZWQ6e319O3RoaXMuQT10aGlzLmVhPTA7dGhpcy5IPTE7dGhpcy5JPTI7dGhpcy5hYT0weDEwMDAwO3RoaXMuUj1bMCw0OCw2NCw5NiwxMjgsMTkyLDB4MTAwLDM4NCw1MTIsNzY4LDEwMjRdO3RoaXMuYmE9M0U0O3RoaXMuJD04MH07XG5zamNsLnBybmcucHJvdG90eXBlPXtyYW5kb21Xb3JkczpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGQ7ZD10aGlzLmlzUmVhZHkoYik7dmFyIGU7aWYoZD09PXRoaXMuQSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24ubm90UmVhZHkoXCJnZW5lcmF0b3IgaXNuJ3Qgc2VlZGVkXCIpO2lmKGQmdGhpcy5JKXtkPSEoZCZ0aGlzLkgpO2U9W107dmFyIGY9MCxnO3RoaXMuWD1lWzBdPShuZXcgRGF0ZSkudmFsdWVPZigpK3RoaXMuYmE7Zm9yKGc9MDsxNj5nO2crKyllLnB1c2goMHgxMDAwMDAwMDAqTWF0aC5yYW5kb20oKXwwKTtmb3IoZz0wO2c8dGhpcy5oLmxlbmd0aCYmKGU9ZS5jb25jYXQodGhpcy5oW2ddLmZpbmFsaXplKCkpLGYrPXRoaXMuc1tnXSx0aGlzLnNbZ109MCxkfHwhKHRoaXMuTiYxPDxnKSk7ZysrKTt0aGlzLk4+PTE8PHRoaXMuaC5sZW5ndGgmJih0aGlzLmgucHVzaChuZXcgc2pjbC5oYXNoLnNoYTI1NiksdGhpcy5zLnB1c2goMCkpO3RoaXMuaS09ZjtmPnRoaXMudSYmKHRoaXMudT1cbmYpO3RoaXMuTisrO3RoaXMuYj1zamNsLmhhc2guc2hhMjU2Lmhhc2godGhpcy5iLmNvbmNhdChlKSk7dGhpcy5LPW5ldyBzamNsLmNpcGhlci5hZXModGhpcy5iKTtmb3IoZD0wOzQ+ZCYmKHRoaXMubVtkXT10aGlzLm1bZF0rMXwwLCF0aGlzLm1bZF0pO2QrKyk7fWZvcihkPTA7ZDxhO2QrPTQpMD09PShkKzEpJXRoaXMuYWEmJmJhKHRoaXMpLGU9Tih0aGlzKSxjLnB1c2goZVswXSxlWzFdLGVbMl0sZVszXSk7YmEodGhpcyk7cmV0dXJuIGMuc2xpY2UoMCxhKX0sc2V0RGVmYXVsdFBhcmFub2lhOmZ1bmN0aW9uKGEsYil7aWYoMD09PWEmJlwiU2V0dGluZyBwYXJhbm9pYT0wIHdpbGwgcnVpbiB5b3VyIHNlY3VyaXR5OyB1c2UgaXQgb25seSBmb3IgdGVzdGluZ1wiIT09Yil0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIik7dGhpcy5MPWF9LGFkZEVudHJvcHk6ZnVuY3Rpb24oYSxcbmIsYyl7Yz1jfHxcInVzZXJcIjt2YXIgZCxlLGY9KG5ldyBEYXRlKS52YWx1ZU9mKCksZz10aGlzLkdbY10saD10aGlzLmlzUmVhZHkoKSxrPTA7ZD10aGlzLlRbY107dm9pZCAwPT09ZCYmKGQ9dGhpcy5UW2NdPXRoaXMuZmErKyk7dm9pZCAwPT09ZyYmKGc9dGhpcy5HW2NdPTApO3RoaXMuR1tjXT0odGhpcy5HW2NdKzEpJXRoaXMuaC5sZW5ndGg7c3dpdGNoKHR5cGVvZiBhKXtjYXNlIFwibnVtYmVyXCI6dm9pZCAwPT09YiYmKGI9MSk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywxLGIsZiwxLGF8MF0pO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKTtpZihcIltvYmplY3QgVWludDMyQXJyYXldXCI9PT1jKXtlPVtdO2ZvcihjPTA7YzxhLmxlbmd0aDtjKyspZS5wdXNoKGFbY10pO2E9ZX1lbHNlIGZvcihcIltvYmplY3QgQXJyYXldXCIhPT1jJiYoaz0xKSxjPTA7YzxhLmxlbmd0aCYmIWs7YysrKVwibnVtYmVyXCIhPT10eXBlb2YgYVtjXSYmXG4oaz0xKTtpZighayl7aWYodm9pZCAwPT09Yilmb3IoYz1iPTA7YzxhLmxlbmd0aDtjKyspZm9yKGU9YVtjXTswPGU7KWIrKyxlPWU+Pj4xO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMixiLGYsYS5sZW5ndGhdLmNvbmNhdChhKSl9YnJlYWs7Y2FzZSBcInN0cmluZ1wiOnZvaWQgMD09PWImJihiPWEubGVuZ3RoKTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDMsYixmLGEubGVuZ3RoXSk7dGhpcy5oW2ddLnVwZGF0ZShhKTticmVhaztkZWZhdWx0Oms9MX1pZihrKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJyYW5kb206IGFkZEVudHJvcHkgb25seSBzdXBwb3J0cyBudW1iZXIsIGFycmF5IG9mIG51bWJlcnMgb3Igc3RyaW5nXCIpO3RoaXMuc1tnXSs9Yjt0aGlzLmkrPWI7aD09PXRoaXMuQSYmKHRoaXMuaXNSZWFkeSgpIT09dGhpcy5BJiZjYShcInNlZWRlZFwiLE1hdGgubWF4KHRoaXMudSx0aGlzLmkpKSxjYShcInByb2dyZXNzXCIsdGhpcy5nZXRQcm9ncmVzcygpKSl9LFxuaXNSZWFkeTpmdW5jdGlvbihhKXthPXRoaXMuUlt2b2lkIDAhPT1hP2E6dGhpcy5MXTtyZXR1cm4gdGhpcy51JiZ0aGlzLnU+PWE/dGhpcy5zWzBdPnRoaXMuJCYmKG5ldyBEYXRlKS52YWx1ZU9mKCk+dGhpcy5YP3RoaXMuSXx0aGlzLkg6dGhpcy5IOnRoaXMuaT49YT90aGlzLkl8dGhpcy5BOnRoaXMuQX0sZ2V0UHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT10aGlzLlJbYT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudT49YT8xOnRoaXMuaT5hPzE6dGhpcy5pL2F9LHN0YXJ0Q29sbGVjdG9yczpmdW5jdGlvbigpe2lmKCF0aGlzLkQpe3RoaXMuYT17bG9hZFRpbWVDb2xsZWN0b3I6Tyh0aGlzLHRoaXMubGEpLG1vdXNlQ29sbGVjdG9yOk8odGhpcyx0aGlzLm5hKSxrZXlib2FyZENvbGxlY3RvcjpPKHRoaXMsdGhpcy5qYSksYWNjZWxlcm9tZXRlckNvbGxlY3RvcjpPKHRoaXMsdGhpcy5jYSksdG91Y2hDb2xsZWN0b3I6Tyh0aGlzLHRoaXMucGEpfTtpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcil3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIixcbnRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0aGlzLmEubW91c2VDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZGV2aWNlbW90aW9uXCIsdGhpcy5hLmFjY2VsZXJvbWV0ZXJDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsdGhpcy5hLnRvdWNoQ29sbGVjdG9yLCExKTtlbHNlIGlmKGRvY3VtZW50LmF0dGFjaEV2ZW50KWRvY3VtZW50LmF0dGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yKSxkb2N1bWVudC5hdHRhY2hFdmVudChcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yKTtlbHNlIHRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjYW4ndCBhdHRhY2ggZXZlbnRcIik7XG50aGlzLkQ9ITB9fSxzdG9wQ29sbGVjdG9yczpmdW5jdGlvbigpe3RoaXMuRCYmKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyPyh3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSkpOmRvY3VtZW50LmRldGFjaEV2ZW50JiYoZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJvbmxvYWRcIix0aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25tb3VzZW1vdmVcIixcbnRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuZGV0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvcikpLHRoaXMuRD0hMSl9LGFkZEV2ZW50TGlzdGVuZXI6ZnVuY3Rpb24oYSxiKXt0aGlzLkpbYV1bdGhpcy5lYSsrXT1ifSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMuSlthXSxmPVtdO2ZvcihkIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShkKSYmZVtkXT09PWImJmYucHVzaChkKTtmb3IoYz0wO2M8Zi5sZW5ndGg7YysrKWQ9ZltjXSxkZWxldGUgZVtkXX0samE6ZnVuY3Rpb24oKXtUKHRoaXMsMSl9LG5hOmZ1bmN0aW9uKGEpe3ZhciBiLGM7dHJ5e2I9YS54fHxhLmNsaWVudFh8fGEub2Zmc2V0WHx8MCxjPWEueXx8YS5jbGllbnRZfHxhLm9mZnNldFl8fDB9Y2F0Y2goZCl7Yz1iPTB9MCE9YiYmMCE9YyYmdGhpcy5hZGRFbnRyb3B5KFtiLGNdLDIsXCJtb3VzZVwiKTtUKHRoaXMsMCl9LHBhOmZ1bmN0aW9uKGEpe2E9XG5hLnRvdWNoZXNbMF18fGEuY2hhbmdlZFRvdWNoZXNbMF07dGhpcy5hZGRFbnRyb3B5KFthLnBhZ2VYfHxhLmNsaWVudFgsYS5wYWdlWXx8YS5jbGllbnRZXSwxLFwidG91Y2hcIik7VCh0aGlzLDApfSxsYTpmdW5jdGlvbigpe1QodGhpcywyKX0sY2E6ZnVuY3Rpb24oYSl7YT1hLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkueHx8YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnl8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS56O2lmKHdpbmRvdy5vcmllbnRhdGlvbil7dmFyIGI9d2luZG93Lm9yaWVudGF0aW9uO1wibnVtYmVyXCI9PT10eXBlb2YgYiYmdGhpcy5hZGRFbnRyb3B5KGIsMSxcImFjY2VsZXJvbWV0ZXJcIil9YSYmdGhpcy5hZGRFbnRyb3B5KGEsMixcImFjY2VsZXJvbWV0ZXJcIik7VCh0aGlzLDApfX07XG5mdW5jdGlvbiBjYShhLGIpe3ZhciBjLGQ9c2pjbC5yYW5kb20uSlthXSxlPVtdO2ZvcihjIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShjKSYmZS5wdXNoKGRbY10pO2ZvcihjPTA7YzxlLmxlbmd0aDtjKyspZVtjXShiKX1mdW5jdGlvbiBUKGEsYil7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wZXJmb3JtYW5jZSYmXCJmdW5jdGlvblwiPT09dHlwZW9mIHdpbmRvdy5wZXJmb3JtYW5jZS5ub3c/YS5hZGRFbnRyb3B5KHdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKSxiLFwibG9hZHRpbWVcIik6YS5hZGRFbnRyb3B5KChuZXcgRGF0ZSkudmFsdWVPZigpLGIsXCJsb2FkdGltZVwiKX1mdW5jdGlvbiBiYShhKXthLmI9TihhKS5jb25jYXQoTihhKSk7YS5LPW5ldyBzamNsLmNpcGhlci5hZXMoYS5iKX1mdW5jdGlvbiBOKGEpe2Zvcih2YXIgYj0wOzQ+YiYmKGEubVtiXT1hLm1bYl0rMXwwLCFhLm1bYl0pO2IrKyk7cmV0dXJuIGEuSy5lbmNyeXB0KGEubSl9XG5mdW5jdGlvbiBPKGEsYil7cmV0dXJuIGZ1bmN0aW9uKCl7Yi5hcHBseShhLGFyZ3VtZW50cyl9fXNqY2wucmFuZG9tPW5ldyBzamNsLnBybmcoNik7XG5hOnRyeXt2YXIgVSxkYSxaLGhhO2lmKGhhPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyl7dmFyIGlhO3RyeXtpYT1yZXF1aXJlKFwiY3J5cHRvXCIpfWNhdGNoKGEpe2lhPW51bGx9aGE9ZGE9aWF9aWYoaGEmJmRhLnJhbmRvbUJ5dGVzKVU9ZGEucmFuZG9tQnl0ZXMoMTI4KSxVPW5ldyBVaW50MzJBcnJheSgobmV3IFVpbnQ4QXJyYXkoVSkpLmJ1ZmZlciksc2pjbC5yYW5kb20uYWRkRW50cm9weShVLDEwMjQsXCJjcnlwdG9bJ3JhbmRvbUJ5dGVzJ11cIik7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7Wj1uZXcgVWludDMyQXJyYXkoMzIpO2lmKHdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO2Vsc2UgaWYod2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoWik7XG5lbHNlIGJyZWFrIGE7c2pjbC5yYW5kb20uYWRkRW50cm9weShaLDEwMjQsXCJjcnlwdG9bJ2dldFJhbmRvbVZhbHVlcyddXCIpfX1jYXRjaChhKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmNvbnNvbGUmJihjb25zb2xlLmxvZyhcIlRoZXJlIHdhcyBhbiBlcnJvciBjb2xsZWN0aW5nIGVudHJvcHkgZnJvbSB0aGUgYnJvd3NlcjpcIiksY29uc29sZS5sb2coYSkpfVxuc2pjbC5qc29uPXtkZWZhdWx0czp7djoxLGl0ZXI6MUU0LGtzOjEyOCx0czo2NCxtb2RlOlwiY2NtXCIsYWRhdGE6XCJcIixjaXBoZXI6XCJhZXNcIn0saGE6ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTtkPWR8fHt9O3ZhciBlPXNqY2wuanNvbixmPWUuaih7aXY6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoNCwwKX0sZS5kZWZhdWx0cyksZztlLmooZixjKTtjPWYuYWRhdGE7XCJzdHJpbmdcIj09PXR5cGVvZiBmLnNhbHQmJihmLnNhbHQ9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGYuc2FsdCkpO1wic3RyaW5nXCI9PT10eXBlb2YgZi5pdiYmKGYuaXY9c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGYuaXYpKTtpZighc2pjbC5tb2RlW2YubW9kZV18fCFzamNsLmNpcGhlcltmLmNpcGhlcl18fFwic3RyaW5nXCI9PT10eXBlb2YgYSYmMTAwPj1mLml0ZXJ8fDY0IT09Zi50cyYmOTYhPT1mLnRzJiYxMjghPT1mLnRzfHwxMjghPT1mLmtzJiYxOTIhPT1mLmtzJiYweDEwMCE9PWYua3N8fDI+Zi5pdi5sZW5ndGh8fFxuNDxmLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZW5jcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsZiksYT1nLmtleS5zbGljZSgwLGYua3MvMzIpLGYuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5wdWJsaWNLZXkmJihnPWEua2VtKCksZi5rZW10YWc9Zy50YWcsYT1nLmtleS5zbGljZSgwLGYua3MvMzIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGImJihiPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYikpO1wic3RyaW5nXCI9PT10eXBlb2YgYyYmKGYuYWRhdGE9Yz1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGMpKTtnPW5ldyBzamNsLmNpcGhlcltmLmNpcGhlcl0oYSk7ZS5qKGQsZik7ZC5rZXk9YTtmLmN0PVwiY2NtXCI9PT1mLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZcbmIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9zamNsLmFycmF5QnVmZmVyLmNjbS5lbmNyeXB0KGcsYixmLml2LGMsZi50cyk6c2pjbC5tb2RlW2YubW9kZV0uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpO3JldHVybiBmfSxlbmNyeXB0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXNqY2wuanNvbixmPWUuaGEuYXBwbHkoZSxhcmd1bWVudHMpO3JldHVybiBlLmVuY29kZShmKX0sZ2E6ZnVuY3Rpb24oYSxiLGMsZCl7Yz1jfHx7fTtkPWR8fHt9O3ZhciBlPXNqY2wuanNvbjtiPWUuaihlLmooZS5qKHt9LGUuZGVmYXVsdHMpLGIpLGMsITApO3ZhciBmLGc7Zj1iLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgYi5zYWx0JiYoYi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGIuaXYmJihiLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhiLml2KSk7aWYoIXNqY2wubW9kZVtiLm1vZGVdfHwhc2pjbC5jaXBoZXJbYi5jaXBoZXJdfHxcInN0cmluZ1wiPT09XG50eXBlb2YgYSYmMTAwPj1iLml0ZXJ8fDY0IT09Yi50cyYmOTYhPT1iLnRzJiYxMjghPT1iLnRzfHwxMjghPT1iLmtzJiYxOTIhPT1iLmtzJiYweDEwMCE9PWIua3N8fCFiLml2fHwyPmIuaXYubGVuZ3RofHw0PGIuaXYubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNyeXB0OiBpbnZhbGlkIHBhcmFtZXRlcnNcIik7XCJzdHJpbmdcIj09PXR5cGVvZiBhPyhnPXNqY2wubWlzYy5jYWNoZWRQYmtkZjIoYSxiKSxhPWcua2V5LnNsaWNlKDAsYi5rcy8zMiksYi5zYWx0PWcuc2FsdCk6c2pjbC5lY2MmJmEgaW5zdGFuY2VvZiBzamNsLmVjYy5lbEdhbWFsLnNlY3JldEtleSYmKGE9YS51bmtlbShzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5rZW10YWcpKS5zbGljZSgwLGIua3MvMzIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYmJihmPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoZikpO2c9bmV3IHNqY2wuY2lwaGVyW2IuY2lwaGVyXShhKTtmPVwiY2NtXCI9PT1cbmIubW9kZSYmc2pjbC5hcnJheUJ1ZmZlciYmc2pjbC5hcnJheUJ1ZmZlci5jY20mJmIuY3QgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9zamNsLmFycmF5QnVmZmVyLmNjbS5kZWNyeXB0KGcsYi5jdCxiLml2LGIudGFnLGYsYi50cyk6c2pjbC5tb2RlW2IubW9kZV0uZGVjcnlwdChnLGIuY3QsYi5pdixmLGIudHMpO2UuaihkLGIpO2Qua2V5PWE7cmV0dXJuIDE9PT1jLnJhdz9mOnNqY2wuY29kZWMudXRmOFN0cmluZy5mcm9tQml0cyhmKX0sZGVjcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb247cmV0dXJuIGUuZ2EoYSxlLmRlY29kZShiKSxjLGQpfSxlbmNvZGU6ZnVuY3Rpb24oYSl7dmFyIGIsYz1cIntcIixkPVwiXCI7Zm9yKGIgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGIpKXtpZighYi5tYXRjaCgvXlthLXowLTldKyQvaSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY29kZTogaW52YWxpZCBwcm9wZXJ0eSBuYW1lXCIpO2MrPWQrJ1wiJytcbmIrJ1wiOic7ZD1cIixcIjtzd2l0Y2godHlwZW9mIGFbYl0pe2Nhc2UgXCJudW1iZXJcIjpjYXNlIFwiYm9vbGVhblwiOmMrPWFbYl07YnJlYWs7Y2FzZSBcInN0cmluZ1wiOmMrPSdcIicrZXNjYXBlKGFbYl0pKydcIic7YnJlYWs7Y2FzZSBcIm9iamVjdFwiOmMrPSdcIicrc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoYVtiXSwwKSsnXCInO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmJ1ZyhcImpzb24gZW5jb2RlOiB1bnN1cHBvcnRlZCB0eXBlXCIpO319cmV0dXJuIGMrXCJ9XCJ9LGRlY29kZTpmdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzL2csXCJcIik7aWYoIWEubWF0Y2goL15cXHsuKlxcfSQvKSl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjb2RlOiB0aGlzIGlzbid0IGpzb24hXCIpO2E9YS5yZXBsYWNlKC9eXFx7fFxcfSQvZyxcIlwiKS5zcGxpdCgvLC8pO3ZhciBiPXt9LGMsZDtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKXtpZighKGQ9YVtjXS5tYXRjaCgvXlxccyooPzooW1wiJ10/KShbYS16XVthLXowLTldKilcXDEpXFxzKjpcXHMqKD86KC0/XFxkKyl8XCIoW2EtejAtOStcXC8lKl8uQD1cXC1dKilcInwodHJ1ZXxmYWxzZSkpJC9pKSkpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTtcbm51bGwhPWRbM10/YltkWzJdXT1wYXJzZUludChkWzNdLDEwKTpudWxsIT1kWzRdP2JbZFsyXV09ZFsyXS5tYXRjaCgvXihjdHxhZGF0YXxzYWx0fGl2KSQvKT9zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoZFs0XSk6dW5lc2NhcGUoZFs0XSk6bnVsbCE9ZFs1XSYmKGJbZFsyXV09XCJ0cnVlXCI9PT1kWzVdKX1yZXR1cm4gYn0sajpmdW5jdGlvbihhLGIsYyl7dm9pZCAwPT09YSYmKGE9e30pO2lmKHZvaWQgMD09PWIpcmV0dXJuIGE7Zm9yKHZhciBkIGluIGIpaWYoYi5oYXNPd25Qcm9wZXJ0eShkKSl7aWYoYyYmdm9pZCAwIT09YVtkXSYmYVtkXSE9PWJbZF0pdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJyZXF1aXJlZCBwYXJhbWV0ZXIgb3ZlcnJpZGRlblwiKTthW2RdPWJbZF19cmV0dXJuIGF9LHJhOmZ1bmN0aW9uKGEsYil7dmFyIGM9e30sZDtmb3IoZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJmFbZF0hPT1iW2RdJiYoY1tkXT1hW2RdKTtyZXR1cm4gY30scWE6ZnVuY3Rpb24oYSxcbmIpe3ZhciBjPXt9LGQ7Zm9yKGQ9MDtkPGIubGVuZ3RoO2QrKyl2b2lkIDAhPT1hW2JbZF1dJiYoY1tiW2RdXT1hW2JbZF1dKTtyZXR1cm4gY319O3NqY2wuZW5jcnlwdD1zamNsLmpzb24uZW5jcnlwdDtzamNsLmRlY3J5cHQ9c2pjbC5qc29uLmRlY3J5cHQ7c2pjbC5taXNjLm9hPXt9O3NqY2wubWlzYy5jYWNoZWRQYmtkZjI9ZnVuY3Rpb24oYSxiKXt2YXIgYz1zamNsLm1pc2Mub2EsZDtiPWJ8fHt9O2Q9Yi5pdGVyfHwxRTM7Yz1jW2FdPWNbYV18fHt9O2Q9Y1tkXT1jW2RdfHx7Zmlyc3RTYWx0OmIuc2FsdCYmYi5zYWx0Lmxlbmd0aD9iLnNhbHQuc2xpY2UoMCk6c2pjbC5yYW5kb20ucmFuZG9tV29yZHMoMiwwKX07Yz12b2lkIDA9PT1iLnNhbHQ/ZC5maXJzdFNhbHQ6Yi5zYWx0O2RbY109ZFtjXXx8c2pjbC5taXNjLnBia2RmMihhLGMsYi5pdGVyKTtyZXR1cm57a2V5OmRbY10uc2xpY2UoMCksc2FsdDpjLnNsaWNlKDApfX07XG5cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMmJihtb2R1bGUuZXhwb3J0cz1zamNsKTtcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gc2pjbH0pO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcImV2ZW50c1wiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJBY3Rpb25NZXNzYWdlIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1hY3Rpb24tbWVzc2FnZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcblxuZGVjbGFyZSBsZXQgc2VsZjogV29ya2VyO1xuXG5leHBvcnQgY29uc3QgZXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4vKipcbiAqIFVwZGF0ZSBmaWxlIGluIHdvcmtlcnMgYW5kIHByb3ZpZGUgbW9kaWZpY2F0aW9ucyB0byB0aGUgbWFpbiB0aHJlYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBhcmdzXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBkYXRlRmlsZSA9IChsdWZpRmlsZTogTHVmaUZpbGUsIGFyZ3M6IFBhcnRpYWw8THVmaUZpbGU+KSA9PiB7XG4gIE9iamVjdC5hc3NpZ24obHVmaUZpbGUsIGFyZ3MpO1xuXG4gIGlmICh0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHtcbiAgICAgIGV2ZW50OiBFVkVOVC5GSUxFX1VQREFURUQsXG4gICAgICBsdWZpRmlsZSxcbiAgICB9IGFzIFdvcmtlckV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiBsdWZpRmlsZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kRmlsZUVycm9yID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgZXJyb3I6IEVycm9yKSA9PiB7XG4gIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgdXBsb2FkU3RhdHVzOiBVUExPQURfU1RBVFVTLkZBSUxFRCB9KTtcblxuICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0gYXMgV29ya2VyRXZlbnQpO1xufTtcblxuLyoqXG4gKiBJbml0IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggY2hpbGQgd29ya2VyJ3Mgb25tZXNzYWdlIGV2ZW50LlxuICovXG5leHBvcnQgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULlNPQ0tFVF9PUEVORUQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1dvcmtlckFjdGlvbk1lc3NhZ2UgPSAoXG4gIC8vIGRlbm8tbGludC1pZ25vcmUgbm8tZXhwbGljaXQtYW55XG4gIG1lc3NhZ2U6IGFueSxcbik6IG1lc3NhZ2UgaXMgV29ya2VyQWN0aW9uTWVzc2FnZSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIG1lc3NhZ2UgPT09IFwib2JqZWN0XCIgJiZcbiAgICBtZXNzYWdlICE9PSBudWxsICYmXG4gICAgXCJhY3Rpb25cIiBpbiBtZXNzYWdlICYmXG4gICAgT2JqZWN0LnZhbHVlcyhXT1JLRVJfQUNUSU9OKS5pbmNsdWRlcyhtZXNzYWdlLmFjdGlvbilcbiAgKTtcbn07XG4iLCAiY29uc3QgZGVmYXVsdEVycm9yQ29uZmlnID0ge1xyXG4gICAgd2l0aFN0YWNrVHJhY2U6IGZhbHNlLFxyXG59O1xyXG4vLyBDdXN0b20gZXJyb3Igb2JqZWN0XHJcbi8vIENvbnRleHQgLyBkaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vc3VwZXJtYWNyby9uZXZlcnRocm93L3B1bGwvMjE1XHJcbmNvbnN0IGNyZWF0ZU5ldmVyVGhyb3dFcnJvciA9IChtZXNzYWdlLCByZXN1bHQsIGNvbmZpZyA9IGRlZmF1bHRFcnJvckNvbmZpZykgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHJlc3VsdC5pc09rKClcclxuICAgICAgICA/IHsgdHlwZTogJ09rJywgdmFsdWU6IHJlc3VsdC52YWx1ZSB9XHJcbiAgICAgICAgOiB7IHR5cGU6ICdFcnInLCB2YWx1ZTogcmVzdWx0LmVycm9yIH07XHJcbiAgICBjb25zdCBtYXliZVN0YWNrID0gY29uZmlnLndpdGhTdGFja1RyYWNlID8gbmV3IEVycm9yKCkuc3RhY2sgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICBzdGFjazogbWF5YmVTdGFjayxcclxuICAgIH07XHJcbn07XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXHJcblxyXG5cclxuZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlmIChnW25dKSB7IGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IGlmIChmKSBpW25dID0gZihpW25dKTsgfSB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG50eXBlb2YgU3VwcHJlc3NlZEVycm9yID09PSBcImZ1bmN0aW9uXCIgPyBTdXBwcmVzc2VkRXJyb3IgOiBmdW5jdGlvbiAoZXJyb3IsIHN1cHByZXNzZWQsIG1lc3NhZ2UpIHtcclxuICAgIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcclxufTtcblxuY2xhc3MgUmVzdWx0QXN5bmMge1xyXG4gICAgY29uc3RydWN0b3IocmVzKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IHJlcztcclxuICAgIH1cclxuICAgIHN0YXRpYyBmcm9tU2FmZVByb21pc2UocHJvbWlzZSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlLnRoZW4oKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21Qcm9taXNlKHByb21pc2UsIGVycm9yRm4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9taXNlID0gcHJvbWlzZVxyXG4gICAgICAgICAgICAudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbmV3IEVycihlcnJvckZuKGUpKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuZXdQcm9taXNlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBzdGF0aWMgZnJvbVRocm93YWJsZShmbiwgZXJyb3JGbikge1xyXG4gICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKCgoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZm4oLi4uYXJncykpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoZXJyb3JGbiA/IGVycm9yRm4oZXJyb3IpIDogZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSkoKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lKGFzeW5jUmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0QXN5bmNMaXN0KGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY29tYmluZVdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzKGFzeW5jUmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2soeWllbGQgZihyZXMudmFsdWUpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgYW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3UmVzID0geWllbGQgZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAobmV3UmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKG5ld1Jlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRlZSBkb2VzIG5vdCBjYXJlIGFib3V0IHRoZSBlcnJvclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgbWFwRXJyKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNPaygpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIoeWllbGQgZihyZXMuZXJyb3IpKTtcclxuICAgICAgICB9KSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihyZXMuZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZihyZXMudmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3VmFsdWUgaW5zdGFuY2VvZiBSZXN1bHRBc3luYyA/IG5ld1ZhbHVlLl9wcm9taXNlIDogbmV3VmFsdWU7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLm1hdGNoKG9rLCBfZXJyKSk7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMudW53cmFwT3IodCkpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gOS4wLjAuXHJcbiAgICAgKlxyXG4gICAgICogWW91IGNhbiB1c2UgYHNhZmVUcnlgIHdpdGhvdXQgdGhpcyBtZXRob2QuXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHlwZXNjcmlwdFxyXG4gICAgICogc2FmZVRyeShhc3luYyBmdW5jdGlvbiogKCkge1xyXG4gICAgICogICBjb25zdCBva1ZhbHVlID0geWllbGQqIHlvdXJSZXN1bHRcclxuICAgICAqIH0pXHJcbiAgICAgKiBgYGBcclxuICAgICAqIEVtdWxhdGVzIFJ1c3QncyBgP2Agb3BlcmF0b3IgaW4gYHNhZmVUcnlgJ3MgYm9keS4gU2VlIGFsc28gYHNhZmVUcnlgLlxyXG4gICAgICovXHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIHNhZmVVbndyYXBfMSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQoeWllbGQgX19hd2FpdCh5aWVsZCogX19hc3luY0RlbGVnYXRvcihfX2FzeW5jVmFsdWVzKHlpZWxkIF9fYXdhaXQodGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy5zYWZlVW53cmFwKCkpKSkpKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyBNYWtlcyBSZXN1bHRBc3luYyBpbXBsZW1lbnQgUHJvbWlzZUxpa2U8UmVzdWx0PlxyXG4gICAgdGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlLnRoZW4oc3VjY2Vzc0NhbGxiYWNrLCBmYWlsdXJlQ2FsbGJhY2spO1xyXG4gICAgfVxyXG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKiBfYSgpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgICAgIHlpZWxkIHlpZWxkIF9fYXdhaXQoZXJyQXN5bmMocmVzdWx0LmVycm9yKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgICAgIHJldHVybiB5aWVsZCBfX2F3YWl0KHJlc3VsdC52YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuY29uc3Qgb2tBc3luYyA9ICh2YWx1ZSkgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgT2sodmFsdWUpKSk7XHJcbmNvbnN0IGVyckFzeW5jID0gKGVycikgPT4gbmV3IFJlc3VsdEFzeW5jKFByb21pc2UucmVzb2x2ZShuZXcgRXJyKGVycikpKTtcclxuY29uc3QgZnJvbVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZTtcclxuY29uc3QgZnJvbVNhZmVQcm9taXNlID0gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlO1xyXG5jb25zdCBmcm9tQXN5bmNUaHJvd2FibGUgPSBSZXN1bHRBc3luYy5mcm9tVGhyb3dhYmxlO1xuXG4vKipcclxuICogU2hvcnQgY2lyY3VpdHMgb24gdGhlIEZJUlNUIEVyciB2YWx1ZSB0aGF0IHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0ID0gKHJlc3VsdExpc3QpID0+IHtcclxuICAgIGxldCBhY2MgPSBvayhbXSk7XHJcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5pc0VycigpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGFjYy5tYXAoKGxpc3QpID0+IGxpc3QucHVzaChyZXN1bHQudmFsdWUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYWNjO1xyXG59O1xyXG4vKiBUaGlzIGlzIHRoZSB0eXBlc2FmZSB2ZXJzaW9uIG9mIFByb21pc2UuYWxsXHJcbiAqXHJcbiAqIFRha2VzIGEgbGlzdCBvZiBSZXN1bHRBc3luYzxULCBFPiBhbmQgc3VjY2VzcyBpZiBhbGwgaW5uZXIgcmVzdWx0cyBhcmUgT2sgdmFsdWVzXHJcbiAqIG9yIGZhaWxzIGlmIG9uZSAob3IgbW9yZSkgb2YgdGhlIGlubmVyIHJlc3VsdHMgYXJlIEVyciB2YWx1ZXNcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3QgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdCk7XHJcbi8qKlxyXG4gKiBHaXZlIGEgbGlzdCBvZiBhbGwgdGhlIGVycm9ycyB3ZSBmaW5kXHJcbiAqL1xyXG5jb25zdCBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjLmVycm9yLnB1c2gocmVzdWx0LmVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0LmlzRXJyKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MgPSBlcnIoW3Jlc3VsdC5lcnJvcl0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNPaygpICYmIGFjYy5pc09rKCkpIHtcclxuICAgICAgICAgICAgYWNjLnZhbHVlLnB1c2gocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG8gbm90aGluZyB3aGVuIHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzRXJyKClcclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzID0gKGFzeW5jUmVzdWx0TGlzdCkgPT4gUmVzdWx0QXN5bmMuZnJvbVNhZmVQcm9taXNlKFByb21pc2UuYWxsKGFzeW5jUmVzdWx0TGlzdCkpLmFuZFRoZW4oY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2VcclxudmFyIFJlc3VsdDtcclxuKGZ1bmN0aW9uIChSZXN1bHQpIHtcclxuICAgIC8qKlxyXG4gICAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGEgdHJ5IGNhdGNoLCBjcmVhdGluZyBhIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lXHJcbiAgICAgKiBhcmd1bWVudHMgYnV0IHJldHVybmluZyBgT2tgIGlmIHN1Y2Nlc3NmdWwsIGBFcnJgIGlmIHRoZSBmdW5jdGlvbiB0aHJvd3NcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gd3JhcCB3aXRoIG9rIG9uIHN1Y2Nlc3Mgb3IgZXJyIG9uIGZhaWx1cmVcclxuICAgICAqIEBwYXJhbSBlcnJvckZuIHdoZW4gYW4gZXJyb3IgaXMgdGhyb3duLCB0aGlzIHdpbGwgd3JhcCB0aGUgZXJyb3IgcmVzdWx0IGlmIHByb3ZpZGVkXHJcbiAgICAgKi9cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICBmdW5jdGlvbiBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbiguLi5hcmdzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBvayhyZXN1bHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyKGVycm9yRm4gPyBlcnJvckZuKGUpIDogZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmZyb21UaHJvd2FibGUgPSBmcm9tVGhyb3dhYmxlO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZShyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0KHJlc3VsdExpc3QpO1xyXG4gICAgfVxyXG4gICAgUmVzdWx0LmNvbWJpbmUgPSBjb21iaW5lO1xyXG4gICAgZnVuY3Rpb24gY29tYmluZVdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCkge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZVdpdGhBbGxFcnJvcnMgPSBjb21iaW5lV2l0aEFsbEVycm9ycztcclxufSkoUmVzdWx0IHx8IChSZXN1bHQgPSB7fSkpO1xyXG5jb25zdCBvayA9ICh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKTtcclxuZnVuY3Rpb24gZXJyKGVycikge1xyXG4gICAgcmV0dXJuIG5ldyBFcnIoZXJyKTtcclxufVxyXG5mdW5jdGlvbiBzYWZlVHJ5KGJvZHkpIHtcclxuICAgIGNvbnN0IG4gPSBib2R5KCkubmV4dCgpO1xyXG4gICAgaWYgKG4gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyhuLnRoZW4oKHIpID0+IHIudmFsdWUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuLnZhbHVlO1xyXG59XHJcbmNsYXNzIE9rIHtcclxuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlzRXJyKCkge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc09rKCk7XHJcbiAgICB9XHJcbiAgICBtYXAoZikge1xyXG4gICAgICAgIHJldHVybiBvayhmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcEVycihfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKF92YWx1ZSkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhbmRUZWUoZikge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGYodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFRlZSBkb2Vzbid0IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoX2YpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY0FuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFzeW5jQW5kVGhyb3VnaChmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSkubWFwKCgpID0+IHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNNYXAoZikge1xyXG4gICAgICAgIHJldHVybiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoZih0aGlzLnZhbHVlKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICB1bndyYXBPcihfdikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWF0Y2gob2ssIF9lcnIpIHtcclxuICAgICAgICByZXR1cm4gb2sodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZTtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS15aWVsZCAqL1xyXG4gICAgICAgIHJldHVybiAoZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXBFcnIoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBFcnJgIG9uIGFuIE9rJywgdGhpcywgY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgcmVxdWlyZS15aWVsZFxyXG4gICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG59XHJcbmNsYXNzIEVyciB7XHJcbiAgICBjb25zdHJ1Y3RvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIGlzT2soKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIG1hcChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBlcnIoZih0aGlzLmVycm9yKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jQW5kVGhlbihfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhyb3VnaChfZikge1xyXG4gICAgICAgIHJldHVybiBlcnJBc3luYyh0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIGFzeW5jTWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdW53cmFwT3Iodikge1xyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgfVxyXG4gICAgbWF0Y2goX29rLCBlcnIpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgc2FmZVVud3JhcCgpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMuZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICB5aWVsZCBlcnIoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvIG5vdCB1c2UgdGhpcyBnZW5lcmF0b3Igb3V0IG9mIGBzYWZlVHJ5YCcpO1xyXG4gICAgICAgIH0pKCk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwKGNvbmZpZykge1xyXG4gICAgICAgIHRocm93IGNyZWF0ZU5ldmVyVGhyb3dFcnJvcignQ2FsbGVkIGBfdW5zYWZlVW53cmFwYCBvbiBhbiBFcnInLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihfKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3I7XHJcbiAgICB9XHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtLSBUaGlzIGlzIHN0cnVjdHVyYWxseSBlcXVpdmFsZW50IGFuZCBzYWZlXHJcbiAgICAgICAgeWllbGQgc2VsZjtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICByZXR1cm4gc2VsZjtcclxuICAgIH1cclxufVxyXG5jb25zdCBmcm9tVGhyb3dhYmxlID0gUmVzdWx0LmZyb21UaHJvd2FibGU7XHJcbi8vI2VuZHJlZ2lvblxuXG5leHBvcnQgeyBFcnIsIE9rLCBSZXN1bHQsIFJlc3VsdEFzeW5jLCBlcnIsIGVyckFzeW5jLCBmcm9tQXN5bmNUaHJvd2FibGUsIGZyb21Qcm9taXNlLCBmcm9tU2FmZVByb21pc2UsIGZyb21UaHJvd2FibGUsIG9rLCBva0FzeW5jLCBzYWZlVHJ5IH07XG4iLCAidHlwZSBKc29uYWJsZSA9XG4gIHwgc3RyaW5nXG4gIHwgbnVtYmVyXG4gIHwgYm9vbGVhblxuICB8IG51bGxcbiAgfCB1bmRlZmluZWRcbiAgfCByZWFkb25seSBKc29uYWJsZVtdXG4gIHwgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiBKc29uYWJsZSB9XG4gIHwgeyB0b0pTT04oKTogSnNvbmFibGUgfTtcblxuZXhwb3J0IGNsYXNzIEJhc2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHQ/OiBKc29uYWJsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlPzogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHsgY2F1c2U/OiBFcnJvcjsgY29udGV4dD86IEpzb25hYmxlIH0gPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgeyBjYXVzZSwgY29udGV4dCB9ID0gb3B0aW9ucztcblxuICAgIHN1cGVyKG1lc3NhZ2UsIHsgY2F1c2UgfSk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldEVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IgZXh0ZW5kcyBXZWJTb2NrZXRFcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2UgPSBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0XCI7XG59XG4iLCAiaW1wb3J0IHsgZXJyQXN5bmMsIFJlc3VsdEFzeW5jIH0gZnJvbSBcIm5ldmVydGhyb3dcIjtcbmltcG9ydCB7IENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Nvbm5lY3Rpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivc2VydmVyLWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNvbmZpZyB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItY29uZmlnLnRzXCI7XG5cbi8qKlxuICogRW5zdXJlIGFuIGVycm9yIG1lc3NhZ2UgaXMgdHJhbnNmb3JtZWQgaW4gYW4gRXJyb3Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5zdXJlRXJyb3IgPSAodmFsdWU6IHVua25vd24pOiBFcnJvciA9PiB7XG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVycm9yKSByZXR1cm4gdmFsdWU7XG5cbiAgbGV0IHN0cmluZ2lmaWVkID0gXCJbVW5hYmxlIHRvIHN0cmluZ2lmeSB0aGUgdGhyb3duIHZhbHVlXVwiO1xuICB0cnkge1xuICAgIHN0cmluZ2lmaWVkID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvKiBlbXB0eSAqL1xuICB9XG5cbiAgcmV0dXJuIG5ldyBFcnJvcihzdHJpbmdpZmllZCk7XG59O1xuXG4vKipcbiAqIFJldHJpZXZlIEx1ZmkncyBjb25maWcgZnJvbSBpdHMgQVBJXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZmV0Y2hTZXJ2ZXJDb25maWcgPSAoXG4gIGluc3RhbmNlVXJsOiBVUkwsXG4pOiBSZXN1bHRBc3luYzxTZXJ2ZXJDb25maWcsIEVycm9yPiA9PiB7XG4gIGNvbnN0IG9yaWdpbk1hdGNoZXMgPSBpbnN0YW5jZVVybC5ocmVmLm1hdGNoKFxuICAgIC8oLio/KVxcLz8oPzpcXC9bZHJdezF9XFwvfGxvZ2luXFwvP3xmaWxlc1xcLz8pLyxcbiAgKTtcblxuICBjb25zdCB1cmxPcmlnaW4gPSBvcmlnaW5NYXRjaGVzICYmIG9yaWdpbk1hdGNoZXNbMV1cbiAgICA/IG9yaWdpbk1hdGNoZXNbMV1cbiAgICA6IGluc3RhbmNlVXJsLm9yaWdpbjtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgZmV0Y2godXJsT3JpZ2luICsgXCIvYWJvdXQvY29uZmlnXCIpLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDb25uZWN0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgKS5hbmRUaGVuKChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgICByZXNwb25zZS5qc29uKCksXG4gICAgICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgICBuZXcgU2VydmVyRXJyb3IodW5kZWZpbmVkLCB7IGNvbnRleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEZW5vUnVudGltZSA9ICgpOiBib29sZWFuID0+IHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiO1xuXG5leHBvcnQgY29uc3QgaXNTZWN1cmVDb250ZXh0ID0gKCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpIHx8IGdsb2JhbFRoaXMuaXNTZWN1cmVDb250ZXh0IHx8XG4gICAgZ2xvYmFsVGhpcy5sb2NhdGlvbi5wcm90b2NvbCA9PT0gXCJodHRwczpcIjtcbn07XG5cbmV4cG9ydCBjb25zdCB3b3JrZXJVcmwgPSAocmVsYXRpdmVQYXRoOiBzdHJpbmcpOiBVUkwgPT4ge1xuICByZXR1cm4gaXNEZW5vUnVudGltZSgpXG4gICAgPyBuZXcgVVJMKGAuL3dvcmtlci8ke3JlbGF0aXZlUGF0aH0udHNgLCBuZXcgVVJMKFwiLlwiLCBpbXBvcnQubWV0YS51cmwpLmhyZWYpXG4gICAgOiBuZXcgVVJMKFxuICAgICAgaW1wb3J0Lm1ldGEucmVzb2x2ZShcbiAgICAgICAgYC4vJHtcbiAgICAgICAgICByZWxhdGl2ZVBhdGggIT09IFwiZW5jcnlwdFwiID8gYHdvcmtlci8ke3JlbGF0aXZlUGF0aH1gIDogcmVsYXRpdmVQYXRoXG4gICAgICAgIH0uanNgLFxuICAgICAgKSxcbiAgICApO1xufTtcbiIsIG51bGwsIG51bGwsIG51bGwsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5pbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHNqY2wgZnJvbSBcImx1Zmktc2pjbFwiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvciBhIHN0cmluZyB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb24uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSB8IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGVuY3J5cHRlZERhdGEgPT09IFwic3RyaW5nXCJcbiAgICAgID8gZW5jcnlwdGVkRGF0YVxuICAgICAgOiAoZW5jcnlwdGVkRGF0YS5kYXRhKTtcblxuICAgIHJldHVybiBva0FzeW5jKGI2NGRlY29kZShzamNsLmRlY3J5cHQoa2V5LCBkYXRhKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBEZWNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBFbmNyeXB0IGFuIEFycmF5QnVmZmVyIGludG8gYW4gRW5jcnlwdGVkRGF0YSB1c2luZyB0aGUgcHJvdmlkZWQga2V5XG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVuY3J5cHRlZCA9IHNqY2wuZW5jcnlwdChrZXksIGI2NGVuY29kZSh2YWx1ZSkpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLlNqY2wsXG4gICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICBpdjogSlNPTi5wYXJzZShlbmNyeXB0ZWQgYXMgdW5rbm93biBhcyBzdHJpbmcpLml2LFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKHNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDgsIDEwKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgU2pjbCBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBva0FzeW5jKHNqY2wuY29kZWMuaGV4LmZyb21CaXRzKHNqY2wuaGFzaC5zaGE1MTIuaGFzaChwYXNzd29yZCkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyQXN5bmMobmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSk7XG4gIH1cbn07XG5cbi8qKlxuICogRGV0ZWN0IGlmIHRoZSBrZXkgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5IFNqY2wuIFNpbmNlIHdlJ3JlIG5vdCBnZW5lcmF0aW5nIGFuIGVxdWFsIHN5bWJvbCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgV2ViQ3J5cHRvIEFQSSAoYnkgdXNpbmcgYmFzZTY0dXJsKSwgaXQncyBlYXN5IHRvIGRldGVjdFxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NqY2xLZXkgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgcmV0dXJuIGtleVtrZXkubGVuZ3RoIC0gMV0gPT09IFwiPVwiO1xufTtcbiIsICJpbXBvcnQgeyBCYXNlRXJyb3IgfSBmcm9tIFwifi9lcnJvci9iYXNlLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEJhc2VFcnJvciB7fVxuIiwgImltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgRGVjcnlwdGlvbkVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICBvdmVycmlkZSBtZXNzYWdlOiBzdHJpbmcgPSBcIlVuYWJsZSB0byBkZWNyeXB0IHRoZSBwcm92aWRlZCBkYXRhXCI7XG59XG4iLCAiaW1wb3J0IHtcbiAgRGVjb2RlIGFzIGI2NHVybGRlY29kZSxcbiAgRW5jb2RlIGFzIGI2NHVybGVuY29kZSxcbn0gZnJvbSBcImFycmF5YnVmZmVyLWVuY29kaW5nL2Jhc2U2NC91cmxcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgSGFzaGluZ0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2hhc2hpbmctZXJyb3IudHNcIjtcblxuLyoqXG4gKiBEZWNyeXB0IGFuIGVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIGVuY3J5cHRlZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWQ6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PiB7XG4gIHJldHVybiBpbXBvcnRLZXkoa2V5KS5hbmRUaGVuKChpbXBvcnRlZEtleSkgPT5cbiAgICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICAgIGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgIGl2OiBlbmNyeXB0ZWQuaXYgYXMgVWludDhBcnJheSxcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIGVuY3J5cHRlZC5kYXRhIGFzIEFycmF5QnVmZmVyLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT4gbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApXG4gICk7XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4pOiBSZXN1bHRBc3luYzxFbmNyeXB0ZWREYXRhLCBFbmNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PiB7XG4gICAgY29uc3QgaXYgPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEyKSk7XG4gICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXYsXG4gICAgICAgIH0sXG4gICAgICAgIGltcG9ydGVkS2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICksXG4gICAgICAoZXJyb3IpID0+XG4gICAgICAgIG5ldyBFbmNyeXB0aW9uRXJyb3IodW5kZWZpbmVkLCB7XG4gICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgfSksXG4gICAgKS5hbmRUaGVuKChlbmNyeXB0ZWQpID0+IHtcbiAgICAgIHJldHVybiBva0FzeW5jKHtcbiAgICAgICAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLldlYkNyeXB0byxcbiAgICAgICAgZGF0YTogZW5jcnlwdGVkLFxuICAgICAgICBpdixcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8qKlxuICogVHJhbnNmb3JtIGEgc3RyaW5nIGludG8gYSBDcnlwdG9LZXksIHVzYWJsZSBpbiBXZWIgQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBrZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpbXBvcnRLZXkgPSAoa2V5OiBzdHJpbmcpOiBSZXN1bHRBc3luYzxDcnlwdG9LZXksIENyeXB0b0Vycm9yPiA9PiB7XG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBjcnlwdG8uc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicmF3XCIsXG4gICAgICBiNjR1cmxkZWNvZGUoa2V5KSxcbiAgICAgIHsgbmFtZTogXCJBRVMtR0NNXCIgfSxcbiAgICAgIGZhbHNlLFxuICAgICAgW1xuICAgICAgICBcImVuY3J5cHRcIixcbiAgICAgICAgXCJkZWNyeXB0XCIsXG4gICAgICBdLFxuICAgICksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGltcG9ydCBjcnlwdG9ncmFwaHkga2V5XCIsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBzdHJpbmcgdXNpbmcgV2ViIENyeXB0byBBUEkuXG4gKlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlS2V5ID0gKCk6IFJlc3VsdEFzeW5jPHN0cmluZywgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICBjcnlwdG8uc3VidGxlXG4gICAgICAgIC5nZW5lcmF0ZUtleShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICAgIGxlbmd0aDogMjU2LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiXSxcbiAgICAgICAgKVxuICAgICAgICAudGhlbigoZ2VuZXJhdGVkS2V5KSA9PlxuICAgICAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgICAgIC5leHBvcnRLZXkoXCJyYXdcIiwgZ2VuZXJhdGVkS2V5KVxuICAgICAgICAgICAgLnRoZW4oKGtleSkgPT4gcmVzb2x2ZShiNjR1cmxlbmNvZGUoa2V5KSkpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gYmFzZTY0IGVuY29kZSB0aGUgdXJsXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHJlamVjdChlcnJvcikpXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gZ2VuZXJhdGUga2V5XCIsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG5cbi8qKlxuICogSGFzaCBhIHBhc3N3b3JkIHVzaW5nIFdlYkNyeXB0byBBUElcbiAqXG4gKiBAcGFyYW0gcGFzc3dvcmRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIEhhc2hpbmdFcnJvcj4gPT4ge1xuICBjb25zdCBwcm9taXNlID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgbmV3IFVpbnQ4QXJyYXkoXG4gICAgICAgIGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KFxuICAgICAgICAgIFwiU0hBLTUxMlwiLFxuICAgICAgICAgIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwYXNzd29yZCksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICkubWFwKChiKSA9PiBiLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpLmpvaW4oXCJcIik7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIHByb21pc2UoKSxcbiAgICAoZXJyb3IpID0+IG5ldyBIYXNoaW5nRXJyb3IodW5kZWZpbmVkLCB7IGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvcikgfSksXG4gICk7XG59O1xuIiwgImltcG9ydCB7IENyeXB0b0FsZ29yaXRobSB9IGZyb20gXCJ+L2VudW0vY3J5cHRvLWFsZ29yaXRobS50c1wiO1xuaW1wb3J0IHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHR5cGUgeyBDcnlwdG9FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9jcnlwdG8tZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgRW5jcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2VuY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IHR5cGUgRW5jcnlwdGVkRGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9lbmNyeXB0ZWQtZGF0YS50c1wiO1xuaW1wb3J0ICogYXMgc2pjbCBmcm9tIFwifi9hcGkvY3J5cHRvL3NqY2wudHNcIjtcbmltcG9ydCAqIGFzIHdlYiBmcm9tIFwifi9hcGkvY3J5cHRvL3dlYi50c1wiO1xuaW1wb3J0IHR5cGUgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gRW5jcnlwdGVkRGF0YSBvYmplY3QgdXNpbmcgdGhlIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT5cbiAgdmFsdWUuYWxnbyA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmRlY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5kZWNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgdXNpbmcgdGhlIHByb3ZpZGVkIGtleSBhbmQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogQXJyYXlCdWZmZXIsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT5cbiAgKGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsKVxuICAgID8gc2pjbC5lbmNyeXB0KGtleSwgdmFsdWUpXG4gICAgOiB3ZWIuZW5jcnlwdChrZXksIHZhbHVlKTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5ldyBrZXkgZm9yIGVuY3J5cHRpb24vZGVjcnlwdGlvblxuICpcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoXG4gIGFsZ28gPSBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT5cbiAgYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wgPyBzamNsLmdlbmVyYXRlS2V5KCkgOiB3ZWIuZ2VuZXJhdGVLZXkoKTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgdGhlIHByb3ZpZGVkIGFsZ29yaXRobVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNoUGFzc3dvcmQgPSAoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIGFsZ286IENyeXB0b0FsZ29yaXRobSxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbFxuICAgID8gc2pjbC5oYXNoUGFzc3dvcmQocGFzc3dvcmQpXG4gICAgOiB3ZWIuaGFzaFBhc3N3b3JkKHBhc3N3b3JkKTtcbiIsICJpbXBvcnQgeyBlcnJBc3luYywgb2tBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgTHVmaUZpbGUgfSBmcm9tIFwifi9lbnRpdGllcy9sdWZpLWZpbGUudHNcIjtcbmltcG9ydCB7IEVWRU5UIH0gZnJvbSBcIn4vZW51bS9ldmVudC50c1wiO1xuaW1wb3J0IHsgVVBMT0FEX1NUQVRVUyB9IGZyb20gXCJ+L2VudW0vZmlsZS1zdGF0dXMudHNcIjtcbmltcG9ydCB7IFNvY2tldFBhdGggfSBmcm9tIFwifi9lbnVtL3NvY2tldC1wYXRoLnRzXCI7XG5pbXBvcnQgeyBVcGxvYWRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3VwbG9hZC91cGxvYWQtZXJyb3IudHNcIjtcbmltcG9ydCB7IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IENsaWVudFVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvY2xpZW50LXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckNhbmNlbE1ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jYW5jZWwtbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9zZXJ2ZXItZG93bmxvYWQtY2h1bmstc3VjY2Vzcy1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJVcGxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci11cGxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhIH0gZnJvbSBcIn4vdHlwZS9zZXJ2ZXItZG93bmxvYWQtY2h1bmstbWV0YWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IGV2ZW50cywgdXBkYXRlRmlsZSB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tIFwifi9hcGkvY3J5cHRvLnRzXCI7XG5pbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0ZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0ZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0XCI7XG5cbmV4cG9ydCBjb25zdCBzb2NrZXRzOiB7XG4gIFtrZXk6IHN0cmluZ106IFdlYlNvY2tldDtcbn0gPSB7fTtcblxuY29uc3QgTUFYX0VSUk9SUyA9IDU7XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgY2FuY2VsIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25DYW5jZWxNZXNzYWdlID0gKFxuICBkYXRhOiBTZXJ2ZXJDYW5jZWxNZXRhZGF0YSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIEVycm9yPiA9PiB7XG4gIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9DQU5DRUxMRUQsIGRhdGEuc3VjY2Vzcyk7XG5cbiAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbn07XG5cbi8qKlxuICogSGFuZGxlIFdlYlNvY2tldCByZXNwb25zZSBmb3IgZG93bmxvYWQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSByZXNwb25zZVxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkRvd25sb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IHN0cmluZyxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gcmVzcG9uc2Uuc3BsaXQoXCJYWE1PSk9YWFwiKTtcbiAgY29uc3QgbWV0YWRhdGFTdHJpbmcgPSByZXN1bHQuc2hpZnQoKTtcblxuICBpZiAobWV0YWRhdGFTdHJpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gSlNPTi5wYXJzZShtZXRhZGF0YVN0cmluZykgYXMgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhO1xuXG4gICAgaWYgKGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YShtZXRhZGF0YSkpIHtcbiAgICAgIGNvbnN0IGRhdGFTdHJpbmcgPSByZXN1bHQuc2hpZnQoKTtcblxuICAgICAgaWYgKGRhdGFTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cmluZyk7XG5cbiAgICAgICAgLy8gSWYgZmlsZSB3YXMgdXBsb2FkZWQgdXNpbmcgTHVmaSBBUElcbiAgICAgICAgaWYgKGVuY3J5cHRlZERhdGEuaXYpIHtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLml2ID0gbmV3IFVpbnQ4QXJyYXkoT2JqZWN0LnZhbHVlcyhlbmNyeXB0ZWREYXRhLml2KSk7XG4gICAgICAgICAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZGVjb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNyeXB0by5kZWNyeXB0KGx1ZmlGaWxlLmtleXMuY2xpZW50LCBlbmNyeXB0ZWREYXRhKS5hbmRUaGVuKFxuICAgICAgICAgIChkZWNyeXB0ZWRQYXJ0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0eXBlb2YgZGVjcnlwdGVkUGFydCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICA/IChuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGVjcnlwdGVkUGFydCkuYnVmZmVyIGFzIEFycmF5QnVmZmVyKVxuICAgICAgICAgICAgICA6IGRlY3J5cHRlZFBhcnQ7XG5cbiAgICAgICAgICAgIC8vIElmIGZpcnN0IGNodW5rXG4gICAgICAgICAgICBpZiAobWV0YWRhdGEucGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgICAgICAgICAgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSxcbiAgICAgICAgICAgICAgICBkZWxBdEZpcnN0VmlldzogbWV0YWRhdGEuZGVsX2F0X2ZpcnN0X3ZpZXcsXG4gICAgICAgICAgICAgICAgZGVsYXk6IG1ldGFkYXRhLmRlbGF5LFxuICAgICAgICAgICAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUsXG4gICAgICAgICAgICAgICAgc2l6ZTogbWV0YWRhdGEuc2l6ZSxcbiAgICAgICAgICAgICAgICB0b3RhbENodW5rczogbWV0YWRhdGEudG90YWwsXG4gICAgICAgICAgICAgICAgdHlwZTogbWV0YWRhdGEudHlwZSxcbiAgICAgICAgICAgICAgICB6aXBwZWQ6IG1ldGFkYXRhLnppcHBlZCxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkNIVU5LX0RPV05MT0FERUQsIGJ1ZmZlciwgbWV0YWRhdGEucGFydCk7XG5cbiAgICAgICAgICAgIGlmIChsdWZpRmlsZS5jaHVua3NSZWFkeSA9PT0gbWV0YWRhdGEudG90YWwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVuZERvd25sb2FkKGx1ZmlGaWxlKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9DT01QTEVURSk7XG4gICAgICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVEKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCByZXRyaWV2ZSBtZXRhZGF0YSBmcm9tIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlclwiLFxuICAgICAgICApO1xuXG4gICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IobWV0YWRhdGEubXNnKTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoXG4gICAgICBcIkNhbm5vdCByZXRyaWV2ZSBtZXRhZGF0YSBmcm9tIGRhdGEgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlclwiLFxuICAgICk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgfVxufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciB1cGxvYWQgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSByZXNwb25zZVxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvblVwbG9hZE1lc3NhZ2UgPSAoXG4gIHJlc3BvbnNlOiBTZXJ2ZXJVcGxvYWRDaHVua01ldGFkYXRhLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBVcGxvYWRFcnJvcj4gPT4ge1xuICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgIC8vIElmIGZpcnN0IGNodW5rXG4gICAgaWYgKHJlc3BvbnNlLmogPT09IDApIHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgVXBsb2FkIG9mICR7bHVmaUZpbGUua2V5cy5jbGllbnR9IHN0YXJ0ZWRgKTtcblxuICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwge1xuICAgICAgICBrZXlzOiB7IGNsaWVudDogbHVmaUZpbGUua2V5cy5jbGllbnQsIHNlcnZlcjogcmVzcG9uc2Uuc2hvcnQgfSxcbiAgICAgICAgYWN0aW9uVG9rZW46IHJlc3BvbnNlLnRva2VuLFxuICAgICAgICBxdWV1ZUluZGV4OiByZXNwb25zZS5pLFxuICAgICAgfSk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9TVEFSVEVEKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkX2F0LFxuICAgIH0pO1xuXG4gICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfVVBMT0FERUQpO1xuXG4gICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBsdWZpRmlsZS50b3RhbENodW5rcykge1xuICAgICAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuQ09NUExFVEUgfSk7XG5cbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlVQTE9BRF9DT01QTEVURSk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuICAgIH1cblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IocmVzcG9uc2UubXNnKTtcbiAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG5cbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIENhbGxlZCBvbiBzb2NrZXRzIFwib25tZXNzYWdlXCIgZXZlbnRcbiAqXG4gKiBAcGFyYW0gZVxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgb25NZXNzYWdlID0gKFxuICBlOiBNZXNzYWdlRXZlbnQsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGNvbnN0IGRhdGEgPSB0cnlQYXJzZUpzb24oZS5kYXRhKTtcbiAgbGV0IGNhbGxiYWNrO1xuXG4gIGlmIChkYXRhKSB7XG4gICAgaWYgKCFkYXRhLmFjdGlvbiAmJiBkYXRhLm1zZykge1xuICAgICAgLy8gSWYgZXJyb3JcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKGRhdGEubXNnKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgICAgcmV0dXJuIGVyckFzeW5jKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFwiZGVsYXlcIiBpbiBkYXRhKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25VcGxvYWRNZXNzYWdlKGRhdGEsIGx1ZmlGaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrID0gb25DYW5jZWxNZXNzYWdlKGRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjayA9IG9uRG93bmxvYWRNZXNzYWdlKGUuZGF0YSwgbHVmaUZpbGUpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxiYWNrO1xufTtcblxuLyoqXG4gKiBJcyBzb2NrZXQgY29ubmVjdGluZz9cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgaXNDb25uZWN0aW5nID0gKHNvY2tldEtleTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICBzb2NrZXRzICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldICE9PSB1bmRlZmluZWQgJiZcbiAgc29ja2V0c1tzb2NrZXRLZXldLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HO1xuXG4vKipcbiAqIElzIHNvY2tldCBzcGF3bmVkP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NwYXduZWQgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU47XG5cbi8qKlxuICogQXNrIFdlYlNvY2tldCB0byBjYW5jZWwgYW4gdXBsb2FkXG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2FuY2VsVXBsb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgdXBsb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBgJHtcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGx1ZmlGaWxlLmtleXMuc2VydmVyLFxuICAgICAgICBtb2RfdG9rZW46IGx1ZmlGaWxlLmFjdGlvblRva2VuLFxuICAgICAgICBjYW5jZWw6IHRydWUsXG4gICAgICAgIGk6IGx1ZmlGaWxlLnF1ZXVlSW5kZXgsXG4gICAgICB9KVxuICAgIH1YWE1PSk9YWHVzZWxlc3NgLFxuICApO1xufTtcblxuLyoqXG4gKiBEb3dubG9hZCBhIHBhcnQgb2YgdGhlIGZpbGUgdGhyb3VnaCB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcGFyYW0gY2h1bmtOdW1iZXJcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIGNodW5rTnVtYmVyOiBudW1iZXIsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgcGFydDogY2h1bmtOdW1iZXIgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFRlbGwgdGhlIFdlYlNvY2tldCB0aGUgZG93bmxvYWQgZW5kZWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmREb3dubG9hZCA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgbGV0IG1lc3NhZ2U6IHsgZW5kZWQ6IHRydWU7IGZpbGVfcHdkPzogc3RyaW5nIH07XG5cbiAgaWYgKGx1ZmlGaWxlLnBhc3N3b3JkKSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUsIGZpbGVfcHdkOiBsdWZpRmlsZS5wYXNzd29yZCB9O1xuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgPSB7IGVuZGVkOiB0cnVlIH07XG4gIH1cblxuICByZXR1cm4gc2VuZE1lc3NhZ2UoXG4gICAgZG93bmxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpLFxuICApO1xufTtcblxuLyoqXG4gKiBVcGxvYWQgYSBjaHVuayBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBtZXRhZGF0YVxuICogQHBhcmFtIGVuY3J5cHRlZERhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRDaHVuayA9IChcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBtZXRhZGF0YTogQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSxcbiAgZW5jcnlwdGVkRGF0YTogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGVuY3J5cHRlZERhdGEuZGF0YSA9IGI2NGVuY29kZShlbmNyeXB0ZWREYXRhLmRhdGEgYXMgQXJyYXlCdWZmZXIpO1xuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke0pTT04uc3RyaW5naWZ5KG1ldGFkYXRhKX1YWE1PSk9YWCR7SlNPTi5zdHJpbmdpZnkoZW5jcnlwdGVkRGF0YSl9YCxcbiAgKTtcbn07XG5cbi8qKlxuICogU2VuZCBhIG1lc3NhZ2UgdG8gdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBzb2NrZXRVcmxcbiAqIEBwYXJhbSBtZXNzYWdlXG4gKiBAcGFyYW0gaGFzUHJpb3JpdHlcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHNlbmRNZXNzYWdlID0gKFxuICBzb2NrZXRVcmw6IHN0cmluZyxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuICBtZXNzYWdlOiBzdHJpbmcsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBpZiAoIWlzU3Bhd25lZChzb2NrZXRVcmwpKSB7XG4gICAgcmV0dXJuIHNwYXduKHNvY2tldFVybCkuYW5kVGhlbigoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldFVybF0ub25tZXNzYWdlID0gKGUpID0+IG9uTWVzc2FnZShlLCBsdWZpRmlsZSk7XG4gICAgICByZXR1cm4gc2VuZE1lc3NhZ2Uoc29ja2V0VXJsLCBsdWZpRmlsZSwgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc29ja2V0c1tzb2NrZXRVcmxdLnNlbmQobWVzc2FnZSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xuICB9XG59O1xuXG4vKipcbiAqIFNwYXduIGEgbmV3IFdlYlNvY2tldCBvciByZXVzZSBhbiBleGlzdGluZyBvbmUuXG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHBhcmFtIGVycm9yQ291bnRcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBzcGF3biA9IChcbiAgc29ja2V0S2V5OiBzdHJpbmcsXG4gIGVycm9yQ291bnQgPSAwLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBpZiAoIWlzU3Bhd25lZChzb2NrZXRLZXkpICYmICFpc0Nvbm5lY3Rpbmcoc29ja2V0S2V5KSkge1xuICAgIC8vIGNvbnNvbGUuaW5mbyhgU3Bhd25pbmcgV2ViU29ja2V0ICR7c29ja2V0VXJsfWApO1xuICAgIHNvY2tldHNbc29ja2V0S2V5XSA9IG5ldyBXZWJTb2NrZXQoc29ja2V0S2V5KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCwgKCkgPT4ge1xuICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICBldmVudHMub25jZShFVkVOVC5PUEVSQVRJT05fRkFJTEVELCAoKSA9PiB7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuICAgIH0pO1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBvcGVuYCk7XG4gICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFTkVEKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmluZm8oYFdlYnNvY2tldCAke3NvY2tldEtleX0gaGFzIGJlZW4gY2xvc2VkYCk7XG4gICAgfTtcblxuICAgIHNvY2tldHNbc29ja2V0S2V5XS5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgaWYgKCsrZXJyb3JDb3VudCA8PSBNQVhfRVJST1JTKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYEFuIGVycm9yIGhhcHBlbmVkIHdoaWxlIHRyeWluZyB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uIFRyeWluZyBhZ2Fpbi4gJHtlcnJvckNvdW50fSAvICR7TUFYX0VSUk9SU31gLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiBzcGF3bihzb2NrZXRLZXksIGVycm9yQ291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuU09DS0VUX09ORVJST1IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgICAgbmV3IFdlYlNvY2tldENvbm5lY3Rpb25FcnJvcihcbiAgICAgICAgICAgIGBVbmFibGUgdG8gY29ubmVjdCB0byBXZWJTb2NrZXQgJHtzb2NrZXRLZXl9LmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHdhaXRGb3JDb25uZWN0aW9uKHNvY2tldEtleSlcbiAgICAuYW5kVGhlbigoKSA9PiBva0FzeW5jKHNvY2tldEtleSkpXG4gICAgLm9yRWxzZSgoZXJyb3IpID0+IGVyckFzeW5jKGVycm9yKSk7XG59O1xuXG4vKipcbiAqIFdhaXQgZm9yIFdlYlNvY2tldCB0byBvcGVuLiBSZXR1cm5zIGFuIGVycm9yIGlmIHRvbyBtYW55IGNvbm5lY3Rpb24gYXR0ZW1wdHMgYXJlIG1hZGUuXG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JDb25uZWN0aW9uID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIWlzU3Bhd25lZChzb2NrZXRLZXkpKSB7XG4gICAgICAgIGV2ZW50cy5vbmNlKEVWRU5ULlNPQ0tFVF9PUEVORUQsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV2ZW50cy5vbihFVkVOVC5TT0NLRVRfT05FUlJPUiwgKCkgPT4ge1xuICAgICAgICAgIHJlamVjdChuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAoZXJyb3IpID0+IHtcbiAgICAgIHJldHVybiBlbnN1cmVFcnJvcihlcnJvcik7XG4gICAgfSxcbiAgKTtcblxuLyoqXG4gKiBDbG9zZSB0aGUgV2ViU29ja2V0XG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgY2xvc2UgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PlxuICBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgY29uc3QgdGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRFcnJvcihcIlVuYWJsZSB0byBjbG9zZSB0aGUgV2ViU29ja2V0XCIpKTtcbiAgICAgICAgfSwgMTAwMCk7XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXRLZXkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNvY2tldHNbc29ja2V0S2V5XS5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShzb2NrZXRLZXkpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4gZW5zdXJlRXJyb3IoZXJyb3IpLFxuICApO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYW4gaW5zdGFuY2UgVVJMIGluIGEgV2ViU29ja2V0IFVSTFxuICpcbiAqIEBwYXJhbSBpbnN0YW5jZVVybFxuICogQHBhcmFtIHBhdGhuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgYnVpbGRTb2NrZXRVcmwgPSAoaW5zdGFuY2VVcmw6IFVSTCwgcGF0aG5hbWU6IHN0cmluZyk6IFVSTCA9PiB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoaW5zdGFuY2VVcmwpO1xuXG4gIGlmICghW1wid3M6XCIsIFwid3NzOlwiXS5pbmNsdWRlcyh1cmwucHJvdG9jb2wpKSB7XG4gICAgdXJsLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSBcImh0dHA6XCIgPyBcIndzOlwiIDogXCJ3c3M6XCI7XG4gIH1cbiAgdXJsLnBhdGhuYW1lICs9IHBhdGhuYW1lO1xuXG4gIHJldHVybiBuZXcgVVJMKHVybC5vcmlnaW4gKyB1cmwucGF0aG5hbWUpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkb3dubG9hZFNvY2tldFVybCA9IChsdWZpRmlsZTogTHVmaUZpbGUpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYnVpbGRTb2NrZXRVcmwoXG4gICAgbmV3IFVSTChsdWZpRmlsZS5zZXJ2ZXJVcmwpLFxuICAgIFNvY2tldFBhdGguRE9XTkxPQUQgKyBgLyR7bHVmaUZpbGUua2V5cy5zZXJ2ZXJ9YCxcbiAgKS50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgdXBsb2FkIFVSTCBmb3IgdGhlIHNvY2tldC4gUmV0dXJucyBhIHN0cmluZyBzaW5jZSBpdCdzIG1vc3RseSB1c2VkIGFzIHNvY2tldHMga2V5XG4gKlxuICogQHBhcmFtIGx1ZmlGaWxlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgdXBsb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksIFNvY2tldFBhdGguVVBMT0FEKVxuICAgIC50b1N0cmluZygpO1xufTtcblxuLyoqXG4gKiBUcnkgdG8gcGFyc2UgYSBzdHJpbmcgaW50byBhIEpTT04uIFJldHVybnMgZmFsc2UgaWYgbm90IHBvc3NpYmxlLlxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCB0cnlQYXJzZUpzb24gPSAoZGF0YTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgIGlmIChwYXJzZWRPYmplY3QgJiYgdHlwZW9mIHBhcnNlZE9iamVjdCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgcmV0dXJuIHBhcnNlZE9iamVjdDtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChfZSkge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdHlwZSBvZiB0aGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgaXMgU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhXG4gKlxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEgPSAoXG4gIG1lc3NhZ2U6IFNlcnZlckRvd25sb2FkQ2h1bmtNZXRhZGF0YSxcbik6IG1lc3NhZ2UgaXMgU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9PlxuICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJiBtZXNzYWdlICE9PSBudWxsICYmICEoXCJtc2dcIiBpbiBtZXNzYWdlKTtcbiIsICJpbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IGV2ZW50cywgaW5pdCB9IGZyb20gXCJ+L3dvcmtlci9zaGFyZWQudHNcIjtcbmltcG9ydCB7IGNhbmNlbFVwbG9hZCBhcyB3c0NhbmNlbFVwbG9hZCB9IGZyb20gXCJ+L2FwaS93ZWJzb2NrZXQudHNcIjtcbmltcG9ydCB0eXBlIHsgV29ya2VyQWN0aW9uTWVzc2FnZSB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItYWN0aW9uLW1lc3NhZ2UudHNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHR5cGUgeyBXb3JrZXJFdmVudCB9IGZyb20gXCJ+L2ludGVyZmFjZS93b3JrZXItZXZlbnQudHNcIjtcbmltcG9ydCB0eXBlIHsgV2ViU29ja2V0RXJyb3IgfSBmcm9tIFwifi9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzXCI7XG5cbmRlY2xhcmUgY29uc3Qgc2VsZjogV29ya2VyO1xubGV0IGlzSW5pdGlhdGVkID0gZmFsc2U7XG5cbnNlbGYub25tZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgaWYgKCFpc0luaXRpYXRlZCkge1xuICAgIGluaXQoKTtcbiAgICBpc0luaXRpYXRlZCA9IHRydWU7XG4gIH1cblxuICBldmVudHMub24oRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICBzZWxmLnBvc3RNZXNzYWdlKHsgZXZlbnQ6IEVWRU5ULlVQTE9BRF9DQU5DRUxMRUQsIHN1Y2Nlc3MgfSk7XG4gIH0pO1xuXG4gIGNhbmNlbFVwbG9hZChldmVudC5kYXRhKS5tYXBFcnIoKGVycm9yKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCxcbiAgICAgIGVycm9yLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNhbmNlbFVwbG9hZCA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PlxuICB3c0NhbmNlbFVwbG9hZCh3b3JrZXJNZXNzYWdlLmFyZ3MubHVmaUZpbGUpO1xuIl0sCiAgIm1hcHBpbmdzIjogIis1QkFBQSxJQUFBQSxHQUFBQyxHQUFBLENBQUFDLEdBQUFDLEtBQUEsY0F1QkEsSUFBSUMsRUFBSSxPQUFPLFNBQVksU0FBVyxRQUFVLEtBQzVDQyxHQUFlRCxHQUFLLE9BQU9BLEVBQUUsT0FBVSxXQUN2Q0EsRUFBRSxNQUNGLFNBQXNCRSxFQUFRQyxFQUFVQyxFQUFNLENBQzlDLE9BQU8sU0FBUyxVQUFVLE1BQU0sS0FBS0YsRUFBUUMsRUFBVUMsQ0FBSSxDQUM3RCxFQUVFQyxHQUNBTCxHQUFLLE9BQU9BLEVBQUUsU0FBWSxXQUM1QkssR0FBaUJMLEVBQUUsUUFDVixPQUFPLHNCQUNoQkssR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxFQUNyQyxPQUFPLE9BQU8sc0JBQXNCQSxDQUFNLENBQUMsQ0FDaEQsRUFFQUcsR0FBaUIsU0FBd0JILEVBQVEsQ0FDL0MsT0FBTyxPQUFPLG9CQUFvQkEsQ0FBTSxDQUMxQyxFQUdGLFNBQVNJLEdBQW1CQyxFQUFTLENBQy9CLFNBQVcsUUFBUSxNQUFNLFFBQVEsS0FBS0EsQ0FBTyxDQUNuRCxDQUVBLElBQUlDLEdBQWMsT0FBTyxPQUFTLFNBQXFCQyxFQUFPLENBQzVELE9BQU9BLElBQVVBLENBQ25CLEVBRUEsU0FBU0MsR0FBZSxDQUN0QkEsRUFBYSxLQUFLLEtBQUssSUFBSSxDQUM3QixDQUNBWCxHQUFPLFFBQVVXLEVBQ2pCWCxHQUFPLFFBQVEsS0FBT1ksR0FHdEJELEVBQWEsYUFBZUEsRUFFNUJBLEVBQWEsVUFBVSxRQUFVLE9BQ2pDQSxFQUFhLFVBQVUsYUFBZSxFQUN0Q0EsRUFBYSxVQUFVLGNBQWdCLE9BSXZDLElBQUlFLEdBQXNCLEdBRTFCLFNBQVNDLEdBQWNDLEVBQVUsQ0FDL0IsR0FB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RUFBRUQsRUFBRUgsSUFBSSxFQUFFLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILEVBQzNmLEdBQUcsQ0FBQyxDQUFDLEVBQ0xILEVBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLFNBQVNDLEVBQUUsQ0FBQyxPQUFPUSxHQUFHLEtBQUtSLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUlBLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxJQUFJVCxFQUFFLEVBQUUsSUFBTUEsRUFBRUEsSUFBSUssR0FBR0YsRUFBRUgsQ0FBQyxFQUFFQSxHQUFHLEVBQUUsS0FBS0EsR0FBRyxJQUFJQSxDQUFDLEVBQUVBLEVBQUUsSUFBSUMsRUFBRUMsRUFBRSxFQUFFLENBQUNKLEVBQUVHLENBQUMsRUFBRUEsR0FBR0ssR0FBRyxFQUFFSixFQUFFRyxFQUFFSCxDQUFDLEdBQUcsRUFBRSxJQUFJTSxFQUFFTixFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVNLEVBQUVBLEdBQUcsRUFBRUEsRUFBRSxJQUFJLEdBQUdWLEVBQUVHLENBQUMsRUFBRU8sRUFBRVQsRUFBRVMsQ0FBQyxFQUFFUCxFQUFFTSxFQUFFSixFQUFFSCxFQUFFRyxFQUFFRyxFQUFFSCxFQUFFRixDQUFDLENBQUMsQ0FBQyxFQUFFUSxFQUFFLFNBQVVGLEVBQUUsTUFBUVAsRUFBRSxJQUFNTSxFQUFFLFNBQVVMLEVBQUVNLEVBQUUsSUFBTUosRUFBRUssQ0FBQyxFQUFFLFNBQVVBLEVBQUVSLEVBQUUsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVDLENBQUMsRUFBRU0sRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUVWLEVBQUVHLENBQUMsRUFBRVEsQ0FBQyxFQUFFQyxFQUFFQSxHQUFHLEdBQUdBLElBQUksRUFBRSxJQUFJVCxFQUNsZ0IsRUFBRSxFQUFFQSxFQUFFQSxJQUFJSixFQUFFSSxDQUFDLEVBQUVKLEVBQUVJLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxTQUFTSSxHQUFHUixFQUFFQyxFQUFFQyxFQUFFLENBQUMsR0FBT0QsRUFBRSxTQUFOLEVBQWEsTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSx3QkFBd0IsRUFBRSxJQUFJSSxFQUFFSCxFQUFFLEVBQUVFLENBQUMsRUFBRUUsRUFBRUgsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRSxFQUFFSixFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUcsRUFBRUwsRUFBRSxDQUFDLEVBQUVFLEVBQUUsQ0FBQyxFQUFFRixFQUFFQSxFQUFFQyxFQUFFLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRSxJQUFJSSxFQUFFRSxFQUFFQyxFQUFFQyxFQUFFUixFQUFFLE9BQU8sRUFBRSxFQUFFUyxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUVQLEVBQUVQLEVBQUUsRUFBRUUsQ0FBQyxFQUFFRixFQUFFTyxFQUFFLENBQUMsRUFBRSxJQUFJUSxFQUFFUixFQUFFLENBQUMsRUFBRVMsRUFBRVQsRUFBRSxDQUFDLEVBQUVVLEVBQUVWLEVBQUUsQ0FBQyxFQUFFVyxFQUFFWCxFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFVyxFQUFFVixHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLENBQUMsRUFBRUosRUFBRVQsRUFBRUssSUFBSSxFQUFFLEVBQUVVLEVBQUVULEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVmLEdBQUcsRUFBRSxHQUFHLEVBQUVnQixFQUFFYixFQUFFLEdBQUcsRUFBRUQsRUFBRVUsRUFBRSxDQUFDLEVBQUVILEVBQUVWLEVBQUVNLElBQUksRUFBRSxFQUFFUyxFQUFFZCxHQUFHLEdBQUcsR0FBRyxFQUFFZSxFQUFFWixHQUFHLEVBQUUsR0FBRyxFQUFFYSxFQUFFWixFQUFFLEdBQUcsRUFBRUYsRUFBRVUsRUFBRSxDQUFDLEVBQUVaLEVBQUVELEVBQUVDLElBQUksRUFBRSxFQUFFYyxFQUFFWCxHQUFHLEdBQUcsR0FBRyxFQUFFWSxFQUFFWCxHQUFHLEVBQUUsR0FBRyxFQUFFWSxFQUFFWCxFQUFFLEdBQUcsRUFBRUgsRUFBRVUsRUFBRSxDQUFDLEVBQUVBLEdBQUcsRUFBRVQsRUFBRUcsRUFBRUYsRUFBRUksRUFBRUgsRUFBRUksRUFBRSxJQUFJRSxFQUNyZixFQUFFLEVBQUVBLEVBQUVBLElBQUlFLEVBQUVaLEVBQUUsRUFBRSxDQUFDVSxFQUFFQSxDQUFDLEVBQUVNLEVBQUVkLElBQUksRUFBRSxHQUFHLEdBQUdjLEVBQUViLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBR2EsRUFBRVosR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFWSxFQUFFakIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLEdBQUcsRUFBRU4sRUFBRUgsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUwsRUFBRUEsRUFBRU0sRUFBRSxPQUFPTyxDQUFDLENBQ2hIZixFQUFLLFNBQVMsQ0FBQyxTQUFTLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxPQUFBRixFQUFFRCxFQUFLLFNBQVMsRUFBRUMsRUFBRSxNQUFNQyxFQUFFLEVBQUUsRUFBRSxJQUFJQSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBa0JDLElBQVQsT0FBV0YsRUFBRUQsRUFBSyxTQUFTLE1BQU1DLEVBQUVFLEVBQUVELENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0QsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUUsS0FBSyxNQUFNLENBQUNGLEVBQUVDLEVBQUUsRUFBRSxFQUFFLFFBQVFELEVBQUVDLEVBQUUsRUFBRUQsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUdFLEVBQUVILEVBQUVDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLENBQUMsSUFBSUUsSUFBSSxHQUFHRCxHQUFHLENBQUMsRUFBRSxPQUFPLFNBQVNGLEVBQUVDLEVBQUUsQ0FBQyxHQUFPRCxFQUFFLFNBQU4sR0FBa0JDLEVBQUUsU0FBTixFQUFhLE9BQU9ELEVBQUUsT0FBT0MsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUVBLEVBQUUsT0FBTyxDQUFDLEVBQUVHLEVBQUVKLEVBQUssU0FBUyxXQUFXRyxDQUFDLEVBQUUsT0FBWUMsSUFBTCxHQUFPSCxFQUFFLE9BQU9DLENBQUMsRUFBRUYsRUFBSyxTQUFTLEVBQUVFLEVBQUVFLEVBQUVELEVBQUUsRUFBRUYsRUFBRSxNQUFNLEVBQUVBLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsU0FBU0EsRUFBRSxDQUFDLElBQUlDLEVBQUVELEVBQUUsT0FBTyxPQUNuZkMsSUFEMGYsRUFDeGYsRUFBRSxJQUFJQSxFQUFFLEdBQUdGLEVBQUssU0FBUyxXQUFXQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxTQUFTRCxFQUFFQyxFQUFFLENBQUMsR0FBRyxHQUFHRCxFQUFFLE9BQU9DLEVBQUUsT0FBT0QsRUFBRUEsRUFBRUEsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxD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R0FBRyxHQUFHSCxFQUFFLENBQUMsT0FBQUEsRUFBRSxJQUFJRixFQUFFLEtBQUtILEVBQUssU0FBUyxRQUFRSyxFQUFFLEdBQUdFLEVBQUUsQ0FBQyxDQUFDLEVBQVNKLENBQUMsQ0FBQyxFQUFFSCxFQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsU0FBU0MsRUFBRSxDQUFDLE9BQU9ELEVBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFF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T0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBT0csRUFBRSxNQUFNSixFQUFFLEVBQUVFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBU0osRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUss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R0EsRUFBRSxlQUFlRSxDQUFDLEVBQUUsQ0FBQyxHQUFHRCxHQUFZRixFQUFFRyxDQUFDLElBQVosUUFBZUgsRUFBRUcsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEVBQUUsTUFBTSxJQUFJSixFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUcsQ0FBQyxFQUFFRixFQUFFRSxDQUFDLENBQUMsQ0FBQyxPQUFPSCxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxF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b21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJSIiwgIlJlZmxlY3RBcHBseSIsICJ0YXJnZXQiLCAicmVjZWl2ZXIiLCAiYXJncyIsICJSZWZsZWN0T3duS2V5cyIsICJQcm9jZXNzRW1pdFdhcm5pbmciLCAid2FybmluZyIsICJOdW1iZXJJc05hTiIsICJ2YWx1ZSIsICJFdmVudEVtaXR0ZXIiLCAib25jZSIsICJkZWZhdWx0TWF4TGlzdGVuZXJzIiwgImNoZWNrTGlzdGVuZXIiLCAibGlzdGVuZXIiLCAiYXJnIiwgIm4iLCAiX2dldE1heExpc3RlbmVycyIsICJ0aGF0IiwgInR5cGUiLCAiaSIsICJkb0Vycm9yIiwgImV2ZW50cyIsICJlciIsICJlcnIiLCAiaGFuZGxlciIsICJsZW4iLCAibGlzdGVuZXJzIiwgImFycmF5Q2xvbmUiLCAiX2FkZExpc3RlbmVyIiwgInByZXBlbmQiLCAibSIsICJleGlzdGluZyIsICJ3IiwgIm9uY2VXcmFwcGVyIiwgIl9vbmNlV3JhcCIsICJzdGF0ZSIsICJ3cmFwcGVkIiwgImxpc3QiLCAicG9zaXRpb24iLCAib3JpZ2luYWxMaXN0ZW5lciIsICJzcGxpY2VPbmUiLCAia2V5cyIsICJrZXkiLCAiX2xpc3RlbmVycyIsICJ1bndyYXAiLCAiZXZsaXN0ZW5lciIsICJ1bndyYXBMaXN0ZW5lcnMiLCAiZW1pdHRlciIsICJsaXN0ZW5lckNvdW50IiwgImFyciIsICJjb3B5IiwgImluZGV4IiwgInJldCIsICJuYW1lIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVycm9yTGlzdGVuZXIiLCAicmVzb2x2ZXIiLCAiZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyIiwgImFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyIiwgImZsYWdzIiwgIndyYXBMaXN0ZW5lciIsICJyZXF1aXJlX3NqY2wiLCAiX19jb21tb25KU01pbiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJzamNsIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLCAiaCIsICJhYSIsICJrIiwgIm4iLCAibCIsICJtIiwgInAiLCAieiIsICJBIiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJHIiwgIkUiLCAiSCIsICJGIiwgIlYiLCAiSSIsICJ3IiwgInYiLCAiUiIsICJKIiwgIlMiLCAiSyIsICJXIiwgIkwiLCAicSIsICJ4IiwgInkiLCAiWCIsICJZIiwgIk0iLCAiZmEiLCAiamEiLCAia2EiLCAiZ2EiLCAiYmEiLCAiTiIsICJjYSIsICJPIiwgIlQiLCAiaGEiLCAiaWEiLCAiZGEiLCAiVSIsICJaIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAiaW5pdCIsICJldmVudHMiLCAiZXJyb3IiLCAiZGVmYXVsdEVycm9yQ29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJtZXNzYWdlIiwgInJlc3VsdCIsICJjb25maWciLCAiZGF0YSIsICJtYXliZVN0YWNrIiwgIl9fYXdhaXRlciIsICJ0aGlzQXJnIiwgIl9hcmd1bWVudHMiLCAiUCIsICJnZW5lcmF0b3IiLCAiYWRvcHQiLCAidmFsdWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZnVsZmlsbGVkIiwgInN0ZXAiLCAiZSIsICJyZWplY3RlZCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fYXdhaXQiLCAidiIsICJfX2FzeW5jR2VuZXJhdG9yIiwgImciLCAicSIsICJ2ZXJiIiwgImF3YWl0UmV0dXJuIiwgImYiLCAibiIsICJhIiwgImIiLCAicmVzdW1lIiwgInNldHRsZSIsICJyIiwgImZ1bGZpbGwiLCAiX19hc3luY0RlbGVnYXRvciIsICJwIiwgIl9fYXN5bmNWYWx1ZXMiLCAiZCIsICJSZXN1bHRBc3luYyIsICJfUmVzdWx0QXN5bmMiLCAicmVzIiwgInByb21pc2UiLCAibmV3UHJvbWlzZSIsICJ2YWx1ZSIsICJPayIsICJlcnJvckZuIiwgImUiLCAiRXJyIiwgImZuIiwgImFyZ3MiLCAiX19hd2FpdGVyIiwgImVycm9yIiwgImFzeW5jUmVzdWx0TGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0IiwgImNvbWJpbmVSZXN1bHRBc3luY0xpc3RXaXRoQWxsRXJyb3JzIiwgImYiLCAibmV3UmVzIiwgIm5ld1ZhbHVlIiwgIm9rIiwgIl9lcnIiLCAidCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgIl9fYXdhaXQiLCAiX19hc3luY0RlbGVnYXRvciIsICJfX2FzeW5jVmFsdWVzIiwgInN1Y2Nlc3NDYWxsYmFjayIsICJmYWlsdXJlQ2FsbGJhY2siLCAicmVzdWx0IiwgImVyckFzeW5jIiwgIm9rQXN5bmMiLCAiZXJyIiwgImZyb21Qcm9taXNlIiwgImZyb21TYWZlUHJvbWlzZSIsICJmcm9tQXN5bmNUaHJvd2FibGUiLCAiY29tYmluZVJlc3VsdExpc3QiLCAicmVzdWx0TGlzdCIsICJhY2MiLCAibGlzdCIsICJjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMiLCAiUmVzdWx0IiwgImZyb21UaHJvd2FibGUiLCAiY29tYmluZSIsICJjb21iaW5lV2l0aEFsbEVycm9ycyIsICJPayIsICJ2YWx1ZSIsICJmIiwgIm9rIiwgIl9mIiwgIl92YWx1ZSIsICJSZXN1bHRBc3luYyIsICJfdiIsICJfZXJyIiwgIl8iLCAiY29uZmlnIiwgImNyZWF0ZU5ldmVyVGhyb3dFcnJvciIsICJFcnIiLCAiZXJyb3IiLCAiZXJyIiwgImVyckFzeW5jIiwgInYiLCAiX29rIiwgInNlbGYiLCAiZnJvbVRocm93YWJsZSIsICJSZXN1bHQiLCAiQmFzZUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJjYXVzZSIsICJjb250ZXh0IiwgIl9fcHVibGljRmllbGQiLCAiV2ViU29ja2V0RXJyb3IiLCAiQmFzZUVycm9yIiwgIldlYlNvY2tldENvbm5lY3Rpb25FcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImVuc3VyZUVycm9yIiwgInZhbHVlIiwgInN0cmluZ2lmaWVkIiwgIkVuY29kaW5nIiwgImNoYXJzZXQiLCAibm9QYWRkaW5nIiwgImFiIiwgImxlbiIsICJ2aWV3IiwgInJlcyIsICJzdHIiLCAidmlld0xlbiIsICJlbmMxIiwgImVuYzIiLCAiZW5jMyIsICJlbmM0IiwgImkiLCAiaiIsICJvYmoiLCAiRW5jb2RpbmciLCAiRGVjb2RlIiwgInN0ciIsICJvYmoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgImltcG9ydF9sdWZpX3NqY2wiLCAiQ3J5cHRvRXJyb3IiLCAiQmFzZUVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJDcnlwdG9FcnJvciIsICJfX3B1YmxpY0ZpZWxkIiwgImRlY3J5cHQiLCAia2V5IiwgImVuY3J5cHRlZERhdGEiLCAiZGF0YSIsICJva0FzeW5jIiwgIkRlY29kZSIsICJzamNsIiwgImVycm9yIiwgImVyckFzeW5jIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWQiLCAiaW1wb3J0S2V5IiwgImltcG9ydGVkS2V5IiwgIlJlc3VsdEFzeW5jIiwgImVycm9yIiwgIkRlY3J5cHRpb25FcnJvciIsICJlbnN1cmVFcnJvciIsICJpbXBvcnRLZXkiLCAia2V5IiwgIlJlc3VsdEFzeW5jIiwgIkRlY29kZSIsICJlcnJvciIsICJDcnlwdG9FcnJvciIsICJlbnN1cmVFcnJvciIsICJkZWNyeXB0IiwgImtleSIsICJ2YWx1ZSIsICJzb2NrZXRzIiwgIk1BWF9FUlJPUlMiLCAib25DYW5jZWxNZXNzYWdlIiwgImRhdGEiLCAiZXZlbnRzIiwgIm9rQXN5bmMiLCAib25Eb3dubG9hZE1lc3NhZ2UiLCAicmVzcG9uc2UiLCAibHVmaUZpbGUiLCAicmVzdWx0IiwgIm1ldGFkYXRhU3RyaW5nIiwgIm1ldGFkYXRhIiwgImlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSIsICJkYXRhU3RyaW5nIiwgImVuY3J5cHRlZERhdGEiLCAiRGVjb2RlIiwgImRlY3J5cHQiLCAiZGVjcnlwdGVkUGFydCIsICJidWZmZXIiLCAidXBkYXRlRmlsZSIsICJlbmREb3dubG9hZCIsICJlcnJvciIsICJXZWJTb2NrZXRFcnJvciIsICJlcnJBc3luYyIsICJvblVwbG9hZE1lc3NhZ2UiLCAib25NZXNzYWdlIiwgImUiLCAidHJ5UGFyc2VKc29uIiwgImNhbGxiYWNrIiwgImlzQ29ubmVjdGluZyIsICJzb2NrZXRLZXkiLCAiaXNTcGF3bmVkIiwgImNhbmNlbFVwbG9hZCIsICJzZW5kTWVzc2FnZSIsICJ1cGxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAibHVmaUZpbGUiLCAibWVzc2FnZSIsICJzZW5kTWVzc2FnZSIsICJkb3dubG9hZFNvY2tldFVybCIsICJzZW5kTWVzc2FnZSIsICJzb2NrZXRVcmwiLCAibHVmaUZpbGUiLCAibWVzc2FnZSIsICJpc1NwYXduZWQiLCAic29ja2V0cyIsICJva0FzeW5jIiwgInNwYXduIiwgImUiLCAib25NZXNzYWdlIiwgInNvY2tldEtleSIsICJlcnJvckNvdW50IiwgImlzQ29ubmVjdGluZyIsICJldmVudHMiLCAiTUFYX0VSUk9SUyIsICJlcnJBc3luYyIsICJXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IiLCAid2FpdEZvckNvbm5lY3Rpb24iLCAiZXJyb3IiLCAiUmVzdWx0QXN5bmMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZW5zdXJlRXJyb3IiLCAiYnVpbGRTb2NrZXRVcmwiLCAiaW5zdGFuY2VVcmwiLCAicGF0aG5hbWUiLCAidXJsIiwgImRvd25sb2FkU29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgInVwbG9hZFNvY2tldFVybCIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaXNJbml0aWF0ZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAic3VjY2VzcyIsICJjYW5jZWxVcGxvYWQiLCAiZXJyb3IiLCAid29ya2VyTWVzc2FnZSJdCn0K
diff --git a/themes/default/public/js/worker/download.js b/themes/default/public/js/worker/download.js
index 95a6443..b614ed3 100644
--- a/themes/default/public/js/worker/download.js
+++ b/themes/default/public/js/worker/download.js
@@ -1,2 +1,2 @@
-var gr=Object.create;var ot=Object.defineProperty;var wr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Ar=Object.getPrototypeOf,Or=Object.prototype.hasOwnProperty;var Lt=t=>{throw TypeError(t)};var _r=(t,e,r)=>e in t?ot(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var xr=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var it=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Lr=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Er(e))!Or.call(t,o)&&o!==r&&ot(t,o,{get:()=>e[o],enumerable:!(n=wr(e,o))||n.enumerable});return t};var st=(t,e,r)=>(r=t!=null?gr(Ar(t)):{},Lr(e||!t||!t.__esModule?ot(r,"default",{value:t,enumerable:!0}):r,t));var M=(t,e,r)=>_r(t,typeof e!="symbol"?e+"":e,r),at=(t,e,r)=>e.has(t)||Lt("Cannot "+r);var d=(t,e,r)=>(at(t,e,"read from private field"),r?r.call(t):e.get(t)),O=(t,e,r)=>e.has(t)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),w=(t,e,r,n)=>(at(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r),_=(t,e,r)=>(at(t,e,"access private method"),r);var ze=(t,e,r,n)=>({set _(o){w(t,e,o,r)},get _(){return d(t,e,n)}});var Nt=it((fn,ct)=>{"use strict";var ie=typeof Reflect=="object"?Reflect:null,bt=ie&&typeof ie.apply=="function"?ie.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},Je;ie&&typeof ie.ownKeys=="function"?Je=ie.ownKeys:Object.getOwnPropertySymbols?Je=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Je=function(e){return Object.getOwnPropertyNames(e)};function br(t){console&&console.warn&&console.warn(t)}var Ct=Number.isNaN||function(e){return e!==e};function g(){g.init.call(this)}ct.exports=g;ct.exports.once=Rr;g.EventEmitter=g;g.prototype._events=void 0;g.prototype._eventsCount=0;g.prototype._maxListeners=void 0;var Dt=10;function He(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(g,"defaultMaxListeners",{enumerable:!0,get:function(){return Dt},set:function(t){if(typeof t!="number"||t<0||Ct(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Dt=t}});g.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};g.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ct(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function St(t){return t._maxListeners===void 0?g.defaultMaxListeners:t._maxListeners}g.prototype.getMaxListeners=function(){return St(this)};g.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")bt(u,this,r);else for(var f=u.length,h=Pt(u,f),n=0;n0&&s.length>o&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=s.length,br(c)}return t}g.prototype.addListener=function(e,r){return Rt(this,e,r,!1)};g.prototype.on=g.prototype.addListener;g.prototype.prependListener=function(e,r){return Rt(this,e,r,!0)};function Dr(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function kt(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Dr.bind(n);return o.listener=r,n.wrapFn=o,o}g.prototype.once=function(e,r){return He(r),this.on(e,kt(this,e,r)),this};g.prototype.prependOnceListener=function(e,r){return He(r),this.prependListener(e,kt(this,e,r)),this};g.prototype.removeListener=function(e,r){var n,o,i,s,c;if(He(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){c=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Cr(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,c||r)}return this};g.prototype.off=g.prototype.removeListener;g.prototype.removeAllListeners=function(e){var r,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Tt(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Sr(o):Pt(o,o.length)}g.prototype.listeners=function(e){return Tt(this,e,!0)};g.prototype.rawListeners=function(e){return Tt(this,e,!1)};g.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):It.call(t,e)};g.prototype.listenerCount=It;function It(t){var e=this._events;if(e!==void 0){var r=e[t];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}g.prototype.eventNames=function(){return this._eventsCount>0?Je(this._events):[]};function Pt(t,e){for(var r=new Array(e),n=0;n{"use strict";var a={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};a.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var c=1;if(e!==4&&e!==6&&e!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};a.cipher.aes.prototype={encrypt:function(t){return Xt(this,t,0)},decrypt:function(t){return Xt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,c=[],u=[],f,h,l,m;for(o=0;256>o;o++)u[(c[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=c[o=c[f=c[i]]],m=16843009*h^65537*o^257*f^16843008*i,h=257*c[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=m=m<<24^m>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function Xt(t,e,r){if(e.length!==4)throw new a.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var c,u,f,h=n.length/4-2,l,m=4,p=[0,0,0,0];c=t.w[r],t=c[0];var A=c[1],P=c[2],W=c[3],G=c[4];for(l=0;l>>24]^A[i>>16&255]^P[s>>8&255]^W[e&255]^n[m],u=t[i>>>24]^A[s>>16&255]^P[e>>8&255]^W[o&255]^n[m+1],f=t[s>>>24]^A[e>>16&255]^P[o>>8&255]^W[i&255]^n[m+2],e=t[e>>>24]^A[o>>16&255]^P[i>>8&255]^W[s&255]^n[m+3],m+=4,o=c,i=u,s=f;for(l=0;4>l;l++)p[r?3&-l:l]=G[o>>>24]<<24^G[i>>16&255]<<16^G[s>>8&255]<<8^G[e&255]^n[m++],c=o,o=i,i=s,s=e,e=c;return p}a.bitArray={bitSlice:function(t,e,r){return t=a.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:a.bitArray.clamp(t,r-e)},extract:function(t,e,r){var n=Math.floor(-e-r&31);return((e+r-1^e)&-32?t[e/32|0]<<32-n^t[e/32+1|0]>>>n:t[e/32|0]>>>n)&(1<>e-1,1)),t},partial:function(t,e,r){return t===32?e:(r?e|0:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(a.bitArray.bitLength(t)!==a.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n>>e),r=t[o]<<32-e;return o=t.length?t[t.length-1]:0,t=a.bitArray.getPartial(o),n.push(a.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};a.codec.utf8String={fromBits:function(t){var e="",r=a.bitArray.bitLength(t),n,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=a.codec.base64.S,s=0,c;for(e&&(i=i.substr(0,62)+"-_"),n=0;nc)throw new a.exception.invalid("this isn't base64!");26>>o),s=c<<32-o):(o+=6,s^=c<<32-o)}return o&56&&r.push(a.bitArray.partial(o&56,s,1)),r}};a.codec.base64url={fromBits:function(t){return a.codec.base64.fromBits(t,1,1)},toBits:function(t){return a.codec.base64.toBits(t,1)}};a.hash.sha256=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};a.hash.sha256.hash=function(t){return new a.hash.sha256().update(t).finalize()};a.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991e;r++){for(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(8>e&&(this.o[e]=t(Math.pow(r,.5))),this.b[e]=t(Math.pow(r,1/3)),e++)}},l:function(t){var e,r,n,o=this.g,i=this.b,s=o[0],c=o[1],u=o[2],f=o[3],h=o[4],l=o[5],m=o[6],p=o[7];for(e=0;64>e;e++)16>e?r=t[e]:(r=t[e+1&15],n=t[e+14&15],r=t[e&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+t[e&15]+t[e+9&15]|0),r=r+p+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(m^h&(l^m))+i[e],p=m,m=l,l=h,h=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+c|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+m|0,o[7]=o[7]+p|0}};a.hash.sha512=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};a.hash.sha512.hash=function(t){return new a.hash.sha512().update(t).finalize()};a.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991r;n++){for(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(8>r&&(this.o[2*r]=t(Math.pow(n,.5)),this.o[2*r+1]=e(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=t(Math.pow(n,1/3)),this.b[2*r+1]=e(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(t){var e,r,n=this.g,o=this.b,i=n[0],s=n[1],c=n[2],u=n[3],f=n[4],h=n[5],l=n[6],m=n[7],p=n[8],A=n[9],P=n[10],W=n[11],G=n[12],Be=n[13],Ot=n[14],je=n[15],D;if(typeof Uint32Array<"u"){D=Array(160);for(var x=0;32>x;x++)D[x]=t[x]}else D=t;var x=i,k=s,ye=c,ne=u,ve=f,oe=h,et=l,ge=m,F=p,T=A,We=P,we=W,Fe=G,Ee=Be,tt=Ot,Ae=je;for(t=0;80>t;t++){if(16>t)e=D[2*t],r=D[2*t+1];else{r=D[2*(t-15)];var E=D[2*(t-15)+1];e=(E<<31|r>>>1)^(E<<24|r>>>8)^r>>>7;var z=(r<<31|E>>>1)^(r<<24|E>>>8)^(r<<25|E>>>7);r=D[2*(t-2)];var J=D[2*(t-2)+1],E=(J<<13|r>>>19)^(r<<3|J>>>29)^r>>>6,J=(r<<13|J>>>19)^(J<<3|r>>>29)^(r<<26|J>>>6),rt=D[2*(t-7)],nt=D[2*(t-16)],Oe=D[2*(t-16)+1];r=z+D[2*(t-7)+1],e=e+rt+(r>>>0>>0?1:0),r+=J,e+=E+(r>>>0>>0?1:0),r+=Oe,e+=nt+(r>>>0>>0?1:0)}D[2*t]=e|=0,D[2*t+1]=r|=0;var rt=F&We^~F&Fe,_t=T&we^~T&Ee,J=x&ye^x&ve^ye&ve,yr=k&ne^k&oe^ne&oe,nt=(k<<4|x>>>28)^(x<<30|k>>>2)^(x<<25|k>>>7),Oe=(x<<4|k>>>28)^(k<<30|x>>>2)^(k<<25|x>>>7),vr=o[2*t],xt=o[2*t+1],E=Ae+((F<<18|T>>>14)^(F<<14|T>>>18)^(T<<23|F>>>9)),z=tt+((T<<18|F>>>14)^(T<<14|F>>>18)^(F<<23|T>>>9))+(E>>>0>>0?1:0),E=E+_t,z=z+(rt+(E>>>0<_t>>>0?1:0)),E=E+xt,z=z+(vr+(E>>>0>>0?1:0)),E=E+r|0,z=z+(e+(E>>>0>>0?1:0));r=Oe+yr,e=nt+J+(r>>>0>>0?1:0),tt=Fe,Ae=Ee,Fe=We,Ee=we,We=F,we=T,T=ge+E|0,F=et+z+(T>>>0>>0?1:0)|0,et=ve,ge=oe,ve=ye,oe=ne,ye=x,ne=k,k=E+r|0,x=z+e+(k>>>0>>0?1:0)|0}s=n[1]=s+k|0,n[0]=i+x+(s>>>0>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0>>0?1:0)|0,h=n[5]=h+oe|0,n[4]=f+ve+(h>>>0>>0?1:0)|0,m=n[7]=m+ge|0,n[6]=l+et+(m>>>0>>0?1:0)|0,A=n[9]=A+T|0,n[8]=p+F+(A>>>0>>0?1:0)|0,W=n[11]=W+we|0,n[10]=P+We+(W>>>0>>0?1:0)|0,Be=n[13]=Be+Ee|0,n[12]=G+Fe+(Be>>>0>>0?1:0)|0,je=n[15]=je+Ae|0,n[14]=Ot+tt+(je>>>0>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(t){a.mode.ccm.F.push(t)},unListenProgress:function(t){t=a.mode.ccm.F.indexOf(t),-1u)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=c.clamp(r,8*(15-i)),e=a.mode.ccm.U(t,e,r,n,o,i),s=a.mode.ccm.V(t,s,r,e,o,i),c.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=a.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),c=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&f>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),c=a.mode.ccm.V(t,c,r,u,o,e),t=a.mode.ccm.U(t,c.data,r,n,o,e),!i.equal(c.tag,t))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(t,e,r,n,o,i){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=c.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=c.bitLength(e)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,e),e=0;eo||16h&&(a.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:c.clamp(e,f)}}};a.misc.hmac=function(t,e){this.W=e=e||a.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;nn||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),o=o||a.misc.hmac,t=new o(t);var i,s,c,u,f=[],h=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=a.hash.sha256.hash(this.b.concat(o)),this.K=new a.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n>>1;this.h[s].update([n,this.M++,2,e,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,c===this.A&&(this.isReady()!==this.A&&Gt("seeded",Math.max(this.u,this.i)),Gt("progress",this.getProgress()))},isReady:function(t){return t=this.R[t!==void 0?t:this.L],this.u&&this.u>=t?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=t?this.I|this.A:this.A},getProgress:function(t){return t=this.R[t||this.L],this.u>=t||this.i>t?1:this.i/t},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:be(this,this.la),mouseCollector:be(this,this.na),keyboardCollector:be(this,this.ja),accelerometerCollector:be(this,this.ca),touchCollector:be(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new a.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(t,e){this.J[t][this.ea++]=e},removeEventListener:function(t,e){var r,n,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.push(n);for(r=0;re&&(t.m[e]=t.m[e]+1|0,!t.m[e]);e++);return t.K.encrypt(t.m)}function be(t,e){return function(){e.apply(t,arguments)}}a.random=new a.prng(6);e:try{if($e=typeof ce<"u"&&ce.exports){try{Xe=xr("crypto")}catch{Xe=null}$e=Ke=Xe}if($e&&Ke.randomBytes)De=Ke.randomBytes(128),De=new Uint32Array(new Uint8Array(De).buffer),a.random.addEntropy(De,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Ce=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Ce);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Ce);else break e;a.random.addEntropy(Ce,1024,"crypto['getRandomValues']")}}catch(t){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(t))}var De,Ke,Ce,$e,Xe;a.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(t,e,r,n){r=r||{},n=n||{};var o=a.json,i=o.j({iv:a.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=a.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=a.codec.base64.toBits(i.iv)),!a.mode[i.mode]||!a.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.iv.length||4=e.iter||e.ts!==64&&e.ts!==96&&e.ts!==128||e.ks!==128&&e.ks!==192&&e.ks!==256||!e.iv||2>e.iv.length||4{"use strict";var on=Object.prototype.hasOwnProperty,S="~";function Se(){}Object.create&&(Se.prototype=Object.create(null),new Se().__proto__||(S=!1));function sn(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function ir(t,e,r,n,o){if(typeof r!="function")throw new TypeError("The listener must be a function");var i=new sn(r,n||t,o),s=S?S+e:e;return t._events[s]?t._events[s].fn?t._events[s]=[t._events[s],i]:t._events[s].push(i):(t._events[s]=i,t._eventsCount++),t}function Ge(t,e){--t._eventsCount===0?t._events=new Se:delete t._events[e]}function b(){this._events=new Se,this._eventsCount=0}b.prototype.eventNames=function(){var e=[],r,n;if(this._eventsCount===0)return e;for(n in r=this._events)on.call(r,n)&&e.push(S?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};b.prototype.listeners=function(e){var r=S?S+e:e,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t),jt=(t,e)=>{q(t,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:e})},Wt=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pr={withStackTrace:!1},Jt=(t,e,r=Pr)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function se(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function c(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(c,u)}f((n=n.apply(t,e||[])).next())})}function Ft(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function H(t){return this instanceof H?(this.v=t,this):new H(t)}function zt(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(p){return function(A){return Promise.resolve(A).then(p,l)}}function c(p,A){n[p]&&(o[p]=function(P){return new Promise(function(W,G){i.push([p,P,W,G])>1||u(p,P)})},A&&(o[p]=A(o[p])))}function u(p,A){try{f(n[p](A))}catch(P){m(i[0][3],P)}}function f(p){p.value instanceof H?Promise.resolve(p.value.v).then(h,l):m(i[0][2],p)}function h(p){u("next",p)}function l(p){u("throw",p)}function m(p,A){p(A),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Mr(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:H(t[o](s)),done:!1}:i?i(s):s}:i}}function Nr(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof Ft=="function"?Ft(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(c,u){s=t[i](s),o(c,u,s.done,s.value)})}}function o(i,s,c,u){Promise.resolve(u).then(function(f){i({value:f,done:c})},s)}}var L=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new N(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new N(o)).catch(o=>new U(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(se(this,void 0,void 0,function*(){try{return new N(yield e(...n))}catch(o){return new U(r?r(o):o)}}))}static combine(e){return Ur(e)}static combineWithAllErrors(e){return Br(e)}map(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?new U(r.error):new N(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);let n=yield e(r.value);return n.isErr()?new U(n.error):new N(r.value)})))}andTee(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);try{yield e(r.value)}catch{}return new N(r.value)})))}mapErr(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isOk()?new N(r.value):new U(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new U(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new N(r.value)})))}match(e,r){return this._promise.then(n=>n.match(e,r))}unwrapOr(e){return this._promise.then(r=>r.unwrapOr(e))}safeUnwrap(){return zt(this,arguments,function*(){return yield H(yield H(yield*Mr(Nr(yield H(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return zt(this,arguments,function*(){let r=yield H(this._promise);return r.isErr()&&(yield yield H(C(r.error))),yield H(r.value)})}},K=t=>new L(Promise.resolve(new N(t))),C=t=>new L(Promise.resolve(new U(t))),vn=L.fromPromise,gn=L.fromSafePromise,wn=L.fromThrowable,Ht=t=>{let e=te([]);for(let r of t)if(r.isErr()){e=Y(r.error);break}else e.map(n=>n.push(r.value));return e},Ur=t=>L.fromSafePromise(Promise.all(t)).andThen(Ht),Kt=t=>{let e=te([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=Y([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Br=t=>L.fromSafePromise(Promise.all(t)).andThen(Kt),ut;(function(t){function e(o,i){return(...s)=>{try{let c=o(...s);return te(c)}catch(c){return Y(i?i(c):c)}}}t.fromThrowable=e;function r(o){return Ht(o)}t.combine=r;function n(o){return Kt(o)}t.combineWithAllErrors=n})(ut||(ut={}));var te=t=>new N(t);function Y(t){return new U(t)}var N=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return te(e(this.value))}mapErr(e){return te(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(r=>this.value)}andTee(e){try{e(this.value)}catch{}return te(this.value)}orElse(e){return te(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return L.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,r){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw Jt("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},U=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return Y(this.error)}mapErr(e){return Y(e(this.error))}andThrough(e){return Y(this.error)}andTee(e){return Y(this.error)}andThen(e){return Y(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return C(this.error)}asyncAndThrough(e){return C(this.error)}asyncMap(e){return C(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield Y(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Jt("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},En=ut.fromThrowable;var Z=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});M(this,"context");this.name=this.constructor.name,this.context=i}};var $=class extends Z{};var _e=class extends ${constructor(){super(...arguments);M(this,"message","An error occured while trying to connect to WebSocket")}};var re=t=>{if(t instanceof Error)return t;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(t)}catch{}return new Error(e)};var ae=class{constructor(e,r){if(!e||e.length!=64)throw Error("Charset must contain 64 characters");this._charset=e,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(e){let r=e.byteLength;if(!r)return"";let n=new Uint8Array(e),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}Decode(e){if(e=(e||"").replace(/[\s]/g,""),!e)return new ArrayBuffer(0);if(!this._valid.test(e))throw Error("Invalid base64 input sequence");let r=Math.floor(e.length*.75);e[e.length-2]=="="?r-=2:e[e.length-1]=="="&&r--;let n=new Uint8Array(r),o,i,s,c,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var jr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function xe(t){return jr.Decode(t)}var Wr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function ft(t){return Wr.Decode(t)}var Qt=st(Yt());var V=class extends Z{};var ue=class extends V{constructor(){super(...arguments);M(this,"message","Unable to decrypt the provided data")}};var Zt=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return K(xe(Qt.default.decrypt(t,r)))}catch(r){return C(new ue(void 0,{cause:re(r)}))}};var er=(t,e)=>Kr(t).andThen(r=>L.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new ue(void 0,{cause:re(n)})));var Kr=t=>L.fromPromise(crypto.subtle.importKey("raw",ft(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new V("Unable to import cryptography key",{cause:re(e)}));var tr=(t,e)=>e.algo===void 0||e.algo===0?Zt(t,e):er(t,e);var I={},rr=5,Gr=t=>(v.emit("UPLOAD_CANCELLED",t.success),K(void 0)),qr=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(nn(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=xe(s.data)),tr(e.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return o.part===0?(q(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),v.emit("DOWNLOAD_STARTED")):q(e,{chunksReady:e.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?Zr(e).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),K(void 0))):K(void 0)})}else{let s=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),C(s)}}else{let i=new $(o.msg);return v.emit("OPERATION_FAILED",i),C(i)}}else{let o=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",o),C(o)}},Yr=(t,e)=>{if(t.success)return t.j===0&&(q(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),v.emit("UPLOAD_STARTED")),q(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),v.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(q(e,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),K(void 0);{let r=new $(t.msg);return v.emit("OPERATION_FAILED",r),C(r)}},Vr=(t,e)=>{let r=rn(t.data),n;if(r)if(!r.action&&r.msg){let o=new $(r.msg);return v.emit("OPERATION_FAILED",o),C(o)}else"delay"in r?n=Yr(r,e):n=Gr(r);else n=qr(t.data,e);return n},Qr=t=>I!==void 0&&I[t]!==void 0&&I[t].readyState===WebSocket.CONNECTING,lt=t=>I!==void 0&&I[t]!==void 0&&I[t].readyState===WebSocket.OPEN;var dt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},pt(or(t),t,JSON.stringify(r))},Zr=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},pt(or(t),t,JSON.stringify(e))};var pt=(t,e,r)=>lt(t)?(I[t].send(r),K(void 0)):nr(t).andThen(()=>(I[t].onmessage=n=>Vr(n,e),pt(t,e,r))),nr=(t,e=0)=>(!lt(t)&&!Qr(t)&&(I[t]=new WebSocket(t),v.once("SOCKET_OPERATION_TERMINATED",()=>{I[t].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),I[t].onopen=()=>{v.emit("SOCKET_OPENED")},I[t].onclose=()=>{},I[t].onerror=()=>++e<=rr?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${rr}`),nr(t,e)):(v.emit("SOCKET_ONERROR"),C(new _e(`Unable to connect to WebSocket ${t}.`)))),en(t).andThen(()=>K(t)).orElse(r=>C(r))),en=t=>L.fromPromise(new Promise((e,r)=>{lt(t)?e(void 0):(v.once("SOCKET_OPENED",()=>{e(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new _e)}))}),e=>re(e));var tn=(t,e)=>{let r=new URL(t);return r.protocol=r.protocol==="http:"?"ws:":"wss:",r.pathname+=e,new URL(r.origin+r.pathname)},or=t=>tn(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var rn=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},nn=t=>typeof t=="object"&&t!==null&&!("msg"in t);var yt=st(sr(),1);var Re=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},vt=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ar=t=>globalThis.DOMException===void 0?new vt(t):new DOMException(t),cr=t=>{let e=t.reason===void 0?ar("This operation was aborted."):t.reason;return e instanceof Error?e:ar(e)};function gt(t,e){let{milliseconds:r,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,u=new Promise((f,h)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:m}=e;m.aborted&&h(cr(m));let p=()=>{h(cr(m))};m.addEventListener("abort",p,{once:!0}),t.finally(()=>{m.removeEventListener("abort",p)})}if(r===Number.POSITIVE_INFINITY){t.then(f,h);return}let l=new Re;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){h(m)}return}typeof t.cancel=="function"&&t.cancel(),o===!1?f():o instanceof Error?h(o):(l.message=o!=null?o:`Promise timed out after ${r} milliseconds`,h(l))},r),(async()=>{try{f(await t)}catch(m){h(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},u}function wt(t,e,r){let n=0,o=t.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;r(t[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var X,ke=class{constructor(){O(this,X,[])}enqueue(e,r){r={priority:0,...r};let n={priority:r.priority,run:e};if(this.size&&d(this,X)[this.size-1].priority>=r.priority){d(this,X).push(n);return}let o=wt(d(this,X),n,(i,s)=>s.priority-i.priority);d(this,X).splice(o,0,n)}dequeue(){let e=d(this,X).shift();return e==null?void 0:e.run}filter(e){return d(this,X).filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return d(this,X).length}};X=new WeakMap;var fe,he,ee,Ie,le,Pe,B,de,R,Me,j,pe,Q,Ne,y,ur,fr,hr,lr,dr,qe,Et,At,Ye,pr,Ve,Te=class extends yt.default{constructor(r){var n,o,i,s;super();O(this,y);O(this,fe);O(this,he);O(this,ee,0);O(this,Ie);O(this,le);O(this,Pe,0);O(this,B);O(this,de);O(this,R);O(this,Me);O(this,j,0);O(this,pe);O(this,Q);O(this,Ne);M(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ke,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(o=(n=r.intervalCap)==null?void 0:n.toString())!=null?o:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(i=r.interval)==null?void 0:i.toString())!=null?s:""}\` (${typeof r.interval})`);w(this,fe,r.carryoverConcurrencyCount),w(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),w(this,Ie,r.intervalCap),w(this,le,r.interval),w(this,R,new r.queueClass),w(this,Me,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,w(this,Ne,r.throwOnTimeout===!0),w(this,Q,r.autoStart===!1)}get concurrency(){return d(this,pe)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);w(this,pe,r),_(this,y,Ye).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:d(this,Ne),...n},new Promise((o,i)=>{d(this,R).enqueue(async()=>{var s;ze(this,j)._++,ze(this,ee)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=gt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,_(this,y,pr).call(this,n.signal)]));let u=await c;o(u),this.emit("completed",u)}catch(c){if(c instanceof Re&&!n.throwOnTimeout){o();return}i(c),this.emit("error",c)}finally{_(this,y,hr).call(this)}},n),this.emit("add"),_(this,y,qe).call(this)})}async addAll(r,n){return Promise.all(r.map(async o=>this.add(o,n)))}start(){return d(this,Q)?(w(this,Q,!1),_(this,y,Ye).call(this),this):this}pause(){w(this,Q,!0)}clear(){w(this,R,new(d(this,Me)))}async onEmpty(){d(this,R).size!==0&&await _(this,y,Ve).call(this,"empty")}async onSizeLessThan(r){d(this,R).sized(this,R).size{_(this,y,lr).call(this)},n)),!0}return!1},qe=function(){if(d(this,R).size===0)return d(this,B)&&clearInterval(d(this,B)),w(this,B,void 0),this.emit("empty"),d(this,j)===0&&this.emit("idle"),!1;if(!d(this,Q)){let r=!d(this,y,dr);if(d(this,y,ur)&&d(this,y,fr)){let n=d(this,R).dequeue();return n?(this.emit("active"),n(),r&&_(this,y,Et).call(this),!0):!1}}return!1},Et=function(){d(this,he)||d(this,B)!==void 0||(w(this,B,setInterval(()=>{_(this,y,At).call(this)},d(this,le))),w(this,Pe,Date.now()+d(this,le)))},At=function(){d(this,ee)===0&&d(this,j)===0&&d(this,B)&&(clearInterval(d(this,B)),w(this,B,void 0)),w(this,ee,d(this,fe)?d(this,j):0),_(this,y,Ye).call(this)},Ye=function(){for(;_(this,y,qe).call(this););},pr=async function(r){return new Promise((n,o)=>{r.addEventListener("abort",()=>{o(r.reason)},{once:!0})})},Ve=async function(r,n){return new Promise(o=>{let i=()=>{n&&!n()||(this.off(r,i),o())};this.on(r,i)})};var Ze=navigator.hardwareConcurrency||1,Qe=new Te({concurrency:Ze}),me=0,mr=!1,Ue=!1;self.onmessage=t=>{mr||(Wt(),mr=!0,v.once("DOWNLOAD_STARTED",()=>{self.postMessage({event:"DOWNLOAD_STARTED"})}),v.once("DOWNLOAD_COMPLETE",()=>{self.postMessage({event:"DOWNLOAD_COMPLETE"})}),v.on("FILE_UPDATED",q),v.on("CHUNK_DOWNLOADED",(r,n)=>{me--,!Ue&&me{jt(e.args.lufiFile,r)})}};var an=t=>{let{lufiFile:e}=t.args;return v.on("DOWNLOAD_STARTED",async()=>{for(let r=1;r{await dt(e,r),me++,(Ue||me===Ze)&&Qe.pause()})}),me++,dt(e,0)};
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vZXZlbnRlbWl0dGVyM0A1LjAuMS9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50ZW1pdHRlcjNANS4wLjEvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXRpbWVvdXRANi4xLjMvbm9kZV9tb2R1bGVzL3AtdGltZW91dC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vcC1xdWV1ZUA4LjAuMS9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L2xvd2VyLWJvdW5kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXF1ZXVlQDguMC4xL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvcHJpb3JpdHktcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL3AtcXVldWVAOC4wLjEvbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL2Rvd25sb2FkLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO3ZhciBzamNsPXtjaXBoZXI6e30saGFzaDp7fSxrZXlleGNoYW5nZTp7fSxtb2RlOnt9LG1pc2M6e30sY29kZWM6e30sZXhjZXB0aW9uOntjb3JydXB0OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkNPUlJVUFQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGludmFsaWQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiSU5WQUxJRDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sYnVnOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkJVRzogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sbm90UmVhZHk6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTk9UIFJFQURZOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfX19O1xuc2pjbC5jaXBoZXIuYWVzPWZ1bmN0aW9uKGEpe3RoaXMud1swXVswXVswXXx8dGhpcy5DKCk7dmFyIGIsYyxkLGUsZj10aGlzLndbMF1bNF0sZz10aGlzLndbMV07Yj1hLmxlbmd0aDt2YXIgaD0xO2lmKDQhPT1iJiY2IT09YiYmOCE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBrZXkgc2l6ZVwiKTt0aGlzLmI9W2Q9YS5zbGljZSgwKSxlPVtdXTtmb3IoYT1iO2E8NCpiKzI4O2ErKyl7Yz1kW2EtMV07aWYoMD09PWElYnx8OD09PWImJjQ9PT1hJWIpYz1mW2M+Pj4yNF08PDI0XmZbYz4+MTYmMjU1XTw8MTZeZltjPj44JjI1NV08PDheZltjJjI1NV0sMD09PWElYiYmKGM9Yzw8OF5jPj4+MjReaDw8MjQsaD1oPDwxXjI4MyooaD4+NykpO2RbYV09ZFthLWJdXmN9Zm9yKGI9MDthO2IrKyxhLS0pYz1kW2ImMz9hOmEtNF0sZVtiXT00Pj1hfHw0PmI/YzpnWzBdW2ZbYz4+PjI0XV1eZ1sxXVtmW2M+PjE2JjI1NV1dXmdbMl1bZltjPj44JjI1NV1dXmdbM11bZltjJlxuMjU1XV19O1xuc2pjbC5jaXBoZXIuYWVzLnByb3RvdHlwZT17ZW5jcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDApfSxkZWNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMSl9LHc6W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMud1swXSxiPXRoaXMud1sxXSxjPWFbNF0sZD1iWzRdLGUsZixnLGg9W10saz1bXSxuLGwsbSxwO2ZvcihlPTA7MHgxMDA+ZTtlKyspa1soaFtlXT1lPDwxXjI4MyooZT4+NykpXmVdPWU7Zm9yKGY9Zz0wOyFjW2ZdO2ZePW58fDEsZz1rW2ddfHwxKWZvcihtPWdeZzw8MV5nPDwyXmc8PDNeZzw8NCxtPW0+PjhebSYyNTVeOTksY1tmXT1tLGRbbV09ZixsPWhbZT1oW249aFtmXV1dLHA9MHgxMDEwMTAxKmxeMHgxMDAwMSplXjB4MTAxKm5eMHgxMDEwMTAwKmYsbD0weDEwMSpoW21dXjB4MTAxMDEwMCptLGU9MDs0PmU7ZSsrKWFbZV1bZl09bD1sPDwyNF5sPj4+OCxiW2VdW21dPXA9cDw8MjRecD4+Pjg7Zm9yKGU9XG4wOzU+ZTtlKyspYVtlXT1hW2VdLnNsaWNlKDApLGJbZV09YltlXS5zbGljZSgwKX19O1xuZnVuY3Rpb24gYWEoYSxiLGMpe2lmKDQhPT1iLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGJsb2NrIHNpemVcIik7dmFyIGQ9YS5iW2NdLGU9YlswXV5kWzBdLGY9YltjPzM6MV1eZFsxXSxnPWJbMl1eZFsyXTtiPWJbYz8xOjNdXmRbM107dmFyIGgsayxuLGw9ZC5sZW5ndGgvNC0yLG0scD00LHo9WzAsMCwwLDBdO2g9YS53W2NdO2E9aFswXTt2YXIgQT1oWzFdLEM9aFsyXSxCPWhbM10sRD1oWzRdO2ZvcihtPTA7bTxsO20rKyloPWFbZT4+PjI0XV5BW2Y+PjE2JjI1NV1eQ1tnPj44JjI1NV1eQltiJjI1NV1eZFtwXSxrPWFbZj4+PjI0XV5BW2c+PjE2JjI1NV1eQ1tiPj44JjI1NV1eQltlJjI1NV1eZFtwKzFdLG49YVtnPj4+MjRdXkFbYj4+MTYmMjU1XV5DW2U+PjgmMjU1XV5CW2YmMjU1XV5kW3ArMl0sYj1hW2I+Pj4yNF1eQVtlPj4xNiYyNTVdXkNbZj4+OCYyNTVdXkJbZyYyNTVdXmRbcCszXSxwKz00LGU9aCxmPWssZz1uO2ZvcihtPVxuMDs0Pm07bSsrKXpbYz8zJi1tOm1dPURbZT4+PjI0XTw8MjReRFtmPj4xNiYyNTVdPDwxNl5EW2c+PjgmMjU1XTw8OF5EW2ImMjU1XV5kW3ArK10saD1lLGU9ZixmPWcsZz1iLGI9aDtyZXR1cm4gen1cbnNqY2wuYml0QXJyYXk9e2JpdFNsaWNlOmZ1bmN0aW9uKGEsYixjKXthPXNqY2wuYml0QXJyYXkuWShhLnNsaWNlKGIvMzIpLDMyLShiJjMxKSkuc2xpY2UoMSk7cmV0dXJuIHZvaWQgMD09PWM/YTpzamNsLmJpdEFycmF5LmNsYW1wKGEsYy1iKX0sZXh0cmFjdDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5mbG9vcigtYi1jJjMxKTtyZXR1cm4oKGIrYy0xXmIpJi0zMj9hW2IvMzJ8MF08PDMyLWReYVtiLzMyKzF8MF0+Pj5kOmFbYi8zMnwwXT4+PmQpJigxPDxjKS0xfSxjb25jYXQ6ZnVuY3Rpb24oYSxiKXtpZigwPT09YS5sZW5ndGh8fDA9PT1iLmxlbmd0aClyZXR1cm4gYS5jb25jYXQoYik7dmFyIGM9YVthLmxlbmd0aC0xXSxkPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChjKTtyZXR1cm4gMzI9PT1kP2EuY29uY2F0KGIpOnNqY2wuYml0QXJyYXkuWShiLGQsY3wwLGEuc2xpY2UoMCxhLmxlbmd0aC0xKSl9LGJpdExlbmd0aDpmdW5jdGlvbihhKXt2YXIgYj1hLmxlbmd0aDtyZXR1cm4gMD09PVxuYj8wOjMyKihiLTEpK3NqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChhW2ItMV0pfSxjbGFtcDpmdW5jdGlvbihhLGIpe2lmKDMyKmEubGVuZ3RoPGIpcmV0dXJuIGE7YT1hLnNsaWNlKDAsTWF0aC5jZWlsKGIvMzIpKTt2YXIgYz1hLmxlbmd0aDtiPWImMzE7MDxjJiZiJiYoYVtjLTFdPXNqY2wuYml0QXJyYXkucGFydGlhbChiLGFbYy0xXSYyMTQ3NDgzNjQ4Pj5iLTEsMSkpO3JldHVybiBhfSxwYXJ0aWFsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMzI9PT1hP2I6KGM/YnwwOmI8PDMyLWEpKzB4MTAwMDAwMDAwMDAqYX0sZ2V0UGFydGlhbDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChhLzB4MTAwMDAwMDAwMDApfHwzMn0sZXF1YWw6ZnVuY3Rpb24oYSxiKXtpZihzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSE9PXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGIpKXJldHVybiExO3ZhciBjPTAsZDtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWN8PWFbZF1eYltkXTtyZXR1cm4gMD09PVxuY30sWTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtlPTA7Zm9yKHZvaWQgMD09PWQmJihkPVtdKTszMjw9YjtiLT0zMilkLnB1c2goYyksYz0wO2lmKDA9PT1iKXJldHVybiBkLmNvbmNhdChhKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjfGFbZV0+Pj5iKSxjPWFbZV08PDMyLWI7ZT1hLmxlbmd0aD9hW2EubGVuZ3RoLTFdOjA7YT1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoZSk7ZC5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChiK2EmMzEsMzI8YithP2M6ZC5wb3AoKSwxKSk7cmV0dXJuIGR9LFA6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bYVswXV5iWzBdLGFbMV1eYlsxXSxhWzJdXmJbMl0sYVszXV5iWzNdXX0sYnl0ZXN3YXBNOmZ1bmN0aW9uKGEpe3ZhciBiLGM7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0sYVtiXT1jPj4+MjR8Yz4+PjgmMHhmZjAwfChjJjB4ZmYwMCk8PDh8Yzw8MjQ7cmV0dXJuIGF9fTtcbnNqY2wuY29kZWMudXRmOFN0cmluZz17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLGQsZTtmb3IoZD0wO2Q8Yy84O2QrKykwPT09KGQmMykmJihlPWFbZC80XSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj4+OD4+Pjg+Pj44KSxlPDw9ODtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShiKSl9LHRvQml0czpmdW5jdGlvbihhKXthPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhKSk7dmFyIGI9W10sYyxkPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylkPWQ8PDh8YS5jaGFyQ29kZUF0KGMpLDM9PT0oYyYzKSYmKGIucHVzaChkKSxkPTApO2MmMyYmYi5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbCg4KihjJjMpLGQpKTtyZXR1cm4gYn19O1xuc2pjbC5jb2RlYy5oZXg9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYztmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWIrPSgoYVtjXXwwKSsweGYwMDAwMDAwMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cig0KTtyZXR1cm4gYi5zdWJzdHIoMCxzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKS80KX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZDthPWEucmVwbGFjZSgvXFxzfDB4L2csXCJcIik7ZD1hLmxlbmd0aDthPWErXCIwMDAwMDAwMFwiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKz04KWMucHVzaChwYXJzZUludChhLnN1YnN0cihiLDgpLDE2KV4wKTtyZXR1cm4gc2pjbC5iaXRBcnJheS5jbGFtcChjLDQqZCl9fTtcbnNqY2wuY29kZWMuYmFzZTY0PXtTOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGZyb21CaXRzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIlwiLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7YyYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoYz0wOzYqZC5sZW5ndGg8aDspZCs9Zi5jaGFyQXQoKGdeYVtjXT4+PmUpPj4+MjYpLDY+ZT8oZz1hW2NdPDw2LWUsZSs9MjYsYysrKTooZzw8PTYsZS09Nik7Zm9yKDtkLmxlbmd0aCYzJiYhYjspZCs9XCI9XCI7cmV0dXJuIGR9LHRvQml0czpmdW5jdGlvbihhLGIpe2E9YS5yZXBsYWNlKC9cXHN8PS9nLFwiXCIpO3ZhciBjPVtdLGQsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaDtiJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspe2g9Zi5pbmRleE9mKGEuY2hhckF0KGQpKTtcbmlmKDA+aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInRoaXMgaXNuJ3QgYmFzZTY0IVwiKTsyNjxlPyhlLT0yNixjLnB1c2goZ15oPj4+ZSksZz1oPDwzMi1lKTooZSs9NixnXj1oPDwzMi1lKX1lJjU2JiZjLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGUmNTYsZywxKSk7cmV0dXJuIGN9fTtzamNsLmNvZGVjLmJhc2U2NHVybD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGEsMSwxKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYSwxKX19O3NqY2wuaGFzaC5zaGEyNTY9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhMjU2Lmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhMjU2KS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhMjU2LnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGQuc3ViYXJyYXkoMTYqZSxcbjE2KihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDE2KmUpfWVsc2UgZm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoYy5zcGxpY2UoMCwxNikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCsyO2EmMTU7YSsrKWIucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMTYpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10sYjpbXSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mb3IodmFyIGI9MCxjPTIsZCxlOzY0PmI7YysrKXtlPSEwO2ZvcihkPTI7ZCpkPD1jO2QrKylpZigwPT09YyVkKXtlPVxuITE7YnJlYWt9ZSYmKDg+YiYmKHRoaXMub1tiXT1hKE1hdGgucG93KGMsLjUpKSksdGhpcy5iW2JdPWEoTWF0aC5wb3coYywxLzMpKSxiKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzLmcsZj10aGlzLmIsZz1lWzBdLGg9ZVsxXSxrPWVbMl0sbj1lWzNdLGw9ZVs0XSxtPWVbNV0scD1lWzZdLHo9ZVs3XTtmb3IoYj0wOzY0PmI7YisrKTE2PmI/Yz1hW2JdOihjPWFbYisxJjE1XSxkPWFbYisxNCYxNV0sYz1hW2ImMTVdPShjPj4+N15jPj4+MTheYz4+PjNeYzw8MjVeYzw8MTQpKyhkPj4+MTdeZD4+PjE5XmQ+Pj4xMF5kPDwxNV5kPDwxMykrYVtiJjE1XSthW2IrOSYxNV18MCksYz1jK3orKGw+Pj42Xmw+Pj4xMV5sPj4+MjVebDw8MjZebDw8MjFebDw8NykrKHBebCYobV5wKSkrZltiXSx6PXAscD1tLG09bCxsPW4rY3wwLG49ayxrPWgsaD1nLGc9YysoaCZrXm4mKGheaykpKyhoPj4+Ml5oPj4+MTNeaD4+PjIyXmg8PDMwXmg8PDE5Xmg8PDEwKXwwO2VbMF09ZVswXStnfFxuMDtlWzFdPWVbMV0raHwwO2VbMl09ZVsyXStrfDA7ZVszXT1lWzNdK258MDtlWzRdPWVbNF0rbHwwO2VbNV09ZVs1XSttfDA7ZVs2XT1lWzZdK3B8MDtlWzddPWVbN10renwwfX07c2pjbC5oYXNoLnNoYTUxMj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGE1MTIuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGE1MTIpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGE1MTIucHJvdG90eXBlPXtibG9ja1NpemU6MTAyNCxyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoZC5zdWJhcnJheSgzMipcbmUsMzIqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMzIqZSl9ZWxzZSBmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGMuc3BsaWNlKDAsMzIpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrNDthJjMxO2ErKyliLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMzIpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10saWE6WzEyMzcyMjMyLDEzMjgxMDgzLDk3NjI4NTksMTkxNDYwOSwxNTEwNjc2OSw0MDkwOTExLDQzMDgzMzEsODI2NjEwNV0sYjpbXSxrYTpbMjY2NjAxOCwxNTY4OTE2NSw1MDYxNDIzLDkwMzQ2ODQsXG40NzY0OTg0LDM4MDk1MywxNjU4Nzc5LDcxNzY0NzIsMTk3MTg2LDczNjg2MzgsMTQ5ODc5MTYsMTY3NTc5ODYsODA5NjExMSwxNDgwMzY5LDEzMDQ2MzI1LDY4OTExNTYsMTU4MTMzMzAsNTE4NzA0Myw5MjI5NzQ5LDExMzEyMjI5LDI4MTg2NzcsMTA5Mzc0NzUsNDMyNDMwOCwxMTM1NTQxLDY3NDE5MzEsMTE4MDkyOTYsMTY0NTgwNDcsMTU2NjY5MTYsMTEwNDY4NTAsNjk4MTQ5LDIyOTk5OSw5NDU3NzYsMTM3NzQ4NDQsMjU0MTg2MiwxMjg1NjA0NSw5ODEwOTExLDExNDk0MzY2LDc4NDQ1MjAsMTU1NzY4MDYsODUzMzMwNywxNTc5NTA0NCw0MzM3NjY1LDE2MjkxNzI5LDU1NTM3MTIsMTU2ODQxMjAsNjY2MjQxNiw3NDEzODAyLDEyMzA4OTIwLDEzODE2MDA4LDQzMDM2OTksOTM2NjQyNSwxMDE3NjY4MCwxMzE5NTg3NSw0Mjk1MzcxLDY1NDYyOTEsMTE3MTI2NzUsMTU3MDg5MjQsMTUxOTQ1NiwxNTc3MjUzMCw2NTY4NDI4LDY0OTU3ODQsODU2ODI5NywxMzAwNzEyNSw3NDkyMzk1LDI1MTUzNTYsXG4xMjYzMjU4MywxNDc0MDI1NCw3MjYyNTg0LDE1MzU5MzAsMTMxNDYyNzgsMTYzMjE5NjYsMTg1MzIxMSwyOTQyNzYsMTMwNTEwMjcsMTMyMjE1NjQsMTA1MTk4MCw0MDgwMzEwLDY2NTE0MzQsMTQwODg5NDAsNDY3NTYwN10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9ZnVuY3Rpb24gYihhKXtyZXR1cm4gMHgxMDAwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKSYyNTV9Zm9yKHZhciBjPTAsZD0yLGUsZjs4MD5jO2QrKyl7Zj0hMDtmb3IoZT0yO2UqZTw9ZDtlKyspaWYoMD09PWQlZSl7Zj0hMTticmVha31mJiYoOD5jJiYodGhpcy5vWzIqY109YShNYXRoLnBvdyhkLC41KSksdGhpcy5vWzIqYysxXT1iKE1hdGgucG93KGQsLjUpKTw8MjR8dGhpcy5pYVtjXSksdGhpcy5iWzIqY109YShNYXRoLnBvdyhkLDEvMykpLHRoaXMuYlsyKmMrMV09YihNYXRoLnBvdyhkLDEvMykpPDwyNHx0aGlzLmthW2NdLGMrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLFxuYyxkPXRoaXMuZyxlPXRoaXMuYixmPWRbMF0sZz1kWzFdLGg9ZFsyXSxrPWRbM10sbj1kWzRdLGw9ZFs1XSxtPWRbNl0scD1kWzddLHo9ZFs4XSxBPWRbOV0sQz1kWzEwXSxCPWRbMTFdLEQ9ZFsxMl0sUD1kWzEzXSxlYT1kWzE0XSxRPWRbMTVdLHQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dD1BcnJheSgxNjApO2Zvcih2YXIgcj0wOzMyPnI7cisrKXRbcl09YVtyXX1lbHNlIHQ9YTt2YXIgcj1mLHU9ZyxHPWgsRT1rLEg9bixGPWwsVj1tLEk9cCx3PXosdj1BLFI9QyxKPUIsUz1ELEs9UCxXPWVhLEw9UTtmb3IoYT0wOzgwPmE7YSsrKXtpZigxNj5hKWI9dFsyKmFdLGM9dFsyKmErMV07ZWxzZXtjPXRbMiooYS0xNSldO3ZhciBxPXRbMiooYS0xNSkrMV07Yj0ocTw8MzF8Yz4+PjEpXihxPDwyNHxjPj4+OCleYz4+Pjc7dmFyIHg9KGM8PDMxfHE+Pj4xKV4oYzw8MjR8cT4+PjgpXihjPDwyNXxxPj4+Nyk7Yz10WzIqKGEtMildO3ZhciB5PXRbMiooYS0yKSsxXSxcbnE9KHk8PDEzfGM+Pj4xOSleKGM8PDN8eT4+PjI5KV5jPj4+Nix5PShjPDwxM3x5Pj4+MTkpXih5PDwzfGM+Pj4yOSleKGM8PDI2fHk+Pj42KSxYPXRbMiooYS03KV0sWT10WzIqKGEtMTYpXSxNPXRbMiooYS0xNikrMV07Yz14K3RbMiooYS03KSsxXTtiPWIrWCsoYz4+PjA8eD4+PjA/MTowKTtjKz15O2IrPXErKGM+Pj4wPHk+Pj4wPzE6MCk7Yys9TTtiKz1ZKyhjPj4+MDxNPj4+MD8xOjApfXRbMiphXT1ifD0wO3RbMiphKzFdPWN8PTA7dmFyIFg9dyZSXn53JlMsZmE9diZKXn52JksseT1yJkdeciZIXkcmSCxqYT11JkVedSZGXkUmRixZPSh1PDw0fHI+Pj4yOCleKHI8PDMwfHU+Pj4yKV4ocjw8MjV8dT4+PjcpLE09KHI8PDR8dT4+PjI4KV4odTw8MzB8cj4+PjIpXih1PDwyNXxyPj4+Nyksa2E9ZVsyKmFdLGdhPWVbMiphKzFdLHE9TCsoKHc8PDE4fHY+Pj4xNCleKHc8PDE0fHY+Pj4xOCleKHY8PDIzfHc+Pj45KSkseD1XKygodjw8MTh8dz4+PjE0KV4odjw8MTR8dz4+PjE4KV4odzw8XG4yM3x2Pj4+OSkpKyhxPj4+MDxMPj4+MD8xOjApLHE9cStmYSx4PXgrKFgrKHE+Pj4wPGZhPj4+MD8xOjApKSxxPXErZ2EseD14KyhrYSsocT4+PjA8Z2E+Pj4wPzE6MCkpLHE9cStjfDAseD14KyhiKyhxPj4+MDxjPj4+MD8xOjApKTtjPU0ramE7Yj1ZK3krKGM+Pj4wPE0+Pj4wPzE6MCk7Vz1TO0w9SztTPVI7Sz1KO1I9dztKPXY7dj1JK3F8MDt3PVYreCsodj4+PjA8ST4+PjA/MTowKXwwO1Y9SDtJPUY7SD1HO0Y9RTtHPXI7RT11O3U9cStjfDA7cj14K2IrKHU+Pj4wPHE+Pj4wPzE6MCl8MH1nPWRbMV09Zyt1fDA7ZFswXT1mK3IrKGc+Pj4wPHU+Pj4wPzE6MCl8MDtrPWRbM109aytFfDA7ZFsyXT1oK0crKGs+Pj4wPEU+Pj4wPzE6MCl8MDtsPWRbNV09bCtGfDA7ZFs0XT1uK0grKGw+Pj4wPEY+Pj4wPzE6MCl8MDtwPWRbN109cCtJfDA7ZFs2XT1tK1YrKHA+Pj4wPEk+Pj4wPzE6MCl8MDtBPWRbOV09QSt2fDA7ZFs4XT16K3crKEE+Pj4wPHY+Pj4wPzE6MCl8MDtCPWRbMTFdPUIrSnxcbjA7ZFsxMF09QytSKyhCPj4+MDxKPj4+MD8xOjApfDA7UD1kWzEzXT1QK0t8MDtkWzEyXT1EK1MrKFA+Pj4wPEs+Pj4wPzE6MCl8MDtRPWRbMTVdPVErTHwwO2RbMTRdPWVhK1crKFE+Pj4wPEw+Pj4wPzE6MCl8MH19O1xuc2pjbC5tb2RlLmNjbT17bmFtZTpcImNjbVwiLEY6W10sbGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7c2pjbC5tb2RlLmNjbS5GLnB1c2goYSl9LHVuTGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT1zamNsLm1vZGUuY2NtLkYuaW5kZXhPZihhKTstMTxhJiZzamNsLm1vZGUuY2NtLkYuc3BsaWNlKGEsMSl9LGRhOmZ1bmN0aW9uKGEpe3ZhciBiPXNqY2wubW9kZS5jY20uRi5zbGljZSgpLGM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrPTEpYltjXShhKX0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc9Yi5zbGljZSgwKSxoPXNqY2wuYml0QXJyYXksaz1oLmJpdExlbmd0aChjKS84LG49aC5iaXRMZW5ndGgoZykvODtlPWV8fDY0O2Q9ZHx8W107aWYoNz5rKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGY9Mjs0PmYmJm4+Pj44KmY7ZisrKTtmPDE1LWsmJihmPTE1LWspO2M9aC5jbGFtcChjLFxuOCooMTUtZikpO2I9c2pjbC5tb2RlLmNjbS5VKGEsYixjLGQsZSxmKTtnPXNqY2wubW9kZS5jY20uVihhLGcsYyxiLGUsZik7cmV0dXJuIGguY29uY2F0KGcuZGF0YSxnLnRhZyl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtlPWV8fDY0O2Q9ZHx8W107dmFyIGY9c2pjbC5iaXRBcnJheSxnPWYuYml0TGVuZ3RoKGMpLzgsaD1mLmJpdExlbmd0aChiKSxrPWYuY2xhbXAoYixoLWUpLG49Zi5iaXRTbGljZShiLGgtZSksaD0oaC1lKS84O2lmKDc+Zyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihiPTI7ND5iJiZoPj4+OCpiO2IrKyk7YjwxNS1nJiYoYj0xNS1nKTtjPWYuY2xhbXAoYyw4KigxNS1iKSk7az1zamNsLm1vZGUuY2NtLlYoYSxrLGMsbixlLGIpO2E9c2pjbC5tb2RlLmNjbS5VKGEsay5kYXRhLGMsZCxlLGIpO2lmKCFmLmVxdWFsKGsudGFnLGEpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5jb3JydXB0KFwiY2NtOiB0YWcgZG9lc24ndCBtYXRjaFwiKTtcbnJldHVybiBrLmRhdGF9LG1hOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1bXSxoPXNqY2wuYml0QXJyYXksaz1oLlA7ZD1baC5wYXJ0aWFsKDgsKGIubGVuZ3RoPzY0OjApfGQtMjw8MnxmLTEpXTtkPWguY29uY2F0KGQsYyk7ZFszXXw9ZTtkPWEuZW5jcnlwdChkKTtpZihiLmxlbmd0aClmb3IoYz1oLmJpdExlbmd0aChiKS84LDY1Mjc5Pj1jP2c9W2gucGFydGlhbCgxNixjKV06MHhmZmZmZmZmZj49YyYmKGc9aC5jb25jYXQoW2gucGFydGlhbCgxNiw2NTUzNCldLFtjXSkpLGc9aC5jb25jYXQoZyxiKSxiPTA7YjxnLmxlbmd0aDtiKz00KWQ9YS5lbmNyeXB0KGsoZCxnLnNsaWNlKGIsYis0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZH0sVTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9c2pjbC5iaXRBcnJheSxoPWcuUDtlLz04O2lmKGUlMnx8ND5lfHwxNjxlKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5pZigweGZmZmZmZmZmPGQubGVuZ3RofHwweGZmZmZmZmZmPGIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjY206IGNhbid0IGRlYWwgd2l0aCA0R2lCIG9yIG1vcmUgZGF0YVwiKTtjPXNqY2wubW9kZS5jY20ubWEoYSxkLGMsZSxnLmJpdExlbmd0aChiKS84LGYpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKz00KWM9YS5lbmNyeXB0KGgoYyxiLnNsaWNlKGQsZCs0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZy5jbGFtcChjLDgqZSl9LFY6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9c2pjbC5iaXRBcnJheTtnPWguUDt2YXIgaz1iLmxlbmd0aCxuPWguYml0TGVuZ3RoKGIpLGw9ay81MCxtPWw7Yz1oLmNvbmNhdChbaC5wYXJ0aWFsKDgsZi0xKV0sYykuY29uY2F0KFswLDAsMF0pLnNsaWNlKDAsNCk7ZD1oLmJpdFNsaWNlKGcoZCxhLmVuY3J5cHQoYykpLDAsZSk7aWYoIWspcmV0dXJue3RhZzpkLGRhdGE6W119O2ZvcihnPTA7ZzxrO2crPTQpZz5sJiYoc2pjbC5tb2RlLmNjbS5kYShnL1xuayksbCs9bSksY1szXSsrLGU9YS5lbmNyeXB0KGMpLGJbZ11ePWVbMF0sYltnKzFdXj1lWzFdLGJbZysyXV49ZVsyXSxiW2crM11ePWVbM107cmV0dXJue3RhZzpkLGRhdGE6aC5jbGFtcChiLG4pfX19O3NqY2wubWlzYy5obWFjPWZ1bmN0aW9uKGEsYil7dGhpcy5XPWI9Ynx8c2pjbC5oYXNoLnNoYTI1Njt2YXIgYz1bW10sW11dLGQsZT1iLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7dGhpcy5CPVtuZXcgYixuZXcgYl07YS5sZW5ndGg+ZSYmKGE9Yi5oYXNoKGEpKTtmb3IoZD0wO2Q8ZTtkKyspY1swXVtkXT1hW2RdXjkwOTUyMjQ4NixjWzFdW2RdPWFbZF1eMTU0OTU1NjgyODt0aGlzLkJbMF0udXBkYXRlKGNbMF0pO3RoaXMuQlsxXS51cGRhdGUoY1sxXSk7dGhpcy5PPW5ldyBiKHRoaXMuQlswXSl9O1xuc2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmVuY3J5cHQ9c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLm1hYz1mdW5jdGlvbihhKXtpZih0aGlzLlopdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCFcIik7dGhpcy51cGRhdGUoYSk7cmV0dXJuIHRoaXMuZGlnZXN0KGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLk89bmV3IHRoaXMuVyh0aGlzLkJbMF0pO3RoaXMuWj0hMX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLlo9ITA7dGhpcy5PLnVwZGF0ZShhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuTy5maW5hbGl6ZSgpLGE9KG5ldyB0aGlzLlcodGhpcy5CWzFdKSkudXBkYXRlKGEpLmZpbmFsaXplKCk7dGhpcy5yZXNldCgpO3JldHVybiBhfTtcbnNqY2wubWlzYy5wYmtkZjI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtjPWN8fDFFNDtpZigwPmR8fDA+Yyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgcGFyYW1zIHRvIHBia2RmMlwiKTtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7ZT1lfHxzamNsLm1pc2MuaG1hYzthPW5ldyBlKGEpO3ZhciBmLGcsaCxrLG49W10sbD1zamNsLmJpdEFycmF5O2ZvcihrPTE7MzIqbi5sZW5ndGg8KGR8fDEpO2srKyl7ZT1mPWEuZW5jcnlwdChsLmNvbmNhdChiLFtrXSkpO2ZvcihnPTE7ZzxjO2crKylmb3IoZj1hLmVuY3J5cHQoZiksaD0wO2g8Zi5sZW5ndGg7aCsrKWVbaF1ePWZbaF07bj1uLmNvbmNhdChlKX1kJiYobj1sLmNsYW1wKG4sZCkpO3JldHVybiBufTtcbnNqY2wucHJuZz1mdW5jdGlvbihhKXt0aGlzLmg9W25ldyBzamNsLmhhc2guc2hhMjU2XTt0aGlzLnM9WzBdO3RoaXMuTj0wO3RoaXMuRz17fTt0aGlzLk09MDt0aGlzLlQ9e307dGhpcy5YPXRoaXMuaT10aGlzLnU9dGhpcy5mYT0wO3RoaXMuYj1bMCwwLDAsMCwwLDAsMCwwXTt0aGlzLm09WzAsMCwwLDBdO3RoaXMuSz12b2lkIDA7dGhpcy5MPWE7dGhpcy5EPSExO3RoaXMuSj17cHJvZ3Jlc3M6e30sc2VlZGVkOnt9fTt0aGlzLkE9dGhpcy5lYT0wO3RoaXMuSD0xO3RoaXMuST0yO3RoaXMuYWE9MHgxMDAwMDt0aGlzLlI9WzAsNDgsNjQsOTYsMTI4LDE5MiwweDEwMCwzODQsNTEyLDc2OCwxMDI0XTt0aGlzLmJhPTNFNDt0aGlzLiQ9ODB9O1xuc2pjbC5wcm5nLnByb3RvdHlwZT17cmFuZG9tV29yZHM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkO2Q9dGhpcy5pc1JlYWR5KGIpO3ZhciBlO2lmKGQ9PT10aGlzLkEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLm5vdFJlYWR5KFwiZ2VuZXJhdG9yIGlzbid0IHNlZWRlZFwiKTtpZihkJnRoaXMuSSl7ZD0hKGQmdGhpcy5IKTtlPVtdO3ZhciBmPTAsZzt0aGlzLlg9ZVswXT0obmV3IERhdGUpLnZhbHVlT2YoKSt0aGlzLmJhO2ZvcihnPTA7MTY+ZztnKyspZS5wdXNoKDB4MTAwMDAwMDAwKk1hdGgucmFuZG9tKCl8MCk7Zm9yKGc9MDtnPHRoaXMuaC5sZW5ndGgmJihlPWUuY29uY2F0KHRoaXMuaFtnXS5maW5hbGl6ZSgpKSxmKz10aGlzLnNbZ10sdGhpcy5zW2ddPTAsZHx8ISh0aGlzLk4mMTw8ZykpO2crKyk7dGhpcy5OPj0xPDx0aGlzLmgubGVuZ3RoJiYodGhpcy5oLnB1c2gobmV3IHNqY2wuaGFzaC5zaGEyNTYpLHRoaXMucy5wdXNoKDApKTt0aGlzLmktPWY7Zj50aGlzLnUmJih0aGlzLnU9XG5mKTt0aGlzLk4rKzt0aGlzLmI9c2pjbC5oYXNoLnNoYTI1Ni5oYXNoKHRoaXMuYi5jb25jYXQoZSkpO3RoaXMuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKHRoaXMuYik7Zm9yKGQ9MDs0PmQmJih0aGlzLm1bZF09dGhpcy5tW2RdKzF8MCwhdGhpcy5tW2RdKTtkKyspO31mb3IoZD0wO2Q8YTtkKz00KTA9PT0oZCsxKSV0aGlzLmFhJiZiYSh0aGlzKSxlPU4odGhpcyksYy5wdXNoKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JhKHRoaXMpO3JldHVybiBjLnNsaWNlKDAsYSl9LHNldERlZmF1bHRQYXJhbm9pYTpmdW5jdGlvbihhLGIpe2lmKDA9PT1hJiZcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIiE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIpO3RoaXMuTD1hfSxhZGRFbnRyb3B5OmZ1bmN0aW9uKGEsXG5iLGMpe2M9Y3x8XCJ1c2VyXCI7dmFyIGQsZSxmPShuZXcgRGF0ZSkudmFsdWVPZigpLGc9dGhpcy5HW2NdLGg9dGhpcy5pc1JlYWR5KCksaz0wO2Q9dGhpcy5UW2NdO3ZvaWQgMD09PWQmJihkPXRoaXMuVFtjXT10aGlzLmZhKyspO3ZvaWQgMD09PWcmJihnPXRoaXMuR1tjXT0wKTt0aGlzLkdbY109KHRoaXMuR1tjXSsxKSV0aGlzLmgubGVuZ3RoO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcIm51bWJlclwiOnZvaWQgMD09PWImJihiPTEpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMSxiLGYsMSxhfDBdKTticmVhaztjYXNlIFwib2JqZWN0XCI6Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7aWYoXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiPT09Yyl7ZT1bXTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWUucHVzaChhW2NdKTthPWV9ZWxzZSBmb3IoXCJbb2JqZWN0IEFycmF5XVwiIT09YyYmKGs9MSksYz0wO2M8YS5sZW5ndGgmJiFrO2MrKylcIm51bWJlclwiIT09dHlwZW9mIGFbY10mJlxuKGs9MSk7aWYoIWspe2lmKHZvaWQgMD09PWIpZm9yKGM9Yj0wO2M8YS5sZW5ndGg7YysrKWZvcihlPWFbY107MDxlOyliKyssZT1lPj4+MTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDIsYixmLGEubGVuZ3RoXS5jb25jYXQoYSkpfWJyZWFrO2Nhc2UgXCJzdHJpbmdcIjp2b2lkIDA9PT1iJiYoYj1hLmxlbmd0aCk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywzLGIsZixhLmxlbmd0aF0pO3RoaXMuaFtnXS51cGRhdGUoYSk7YnJlYWs7ZGVmYXVsdDprPTF9aWYoayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwicmFuZG9tOiBhZGRFbnRyb3B5IG9ubHkgc3VwcG9ydHMgbnVtYmVyLCBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ1wiKTt0aGlzLnNbZ10rPWI7dGhpcy5pKz1iO2g9PT10aGlzLkEmJih0aGlzLmlzUmVhZHkoKSE9PXRoaXMuQSYmY2EoXCJzZWVkZWRcIixNYXRoLm1heCh0aGlzLnUsdGhpcy5pKSksY2EoXCJwcm9ncmVzc1wiLHRoaXMuZ2V0UHJvZ3Jlc3MoKSkpfSxcbmlzUmVhZHk6ZnVuY3Rpb24oYSl7YT10aGlzLlJbdm9pZCAwIT09YT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudSYmdGhpcy51Pj1hP3RoaXMuc1swXT50aGlzLiQmJihuZXcgRGF0ZSkudmFsdWVPZigpPnRoaXMuWD90aGlzLkl8dGhpcy5IOnRoaXMuSDp0aGlzLmk+PWE/dGhpcy5JfHRoaXMuQTp0aGlzLkF9LGdldFByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9dGhpcy5SW2E/YTp0aGlzLkxdO3JldHVybiB0aGlzLnU+PWE/MTp0aGlzLmk+YT8xOnRoaXMuaS9hfSxzdGFydENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5EKXt0aGlzLmE9e2xvYWRUaW1lQ29sbGVjdG9yOk8odGhpcyx0aGlzLmxhKSxtb3VzZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5uYSksa2V5Ym9hcmRDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuamEpLGFjY2VsZXJvbWV0ZXJDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuY2EpLHRvdWNoQ29sbGVjdG9yOk8odGhpcyx0aGlzLnBhKX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsXG50aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSk7ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudClkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3Rvcik7ZWxzZSB0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2FuJ3QgYXR0YWNoIGV2ZW50XCIpO1xudGhpcy5EPSEwfX0sc3RvcENvbGxlY3RvcnM6ZnVuY3Rpb24oKXt0aGlzLkQmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcj8od2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpKTpkb2N1bWVudC5kZXRhY2hFdmVudCYmKGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsXG50aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpKSx0aGlzLkQ9ITEpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5KW2FdW3RoaXMuZWErK109Yn0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLkpbYV0sZj1bXTtmb3IoZCBpbiBlKWUuaGFzT3duUHJvcGVydHkoZCkmJmVbZF09PT1iJiZmLnB1c2goZCk7Zm9yKGM9MDtjPGYubGVuZ3RoO2MrKylkPWZbY10sZGVsZXRlIGVbZF19LGphOmZ1bmN0aW9uKCl7VCh0aGlzLDEpfSxuYTpmdW5jdGlvbihhKXt2YXIgYixjO3RyeXtiPWEueHx8YS5jbGllbnRYfHxhLm9mZnNldFh8fDAsYz1hLnl8fGEuY2xpZW50WXx8YS5vZmZzZXRZfHwwfWNhdGNoKGQpe2M9Yj0wfTAhPWImJjAhPWMmJnRoaXMuYWRkRW50cm9weShbYixjXSwyLFwibW91c2VcIik7VCh0aGlzLDApfSxwYTpmdW5jdGlvbihhKXthPVxuYS50b3VjaGVzWzBdfHxhLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuYWRkRW50cm9weShbYS5wYWdlWHx8YS5jbGllbnRYLGEucGFnZVl8fGEuY2xpZW50WV0sMSxcInRvdWNoXCIpO1QodGhpcywwKX0sbGE6ZnVuY3Rpb24oKXtUKHRoaXMsMil9LGNhOmZ1bmN0aW9uKGEpe2E9YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnh8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS55fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkuejtpZih3aW5kb3cub3JpZW50YXRpb24pe3ZhciBiPXdpbmRvdy5vcmllbnRhdGlvbjtcIm51bWJlclwiPT09dHlwZW9mIGImJnRoaXMuYWRkRW50cm9weShiLDEsXCJhY2NlbGVyb21ldGVyXCIpfWEmJnRoaXMuYWRkRW50cm9weShhLDIsXCJhY2NlbGVyb21ldGVyXCIpO1QodGhpcywwKX19O1xuZnVuY3Rpb24gY2EoYSxiKXt2YXIgYyxkPXNqY2wucmFuZG9tLkpbYV0sZT1bXTtmb3IoYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJmUucHVzaChkW2NdKTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10oYil9ZnVuY3Rpb24gVChhLGIpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2Uubm93P2EuYWRkRW50cm9weSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYixcImxvYWR0aW1lXCIpOmEuYWRkRW50cm9weSgobmV3IERhdGUpLnZhbHVlT2YoKSxiLFwibG9hZHRpbWVcIil9ZnVuY3Rpb24gYmEoYSl7YS5iPU4oYSkuY29uY2F0KE4oYSkpO2EuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKGEuYil9ZnVuY3Rpb24gTihhKXtmb3IodmFyIGI9MDs0PmImJihhLm1bYl09YS5tW2JdKzF8MCwhYS5tW2JdKTtiKyspO3JldHVybiBhLksuZW5jcnlwdChhLm0pfVxuZnVuY3Rpb24gTyhhLGIpe3JldHVybiBmdW5jdGlvbigpe2IuYXBwbHkoYSxhcmd1bWVudHMpfX1zamNsLnJhbmRvbT1uZXcgc2pjbC5wcm5nKDYpO1xuYTp0cnl7dmFyIFUsZGEsWixoYTtpZihoYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpe3ZhciBpYTt0cnl7aWE9cmVxdWlyZShcImNyeXB0b1wiKX1jYXRjaChhKXtpYT1udWxsfWhhPWRhPWlhfWlmKGhhJiZkYS5yYW5kb21CeXRlcylVPWRhLnJhbmRvbUJ5dGVzKDEyOCksVT1uZXcgVWludDMyQXJyYXkoKG5ldyBVaW50OEFycmF5KFUpKS5idWZmZXIpLHNqY2wucmFuZG9tLmFkZEVudHJvcHkoVSwxMDI0LFwiY3J5cHRvWydyYW5kb21CeXRlcyddXCIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe1o9bmV3IFVpbnQzMkFycmF5KDMyKTtpZih3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtlbHNlIGlmKHdpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO1xuZWxzZSBicmVhayBhO3NqY2wucmFuZG9tLmFkZEVudHJvcHkoWiwxMDI0LFwiY3J5cHRvWydnZXRSYW5kb21WYWx1ZXMnXVwiKX19Y2F0Y2goYSl7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5jb25zb2xlJiYoY29uc29sZS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgY29sbGVjdGluZyBlbnRyb3B5IGZyb20gdGhlIGJyb3dzZXI6XCIpLGNvbnNvbGUubG9nKGEpKX1cbnNqY2wuanNvbj17ZGVmYXVsdHM6e3Y6MSxpdGVyOjFFNCxrczoxMjgsdHM6NjQsbW9kZTpcImNjbVwiLGFkYXRhOlwiXCIsY2lwaGVyOlwiYWVzXCJ9LGhhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb24sZj1lLmooe2l2OnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDQsMCl9LGUuZGVmYXVsdHMpLGc7ZS5qKGYsYyk7Yz1mLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgZi5zYWx0JiYoZi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYuaXYmJihmLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLml2KSk7aWYoIXNqY2wubW9kZVtmLm1vZGVdfHwhc2pjbC5jaXBoZXJbZi5jaXBoZXJdfHxcInN0cmluZ1wiPT09dHlwZW9mIGEmJjEwMD49Zi5pdGVyfHw2NCE9PWYudHMmJjk2IT09Zi50cyYmMTI4IT09Zi50c3x8MTI4IT09Zi5rcyYmMTkyIT09Zi5rcyYmMHgxMDAhPT1mLmtzfHwyPmYuaXYubGVuZ3RofHxcbjQ8Zi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGYpLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSxmLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwucHVibGljS2V5JiYoZz1hLmtlbSgpLGYua2VtdGFnPWcudGFnLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGMmJihmLmFkYXRhPWM9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhjKSk7Zz1uZXcgc2pjbC5jaXBoZXJbZi5jaXBoZXJdKGEpO2UuaihkLGYpO2Qua2V5PWE7Zi5jdD1cImNjbVwiPT09Zi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmXG5iIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpOnNqY2wubW9kZVtmLm1vZGVdLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTtyZXR1cm4gZn0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb24sZj1lLmhhLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZS5lbmNvZGUoZil9LGdhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb247Yj1lLmooZS5qKGUuaih7fSxlLmRlZmF1bHRzKSxiKSxjLCEwKTt2YXIgZixnO2Y9Yi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGIuc2FsdCYmKGIuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiLml2JiYoYi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5pdikpO2lmKCFzamNsLm1vZGVbYi5tb2RlXXx8IXNqY2wuY2lwaGVyW2IuY2lwaGVyXXx8XCJzdHJpbmdcIj09PVxudHlwZW9mIGEmJjEwMD49Yi5pdGVyfHw2NCE9PWIudHMmJjk2IT09Yi50cyYmMTI4IT09Yi50c3x8MTI4IT09Yi5rcyYmMTkyIT09Yi5rcyYmMHgxMDAhPT1iLmtzfHwhYi5pdnx8Mj5iLml2Lmxlbmd0aHx8NDxiLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsYiksYT1nLmtleS5zbGljZSgwLGIua3MvMzIpLGIuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5zZWNyZXRLZXkmJihhPWEudW5rZW0oc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIua2VtdGFnKSkuc2xpY2UoMCxiLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmJiYoZj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGYpKTtnPW5ldyBzamNsLmNpcGhlcltiLmNpcGhlcl0oYSk7Zj1cImNjbVwiPT09XG5iLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZiLmN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZGVjcnlwdChnLGIuY3QsYi5pdixiLnRhZyxmLGIudHMpOnNqY2wubW9kZVtiLm1vZGVdLmRlY3J5cHQoZyxiLmN0LGIuaXYsZixiLnRzKTtlLmooZCxiKTtkLmtleT1hO3JldHVybiAxPT09Yy5yYXc/ZjpzamNsLmNvZGVjLnV0ZjhTdHJpbmcuZnJvbUJpdHMoZil9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uO3JldHVybiBlLmdhKGEsZS5kZWNvZGUoYiksYyxkKX0sZW5jb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9XCJ7XCIsZD1cIlwiO2ZvcihiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7aWYoIWIubWF0Y2goL15bYS16MC05XSskL2kpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNvZGU6IGludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtjKz1kKydcIicrXG5iKydcIjonO2Q9XCIsXCI7c3dpdGNoKHR5cGVvZiBhW2JdKXtjYXNlIFwibnVtYmVyXCI6Y2FzZSBcImJvb2xlYW5cIjpjKz1hW2JdO2JyZWFrO2Nhc2UgXCJzdHJpbmdcIjpjKz0nXCInK2VzY2FwZShhW2JdKSsnXCInO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjKz0nXCInK3NqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGFbYl0sMCkrJ1wiJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJqc29uIGVuY29kZTogdW5zdXBwb3J0ZWQgdHlwZVwiKTt9fXJldHVybiBjK1wifVwifSxkZWNvZGU6ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccy9nLFwiXCIpO2lmKCFhLm1hdGNoKC9eXFx7LipcXH0kLykpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTthPWEucmVwbGFjZSgvXlxce3xcXH0kL2csXCJcIikuc3BsaXQoLywvKTt2YXIgYj17fSxjLGQ7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoIShkPWFbY10ubWF0Y2goL15cXHMqKD86KFtcIiddPykoW2Etel1bYS16MC05XSopXFwxKVxccyo6XFxzKig/OigtP1xcZCspfFwiKFthLXowLTkrXFwvJSpfLkA9XFwtXSopXCJ8KHRydWV8ZmFsc2UpKSQvaSkpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7XG5udWxsIT1kWzNdP2JbZFsyXV09cGFyc2VJbnQoZFszXSwxMCk6bnVsbCE9ZFs0XT9iW2RbMl1dPWRbMl0ubWF0Y2goL14oY3R8YWRhdGF8c2FsdHxpdikkLyk/c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGRbNF0pOnVuZXNjYXBlKGRbNF0pOm51bGwhPWRbNV0mJihiW2RbMl1dPVwidHJ1ZVwiPT09ZFs1XSl9cmV0dXJuIGJ9LGo6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWEmJihhPXt9KTtpZih2b2lkIDA9PT1iKXJldHVybiBhO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe2lmKGMmJnZvaWQgMCE9PWFbZF0mJmFbZF0hPT1iW2RdKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwicmVxdWlyZWQgcGFyYW1ldGVyIG92ZXJyaWRkZW5cIik7YVtkXT1iW2RdfXJldHVybiBhfSxyYTpmdW5jdGlvbihhLGIpe3ZhciBjPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdIT09YltkXSYmKGNbZF09YVtkXSk7cmV0dXJuIGN9LHFhOmZ1bmN0aW9uKGEsXG5iKXt2YXIgYz17fSxkO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspdm9pZCAwIT09YVtiW2RdXSYmKGNbYltkXV09YVtiW2RdXSk7cmV0dXJuIGN9fTtzamNsLmVuY3J5cHQ9c2pjbC5qc29uLmVuY3J5cHQ7c2pjbC5kZWNyeXB0PXNqY2wuanNvbi5kZWNyeXB0O3NqY2wubWlzYy5vYT17fTtzamNsLm1pc2MuY2FjaGVkUGJrZGYyPWZ1bmN0aW9uKGEsYil7dmFyIGM9c2pjbC5taXNjLm9hLGQ7Yj1ifHx7fTtkPWIuaXRlcnx8MUUzO2M9Y1thXT1jW2FdfHx7fTtkPWNbZF09Y1tkXXx8e2ZpcnN0U2FsdDpiLnNhbHQmJmIuc2FsdC5sZW5ndGg/Yi5zYWx0LnNsaWNlKDApOnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDIsMCl9O2M9dm9pZCAwPT09Yi5zYWx0P2QuZmlyc3RTYWx0OmIuc2FsdDtkW2NdPWRbY118fHNqY2wubWlzYy5wYmtkZjIoYSxjLGIuaXRlcik7cmV0dXJue2tleTpkW2NdLnNsaWNlKDApLHNhbHQ6Yy5zbGljZSgwKX19O1xuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9c2pjbCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHNqY2x9KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfQUNUSU9OIH0gZnJvbSBcIn4vZW51bS93b3JrZXItYWN0aW9uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckV2ZW50IH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1ldmVudC50c1wiO1xuXG5kZWNsYXJlIGxldCBzZWxmOiBXb3JrZXI7XG5cbmV4cG9ydCBjb25zdCBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbi8qKlxuICogVXBkYXRlIGZpbGUgaW4gd29ya2VycyBhbmQgcHJvdmlkZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtYWluIHRocmVhZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIGFyZ3NcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgYXJnczogUGFydGlhbDxMdWZpRmlsZT4pID0+IHtcbiAgT2JqZWN0LmFzc2lnbihsdWZpRmlsZSwgYXJncyk7XG5cbiAgaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULkZJTEVfVVBEQVRFRCxcbiAgICAgIGx1ZmlGaWxlLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIGx1ZmlGaWxlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRGaWxlRXJyb3IgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBlcnJvcjogRXJyb3IpID0+IHtcbiAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuRkFJTEVEIH0pO1xuXG4gIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSBhcyBXb3JrZXJFdmVudCk7XG59O1xuXG4vKipcbiAqIEluaXQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjaGlsZCB3b3JrZXIncyBvbm1lc3NhZ2UgZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0ID0gKCkgPT4ge1xuICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFTkVELCAoKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuU09DS0VUX09QRU5FRCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzV29ya2VyQWN0aW9uTWVzc2FnZSA9IChcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgbWVzc2FnZTogYW55LFxuKTogbWVzc2FnZSBpcyBXb3JrZXJBY3Rpb25NZXNzYWdlID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIG1lc3NhZ2UgIT09IG51bGwgJiZcbiAgICBcImFjdGlvblwiIGluIG1lc3NhZ2UgJiZcbiAgICBPYmplY3QudmFsdWVzKFdPUktFUl9BQ1RJT04pLmluY2x1ZGVzKG1lc3NhZ2UuYWN0aW9uKVxuICApO1xufTtcbiIsICJjb25zdCBkZWZhdWx0RXJyb3JDb25maWcgPSB7XHJcbiAgICB3aXRoU3RhY2tUcmFjZTogZmFsc2UsXHJcbn07XHJcbi8vIEN1c3RvbSBlcnJvciBvYmplY3RcclxuLy8gQ29udGV4dCAvIGRpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBlcm1hY3JvL25ldmVydGhyb3cvcHVsbC8yMTVcclxuY29uc3QgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yID0gKG1lc3NhZ2UsIHJlc3VsdCwgY29uZmlnID0gZGVmYXVsdEVycm9yQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVzdWx0LmlzT2soKVxyXG4gICAgICAgID8geyB0eXBlOiAnT2snLCB2YWx1ZTogcmVzdWx0LnZhbHVlIH1cclxuICAgICAgICA6IHsgdHlwZTogJ0VycicsIHZhbHVlOiByZXN1bHQuZXJyb3IgfTtcclxuICAgIGNvbnN0IG1heWJlU3RhY2sgPSBjb25maWcud2l0aFN0YWNrVHJhY2UgPyBuZXcgRXJyb3IoKS5zdGFjayA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIHN0YWNrOiBtYXliZVN0YWNrLFxyXG4gICAgfTtcclxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5jbGFzcyBSZXN1bHRBc3luYyB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gcmVzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21TYWZlUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2UudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVByb21pc2UocHJvbWlzZSwgZXJyb3JGbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBuZXcgRXJyKGVycm9yRm4oZSkpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHN0YXRpYyBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMoKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmbiguLi5hcmdzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihlcnJvckZuID8gZXJyb3JGbihlcnJvcikgOiBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKSgpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmUoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3QoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lV2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmKHJlcy52YWx1ZSkpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdSZXMgPSB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdSZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIobmV3UmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGVlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc09rKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycih5aWVsZCBmKHJlcy5lcnJvcikpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZSBpbnN0YW5jZW9mIFJlc3VsdEFzeW5jID8gbmV3VmFsdWUuX3Byb21pc2UgOiBuZXdWYWx1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGYocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMubWF0Y2gob2ssIF9lcnIpKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy51bndyYXBPcih0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiA5LjAuMC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBgc2FmZVRyeWAgd2l0aG91dCB0aGlzIG1ldGhvZC5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBzYWZlVHJ5KGFzeW5jIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgKiAgIGNvbnN0IG9rVmFsdWUgPSB5aWVsZCogeW91clJlc3VsdFxyXG4gICAgICogfSlcclxuICAgICAqIGBgYFxyXG4gICAgICogRW11bGF0ZXMgUnVzdCdzIGA/YCBvcGVyYXRvciBpbiBgc2FmZVRyeWAncyBib2R5LiBTZWUgYWxzbyBgc2FmZVRyeWAuXHJcbiAgICAgKi9cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc2FmZVVud3JhcF8xKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdCh5aWVsZCBfX2F3YWl0KHlpZWxkKiBfX2FzeW5jRGVsZWdhdG9yKF9fYXN5bmNWYWx1ZXMoeWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnNhZmVVbndyYXAoKSkpKSkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIE1ha2VzIFJlc3VsdEFzeW5jIGltcGxlbWVudCBQcm9taXNlTGlrZTxSZXN1bHQ+XHJcbiAgICB0aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIF9hKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChlcnJBc3luYyhyZXN1bHQuZXJyb3IpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5jb25zdCBva0FzeW5jID0gKHZhbHVlKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBPayh2YWx1ZSkpKTtcclxuY29uc3QgZXJyQXN5bmMgPSAoZXJyKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBFcnIoZXJyKSkpO1xyXG5jb25zdCBmcm9tUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlO1xyXG5jb25zdCBmcm9tU2FmZVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2U7XHJcbmNvbnN0IGZyb21Bc3luY1Rocm93YWJsZSA9IFJlc3VsdEFzeW5jLmZyb21UaHJvd2FibGU7XG5cbi8qKlxyXG4gKiBTaG9ydCBjaXJjdWl0cyBvbiB0aGUgRklSU1QgRXJyIHZhbHVlIHRoYXQgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3QgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWNjLm1hcCgobGlzdCkgPT4gbGlzdC5wdXNoKHJlc3VsdC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbi8qIFRoaXMgaXMgdGhlIHR5cGVzYWZlIHZlcnNpb24gb2YgUHJvbWlzZS5hbGxcclxuICpcclxuICogVGFrZXMgYSBsaXN0IG9mIFJlc3VsdEFzeW5jPFQsIEU+IGFuZCBzdWNjZXNzIGlmIGFsbCBpbm5lciByZXN1bHRzIGFyZSBPayB2YWx1ZXNcclxuICogb3IgZmFpbHMgaWYgb25lIChvciBtb3JlKSBvZiB0aGUgaW5uZXIgcmVzdWx0cyBhcmUgRXJyIHZhbHVlc1xyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdCA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0KTtcclxuLyoqXHJcbiAqIEdpdmUgYSBsaXN0IG9mIGFsbCB0aGUgZXJyb3JzIHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MuZXJyb3IucHVzaChyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihbcmVzdWx0LmVycm9yXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MudmFsdWUucHVzaChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gcmVzdWx0LmlzT2soKSAmJiBhY2MuaXNFcnIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxyXG52YXIgUmVzdWx0O1xyXG4oZnVuY3Rpb24gKFJlc3VsdCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyBhIGZ1bmN0aW9uIHdpdGggYSB0cnkgY2F0Y2gsIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWVcclxuICAgICAqIGFyZ3VtZW50cyBidXQgcmV0dXJuaW5nIGBPa2AgaWYgc3VjY2Vzc2Z1bCwgYEVycmAgaWYgdGhlIGZ1bmN0aW9uIHRocm93c1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byB3cmFwIHdpdGggb2sgb24gc3VjY2VzcyBvciBlcnIgb24gZmFpbHVyZVxyXG4gICAgICogQHBhcmFtIGVycm9yRm4gd2hlbiBhbiBlcnJvciBpcyB0aHJvd24sIHRoaXMgd2lsbCB3cmFwIHRoZSBlcnJvciByZXN1bHQgaWYgcHJvdmlkZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZ1bmN0aW9uIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZXJyb3JGbiA/IGVycm9yRm4oZSkgOiBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuZnJvbVRocm93YWJsZSA9IGZyb21UaHJvd2FibGU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3QocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZSA9IGNvbWJpbmU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lV2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lV2l0aEFsbEVycm9ycyA9IGNvbWJpbmVXaXRoQWxsRXJyb3JzO1xyXG59KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7XHJcbmNvbnN0IG9rID0gKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpO1xyXG5mdW5jdGlvbiBlcnIoZXJyKSB7XHJcbiAgICByZXR1cm4gbmV3IEVycihlcnIpO1xyXG59XHJcbmZ1bmN0aW9uIHNhZmVUcnkoYm9keSkge1xyXG4gICAgY29uc3QgbiA9IGJvZHkoKS5uZXh0KCk7XHJcbiAgICBpZiAobiBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG4udGhlbigocikgPT4gci52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG4udmFsdWU7XHJcbn1cclxuY2xhc3MgT2sge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwRXJyKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoX3ZhbHVlKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZih0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gVGVlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYXN5bmNBbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKCkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY01hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHVud3JhcE9yKF92KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLXlpZWxkICovXHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcEVycmAgb24gYW4gT2snLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCByZXF1aXJlLXlpZWxkXHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgRXJyIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycihmKHRoaXMuZXJyb3IpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNBbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNNYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih2KSB7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcbiAgICBtYXRjaChfb2ssIGVycikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5lcnJvcjtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHlpZWxkIGVycihlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHVzZSB0aGlzIGdlbmVyYXRvciBvdXQgb2YgYHNhZmVUcnlgJyk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBgIG9uIGFuIEVycicsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcjtcclxuICAgIH1cclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICB5aWVsZCBzZWxmO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGZyb21UaHJvd2FibGUgPSBSZXN1bHQuZnJvbVRocm93YWJsZTtcclxuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCB7IEVyciwgT2ssIFJlc3VsdCwgUmVzdWx0QXN5bmMsIGVyciwgZXJyQXN5bmMsIGZyb21Bc3luY1Rocm93YWJsZSwgZnJvbVByb21pc2UsIGZyb21TYWZlUHJvbWlzZSwgZnJvbVRocm93YWJsZSwgb2ssIG9rQXN5bmMsIHNhZmVUcnkgfTtcbiIsICJ0eXBlIEpzb25hYmxlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IHJlYWRvbmx5IEpzb25hYmxlW11cbiAgfCB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb25hYmxlIH1cbiAgfCB7IHRvSlNPTigpOiBKc29uYWJsZSB9O1xuXG5leHBvcnQgY2xhc3MgQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dD86IEpzb25hYmxlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBjYXVzZT86IEVycm9yOyBjb250ZXh0PzogSnNvbmFibGUgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGNhdXNlLCBjb250ZXh0IH0gPSBvcHRpb25zO1xuXG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0RXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cbiIsICJpbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldENvbm5lY3Rpb25FcnJvciBleHRlbmRzIFdlYlNvY2tldEVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZSA9IFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBXZWJTb2NrZXRcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0dXJsZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0dXJsZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0L3VybFwiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gZW5jcnlwdGVkRGF0YSB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZDogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PlxuICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXY6IGVuY3J5cHRlZC5pdiBhcyBVaW50OEFycmF5LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgZW5jcnlwdGVkLmRhdGEgYXMgQXJyYXlCdWZmZXIsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PiBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+IHtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdixcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT5cbiAgICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KSxcbiAgICApLmFuZFRoZW4oKGVuY3J5cHRlZCkgPT4ge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuICAgICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICAgIGl2LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgaW50byBhIENyeXB0b0tleSwgdXNhYmxlIGluIFdlYiBDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGltcG9ydEtleSA9IChrZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPENyeXB0b0tleSwgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgXCJyYXdcIixcbiAgICAgIGI2NHVybGRlY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiBcIkFFUy1HQ01cIiB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXG4gICAgICAgIFwiZW5jcnlwdFwiLFxuICAgICAgICBcImRlY3J5cHRcIixcbiAgICAgIF0sXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gaW1wb3J0IGNyeXB0b2dyYXBoeSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSS5cbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgLmdlbmVyYXRlS2V5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgICAgbGVuZ3RoOiAyNTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChnZW5lcmF0ZWRLZXkpID0+XG4gICAgICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAgICAgLmV4cG9ydEtleShcInJhd1wiLCBnZW5lcmF0ZWRLZXkpXG4gICAgICAgICAgICAudGhlbigoa2V5KSA9PiByZXNvbHZlKGI2NHVybGVuY29kZShrZXkpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIHRoZSB1cmxcIiwge1xuICAgICAgICAgICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgV2ViQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgICAgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgcHJvbWlzZSgpLFxuICAgIChlcnJvcikgPT4gbmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gXCJ+L2FwaS9jcnlwdG8vc2pjbC50c1wiO1xuaW1wb3J0ICogYXMgd2ViIGZyb20gXCJ+L2FwaS9jcnlwdG8vd2ViLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9iamVjdCB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PlxuICB2YWx1ZS5hbGdvID09PSB1bmRlZmluZWQgfHwgdmFsdWUuYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuZGVjcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmRlY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGFuZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PlxuICAoYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wpXG4gICAgPyBzamNsLmVuY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5lbmNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IGtleSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9IChcbiAgYWxnbyA9IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbCA/IHNqY2wuZ2VuZXJhdGVLZXkoKSA6IHdlYi5nZW5lcmF0ZUtleSgpO1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyB0aGUgcHJvdmlkZWQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmhhc2hQYXNzd29yZChwYXNzd29yZClcbiAgICA6IHdlYi5oYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuIiwgImltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgU29ja2V0UGF0aCB9IGZyb20gXCJ+L2VudW0vc29ja2V0LXBhdGgudHNcIjtcbmltcG9ydCB7IFVwbG9hZEVycm9yIH0gZnJvbSBcIn4vZXJyb3IvdXBsb2FkL3VwbG9hZC1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1jb25uZWN0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9jbGllbnQtdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ2FuY2VsTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWNhbmNlbC1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1kb3dubG9hZC1jaHVuay1zdWNjZXNzLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi90eXBlL3NlcnZlci1kb3dubG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcblxuZXhwb3J0IGNvbnN0IHNvY2tldHM6IHtcbiAgW2tleTogc3RyaW5nXTogV2ViU29ja2V0O1xufSA9IHt9O1xuXG5jb25zdCBNQVhfRVJST1JTID0gNTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBjYW5jZWwgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkNhbmNlbE1lc3NhZ2UgPSAoXG4gIGRhdGE6IFNlcnZlckNhbmNlbE1ldGFkYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgZGF0YS5zdWNjZXNzKTtcblxuICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBkb3dubG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uRG93bmxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5zcGxpdChcIlhYTU9KT1hYXCIpO1xuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gIGlmIChtZXRhZGF0YVN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGE7XG5cbiAgICBpZiAoaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhKG1ldGFkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gICAgICBpZiAoZGF0YVN0cmluZykge1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcblxuICAgICAgICAvLyBJZiBmaWxlIHdhcyB1cGxvYWRlZCB1c2luZyBMdWZpIEFQSVxuICAgICAgICBpZiAoZW5jcnlwdGVkRGF0YS5pdikge1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuaXYgPSBuZXcgVWludDhBcnJheShPYmplY3QudmFsdWVzKGVuY3J5cHRlZERhdGEuaXYpKTtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRkZWNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3J5cHRvLmRlY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIGVuY3J5cHRlZERhdGEpLmFuZFRoZW4oXG4gICAgICAgICAgKGRlY3J5cHRlZFBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBkZWNyeXB0ZWRQYXJ0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkZWNyeXB0ZWRQYXJ0KS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIDogZGVjcnlwdGVkUGFydDtcblxuICAgICAgICAgICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5wYXJ0ID09PSAwKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAgICAgICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgICAgICAgICAgIGRlbEF0Rmlyc3RWaWV3OiBtZXRhZGF0YS5kZWxfYXRfZmlyc3RfdmlldyxcbiAgICAgICAgICAgICAgICBkZWxheTogbWV0YWRhdGEuZGVsYXksXG4gICAgICAgICAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICAgICAgICAgIHRvdGFsQ2h1bmtzOiBtZXRhZGF0YS50b3RhbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBtZXRhZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHppcHBlZDogbWV0YWRhdGEuemlwcGVkLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9TVEFSVEVEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfRE9XTkxPQURFRCwgYnVmZmVyLCBtZXRhZGF0YS5wYXJ0KTtcblxuICAgICAgICAgICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBtZXRhZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW5kRG93bmxvYWQobHVmaUZpbGUpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX0NPTVBMRVRFKTtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihtZXRhZGF0YS5tc2cpO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgKTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIHVwbG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uVXBsb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICBpZiAocmVzcG9uc2UuaiA9PT0gMCkge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBVcGxvYWQgb2YgJHtsdWZpRmlsZS5rZXlzLmNsaWVudH0gc3RhcnRlZGApO1xuXG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgIGtleXM6IHsgY2xpZW50OiBsdWZpRmlsZS5rZXlzLmNsaWVudCwgc2VydmVyOiByZXNwb25zZS5zaG9ydCB9LFxuICAgICAgICBhY3Rpb25Ub2tlbjogcmVzcG9uc2UudG9rZW4sXG4gICAgICAgIHF1ZXVlSW5kZXg6IHJlc3BvbnNlLmksXG4gICAgICB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX1NUQVJURUQpO1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRfYXQsXG4gICAgfSk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19VUExPQURFRCk7XG5cbiAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IGx1ZmlGaWxlLnRvdGFsQ2h1bmtzKSB7XG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5DT01QTEVURSB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NPTVBMRVRFKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihyZXNwb25zZS5tc2cpO1xuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIG9uIHNvY2tldHMgXCJvbm1lc3NhZ2VcIiBldmVudFxuICpcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbk1lc3NhZ2UgPSAoXG4gIGU6IE1lc3NhZ2VFdmVudCxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgY29uc3QgZGF0YSA9IHRyeVBhcnNlSnNvbihlLmRhdGEpO1xuICBsZXQgY2FsbGJhY2s7XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEuYWN0aW9uICYmIGRhdGEubXNnKSB7XG4gICAgICAvLyBJZiBlcnJvclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoZGF0YS5tc2cpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXCJkZWxheVwiIGluIGRhdGEpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvblVwbG9hZE1lc3NhZ2UoZGF0YSwgbHVmaUZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbkNhbmNlbE1lc3NhZ2UoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrID0gb25Eb3dubG9hZE1lc3NhZ2UoZS5kYXRhLCBsdWZpRmlsZSk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIElzIHNvY2tldCBjb25uZWN0aW5nP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3RpbmcgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG5cbi8qKlxuICogSXMgc29ja2V0IHNwYXduZWQ/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3Bhd25lZCA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblxuLyoqXG4gKiBBc2sgV2ViU29ja2V0IHRvIGNhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5jZWxVcGxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke1xuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogbHVmaUZpbGUua2V5cy5zZXJ2ZXIsXG4gICAgICAgIG1vZF90b2tlbjogbHVmaUZpbGUuYWN0aW9uVG9rZW4sXG4gICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgaTogbHVmaUZpbGUucXVldWVJbmRleCxcbiAgICAgIH0pXG4gICAgfVhYTU9KT1hYdXNlbGVzc2AsXG4gICk7XG59O1xuXG4vKipcbiAqIERvd25sb2FkIGEgcGFydCBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBjaHVua051bWJlclxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgY2h1bmtOdW1iZXI6IG51bWJlcixcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlO1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgV2ViU29ja2V0IHRoZSBkb3dubG9hZCBlbmRlZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuZERvd25sb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTogeyBlbmRlZDogdHJ1ZTsgZmlsZV9wd2Q/OiBzdHJpbmcgfTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFVwbG9hZCBhIGNodW5rIG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIG1ldGFkYXRhXG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1ldGFkYXRhOiBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZW5jb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBBcnJheUJ1ZmZlcik7XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpfVhYTU9KT1hYJHtKU09OLnN0cmluZ2lmeShlbmNyeXB0ZWREYXRhKX1gLFxuICApO1xufTtcblxuLyoqXG4gKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBoYXNQcmlvcml0eVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgc2VuZE1lc3NhZ2UgPSAoXG4gIHNvY2tldFVybDogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldFVybCkpIHtcbiAgICByZXR1cm4gc3Bhd24oc29ja2V0VXJsKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0VXJsXS5vbm1lc3NhZ2UgPSAoZSkgPT4gb25NZXNzYWdlKGUsIGx1ZmlGaWxlKTtcbiAgICAgIHJldHVybiBzZW5kTWVzc2FnZShzb2NrZXRVcmwsIGx1ZmlGaWxlLCBtZXNzYWdlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzb2NrZXRzW3NvY2tldFVybF0uc2VuZChtZXNzYWdlKTtcblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbi8qKlxuICogU3Bhd24gYSBuZXcgV2ViU29ja2V0IG9yIHJldXNlIGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcGFyYW0gZXJyb3JDb3VudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNwYXduID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbiAgZXJyb3JDb3VudCA9IDAsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkgJiYgIWlzQ29ubmVjdGluZyhzb2NrZXRLZXkpKSB7XG4gICAgLy8gY29uc29sZS5pbmZvKGBTcGF3bmluZyBXZWJTb2NrZXQgJHtzb2NrZXRVcmx9YCk7XG4gICAgc29ja2V0c1tzb2NrZXRLZXldID0gbmV3IFdlYlNvY2tldChzb2NrZXRLZXkpO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVELCAoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsICgpID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfSk7XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25vcGVuID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIG9wZW5gKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVORUQpO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBpZiAoKytlcnJvckNvdW50IDw9IE1BWF9FUlJPUlMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS4gVHJ5aW5nIGFnYWluLiAke2Vycm9yQ291bnR9IC8gJHtNQVhfRVJST1JTfWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHNwYXduKHNvY2tldEtleSwgZXJyb3JDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT05FUlJPUik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICBuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgYFVuYWJsZSB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uYCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gd2FpdEZvckNvbm5lY3Rpb24oc29ja2V0S2V5KVxuICAgIC5hbmRUaGVuKCgpID0+IG9rQXN5bmMoc29ja2V0S2V5KSlcbiAgICAub3JFbHNlKChlcnJvcikgPT4gZXJyQXN5bmMoZXJyb3IpKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4uIFJldHVybnMgYW4gZXJyb3IgaWYgdG9vIG1hbnkgY29ubmVjdGlvbiBhdHRlbXB0cyBhcmUgbWFkZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgd2FpdEZvckNvbm5lY3Rpb24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRzLm9uKEVWRU5ULlNPQ0tFVF9PTkVSUk9SLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIGVuc3VyZUVycm9yKGVycm9yKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIENsb3NlIHRoZSBXZWJTb2NrZXRcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZSA9IChzb2NrZXRLZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldEVycm9yKFwiVW5hYmxlIHRvIGNsb3NlIHRoZSBXZWJTb2NrZXRcIikpO1xuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhbiBpbnN0YW5jZSBVUkwgaW4gYSBXZWJTb2NrZXQgVVJMXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcGFyYW0gcGF0aG5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNvY2tldFVybCA9IChpbnN0YW5jZVVybDogVVJMLCBwYXRobmFtZTogc3RyaW5nKTogVVJMID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChpbnN0YW5jZVVybCk7XG4gIHVybC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiID8gXCJ3czpcIiA6IFwid3NzOlwiO1xuICB1cmwucGF0aG5hbWUgKz0gcGF0aG5hbWU7XG5cbiAgcmV0dXJuIG5ldyBVUkwodXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkb3dubG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChcbiAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksXG4gICAgU29ja2V0UGF0aC5ET1dOTE9BRCArIGAvJHtsdWZpRmlsZS5rZXlzLnNlcnZlcn1gLFxuICApLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSB1cGxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSwgU29ja2V0UGF0aC5VUExPQUQpXG4gICAgLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIFRyeSB0byBwYXJzZSBhIHN0cmluZyBpbnRvIGEgSlNPTi4gUmV0dXJucyBmYWxzZSBpZiBub3QgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHRyeVBhcnNlSnNvbiA9IChkYXRhOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgaWYgKHBhcnNlZE9iamVjdCAmJiB0eXBlb2YgcGFyc2VkT2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VkT2JqZWN0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLyogZW1wdHkgKi9cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9IChcbiAgbWVzc2FnZTogU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhLFxuKTogbWVzc2FnZSBpcyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIG1lc3NhZ2UgIT09IG51bGwgJiYgIShcIm1zZ1wiIGluIG1lc3NhZ2UpO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9pbmRleC5qcydcblxuZXhwb3J0IHsgRXZlbnRFbWl0dGVyIH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIiwgImV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcblx0fVxufVxuXG4vKipcbkFuIGVycm9yIHRvIGJlIHRocm93biB3aGVuIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQgYnkgQWJvcnRDb250cm9sbGVyLlxuRE9NRXhjZXB0aW9uIGlzIHRocm93biBpbnN0ZWFkIG9mIHRoaXMgRXJyb3Igd2hlbiBET01FeGNlcHRpb24gaXMgYXZhaWxhYmxlLlxuKi9cbmV4cG9ydCBjbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fVxufVxuXG4vKipcblRPRE86IFJlbW92ZSBBYm9ydEVycm9yIGFuZCBqdXN0IHRocm93IERPTUV4Y2VwdGlvbiB3aGVuIHRhcmdldGluZyBOb2RlIDE4LlxuKi9cbmNvbnN0IGdldERPTUV4Y2VwdGlvbiA9IGVycm9yTWVzc2FnZSA9PiBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvbiA9PT0gdW5kZWZpbmVkXG5cdD8gbmV3IEFib3J0RXJyb3IoZXJyb3JNZXNzYWdlKVxuXHQ6IG5ldyBET01FeGNlcHRpb24oZXJyb3JNZXNzYWdlKTtcblxuLyoqXG5UT0RPOiBSZW1vdmUgYmVsb3cgZnVuY3Rpb24gYW5kIGp1c3QgJ3JlamVjdChzaWduYWwucmVhc29uKScgd2hlbiB0YXJnZXRpbmcgTm9kZSAxOC5cbiovXG5jb25zdCBnZXRBYm9ydGVkUmVhc29uID0gc2lnbmFsID0+IHtcblx0Y29uc3QgcmVhc29uID0gc2lnbmFsLnJlYXNvbiA9PT0gdW5kZWZpbmVkXG5cdFx0PyBnZXRET01FeGNlcHRpb24oJ1RoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicpXG5cdFx0OiBzaWduYWwucmVhc29uO1xuXG5cdHJldHVybiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IGdldERPTUV4Y2VwdGlvbihyZWFzb24pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcFRpbWVvdXQocHJvbWlzZSwgb3B0aW9ucykge1xuXHRjb25zdCB7XG5cdFx0bWlsbGlzZWNvbmRzLFxuXHRcdGZhbGxiYWNrLFxuXHRcdG1lc3NhZ2UsXG5cdFx0Y3VzdG9tVGltZXJzID0ge3NldFRpbWVvdXQsIGNsZWFyVGltZW91dH0sXG5cdH0gPSBvcHRpb25zO1xuXG5cdGxldCB0aW1lcjtcblxuXHRjb25zdCB3cmFwcGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicgfHwgTWF0aC5zaWduKG1pbGxpc2Vjb25kcykgIT09IDEpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYG1pbGxpc2Vjb25kc1xcYCB0byBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290IFxcYCR7bWlsbGlzZWNvbmRzfVxcYGApO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLnNpZ25hbCkge1xuXHRcdFx0Y29uc3Qge3NpZ25hbH0gPSBvcHRpb25zO1xuXHRcdFx0aWYgKHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRcdHJlamVjdChnZXRBYm9ydGVkUmVhc29uKHNpZ25hbCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHRcdHJlamVjdChnZXRBYm9ydGVkUmVhc29uKHNpZ25hbCkpO1xuXHRcdFx0fTtcblxuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyLCB7b25jZTogdHJ1ZX0pO1xuXG5cdFx0XHRwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbGxpc2Vjb25kcyA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB7XG5cdFx0XHRwcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBXZSBjcmVhdGUgdGhlIGVycm9yIG91dHNpZGUgb2YgYHNldFRpbWVvdXRgIHRvIHByZXNlcnZlIHRoZSBzdGFjayB0cmFjZS5cblx0XHRjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgVGltZW91dEVycm9yKCk7XG5cblx0XHR0aW1lciA9IGN1c3RvbVRpbWVycy5zZXRUaW1lb3V0LmNhbGwodW5kZWZpbmVkLCAoKSA9PiB7XG5cdFx0XHRpZiAoZmFsbGJhY2spIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbGxiYWNrKCkpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgcHJvbWlzZS5jYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cHJvbWlzZS5jYW5jZWwoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRpbWVvdXRFcnJvci5tZXNzYWdlID0gbWVzc2FnZSA/PyBgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHttaWxsaXNlY29uZHN9IG1pbGxpc2Vjb25kc2A7XG5cdFx0XHRcdHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sIG1pbGxpc2Vjb25kcyk7XG5cblx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShhd2FpdCBwcm9taXNlKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fSkoKTtcblx0fSk7XG5cblx0Y29uc3QgY2FuY2VsYWJsZVByb21pc2UgPSB3cmFwcGVkUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRjYW5jZWxhYmxlUHJvbWlzZS5jbGVhcigpO1xuXHR9KTtcblxuXHRjYW5jZWxhYmxlUHJvbWlzZS5jbGVhciA9ICgpID0+IHtcblx0XHRjdXN0b21UaW1lcnMuY2xlYXJUaW1lb3V0LmNhbGwodW5kZWZpbmVkLCB0aW1lcik7XG5cdFx0dGltZXIgPSB1bmRlZmluZWQ7XG5cdH07XG5cblx0cmV0dXJuIGNhbmNlbGFibGVQcm9taXNlO1xufVxuIiwgIi8vIFBvcnQgb2YgbG93ZXJfYm91bmQgZnJvbSBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvYWxnb3JpdGhtL2xvd2VyX2JvdW5kXG4vLyBVc2VkIHRvIGNvbXB1dGUgaW5zZXJ0aW9uIGluZGV4IHRvIGtlZXAgcXVldWUgc29ydGVkIGFmdGVyIGluc2VydGlvblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgICBsZXQgZmlyc3QgPSAwO1xuICAgIGxldCBjb3VudCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBNYXRoLnRydW5jKGNvdW50IC8gMik7XG4gICAgICAgIGxldCBpdCA9IGZpcnN0ICsgc3RlcDtcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaXRdLCB2YWx1ZSkgPD0gMCkge1xuICAgICAgICAgICAgZmlyc3QgPSArK2l0O1xuICAgICAgICAgICAgY291bnQgLT0gc3RlcCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0O1xufVxuIiwgImltcG9ydCBsb3dlckJvdW5kIGZyb20gJy4vbG93ZXItYm91bmQuanMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpb3JpdHlRdWV1ZSB7XG4gICAgI3F1ZXVlID0gW107XG4gICAgZW5xdWV1ZShydW4sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiAwLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5LFxuICAgICAgICAgICAgcnVuLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zaXplICYmIHRoaXMuI3F1ZXVlW3RoaXMuc2l6ZSAtIDFdLnByaW9yaXR5ID49IG9wdGlvbnMucHJpb3JpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuI3F1ZXVlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBsb3dlckJvdW5kKHRoaXMuI3F1ZXVlLCBlbGVtZW50LCAoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpO1xuICAgICAgICB0aGlzLiNxdWV1ZS5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBkZXF1ZXVlKCkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy4jcXVldWUuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0/LnJ1bjtcbiAgICB9XG4gICAgZmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC5wcmlvcml0eSA9PT0gb3B0aW9ucy5wcmlvcml0eSkubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnJ1bik7XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcXVldWUubGVuZ3RoO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCBwVGltZW91dCwgeyBUaW1lb3V0RXJyb3IgfSBmcm9tICdwLXRpbWVvdXQnO1xuaW1wb3J0IFByaW9yaXR5UXVldWUgZnJvbSAnLi9wcmlvcml0eS1xdWV1ZS5qcyc7XG4vKipcblByb21pc2UgcXVldWUgd2l0aCBjb25jdXJyZW5jeSBjb250cm9sLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBRdWV1ZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgI2lzSW50ZXJ2YWxJZ25vcmVkO1xuICAgICNpbnRlcnZhbENvdW50ID0gMDtcbiAgICAjaW50ZXJ2YWxDYXA7XG4gICAgI2ludGVydmFsO1xuICAgICNpbnRlcnZhbEVuZCA9IDA7XG4gICAgI2ludGVydmFsSWQ7XG4gICAgI3RpbWVvdXRJZDtcbiAgICAjcXVldWU7XG4gICAgI3F1ZXVlQ2xhc3M7XG4gICAgI3BlbmRpbmcgPSAwO1xuICAgIC8vIFRoZSBgIWAgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zMjE5NFxuICAgICNjb25jdXJyZW5jeTtcbiAgICAjaXNQYXVzZWQ7XG4gICAgI3Rocm93T25UaW1lb3V0O1xuICAgIC8qKlxuICAgIFBlci1vcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuIE9wZXJhdGlvbnMgZnVsZmlsbCBvbmNlIGB0aW1lb3V0YCBlbGFwc2VzIGlmIHRoZXkgaGF2ZW4ndCBhbHJlYWR5LlxuXG4gICAgQXBwbGllcyB0byBlYWNoIGZ1dHVyZSBvcGVyYXRpb24uXG4gICAgKi9cbiAgICB0aW1lb3V0O1xuICAgIC8vIFRPRE86IFRoZSBgdGhyb3dPblRpbWVvdXRgIG9wdGlvbiBzaG91bGQgYWZmZWN0IHRoZSByZXR1cm4gdHlwZXMgb2YgYGFkZCgpYCBhbmQgYGFkZEFsbCgpYFxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudDogZmFsc2UsXG4gICAgICAgICAgICBpbnRlcnZhbENhcDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IDAsXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgYXV0b1N0YXJ0OiB0cnVlLFxuICAgICAgICAgICAgcXVldWVDbGFzczogUHJpb3JpdHlRdWV1ZSxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghKHR5cGVvZiBvcHRpb25zLmludGVydmFsQ2FwID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLmludGVydmFsQ2FwID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbENhcFxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtvcHRpb25zLmludGVydmFsQ2FwPy50b1N0cmluZygpID8/ICcnfVxcYCAoJHt0eXBlb2Ygb3B0aW9ucy5pbnRlcnZhbENhcH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCAhKE51bWJlci5pc0Zpbml0ZShvcHRpb25zLmludGVydmFsKSAmJiBvcHRpb25zLmludGVydmFsID49IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbFxcYCB0byBiZSBhIGZpbml0ZSBudW1iZXIgPj0gMCwgZ290IFxcYCR7b3B0aW9ucy5pbnRlcnZhbD8udG9TdHJpbmcoKSA/PyAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWx9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPSBvcHRpb25zLmNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgICAgIHRoaXMuI2lzSW50ZXJ2YWxJZ25vcmVkID0gb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IG9wdGlvbnMuaW50ZXJ2YWwgPT09IDA7XG4gICAgICAgIHRoaXMuI2ludGVydmFsQ2FwID0gb3B0aW9ucy5pbnRlcnZhbENhcDtcbiAgICAgICAgdGhpcy4jaW50ZXJ2YWwgPSBvcHRpb25zLmludGVydmFsO1xuICAgICAgICB0aGlzLiNxdWV1ZSA9IG5ldyBvcHRpb25zLnF1ZXVlQ2xhc3MoKTtcbiAgICAgICAgdGhpcy4jcXVldWVDbGFzcyA9IG9wdGlvbnMucXVldWVDbGFzcztcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IG9wdGlvbnMuY29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICAgICAgdGhpcy4jdGhyb3dPblRpbWVvdXQgPSBvcHRpb25zLnRocm93T25UaW1lb3V0ID09PSB0cnVlO1xuICAgICAgICB0aGlzLiNpc1BhdXNlZCA9IG9wdGlvbnMuYXV0b1N0YXJ0ID09PSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0ICNkb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLiNpbnRlcnZhbENvdW50IDwgdGhpcy4jaW50ZXJ2YWxDYXA7XG4gICAgfVxuICAgIGdldCAjZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwZW5kaW5nIDwgdGhpcy4jY29uY3VycmVuY3k7XG4gICAgfVxuICAgICNuZXh0KCkge1xuICAgICAgICB0aGlzLiNwZW5kaW5nLS07XG4gICAgICAgIHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCk7XG4gICAgICAgIHRoaXMuZW1pdCgnbmV4dCcpO1xuICAgIH1cbiAgICAjb25SZXN1bWVJbnRlcnZhbCgpIHtcbiAgICAgICAgdGhpcy4jb25JbnRlcnZhbCgpO1xuICAgICAgICB0aGlzLiNpbml0aWFsaXplSW50ZXJ2YWxJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLiN0aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCAjaXNJbnRlcnZhbFBhdXNlZCgpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLiNpbnRlcnZhbEVuZCAtIG5vdztcbiAgICAgICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBY3QgYXMgdGhlIGludGVydmFsIHdhcyBkb25lXG4gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXN1bWUgaXQgaGVyZSBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzdW1lZCBvbiBsaW5lIDE2MFxuICAgICAgICAgICAgICAgIHRoaXMuI2ludGVydmFsQ291bnQgPSAodGhpcy4jY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCkgPyB0aGlzLiNwZW5kaW5nIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFjdCBhcyB0aGUgaW50ZXJ2YWwgaXMgcGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiN0aW1lb3V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgICN0cnlUb1N0YXJ0QW5vdGhlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGUgaW50ZXJ2YWwgKFwicGF1c2VcIilcbiAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgY2FuIHJlZG8gaXQgbGF0ZXIgKFwicmVzdW1lXCIpXG4gICAgICAgICAgICBpZiAodGhpcy4jaW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4jaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNpbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlbXB0eScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI3BlbmRpbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2lkbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuI2lzUGF1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Jbml0aWFsaXplSW50ZXJ2YWwgPSAhdGhpcy4jaXNJbnRlcnZhbFBhdXNlZDtcbiAgICAgICAgICAgIGlmICh0aGlzLiNkb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIgJiYgdGhpcy4jZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSB0aGlzLiNxdWV1ZS5kZXF1ZXVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGpvYigpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Jbml0aWFsaXplSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAjaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLiNpbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jb25JbnRlcnZhbCgpO1xuICAgICAgICB9LCB0aGlzLiNpbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuI2ludGVydmFsRW5kID0gRGF0ZS5ub3coKSArIHRoaXMuI2ludGVydmFsO1xuICAgIH1cbiAgICAjb25JbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsQ291bnQgPT09IDAgJiYgdGhpcy4jcGVuZGluZyA9PT0gMCAmJiB0aGlzLiNpbnRlcnZhbElkKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuI2ludGVydmFsSWQpO1xuICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNpbnRlcnZhbENvdW50ID0gdGhpcy4jY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCA/IHRoaXMuI3BlbmRpbmcgOiAwO1xuICAgICAgICB0aGlzLiNwcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRXhlY3V0ZXMgYWxsIHF1ZXVlZCBmdW5jdGlvbnMgdW50aWwgaXQgcmVhY2hlcyB0aGUgbGltaXQuXG4gICAgKi9cbiAgICAjcHJvY2Vzc1F1ZXVlKCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICAgICAgd2hpbGUgKHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCkpIHsgfVxuICAgIH1cbiAgICBnZXQgY29uY3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb25jdXJyZW5jeTtcbiAgICB9XG4gICAgc2V0IGNvbmN1cnJlbmN5KG5ld0NvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBuZXdDb25jdXJyZW5jeSA9PT0gJ251bWJlcicgJiYgbmV3Q29uY3VycmVuY3kgPj0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGNvbmN1cnJlbmN5XFxgIHRvIGJlIGEgbnVtYmVyIGZyb20gMSBhbmQgdXAsIGdvdCBcXGAke25ld0NvbmN1cnJlbmN5fVxcYCAoJHt0eXBlb2YgbmV3Q29uY3VycmVuY3l9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NvbmN1cnJlbmN5ID0gbmV3Q29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMuI3Byb2Nlc3NRdWV1ZSgpO1xuICAgIH1cbiAgICBhc3luYyAjdGhyb3dPbkFib3J0KHNpZ25hbCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBhZGQoZnVuY3Rpb25fLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIHRocm93T25UaW1lb3V0OiB0aGlzLiN0aHJvd09uVGltZW91dCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNxdWV1ZS5lbnF1ZXVlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNwZW5kaW5nKys7XG4gICAgICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0aW9uID0gZnVuY3Rpb25fKHsgc2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gcFRpbWVvdXQoUHJvbWlzZS5yZXNvbHZlKG9wZXJhdGlvbiksIHsgbWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBQcm9taXNlLnJhY2UoW29wZXJhdGlvbiwgdGhpcy4jdGhyb3dPbkFib3J0KG9wdGlvbnMuc2lnbmFsKV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2NvbXBsZXRlZCcsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgJiYgIW9wdGlvbnMudGhyb3dPblRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdhZGQnKTtcbiAgICAgICAgICAgIHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBhZGRBbGwoZnVuY3Rpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmdW5jdGlvbnMubWFwKGFzeW5jIChmdW5jdGlvbl8pID0+IHRoaXMuYWRkKGZ1bmN0aW9uXywgb3B0aW9ucykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgU3RhcnQgKG9yIHJlc3VtZSkgZXhlY3V0aW5nIGVucXVldWVkIHRhc2tzIHdpdGhpbiBjb25jdXJyZW5jeSBsaW1pdC4gTm8gbmVlZCB0byBjYWxsIHRoaXMgaWYgcXVldWUgaXMgbm90IHBhdXNlZCAodmlhIGBvcHRpb25zLmF1dG9TdGFydCA9IGZhbHNlYCBvciBieSBgLnBhdXNlKClgIG1ldGhvZC4pXG4gICAgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLiNpc1BhdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBQdXQgcXVldWUgZXhlY3V0aW9uIG9uIGhvbGQuXG4gICAgKi9cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICBDbGVhciB0aGUgcXVldWUuXG4gICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy4jcXVldWUgPSBuZXcgdGhpcy4jcXVldWVDbGFzcygpO1xuICAgIH1cbiAgICAvKipcbiAgICBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBVc2VmdWwgaWYgeW91IGZvciBleGFtcGxlIGFkZCBhZGRpdGlvbmFsIGl0ZW1zIGF0IGEgbGF0ZXIgdGltZS5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eS5cbiAgICAqL1xuICAgIGFzeW5jIG9uRW1wdHkoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eVxuICAgICAgICBpZiAodGhpcy4jcXVldWUuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI29uRXZlbnQoJ2VtcHR5Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIGxpbWl0OiBgcXVldWUuc2l6ZSA8IGxpbWl0YC5cblxuICAgIElmIHlvdSB3YW50IHRvIGF2b2lkIGhhdmluZyB0aGUgcXVldWUgZ3JvdyBiZXlvbmQgYSBjZXJ0YWluIHNpemUgeW91IGNhbiBgYXdhaXQgcXVldWUub25TaXplTGVzc1RoYW4oKWAgYmVmb3JlIGFkZGluZyBhIG5ldyBpdGVtLlxuXG4gICAgTm90ZSB0aGF0IHRoaXMgb25seSBsaW1pdHMgdGhlIG51bWJlciBvZiBpdGVtcyB3YWl0aW5nIHRvIHN0YXJ0LiBUaGVyZSBjb3VsZCBzdGlsbCBiZSB1cCB0byBgY29uY3VycmVuY3lgIGpvYnMgYWxyZWFkeSBydW5uaW5nIHRoYXQgdGhpcyBjYWxsIGRvZXMgbm90IGluY2x1ZGUgaW4gaXRzIGNhbGN1bGF0aW9uLlxuICAgICovXG4gICAgYXN5bmMgb25TaXplTGVzc1RoYW4obGltaXQpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICBpZiAodGhpcy4jcXVldWUuc2l6ZSA8IGxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jb25FdmVudCgnbmV4dCcsICgpID0+IHRoaXMuI3F1ZXVlLnNpemUgPCBsaW1pdCk7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBkaWZmZXJlbmNlIHdpdGggYC5vbkVtcHR5YCBpcyB0aGF0IGAub25JZGxlYCBndWFyYW50ZWVzIHRoYXQgYWxsIHdvcmsgZnJvbSB0aGUgcXVldWUgaGFzIGZpbmlzaGVkLiBgLm9uRW1wdHlgIG1lcmVseSBzaWduYWxzIHRoYXQgdGhlIHF1ZXVlIGlzIGVtcHR5LCBidXQgaXQgY291bGQgbWVhbiB0aGF0IHNvbWUgcHJvbWlzZXMgaGF2ZW4ndCBjb21wbGV0ZWQgeWV0LlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgc2V0dGxlcyB3aGVuIHRoZSBxdWV1ZSBiZWNvbWVzIGVtcHR5LCBhbmQgYWxsIHByb21pc2VzIGhhdmUgY29tcGxldGVkOyBgcXVldWUuc2l6ZSA9PT0gMCAmJiBxdWV1ZS5wZW5kaW5nID09PSAwYC5cbiAgICAqL1xuICAgIGFzeW5jIG9uSWRsZSgpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgbm9uZSBwZW5kaW5nIGFuZCBpZiBub3RoaW5nIGVsc2UgaXMgcXVldWVkXG4gICAgICAgIGlmICh0aGlzLiNwZW5kaW5nID09PSAwICYmIHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNvbkV2ZW50KCdpZGxlJyk7XG4gICAgfVxuICAgIGFzeW5jICNvbkV2ZW50KGV2ZW50LCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZSwgdGhlIG51bWJlciBvZiBxdWV1ZWQgaXRlbXMgd2FpdGluZyB0byBydW4uXG4gICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLnNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgIFNpemUgb2YgdGhlIHF1ZXVlLCBmaWx0ZXJlZCBieSB0aGUgZ2l2ZW4gb3B0aW9ucy5cblxuICAgIEZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIG51bWJlciBvZiBpdGVtcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlIHdpdGggYSBzcGVjaWZpYyBwcmlvcml0eSBsZXZlbC5cbiAgICAqL1xuICAgIHNpemVCeShvcHRpb25zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWNhbGxiYWNrLXJlZmVyZW5jZVxuICAgICAgICByZXR1cm4gdGhpcy4jcXVldWUuZmlsdGVyKG9wdGlvbnMpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgTnVtYmVyIG9mIHJ1bm5pbmcgaXRlbXMgKG5vIGxvbmdlciBpbiB0aGUgcXVldWUpLlxuICAgICovXG4gICAgZ2V0IHBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwZW5kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICBXaGV0aGVyIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgcGF1c2VkLlxuICAgICovXG4gICAgZ2V0IGlzUGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNQYXVzZWQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIGluaXQsIHNlbmRGaWxlRXJyb3IsIHVwZGF0ZUZpbGUgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBkb3dubG9hZENodW5rIH0gZnJvbSBcIn4vYXBpL3dlYnNvY2tldC50c1wiO1xuaW1wb3J0IFBRdWV1ZSBmcm9tIFwicC1xdWV1ZVwiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcblxuZGVjbGFyZSBjb25zdCBzZWxmOiBXb3JrZXI7XG5cbmNvbnN0IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUID0gbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgfHwgMTtcbmNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7XG4gIGNvbmN1cnJlbmN5OiBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCxcbn0pO1xubGV0IGl0ZW1zSW5RdWV1ZSA9IDA7XG5sZXQgaXNJbml0aWF0ZWQgPSBmYWxzZTtcbmxldCBpc1BhdXNlZCA9IGZhbHNlO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gIGlmICghaXNJbml0aWF0ZWQpIHtcbiAgICBpbml0KCk7XG4gICAgaXNJbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5ET1dOTE9BRF9TVEFSVEVEIH0pO1xuICAgIH0pO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfQ09NUExFVEUsICgpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuRE9XTkxPQURfQ09NUExFVEUgfSk7XG4gICAgfSk7XG5cbiAgICBldmVudHMub24oRVZFTlQuRklMRV9VUERBVEVELCB1cGRhdGVGaWxlKTtcblxuICAgIGV2ZW50cy5vbihcbiAgICAgIEVWRU5ULkNIVU5LX0RPV05MT0FERUQsXG4gICAgICAoYnVmZmVyOiBBcnJheUJ1ZmZlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpdGVtc0luUXVldWUtLTtcblxuICAgICAgICBpZiAoIWlzUGF1c2VkICYmIGl0ZW1zSW5RdWV1ZSA8IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUKSB7XG4gICAgICAgICAgcXVldWUuc3RhcnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIGV2ZW50OiBFVkVOVC5DSFVOS19ET1dOTE9BREVELFxuICAgICAgICAgIGNodW5rOiB7IGJ1ZmZlciwgaW5kZXggfSxcbiAgICAgICAgfSwgW2J1ZmZlcl0pO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgV29ya2VyQWN0aW9uTWVzc2FnZTtcblxuICBzd2l0Y2ggKGRhdGEuYWN0aW9uKSB7XG4gICAgY2FzZSBXT1JLRVJfQUNUSU9OLlBBVVNFOlxuICAgICAge1xuICAgICAgICBpc1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuSk9CX1BBVVNFRCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBXT1JLRVJfQUNUSU9OLlJFU1VNRTpcbiAgICAgIHtcbiAgICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5KT0JfUkVTVU1FRCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGRvd25sb2FkKGRhdGEpLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgICAgc2VuZEZpbGVFcnJvcihkYXRhLmFyZ3MubHVmaUZpbGUsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBkb3dubG9hZCA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGNvbnN0IHsgbHVmaUZpbGUgfSA9IHdvcmtlck1lc3NhZ2UuYXJncztcblxuICBldmVudHMub24oRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgYXN5bmMgKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbHVmaUZpbGUudG90YWxDaHVua3M7IGkrKykge1xuICAgICAgaWYgKCFpc1BhdXNlZCAmJiBpdGVtc0luUXVldWUgPCBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCkge1xuICAgICAgICBxdWV1ZS5zdGFydCgpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBxdWV1ZS5hZGQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkb3dubG9hZENodW5rKGx1ZmlGaWxlLCBpKTtcblxuICAgICAgICBpdGVtc0luUXVldWUrKztcblxuICAgICAgICBpZiAoaXNQYXVzZWQgfHwgaXRlbXNJblF1ZXVlID09PSBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCkge1xuICAgICAgICAgIHF1ZXVlLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXRlbXNJblF1ZXVlKys7XG5cbiAgcmV0dXJuIGRvd25sb2FkQ2h1bmsobHVmaUZpbGUsIDApO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICIrMUNBQUEsSUFBQUEsR0FBQUMsR0FBQSxDQUFBQyxHQUFBQyxLQUFBLGNBdUJBLElBQUlDLEdBQUksT0FBTyxT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SUFBSSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRSxDQUFDLE9BQU9RLEdBQUcsS0FBS1IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJQSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsRUFBRUUsRUFBRSxDQUFDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsSUFBSVQsRUFBRSxFQUFFLElBQU1BLEVBQUVBLElBQUlLLEdBQUdGLEVBQUVILENBQUMsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsSUFBSUEsQ0FBQyxFQUFFQSxFQUFFLElBQUlDLEVBQUVDLEVBQUUsRUFBRSxDQUFDSixFQUFFRyxDQUFDLEVBQUVBLEdBQUdLLEdBQUcsRUFBRUosRUFBRUcsRUFBRUgsQ0FBQyxHQUFHLEVBQUUsSUFBSU0sRUFBRU4sRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFTSxFQUFFQSxHQUFHLEVBQUVBLEVBQUUsSUFBSSxHQUFHVixFQUFFRyxDQUFDLEVBQUVPLEVBQUVULEVBQUVTLENBQUMsRUFBRVAsRUFBRU0sRUFBRUosRUFBRUgsRUFBRUcsRUFBRUcsRUFBRUgsRUFBRUYsQ0FBQyxDQUFDLENBQUMsRUFBRVEsRUFBRSxTQUFVRixFQUFFLE1BQVFQLEVBQUUsSUFBTU0sRUFBRSxTQUFVTCxFQUFFTSxFQUFFLElBQU1KLEVBQUVLLENBQUMsRUFBRSxTQUFVQSxFQUFFUixFQUFFLEVBQUUsRUFBRUEsRUFBRUEsSUFBSUosRUFBRUksQ0FBQyxFQUFFQyxDQUFDLEVBQUVNLEVBQUVBLEdBQUcsR0FBR0EsSUFBSSxFQUFFVixFQUFFRyxDQUFDLEVBQUVRLENBQUMsRUFBRUMsRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUUsSUFBSVQsRUFDbGdCLEVBQUUsRUFBRUEsRUFBRUEsSUFBSUosRUFBRUksQ0FBQyxFQUFFSixFQUFFSSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDaEQsU0FBU0ksR0FBR1IsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLEdBQU9ELEVBQUUsU0FBTixFQUFhLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEsd0JBQXdCLEVBQUUsSUFBSUksRUFBRUgsRUFBRSxFQUFFRSxDQUFDLEVBQUVFLEVBQUVILEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUUsRUFBRUosRUFBRUMsRUFBRSxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVHLEVBQUVMLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUYsRUFBRUEsRUFBRUMsRUFBRSxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUUsSUFBSUksRUFBRUUsRUFBRUMsRUFBRUMsRUFBRVIsRUFBRSxPQUFPLEVBQUUsRUFBRVMsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFUCxFQUFFUCxFQUFFLEVBQUVFLENBQUMsRUFBRUYsRUFBRU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFQSxFQUFFLENBQUMsRUFBRVEsRUFBRVIsRUFBRSxDQUFDLEVBQUVTLEVBQUVULEVBQUUsQ0FBQyxFQUFFVSxFQUFFVixFQUFFLENBQUMsRUFBRSxJQUFJSyxFQUFFLEVBQUVBLEVBQUVELEVBQUVDLElBQUlMLEVBQUVQLEVBQUVJLElBQUksRUFBRSxFQUFFLEVBQUVDLEdBQUcsR0FBRyxHQUFHLEVBQUVVLEVBQUVULEdBQUcsRUFBRSxHQUFHLEVBQUVVLEVBQUVmLEVBQUUsR0FBRyxFQUFFRSxFQUFFVSxDQUFDLEVBQUVKLEVBQUVULEVBQUVLLElBQUksRUFBRSxFQUFFLEVBQUVDLEdBQUcsR0FBRyxHQUFHLEVBQUVTLEVBQUVkLEdBQUcsRUFBRSxHQUFHLEVBQUVlLEVBQUVaLEVBQUUsR0FBRyxFQUFFRCxFQUFFVSxFQUFFLENBQUMsRUFBRUgsRUFBRVYsRUFBRU0sSUFBSSxFQUFFLEVBQUUsRUFBRUwsR0FBRyxHQUFHLEdBQUcsRUFBRWMsRUFBRVgsR0FBRyxFQUFFLEdBQUcsRUFBRVksRUFBRVgsRUFBRSxHQUFHLEVBQUVGLEVBQUVVLEVBQUUsQ0FBQyxFQUFFWixFQUFFRCxFQUFFQyxJQUFJLEVBQUUsRUFBRSxFQUFFRyxHQUFHLEdBQUcsR0FBRyxFQUFFVyxFQUFFVixHQUFHLEVBQUUsR0FBRyxFQUFFVyxFQUFFVixFQUFFLEdBQUcsRUFBRUgsRUFBRVUsRUFBRSxDQUFDLEVBQUVBLEdBQUcsRUFBRVQsRUFBRUcsRUFBRUYsRUFBRUksRUFBRUgsRUFBRUksRUFBRSxJQUFJRSxFQUNyZixFQUFFLEVBQUVBLEVBQUVBLElBQUlFLEVBQUVaLEVBQUUsRUFBRSxDQUFDVSxFQUFFQSxDQUFDLEVBQUVLLEVBQUViLElBQUksRUFBRSxHQUFHLEdBQUdhLEVBQUVaLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBR1ksRUFBRVgsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFVyxFQUFFaEIsRUFBRSxHQUFHLEVBQUVFLEVBQUVVLEdBQUcsRUFBRU4sRUFBRUgsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUMsRUFBRUEsRUFBRUwsRUFBRUEsRUFBRU0sRUFBRSxPQUFPTyxDQUFDLENBQ2hIZixFQUFLLFNBQVMsQ0FBQyxTQUFTLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxPQUFBRixFQUFFRCxFQUFLLFNBQVMsRUFBRUMsRUFBRSxNQUFNQyxFQUFFLEVBQUUsRUFBRSxJQUFJQSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBa0JDLElBQVQsT0FBV0YsRUFBRUQsRUFBSyxTQUFTLE1BQU1DLEVBQUVFLEVBQUVELENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0QsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQUUsS0FBSyxNQUFNLENBQUNGLEVBQUVDLEVBQUUsRUFBRSxFQUFFLFFBQVFELEVBQUVDLEVBQUUsRUFBRUQsR0FBRyxJQUFJRCxFQUFFQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUdFLEVBQUVILEVBQUVDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSUUsRUFBRUgsRUFBRUMsRUFBRSxHQUFHLENBQUMsSUFBSUUsSUFBSSxHQUFHRCxHQUFHLENBQUMsRUFBRSxPQUFPLFNBQVNGLEVBQUVDLEVBQUUsQ0FBQyxHQUFPRCxFQUFFLFNBQU4sR0FBa0JDLEVBQUUsU0FBTixFQUFhLE9BQU9ELEVBQUUsT0FBT0MsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUVBLEVBQUUsT0FBTyxDQUFDLEVBQUVHLEVBQUVKLEVBQUssU0FBUyxXQUFXRyxDQUFDLEVBQUUsT0FBWUMsSUFBTCxHQUFPSCxFQUFFLE9BQU9DLENBQUMsRUFBRUYsRUFBSyxTQUFTLEVBQUVFLEVBQUVFLEVBQUVELEVBQUUsRUFBRUYsRUFBRSxNQUFNLEVBQUVBLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsU0FBU0EsRUFBRSxDQUFDLElBQUlDLEVBQUVELEVBQUUsT0FBTyxPQUNuZkMsSUFEMGYsRUFDeGYsRUFBRSxJQUFJQSxFQUFFLEdBQUdGLEVBQUssU0FBUyxXQUFXQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxTQUFTRCxFQUFFQyxFQUFFLENBQUMsR0FBRyxHQUFHRCxFQUFFLE9BQU9DLEVBQUUsT0FBT0QsRUFBRUEsRUFBRUEsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdBQUdGLEdBQUcsT0FBTyxhQUFhRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUVBLElBQUksRUFBRSxPQUFPLG1CQUFtQixPQUFPSCxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBU0QsRUFBRSxDQUFDQSxFQUFFLFNBQVMsbUJBQW1CQSxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFLENBQUMsRUFBRUMsRUFBRUMsRUFBRSxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFJQyxFQUFFQSxHQUFHLEVBQUVILEVBQUUsV0FBV0UsQ0FBQyxHQUFPQSxFQUFFLEtBQVAsSUFBWUQsRUFBRSxLQUFLRSxDQUFDLEVBQUVBLEVBQUUsR0FBRyxPQUFBRCxFQUFFLEdBQUdELEVBQUUsS0FBS0YsRUFBSyxTQUFTLFFBQVEsR0FBR0csRUFBRSxHQUFHQyxDQUFDLENBQUMsRUFBU0YsQ0FBQyxDQUFDLEVBQ3BaRixFQUFLLE1BQU0sSUFBSSxDQUFDLFNBQVMsU0FBU0MsRUFBRSxDQUFDLElBQUlDLEVBQUUsR0FBR0MsRUFBRSxJQUFJQSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUQsS0FBS0QsRUFBRUUsQ0FBQyxFQUFFLEdBQUcsZ0JBQWdCLFNBQVMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU9ELEVBQUUsT0FBTyxFQUFFRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBU0EsRUFBRSxDQUFDLElBQUlDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFQyxFQUFxRCxJQUFuREgsRUFBRUEsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFRyxFQUFFSCxFQUFFLE9BQU9BLEVBQUVBLEVBQUUsV0FBZUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFFLE9BQU9DLEdBQUcsRUFBRUMsRUFBRSxLQUFLLFNBQVNGLEVBQUUsT0FBT0MsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPRixFQUFLLFNBQVMsTUFBTUcsRUFBRSxFQUFFQyxDQUFDLENBQUMsQ0FBQyxFQUM5VkosRUFBSyxNQUFNLE9BQU8sQ0FBQyxFQUFFLG1FQUFtRSxTQUFTLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFLEdBQUdDLEVBQUUsRUFBRUMsRUFBRU4sRUFBSyxNQUFNLE9BQU8sRUFBRU8sRUFBRSxFQUFFQyxFQUFFUixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUE2QixJQUEzQkUsSUFBSUcsRUFBRUEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQVVILEVBQUUsRUFBRSxFQUFFQyxFQUFFLE9BQU9JLEdBQUdKLEdBQUdFLEVBQUUsUUFBUUMsRUFBRU4sRUFBRUUsQ0FBQyxJQUFJRSxLQUFLLEVBQUUsRUFBRSxFQUFFQSxHQUFHRSxFQUFFTixFQUFFRSxDQUFDLEdBQUcsRUFBRUUsRUFBRUEsR0FBRyxHQUFHRixNQUFNSSxJQUFJLEVBQUVGLEdBQUcsR0FBRyxLQUFLRCxFQUFFLE9BQU8sR0FBRyxDQUFDRixHQUFHRSxHQUFHLElBQUksT0FBT0EsQ0FBQyxFQUFFLE9BQU8sU0FBU0gsRUFBRUMsRUFBRSxDQUFDRCxFQUFFQSxFQUFFLFFBQVEsUUFBUSxFQUFFLEVBQUUsSUFBSUUsRUFBRSxDQUFDLEVBQUVDLEVBQUVDLEVBQUUsRUFBRUMsRUFBRU4sRUFBSyxNQUFNLE9BQU8sRUFBRU8sRUFBRSxFQUFFQyxFQUE2QixJQUEzQk4sSUFBSUksRUFBRUEsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQVVGLEVBQUUsRUFBRUEsRUFBRUgsRUFBRSxPQUFPRyxJQUFJLENBQzlkLEdBRCtkSSxFQUFFRixFQUFFLFFBQVFMLEVBQUUsT0FBT0csQ0FBQyxDQUFDLEVBQ25mLEVBQUVJLEVBQUUsTUFBTSxJQUFJUixFQUFLLFVBQVUsUUFBUSxvQkFBb0IsRUFBRSxHQUFHSyxHQUFHQSxHQUFHLEdBQUdGLEVBQUUsS0FBS0ksRUFBRUMsSUFBSUgsQ0FBQyxFQUFFRSxFQUFFQyxHQUFHLEdBQUdILElBQUlBLEdBQUcsRUFBRUUsR0FBR0MsR0FBRyxHQUFHSCxFQUFFLENBQUMsT0FBQUEsRUFBRSxJQUFJRixFQUFFLEtBQUtILEVBQUssU0FBUyxRQUFRSyxFQUFFLEdBQUdFLEVBQUUsQ0FBQyxDQUFDLEVBQVNKLENBQUMsQ0FBQyxFQUFFSCxFQUFLLE1BQU0sVUFBVSxDQUFDLFNBQVMsU0FBU0MsRUFBRSxDQUFDLE9BQU9ELEVBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxF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S0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJRSxFQUFFLEVBQUVBLEVBQUUsS0FBSyxFQUFFLFNBQVNGLEVBQUVBLEVBQUUsT0FBTyxLQUFLLEVBQUVFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRUQsR0FBRyxLQUFLLEVBQUVDLENBQUMsRUFBRSxLQUFLLEVBQUVBLENBQUMsRUFBRSxFQUFFSCxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUdHLElBQUlBLElBQUksQ0FDalQsSUFE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QVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVELENBQUMsRUFBRSxLQUFLLElBQUksRUFBRUMsQ0FBQyxFQUFFLG9CQUFvQixTQUFTRCxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVKLENBQUMsRUFBRUssRUFBRSxDQUFDLEVBQUUsSUFBSUYsS0FBS0MsRUFBRUEsRUFBRSxlQUFlRCxDQUFDLEdBQUdDLEVBQUVELENBQUMsSUFBSUYsR0FBR0ksRUFBRSxLQUFLRixDQUFDLEVBQUUsSUFBSUQsRUFBRSxFQUFFQSxFQUFFRyxFQUFFLE9BQU9ILElBQUlDLEVBQUVFLEVBQUVILENBQUMsRUFBRSxPQUFPRSxFQUFFRCxDQUFDLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQ2lELEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNwRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxHQUFHLENBQUNELEVBQUVELEVBQUUsR0FBR0EsRUFBRSxTQUFTQSxFQUFFLFNBQVMsRUFBRUUsRUFBRUYsRUFBRSxHQUFHQSxFQUFFLFNBQVNBLEVBQUUsU0FBUyxDQUFDLE1BQVMsQ0FBQ0UsRUFBRUQsRUFBRSxDQUFDLENBQUlBLEdBQUgsR0FBU0MsR0FBSCxHQUFNLEtBQUssV0FBVyxDQUFDRCxFQUFFQyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUVrRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTcEQsRUFBRSxDQUFDQSxFQUN2ZkEsRUFBRSxRQUFRLENBQUMsR0FBR0EsRUFBRSxlQUFlLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQ0EsRUFBRSxPQUFPQSxFQUFFLFFBQVFBLEVBQUUsT0FBT0EsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUVvRCxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUNBLEdBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNwRCxFQUFFLENBQXdHLEdBQXZHQSxFQUFFQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixHQUFHQSxFQUFFLDZCQUE2QixFQUFLLE9BQU8sWUFBWSxDQUFDLElBQUlDLEVBQUUsT0FBTyxZQUF1QixPQUFPQSxHQUFsQixVQUFxQixLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQ0QsR0FBRyxLQUFLLFdBQVdBLEVBQUUsRUFBRSxlQUFlLEVBQUVvRCxHQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM1osU0FBU0YsR0FBR2xELEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFQyxFQUFFSixFQUFLLE9BQU8sRUFBRUMsQ0FBQyxFQUFFSSxFQUFFLENBQUMsRUFBRSxJQUFJRixLQUFLQyxFQUFFQSxFQUFFLGVBQWVELENBQUMsR0FBR0UsRUFBRSxLQUFLRCxFQUFFRCxDQUFDLENBQUMsRUFBRSxJQUFJQSxFQUFFLEVBQUVBLEVBQUVFLEVBQUUsT0FBT0YsSUFBSUUsRUFBRUYsQ0FBQyxFQUFFRCxDQUFDLENBQUMsQ0FBQyxTQUFTbUQsR0FBRXBELEVBQUVDLEVBQUUsQ0FBZSxPQUFPLE9BQXJCLEtBQTZCLE9BQU8sYUFBMEIsT0FBTyxPQUFPLFlBQVksS0FBdkMsV0FBMkNELEVBQUUsV0FBVyxPQUFPLFlBQVksSUFBSSxFQUFFQyxFQUFFLFVBQVUsRUFBRUQsRUFBRSxXQUFZLElBQUksT0FBTSxRQUFRLEVBQUVDLEVBQUUsVUFBVSxDQUFDLENBQUMsU0FBUytDLEdBQUdoRCxFQUFFLENBQUNBLEVBQUUsRUFBRWlELEdBQUVqRCxDQUFDLEVBQUUsT0FBT2lELEdBQUVqRCxDQUFDLENBQUMsRUFBRUEsRUFBRSxFQUFFLElBQUlELEVBQUssT0FBTyxJQUFJQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVNpRCxHQUFFakQsRUFBRSxDQUFDLFFBQVFDLEVBQUUsRUFBRSxFQUFFQSxJQUFJRCxFQUFFLEVBQUVDLENBQUMsRUFBRUQsRUFBRSxFQUFFQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUNELEVBQUUsRUFBRUMsQ0FBQyxHQUFHQSxJQUFJLENBQUMsT0FBT0QsRUFBRSxFQUFFLFFBQVFBLEVBQUUsQ0FBQyxDQUFDLENBQ3BlLFNBQVNtRCxHQUFFbkQsRUFBRUMsRUFBRSxDQUFDLE9BQU8sVUFBVSxDQUFDQSxFQUFFLE1BQU1ELEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQ0QsRUFBSyxPQUFPLElBQUlBLEVBQUssS0FBSyxDQUFDLEVBQ25GQyxFQUFFLEdBQUcsQ0FBZSxHQUFHcUQsR0FBaUIsT0FBT3ZELEdBQXJCLEtBQTZCQSxHQUFPLFFBQVEsQ0FBUSxHQUFHLENBQUN3RCxHQUFHLEdBQVEsUUFBUSxDQUFDLE1BQVMsQ0FBQ0EsR0FBRyxJQUFJLENBQUNELEdBQUdFLEdBQUdELEVBQUUsQ0FBQyxHQUFHRCxJQUFJRSxHQUFHLFlBQVlDLEdBQUVELEdBQUcsWUFBWSxHQUFHLEVBQUVDLEdBQUUsSUFBSSxZQUFhLElBQUksV0FBV0EsRUFBQyxFQUFHLE1BQU0sRUFBRXpELEVBQUssT0FBTyxXQUFXeUQsR0FBRSxLQUFLLHVCQUF1QixVQUF3QixPQUFPLE9BQXJCLEtBQTJDLE9BQU8sWUFBckIsSUFBaUMsQ0FBdUIsR0FBdEJDLEdBQUUsSUFBSSxZQUFZLEVBQUUsRUFBSyxPQUFPLFFBQVEsT0FBTyxPQUFPLGdCQUFnQixPQUFPLE9BQU8sZ0JBQWdCQSxFQUFDLFVBQVUsT0FBTyxVQUFVLE9BQU8sU0FBUyxnQkFBZ0IsT0FBTyxTQUFTLGdCQUFnQkEsRUFBQyxNQUNyaEIsT0FBTXpELEVBQUVELEVBQUssT0FBTyxXQUFXMEQsR0FBRSxLQUFLLDJCQUEyQixDQUFDLENBQUMsT0FBT3pELEVBQUUsQ0FBZSxPQUFPLE9BQXJCLEtBQTZCLE9BQU8sVUFBVSxRQUFRLElBQUkseURBQXlELEVBQUUsUUFBUSxJQUFJQSxDQUFDLEVBQUUsQ0FENU0sSUFBQXdELEdBQUVELEdBQUdFLEdBQUVKLEdBQTBEQyxHQUUzRXZELEVBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLEdBQUcsS0FBSyxNQUFNLE1BQU0sR0FBRyxPQUFPLEtBQUssRUFBRSxHQUFHLFNBQVNDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQ0QsRUFBRUEsR0FBRyxDQUFDLEVBQUVDLEVBQUVBLEdBQUcsQ0FBQyxFQUFFLElBQUlDLEVBQUVMLEVBQUssS0FBS00sRUFBRUQsRUFBRSxFQUFFLENBQUMsR0FBR0wsRUFBSyxPQUFPLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRUssRUFBRSxRQUFRLEVBQUVFLEVBQXVKLEdBQXJKRixFQUFFLEVBQUVDLEVBQUVILENBQUMsRUFBRUEsRUFBRUcsRUFBRSxNQUFpQixPQUFPQSxFQUFFLE1BQXBCLFdBQTJCQSxFQUFFLEtBQUtOLEVBQUssTUFBTSxPQUFPLE9BQU9NLEVBQUUsSUFBSSxHQUFjLE9BQU9BLEVBQUUsSUFBcEIsV0FBeUJBLEVBQUUsR0FBR04sRUFBSyxNQUFNLE9BQU8sT0FBT00sRUFBRSxFQUFFLEdBQU0sQ0FBQ04sRUFBSyxLQUFLTSxFQUFFLElBQUksR0FBRyxDQUFDTixFQUFLLE9BQU9NLEVBQUUsTUFBTSxHQUFjLE9BQU9MLEdBQWxCLFVBQXFCLEtBQUtLLEVBQUUsTUFBV0EsRUFBRSxLQUFQLElBQWdCQSxFQUFFLEtBQVAsSUFBaUJBLEVBQUUsS0FBUixLQUFrQkEsRUFBRSxLQUFSLEtBQWtCQSxFQUFFLEtBQVIsS0FBb0JBLEVBQUUsS0FBVixLQUFjLEVBQUVBLEVBQUUsR0FBRyxRQUNqZixFQUFFQSxFQUFFLEdBQUcsT0FBTyxNQUFNLElBQUlOLEVBQUssVUFBVSxRQUFRLGtDQUFrQyxFQUFFLE9BQVcsT0FBT0MsR0FBbEIsVUFBcUJNLEVBQUVQLEVBQUssS0FBSyxhQUFhQyxFQUFFSyxDQUFDLEVBQUVMLEVBQUVNLEVBQUUsSUFBSSxNQUFNLEVBQUVELEVBQUUsR0FBRyxFQUFFLEVBQUVBLEVBQUUsS0FBS0MsRUFBRSxNQUFNUCxFQUFLLEtBQUtDLGFBQWFELEVBQUssSUFBSSxRQUFRLFlBQVlPLEVBQUVOLEVBQUUsSUFBSSxFQUFFSyxFQUFFLE9BQU9DLEVBQUUsSUFBSU4sRUFBRU0sRUFBRSxJQUFJLE1BQU0sRUFBRUQsRUFBRSxHQUFHLEVBQUUsR0FBYyxPQUFPSixHQUFsQixXQUFzQkEsRUFBRUYsRUFBSyxNQUFNLFdBQVcsT0FBT0UsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCRyxFQUFFLE1BQU1ILEVBQUVILEVBQUssTUFBTSxXQUFXLE9BQU9HLENBQUMsR0FBR0ksRUFBRSxJQUFJUCxFQUFLLE9BQU9NLEVBQUUsTUFBTSxFQUFFTCxDQUFDLEVBQUVJLEVBQUUsRUFBRUQsRUFBRUUsQ0FBQyxFQUFFRixFQUFFLElBQUlILEVBQUVLLEVBQUUsR0FBV0EsRUFBRSxPQUFWLE9BQWdCTixFQUFLLGFBQWFBLEVBQUssWUFBWSxLQUN2ZkUsYUFBYSxZQUFZRixFQUFLLFlBQVksSUFBSSxRQUFRTyxFQUFFTCxFQUFFSSxFQUFFLEdBQUdILEVBQUVHLEVBQUUsRUFBRSxFQUFFTixFQUFLLEtBQUtNLEVBQUUsSUFBSSxFQUFFLFFBQVFDLEVBQUVMLEVBQUVJLEVBQUUsR0FBR0gsRUFBRUcsRUFBRSxFQUFFLEVBQVNBLENBQUMsRUFBRSxRQUFRLFNBQVNMLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFTCxFQUFLLEtBQUtNLEVBQUVELEVBQUUsR0FBRyxNQUFNQSxFQUFFLFNBQVMsRUFBRSxPQUFPQSxFQUFFLE9BQU9DLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBU0wsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDRCxFQUFFQSxHQUFHLENBQUMsRUFBRUMsRUFBRUEsR0FBRyxDQUFDLEVBQUUsSUFBSUMsRUFBRUwsRUFBSyxLQUFLRSxFQUFFRyxFQUFFLEVBQUVBLEVBQUUsRUFBRUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsRUFBRSxRQUFRLEVBQUVILENBQUMsRUFBRUMsRUFBRSxFQUFFLEVBQUUsSUFBSUcsRUFBRUMsRUFBOEksR0FBNUlELEVBQUVKLEVBQUUsTUFBaUIsT0FBT0EsRUFBRSxNQUFwQixXQUEyQkEsRUFBRSxLQUFLRixFQUFLLE1BQU0sT0FBTyxPQUFPRSxFQUFFLElBQUksR0FBYyxPQUFPQSxFQUFFLElBQXBCLFdBQXlCQSxFQUFFLEdBQUdGLEVBQUssTUFBTSxPQUFPLE9BQU9FLEVBQUUsRUFBRSxHQUFNLENBQUNGLEVBQUssS0FBS0UsRUFBRSxJQUFJLEdBQUcsQ0FBQ0YsRUFBSyxPQUFPRSxFQUFFLE1BQU0sR0FDL2UsT0FBT0QsR0FEMmUsVUFDeGUsS0FBS0MsRUFBRSxNQUFXQSxFQUFFLEtBQVAsSUFBZ0JBLEVBQUUsS0FBUCxJQUFpQkEsRUFBRSxLQUFSLEtBQWtCQSxFQUFFLEtBQVIsS0FBa0JBLEVBQUUsS0FBUixLQUFvQkEsRUFBRSxLQUFWLEtBQWMsQ0FBQ0EsRUFBRSxJQUFJLEVBQUVBLEVBQUUsR0FBRyxRQUFRLEVBQUVBLEVBQUUsR0FBRyxPQUFPLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEsa0NBQWtDLEVBQUUsT0FBVyxPQUFPQyxHQUFsQixVQUFxQk0sRUFBRVAsRUFBSyxLQUFLLGFBQWFDLEVBQUVDLENBQUMsRUFBRUQsRUFBRU0sRUFBRSxJQUFJLE1BQU0sRUFBRUwsRUFBRSxHQUFHLEVBQUUsRUFBRUEsRUFBRSxLQUFLSyxFQUFFLE1BQU1QLEVBQUssS0FBS0MsYUFBYUQsRUFBSyxJQUFJLFFBQVEsWUFBWUMsRUFBRUEsRUFBRSxNQUFNRCxFQUFLLE1BQU0sT0FBTyxPQUFPRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRUEsRUFBRSxHQUFHLEVBQUUsR0FBYyxPQUFPSSxHQUFsQixXQUFzQkEsRUFBRU4sRUFBSyxNQUFNLFdBQVcsT0FBT00sQ0FBQyxHQUFHQyxFQUFFLElBQUlQLEVBQUssT0FBT0UsRUFBRSxNQUFNLEVBQUVELENBQUMsRUFBRUssRUFDL2VKLEVBQUUsT0FEK2UsT0FDemVGLEVBQUssYUFBYUEsRUFBSyxZQUFZLEtBQUtFLEVBQUUsY0FBYyxZQUFZRixFQUFLLFlBQVksSUFBSSxRQUFRTyxFQUFFTCxFQUFFLEdBQUdBLEVBQUUsR0FBR0EsRUFBRSxJQUFJSSxFQUFFSixFQUFFLEVBQUUsRUFBRUYsRUFBSyxLQUFLRSxFQUFFLElBQUksRUFBRSxRQUFRSyxFQUFFTCxFQUFFLEdBQUdBLEVBQUUsR0FBR0ksRUFBRUosRUFBRSxFQUFFLEVBQUVHLEVBQUUsRUFBRUQsRUFBRUYsQ0FBQyxFQUFFRSxFQUFFLElBQUlILEVBQWFFLEVBQUUsTUFBTixFQUFVRyxFQUFFTixFQUFLLE1BQU0sV0FBVyxTQUFTTSxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVNMLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFTCxFQUFLLEtBQUssT0FBT0ssRUFBRSxHQUFHSixFQUFFSSxFQUFFLE9BQU9ILENBQUMsRUFBRUMsRUFBRUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxTQUFTSCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJQyxFQUFFLEdBQUcsSUFBSUYsS0FBS0QsRUFBRSxHQUFHQSxFQUFFLGVBQWVDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQ0EsRUFBRSxNQUFNLGNBQWMsRUFBRSxNQUFNLElBQUlGLEVBQUssVUFBVSxRQUFRLG9DQUFvQyxFQUM3ZCxPQUQrZEcsR0FBR0MsRUFBRSxJQUNqZkYsRUFBRSxLQUFLRSxFQUFFLElBQVcsT0FBT0gsRUFBRUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxTQUFTLElBQUssVUFBVUMsR0FBR0YsRUFBRUMsQ0FBQyxFQUFFLE1BQU0sSUFBSyxTQUFTQyxHQUFHLElBQUksT0FBT0YsRUFBRUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLElBQUssU0FBU0MsR0FBRyxJQUFJSCxFQUFLLE1BQU0sT0FBTyxTQUFTQyxFQUFFQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksTUFBTSxRQUFRLE1BQU0sSUFBSUYsRUFBSyxVQUFVLElBQUksK0JBQStCLENBQUUsQ0FBQyxDQUFDLE9BQU9HLEVBQUUsR0FBRyxFQUFFLE9BQU8sU0FBU0YsRUFBRSxDQUF1QixHQUF0QkEsRUFBRUEsRUFBRSxRQUFRLE1BQU0sRUFBRSxFQUFLLENBQUNBLEVBQUUsTUFBTSxVQUFVLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUEsRUFBRSxRQUFRLFdBQVcsRUFBRSxFQUFFLE1BQU0sR0FBRyxFQUFFLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFJLENBQUMsR0FBRyxFQUFFQyxFQUFFSCxFQUFFRSxDQUFDLEVBQUUsTUFBTSw2RkFBNkYsR0FBRyxNQUFNLElBQUlILEVBQUssVUFBVSxRQUFRLCtCQUErQixFQUMxb0JJLEVBQUUsQ0FBQyxHQUFULEtBQVdGLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBU0EsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFRQSxFQUFFLENBQUMsR0FBVCxLQUFXRixFQUFFRSxFQUFFLENBQUMsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRSxNQUFNLHNCQUFzQixFQUFFSixFQUFLLE1BQU0sT0FBTyxPQUFPSSxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVNBLEVBQUUsQ0FBQyxDQUFDLEVBQVFBLEVBQUUsQ0FBQyxHQUFULE9BQWFGLEVBQUVFLEVBQUUsQ0FBQyxDQUFDLEVBQVdBLEVBQUUsQ0FBQyxJQUFaLE9BQWMsQ0FBQyxPQUFPRixDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFQyxFQUFFQyxFQUFFLENBQW9CLEdBQVZGLElBQVQsU0FBYUEsRUFBRSxDQUFDLEdBQWVDLElBQVQsT0FBVyxPQUFPRCxFQUFFLFFBQVFHLEtBQUtGLEVBQUUsR0FBR0EsRUFBRSxlQUFlRSxDQUFDLEVBQUUsQ0FBQyxHQUFHRCxHQUFZRixFQUFFRyxDQUFDLElBQVosUUFBZUgsRUFBRUcsQ0FBQyxJQUFJRixFQUFFRSxDQUFDLEVBQUUsTUFBTSxJQUFJSixFQUFLLFVBQVUsUUFBUSwrQkFBK0IsRUFBRUMsRUFBRUcsQ0FBQyxFQUFFRixFQUFFRSxDQUFDLENBQUMsQ0FBQyxPQUFPSCxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUVGLEVBQUssT0FBTyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUVHLEVBQVdELEVBQUUsT0FBWCxPQUFnQkUsRUFBRSxVQUFVRixFQUFFLEtBQUtFLEVBQUVELENBQUMsRUFBRUMsRUFBRUQsQ0FBQyxHQUFHSCxFQUFLLEtBQUssT0FBT0MsRUFBRUUsRUFBRUQsRUFBRSxJQUFJLEVBQVEsQ0FBQyxJQUFJRSxFQUFFRCxDQUFDLEVBQUUs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UUFBU1UsRUFBSSxFQUFHQSxFQUFJRCxFQUFTLFlBQWFDLElBQ3BDLENBQUNiLElBQVlGLEdBQWVILElBQzlCQyxHQUFNLE1BQU0sRUFHZCxNQUFNQSxHQUFNLElBQUksU0FBWSxDQUMxQixNQUFNa0IsR0FBY0YsRUFBVUMsQ0FBQyxFQUUvQmYsTUFFSUUsSUFBWUYsS0FBaUJILEtBQy9CQyxHQUFNLE1BQU0sQ0FFaEIsQ0FBQyxDQUVMLENBQUMsRUFFREUsS0FFT2dCLEdBQWNGLEVBQVUsQ0FBQyxDQUNsQyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlIiLCAiUmVmbGVjdEFwcGx5IiwgInRhcmdldCIsICJyZWNlaXZlciIsICJhcmdzIiwgIlJlZmxlY3RPd25LZXlzIiwgIlByb2Nlc3NFbWl0V2FybmluZyIsICJ3YXJuaW5nIiwgIk51bWJlcklzTmFOIiwgInZhbHVlIiwgIkV2ZW50RW1pdHRlciIsICJvbmNlIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAiY2hlY2tMaXN0ZW5lciIsICJsaXN0ZW5lciIsICJhcmciLCAibiIsICJfZ2V0TWF4TGlzdGVuZXJzIiwgInRoYXQiLCAidHlwZSIsICJpIiwgImRvRXJyb3IiLCAiZXZlbnRzIiwgImVyIiwgImVyciIsICJoYW5kbGVyIiwgImxlbiIsICJsaXN0ZW5lcnMiLCAiYXJyYXlDbG9uZSIsICJfYWRkTGlzdGVuZXIiLCAicHJlcGVuZCIsICJtIiwgImV4aXN0aW5nIiwgInciLCAib25jZVdyYXBwZXIiLCAiX29uY2VXcmFwIiwgInN0YXRlIiwgIndyYXBwZWQiLCAibGlzdCIsICJwb3NpdGlvbiIsICJvcmlnaW5hbExpc3RlbmVyIiwgInNwbGljZU9uZSIsICJrZXlzIiwgImtleSIsICJfbGlzdGVuZXJzIiwgInVud3JhcCIsICJldmxpc3RlbmVyIiwgInVud3JhcExpc3RlbmVycyIsICJlbWl0dGVyIiwgImxpc3RlbmVyQ291bnQiLCAiYXJyIiwgImNvcHkiLCAiaW5kZXgiLCAicmV0IiwgIm5hbWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3JMaXN0ZW5lciIsICJyZXNvbHZlciIsICJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCAiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCAiZmxhZ3MiLCAid3JhcExpc3RlbmVyIiwgInJlcXVpcmVfc2pjbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNqY2wiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImFhIiwgImsiLCAibiIsICJsIiwgIm0iLCAicCIsICJ6IiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJHIiwgIkUiLCAiSCIsICJGIiwgIlYiLCAiSSIsICJ3IiwgInYiLCAiUiIsICJKIiwgIlMiLCAiSyIsICJXIiwgIkwiLCAicSIsICJ4IiwgInkiLCAiWCIsICJZIiwgIk0iLCAiZmEiLCAiamEiLCAia2EiLCAiZ2EiLCAiYmEiLCAiTiIsICJjYSIsICJPIiwgIlQiLCAiaGEiLCAiaWEiLCAiZGEiLCAiVSIsICJaIiwgInJlcXVpcmVfZXZlbnRlbWl0dGVyMyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhcyIsICJwcmVmaXgiLCAiRXZlbnRzIiwgIkVFIiwgImZuIiwgImNvbnRleHQiLCAib25jZSIsICJhZGRMaXN0ZW5lciIsICJlbWl0dGVyIiwgImV2ZW50IiwgImxpc3RlbmVyIiwgImV2dCIsICJjbGVhckV2ZW50IiwgIkV2ZW50RW1pdHRlciIsICJuYW1lcyIsICJldmVudHMiLCAibmFtZSIsICJoYW5kbGVycyIsICJpIiwgImwiLCAiZWUiLCAibGlzdGVuZXJzIiwgImExIiwgImEyIiwgImEzIiwgImE0IiwgImE1IiwgImxlbiIsICJhcmdzIiwgImxlbmd0aCIsICJqIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAic2VuZEZpbGVFcnJvciIsICJlcnJvciIsICJpbml0IiwgImRlZmF1bHRFcnJvckNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAibWVzc2FnZSIsICJyZXN1bHQiLCAiY29uZmlnIiwgImRhdGEiLCAibWF5YmVTdGFjayIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX2F3YWl0IiwgInYiLCAiX19hc3luY0dlbmVyYXRvciIsICJnIiwgInEiLCAidmVyYiIsICJhd2FpdFJldHVybiIsICJmIiwgIm4iLCAiYSIsICJiIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiciIsICJmdWxmaWxsIiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAicCIsICJfX2FzeW5jVmFsdWVzIiwgImQiLCAiUmVzdWx0QXN5bmMiLCAiX1Jlc3VsdEFzeW5jIiwgInJlcyIsICJwcm9taXNlIiwgIm5ld1Byb21pc2UiLCAidmFsdWUiLCAiT2siLCAiZXJyb3JGbiIsICJlIiwgIkVyciIsICJmbiIsICJhcmdzIiwgIl9fYXdhaXRlciIsICJlcnJvciIsICJhc3luY1Jlc3VsdExpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyIsICJmIiwgIm5ld1JlcyIsICJuZXdWYWx1ZSIsICJvayIsICJfZXJyIiwgInQiLCAiX19hc3luY0dlbmVyYXRvciIsICJfX2F3YWl0IiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAiX19hc3luY1ZhbHVlcyIsICJzdWNjZXNzQ2FsbGJhY2siLCAiZmFpbHVyZUNhbGxiYWNrIiwgInJlc3VsdCIsICJlcnJBc3luYyIsICJva0FzeW5jIiwgImVyciIsICJmcm9tUHJvbWlzZSIsICJmcm9tU2FmZVByb21pc2UiLCAiZnJvbUFzeW5jVGhyb3dhYmxlIiwgImNvbWJpbmVSZXN1bHRMaXN0IiwgInJlc3VsdExpc3QiLCAiYWNjIiwgImxpc3QiLCAiY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzIiwgIlJlc3VsdCIsICJmcm9tVGhyb3dhYmxlIiwgImNvbWJpbmUiLCAiY29tYmluZVdpdGhBbGxFcnJvcnMiLCAiT2siLCAidmFsdWUiLCAiZiIsICJvayIsICJfZiIsICJfdmFsdWUiLCAiUmVzdWx0QXN5bmMiLCAiX3YiLCAiX2VyciIsICJfIiwgImNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAiRXJyIiwgImVycm9yIiwgImVyciIsICJlcnJBc3luYyIsICJ2IiwgIl9vayIsICJzZWxmIiwgImZyb21UaHJvd2FibGUiLCAiUmVzdWx0IiwgIkJhc2VFcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiY2F1c2UiLCAiY29udGV4dCIsICJfX3B1YmxpY0ZpZWxkIiwgIldlYlNvY2tldEVycm9yIiwgIkJhc2VFcnJvciIsICJXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAic3RyIiwgInZpZXdMZW4iLCAiZW5jMSIsICJlbmMyIiwgImVuYzMiLCAiZW5jNCIsICJpIiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIm9iaiIsICJFbmNvZGluZyIsICJEZWNvZGUiLCAic3RyIiwgIm9iaiIsICJpbXBvcnRfbHVmaV9zamNsIiwgIkNyeXB0b0Vycm9yIiwgIkJhc2VFcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWREYXRhIiwgImRhdGEiLCAib2tBc3luYyIsICJEZWNvZGUiLCAic2pjbCIsICJlcnJvciIsICJlcnJBc3luYyIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAiZW5jcnlwdGVkIiwgImltcG9ydEtleSIsICJpbXBvcnRlZEtleSIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaW1wb3J0S2V5IiwgImtleSIsICJSZXN1bHRBc3luYyIsICJEZWNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAidmFsdWUiLCAic29ja2V0cyIsICJNQVhfRVJST1JTIiwgIm9uQ2FuY2VsTWVzc2FnZSIsICJkYXRhIiwgImV2ZW50cyIsICJva0FzeW5jIiwgIm9uRG93bmxvYWRNZXNzYWdlIiwgInJlc3BvbnNlIiwgImx1ZmlGaWxlIiwgInJlc3VsdCIsICJtZXRhZGF0YVN0cmluZyIsICJtZXRhZGF0YSIsICJpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEiLCAiZGF0YVN0cmluZyIsICJlbmNyeXB0ZWREYXRhIiwgIkRlY29kZSIsICJkZWNyeXB0IiwgImRlY3J5cHRlZFBhcnQiLCAiYnVmZmVyIiwgInVwZGF0ZUZpbGUiLCAiZW5kRG93bmxvYWQiLCAiZXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiZXJyQXN5bmMiLCAib25VcGxvYWRNZXNzYWdlIiwgIm9uTWVzc2FnZSIsICJlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJkb3dubG9hZENodW5rIiwgImx1ZmlGaWxlIiwgImNodW5rTnVtYmVyIiwgIm1lc3NhZ2UiLCAic2VuZE1lc3NhZ2UiLCAiZG93bmxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAic2VuZE1lc3NhZ2UiLCAic29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgIm1lc3NhZ2UiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaW1wb3J0X2luZGV4IiwgIlRpbWVvdXRFcnJvciIsICJtZXNzYWdlIiwgIkFib3J0RXJyb3IiLCAiZ2V0RE9NRXhjZXB0aW9uIiwgImVycm9yTWVzc2FnZSIsICJnZXRBYm9ydGVkUmVhc29uIiwgInNpZ25hbCIsICJyZWFzb24iLCAicFRpbWVvdXQiLCAicHJvbWlzZSIsICJvcHRpb25zIiwgIm1pbGxpc2Vjb25kcyIsICJmYWxsYmFjayIsICJjdXN0b21UaW1lcnMiLCAidGltZXIiLCAiY2FuY2VsYWJsZVByb21pc2UiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYWJvcnRIYW5kbGVyIiwgInRpbWVvdXRFcnJvciIsICJlcnJvciIsICJsb3dlckJvdW5kIiwgImFycmF5IiwgInZhbHVlIiwgImNvbXBhcmF0b3IiLCAiZmlyc3QiLCAiY291bnQiLCAic3RlcCIsICJpdCIsICJfcXVldWUiLCAiUHJpb3JpdHlRdWV1ZSIsICJfX3ByaXZhdGVBZGQiLCAicnVuIiwgIm9wdGlvbnMiLCAiZWxlbWVudCIsICJfX3ByaXZhdGVHZXQiLCAiaW5kZXgiLCAibG93ZXJCb3VuZCIsICJhIiwgImIiLCAiaXRlbSIsICJfY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCIsICJfaXNJbnRlcnZhbElnbm9yZWQiLCAiX2ludGVydmFsQ291bnQiLCAiX2ludGVydmFsQ2FwIiwgIl9pbnRlcnZhbCIsICJfaW50ZXJ2YWxFbmQiLCAiX2ludGVydmFsSWQiLCAiX3RpbWVvdXRJZCIsICJfcXVldWUiLCAiX3F1ZXVlQ2xhc3MiLCAiX3BlbmRpbmciLCAiX2NvbmN1cnJlbmN5IiwgIl9pc1BhdXNlZCIsICJfdGhyb3dPblRpbWVvdXQiLCAiX1BRdWV1ZV9pbnN0YW5jZXMiLCAiZG9lc0ludGVydmFsQWxsb3dBbm90aGVyX2dldCIsICJkb2VzQ29uY3VycmVudEFsbG93QW5vdGhlcl9nZXQiLCAibmV4dF9mbiIsICJvblJlc3VtZUludGVydmFsX2ZuIiwgImlzSW50ZXJ2YWxQYXVzZWRfZ2V0IiwgInRyeVRvU3RhcnRBbm90aGVyX2ZuIiwgImluaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkX2ZuIiwgIm9uSW50ZXJ2YWxfZm4iLCAicHJvY2Vzc1F1ZXVlX2ZuIiwgInRocm93T25BYm9ydF9mbiIsICJvbkV2ZW50X2ZuIiwgIlBRdWV1ZSIsICJFdmVudEVtaXR0ZXIiLCAib3B0aW9ucyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJfX3ByaXZhdGVBZGQiLCAiX19wdWJsaWNGaWVsZCIsICJQcmlvcml0eVF1ZXVlIiwgIl9fcHJpdmF0ZVNldCIsICJfX3ByaXZhdGVHZXQiLCAibmV3Q29uY3VycmVuY3kiLCAiX19wcml2YXRlTWV0aG9kIiwgImZ1bmN0aW9uXyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJfX3ByaXZhdGVXcmFwcGVyIiwgIm9wZXJhdGlvbiIsICJwVGltZW91dCIsICJyZXN1bHQiLCAiZXJyb3IiLCAiVGltZW91dEVycm9yIiwgImZ1bmN0aW9ucyIsICJsaW1pdCIsICJub3ciLCAiZGVsYXkiLCAiY2FuSW5pdGlhbGl6ZUludGVydmFsIiwgImpvYiIsICJzaWduYWwiLCAiX3Jlc29sdmUiLCAiZXZlbnQiLCAiZmlsdGVyIiwgImxpc3RlbmVyIiwgIlFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUIiwgInF1ZXVlIiwgIlBRdWV1ZSIsICJpdGVtc0luUXVldWUiLCAiaXNJbml0aWF0ZWQiLCAiaXNQYXVzZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAidXBkYXRlRmlsZSIsICJidWZmZXIiLCAiaW5kZXgiLCAiZGF0YSIsICJkb3dubG9hZCIsICJlcnJvciIsICJzZW5kRmlsZUVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAibHVmaUZpbGUiLCAiaSIsICJkb3dubG9hZENodW5rIl0KfQo=
+var gr=Object.create;var ot=Object.defineProperty;var wr=Object.getOwnPropertyDescriptor;var Er=Object.getOwnPropertyNames;var Ar=Object.getPrototypeOf,Or=Object.prototype.hasOwnProperty;var Lt=t=>{throw TypeError(t)};var _r=(t,e,r)=>e in t?ot(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var xr=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var it=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Lr=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Er(e))!Or.call(t,o)&&o!==r&&ot(t,o,{get:()=>e[o],enumerable:!(n=wr(e,o))||n.enumerable});return t};var st=(t,e,r)=>(r=t!=null?gr(Ar(t)):{},Lr(e||!t||!t.__esModule?ot(r,"default",{value:t,enumerable:!0}):r,t));var M=(t,e,r)=>_r(t,typeof e!="symbol"?e+"":e,r),at=(t,e,r)=>e.has(t)||Lt("Cannot "+r);var d=(t,e,r)=>(at(t,e,"read from private field"),r?r.call(t):e.get(t)),O=(t,e,r)=>e.has(t)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),w=(t,e,r,n)=>(at(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r),_=(t,e,r)=>(at(t,e,"access private method"),r);var ze=(t,e,r,n)=>({set _(o){w(t,e,o,r)},get _(){return d(t,e,n)}});var Nt=it((fn,ct)=>{"use strict";var ie=typeof Reflect=="object"?Reflect:null,bt=ie&&typeof ie.apply=="function"?ie.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},Je;ie&&typeof ie.ownKeys=="function"?Je=ie.ownKeys:Object.getOwnPropertySymbols?Je=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Je=function(e){return Object.getOwnPropertyNames(e)};function br(t){console&&console.warn&&console.warn(t)}var Ct=Number.isNaN||function(e){return e!==e};function g(){g.init.call(this)}ct.exports=g;ct.exports.once=Rr;g.EventEmitter=g;g.prototype._events=void 0;g.prototype._eventsCount=0;g.prototype._maxListeners=void 0;var Dt=10;function He(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(g,"defaultMaxListeners",{enumerable:!0,get:function(){return Dt},set:function(t){if(typeof t!="number"||t<0||Ct(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Dt=t}});g.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};g.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ct(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function St(t){return t._maxListeners===void 0?g.defaultMaxListeners:t._maxListeners}g.prototype.getMaxListeners=function(){return St(this)};g.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var c=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw c.context=s,c}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")bt(u,this,r);else for(var f=u.length,h=Pt(u,f),n=0;n0&&s.length>o&&!s.warned){s.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=t,c.type=e,c.count=s.length,br(c)}return t}g.prototype.addListener=function(e,r){return Rt(this,e,r,!1)};g.prototype.on=g.prototype.addListener;g.prototype.prependListener=function(e,r){return Rt(this,e,r,!0)};function Dr(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function kt(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=Dr.bind(n);return o.listener=r,n.wrapFn=o,o}g.prototype.once=function(e,r){return He(r),this.on(e,kt(this,e,r)),this};g.prototype.prependOnceListener=function(e,r){return He(r),this.prependListener(e,kt(this,e,r)),this};g.prototype.removeListener=function(e,r){var n,o,i,s,c;if(He(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){c=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Cr(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,c||r)}return this};g.prototype.off=g.prototype.removeListener;g.prototype.removeAllListeners=function(e){var r,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Tt(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Sr(o):Pt(o,o.length)}g.prototype.listeners=function(e){return Tt(this,e,!0)};g.prototype.rawListeners=function(e){return Tt(this,e,!1)};g.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):It.call(t,e)};g.prototype.listenerCount=It;function It(t){var e=this._events;if(e!==void 0){var r=e[t];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}g.prototype.eventNames=function(){return this._eventsCount>0?Je(this._events):[]};function Pt(t,e){for(var r=new Array(e),n=0;n{"use strict";var a={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};a.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var c=1;if(e!==4&&e!==6&&e!==8)throw new a.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^c<<24,c=c<<1^283*(c>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};a.cipher.aes.prototype={encrypt:function(t){return Xt(this,t,0)},decrypt:function(t){return Xt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,c=[],u=[],f,h,l,m;for(o=0;256>o;o++)u[(c[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=c[o=c[f=c[i]]],m=16843009*h^65537*o^257*f^16843008*i,h=257*c[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=m=m<<24^m>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function Xt(t,e,r){if(e.length!==4)throw new a.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var c,u,f,h=n.length/4-2,l,m=4,p=[0,0,0,0];c=t.w[r],t=c[0];var A=c[1],P=c[2],W=c[3],G=c[4];for(l=0;l>>24]^A[i>>16&255]^P[s>>8&255]^W[e&255]^n[m],u=t[i>>>24]^A[s>>16&255]^P[e>>8&255]^W[o&255]^n[m+1],f=t[s>>>24]^A[e>>16&255]^P[o>>8&255]^W[i&255]^n[m+2],e=t[e>>>24]^A[o>>16&255]^P[i>>8&255]^W[s&255]^n[m+3],m+=4,o=c,i=u,s=f;for(l=0;4>l;l++)p[r?3&-l:l]=G[o>>>24]<<24^G[i>>16&255]<<16^G[s>>8&255]<<8^G[e&255]^n[m++],c=o,o=i,i=s,s=e,e=c;return p}a.bitArray={bitSlice:function(t,e,r){return t=a.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:a.bitArray.clamp(t,r-e)},extract:function(t,e,r){var n=Math.floor(-e-r&31);return((e+r-1^e)&-32?t[e/32|0]<<32-n^t[e/32+1|0]>>>n:t[e/32|0]>>>n)&(1<>e-1,1)),t},partial:function(t,e,r){return t===32?e:(r?e|0:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(a.bitArray.bitLength(t)!==a.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n>>e),r=t[o]<<32-e;return o=t.length?t[t.length-1]:0,t=a.bitArray.getPartial(o),n.push(a.bitArray.partial(e+t&31,32>>24|r>>>8&65280|(r&65280)<<8|r<<24;return t}};a.codec.utf8String={fromBits:function(t){var e="",r=a.bitArray.bitLength(t),n,o;for(n=0;n>>8>>>8>>>8),o<<=8;return decodeURIComponent(escape(e))},toBits:function(t){t=unescape(encodeURIComponent(t));var e=[],r,n=0;for(r=0;r>>o)>>>26),6>o?(s=t[r]<<6-o,o+=26,r++):(s<<=6,o-=6);for(;n.length&3&&!e;)n+="=";return n},toBits:function(t,e){t=t.replace(/\s|=/g,"");var r=[],n,o=0,i=a.codec.base64.S,s=0,c;for(e&&(i=i.substr(0,62)+"-_"),n=0;nc)throw new a.exception.invalid("this isn't base64!");26>>o),s=c<<32-o):(o+=6,s^=c<<32-o)}return o&56&&r.push(a.bitArray.partial(o&56,s,1)),r}};a.codec.base64url={fromBits:function(t){return a.codec.base64.fromBits(t,1,1)},toBits:function(t){return a.codec.base64.toBits(t,1)}};a.hash.sha256=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};a.hash.sha256.hash=function(t){return new a.hash.sha256().update(t).finalize()};a.hash.sha256.prototype={blockSize:512,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991e;r++){for(o=!0,n=2;n*n<=r;n++)if(r%n===0){o=!1;break}o&&(8>e&&(this.o[e]=t(Math.pow(r,.5))),this.b[e]=t(Math.pow(r,1/3)),e++)}},l:function(t){var e,r,n,o=this.g,i=this.b,s=o[0],c=o[1],u=o[2],f=o[3],h=o[4],l=o[5],m=o[6],p=o[7];for(e=0;64>e;e++)16>e?r=t[e]:(r=t[e+1&15],n=t[e+14&15],r=t[e&15]=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+t[e&15]+t[e+9&15]|0),r=r+p+(h>>>6^h>>>11^h>>>25^h<<26^h<<21^h<<7)+(m^h&(l^m))+i[e],p=m,m=l,l=h,h=f+r|0,f=u,u=c,c=s,s=r+(c&u^f&(c^u))+(c>>>2^c>>>13^c>>>22^c<<30^c<<19^c<<10)|0;o[0]=o[0]+s|0,o[1]=o[1]+c|0,o[2]=o[2]+u|0,o[3]=o[3]+f|0,o[4]=o[4]+h|0,o[5]=o[5]+l|0,o[6]=o[6]+m|0,o[7]=o[7]+p|0}};a.hash.sha512=function(t){this.b[0]||this.C(),t?(this.g=t.g.slice(0),this.f=t.f.slice(0),this.c=t.c):this.reset()};a.hash.sha512.hash=function(t){return new a.hash.sha512().update(t).finalize()};a.hash.sha512.prototype={blockSize:1024,reset:function(){return this.g=this.o.slice(0),this.f=[],this.c=0,this},update:function(t){typeof t=="string"&&(t=a.codec.utf8String.toBits(t));var e,r=this.f=a.bitArray.concat(this.f,t);if(e=this.c,t=this.c=e+a.bitArray.bitLength(t),9007199254740991r;n++){for(i=!0,o=2;o*o<=n;o++)if(n%o===0){i=!1;break}i&&(8>r&&(this.o[2*r]=t(Math.pow(n,.5)),this.o[2*r+1]=e(Math.pow(n,.5))<<24|this.ia[r]),this.b[2*r]=t(Math.pow(n,1/3)),this.b[2*r+1]=e(Math.pow(n,1/3))<<24|this.ka[r],r++)}},l:function(t){var e,r,n=this.g,o=this.b,i=n[0],s=n[1],c=n[2],u=n[3],f=n[4],h=n[5],l=n[6],m=n[7],p=n[8],A=n[9],P=n[10],W=n[11],G=n[12],Be=n[13],Ot=n[14],je=n[15],D;if(typeof Uint32Array<"u"){D=Array(160);for(var x=0;32>x;x++)D[x]=t[x]}else D=t;var x=i,k=s,ye=c,ne=u,ve=f,oe=h,et=l,ge=m,F=p,T=A,We=P,we=W,Fe=G,Ee=Be,tt=Ot,Ae=je;for(t=0;80>t;t++){if(16>t)e=D[2*t],r=D[2*t+1];else{r=D[2*(t-15)];var E=D[2*(t-15)+1];e=(E<<31|r>>>1)^(E<<24|r>>>8)^r>>>7;var z=(r<<31|E>>>1)^(r<<24|E>>>8)^(r<<25|E>>>7);r=D[2*(t-2)];var J=D[2*(t-2)+1],E=(J<<13|r>>>19)^(r<<3|J>>>29)^r>>>6,J=(r<<13|J>>>19)^(J<<3|r>>>29)^(r<<26|J>>>6),rt=D[2*(t-7)],nt=D[2*(t-16)],Oe=D[2*(t-16)+1];r=z+D[2*(t-7)+1],e=e+rt+(r>>>0>>0?1:0),r+=J,e+=E+(r>>>0>>0?1:0),r+=Oe,e+=nt+(r>>>0>>0?1:0)}D[2*t]=e|=0,D[2*t+1]=r|=0;var rt=F&We^~F&Fe,_t=T&we^~T&Ee,J=x&ye^x&ve^ye&ve,yr=k&ne^k&oe^ne&oe,nt=(k<<4|x>>>28)^(x<<30|k>>>2)^(x<<25|k>>>7),Oe=(x<<4|k>>>28)^(k<<30|x>>>2)^(k<<25|x>>>7),vr=o[2*t],xt=o[2*t+1],E=Ae+((F<<18|T>>>14)^(F<<14|T>>>18)^(T<<23|F>>>9)),z=tt+((T<<18|F>>>14)^(T<<14|F>>>18)^(F<<23|T>>>9))+(E>>>0>>0?1:0),E=E+_t,z=z+(rt+(E>>>0<_t>>>0?1:0)),E=E+xt,z=z+(vr+(E>>>0>>0?1:0)),E=E+r|0,z=z+(e+(E>>>0>>0?1:0));r=Oe+yr,e=nt+J+(r>>>0>>0?1:0),tt=Fe,Ae=Ee,Fe=We,Ee=we,We=F,we=T,T=ge+E|0,F=et+z+(T>>>0>>0?1:0)|0,et=ve,ge=oe,ve=ye,oe=ne,ye=x,ne=k,k=E+r|0,x=z+e+(k>>>0>>0?1:0)|0}s=n[1]=s+k|0,n[0]=i+x+(s>>>0>>0?1:0)|0,u=n[3]=u+ne|0,n[2]=c+ye+(u>>>0>>0?1:0)|0,h=n[5]=h+oe|0,n[4]=f+ve+(h>>>0>>0?1:0)|0,m=n[7]=m+ge|0,n[6]=l+et+(m>>>0>>0?1:0)|0,A=n[9]=A+T|0,n[8]=p+F+(A>>>0>>0?1:0)|0,W=n[11]=W+we|0,n[10]=P+We+(W>>>0>>0?1:0)|0,Be=n[13]=Be+Ee|0,n[12]=G+Fe+(Be>>>0>>0?1:0)|0,je=n[15]=je+Ae|0,n[14]=Ot+tt+(je>>>0>>0?1:0)|0}};a.mode.ccm={name:"ccm",F:[],listenProgress:function(t){a.mode.ccm.F.push(t)},unListenProgress:function(t){t=a.mode.ccm.F.indexOf(t),-1u)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(i=2;4>i&&f>>>8*i;i++);return i<15-u&&(i=15-u),r=c.clamp(r,8*(15-i)),e=a.mode.ccm.U(t,e,r,n,o,i),s=a.mode.ccm.V(t,s,r,e,o,i),c.concat(s.data,s.tag)},decrypt:function(t,e,r,n,o){o=o||64,n=n||[];var i=a.bitArray,s=i.bitLength(r)/8,f=i.bitLength(e),c=i.clamp(e,f-o),u=i.bitSlice(e,f-o),f=(f-o)/8;if(7>s)throw new a.exception.invalid("ccm: iv must be at least 7 bytes");for(e=2;4>e&&f>>>8*e;e++);if(e<15-s&&(e=15-s),r=i.clamp(r,8*(15-e)),c=a.mode.ccm.V(t,c,r,u,o,e),t=a.mode.ccm.U(t,c.data,r,n,o,e),!i.equal(c.tag,t))throw new a.exception.corrupt("ccm: tag doesn't match");return c.data},ma:function(t,e,r,n,o,i){var s=[],c=a.bitArray,u=c.P;if(n=[c.partial(8,(e.length?64:0)|n-2<<2|i-1)],n=c.concat(n,r),n[3]|=o,n=t.encrypt(n),e.length)for(r=c.bitLength(e)/8,65279>=r?s=[c.partial(16,r)]:4294967295>=r&&(s=c.concat([c.partial(16,65534)],[r])),s=c.concat(s,e),e=0;eo||16h&&(a.mode.ccm.da(s/u),h+=l),r[3]++,o=t.encrypt(r),e[s]^=o[0],e[s+1]^=o[1],e[s+2]^=o[2],e[s+3]^=o[3];return{tag:n,data:c.clamp(e,f)}}};a.misc.hmac=function(t,e){this.W=e=e||a.hash.sha256;var r=[[],[]],n,o=e.prototype.blockSize/32;for(this.B=[new e,new e],t.length>o&&(t=e.hash(t)),n=0;nn||0>r)throw new a.exception.invalid("invalid params to pbkdf2");typeof t=="string"&&(t=a.codec.utf8String.toBits(t)),typeof e=="string"&&(e=a.codec.utf8String.toBits(e)),o=o||a.misc.hmac,t=new o(t);var i,s,c,u,f=[],h=a.bitArray;for(u=1;32*f.length<(n||1);u++){for(o=i=t.encrypt(h.concat(e,[u])),s=1;ss;s++)o.push(4294967296*Math.random()|0);for(s=0;s=1<this.u&&(this.u=i),this.N++,this.b=a.hash.sha256.hash(this.b.concat(o)),this.K=new a.cipher.aes(this.b),n=0;4>n&&(this.m[n]=this.m[n]+1|0,!this.m[n]);n++);}for(n=0;n>>1;this.h[s].update([n,this.M++,2,e,i,t.length].concat(t))}break;case"string":e===void 0&&(e=t.length),this.h[s].update([n,this.M++,3,e,i,t.length]),this.h[s].update(t);break;default:u=1}if(u)throw new a.exception.bug("random: addEntropy only supports number, array of numbers or string");this.s[s]+=e,this.i+=e,c===this.A&&(this.isReady()!==this.A&&Gt("seeded",Math.max(this.u,this.i)),Gt("progress",this.getProgress()))},isReady:function(t){return t=this.R[t!==void 0?t:this.L],this.u&&this.u>=t?this.s[0]>this.$&&new Date().valueOf()>this.X?this.I|this.H:this.H:this.i>=t?this.I|this.A:this.A},getProgress:function(t){return t=this.R[t||this.L],this.u>=t||this.i>t?1:this.i/t},startCollectors:function(){if(!this.D){if(this.a={loadTimeCollector:be(this,this.la),mouseCollector:be(this,this.na),keyboardCollector:be(this,this.ja),accelerometerCollector:be(this,this.ca),touchCollector:be(this,this.pa)},window.addEventListener)window.addEventListener("load",this.a.loadTimeCollector,!1),window.addEventListener("mousemove",this.a.mouseCollector,!1),window.addEventListener("keypress",this.a.keyboardCollector,!1),window.addEventListener("devicemotion",this.a.accelerometerCollector,!1),window.addEventListener("touchmove",this.a.touchCollector,!1);else if(document.attachEvent)document.attachEvent("onload",this.a.loadTimeCollector),document.attachEvent("onmousemove",this.a.mouseCollector),document.attachEvent("keypress",this.a.keyboardCollector);else throw new a.exception.bug("can't attach event");this.D=!0}},stopCollectors:function(){this.D&&(window.removeEventListener?(window.removeEventListener("load",this.a.loadTimeCollector,!1),window.removeEventListener("mousemove",this.a.mouseCollector,!1),window.removeEventListener("keypress",this.a.keyboardCollector,!1),window.removeEventListener("devicemotion",this.a.accelerometerCollector,!1),window.removeEventListener("touchmove",this.a.touchCollector,!1)):document.detachEvent&&(document.detachEvent("onload",this.a.loadTimeCollector),document.detachEvent("onmousemove",this.a.mouseCollector),document.detachEvent("keypress",this.a.keyboardCollector)),this.D=!1)},addEventListener:function(t,e){this.J[t][this.ea++]=e},removeEventListener:function(t,e){var r,n,o=this.J[t],i=[];for(n in o)o.hasOwnProperty(n)&&o[n]===e&&i.push(n);for(r=0;re&&(t.m[e]=t.m[e]+1|0,!t.m[e]);e++);return t.K.encrypt(t.m)}function be(t,e){return function(){e.apply(t,arguments)}}a.random=new a.prng(6);e:try{if($e=typeof ce<"u"&&ce.exports){try{Xe=xr("crypto")}catch{Xe=null}$e=Ke=Xe}if($e&&Ke.randomBytes)De=Ke.randomBytes(128),De=new Uint32Array(new Uint8Array(De).buffer),a.random.addEntropy(De,1024,"crypto['randomBytes']");else if(typeof window<"u"&&typeof Uint32Array<"u"){if(Ce=new Uint32Array(32),window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(Ce);else if(window.msCrypto&&window.msCrypto.getRandomValues)window.msCrypto.getRandomValues(Ce);else break e;a.random.addEntropy(Ce,1024,"crypto['getRandomValues']")}}catch(t){typeof window<"u"&&window.console&&(console.log("There was an error collecting entropy from the browser:"),console.log(t))}var De,Ke,Ce,$e,Xe;a.json={defaults:{v:1,iter:1e4,ks:128,ts:64,mode:"ccm",adata:"",cipher:"aes"},ha:function(t,e,r,n){r=r||{},n=n||{};var o=a.json,i=o.j({iv:a.random.randomWords(4,0)},o.defaults),s;if(o.j(i,r),r=i.adata,typeof i.salt=="string"&&(i.salt=a.codec.base64.toBits(i.salt)),typeof i.iv=="string"&&(i.iv=a.codec.base64.toBits(i.iv)),!a.mode[i.mode]||!a.cipher[i.cipher]||typeof t=="string"&&100>=i.iter||i.ts!==64&&i.ts!==96&&i.ts!==128||i.ks!==128&&i.ks!==192&&i.ks!==256||2>i.iv.length||4=e.iter||e.ts!==64&&e.ts!==96&&e.ts!==128||e.ks!==128&&e.ks!==192&&e.ks!==256||!e.iv||2>e.iv.length||4{"use strict";var on=Object.prototype.hasOwnProperty,S="~";function Se(){}Object.create&&(Se.prototype=Object.create(null),new Se().__proto__||(S=!1));function sn(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function ir(t,e,r,n,o){if(typeof r!="function")throw new TypeError("The listener must be a function");var i=new sn(r,n||t,o),s=S?S+e:e;return t._events[s]?t._events[s].fn?t._events[s]=[t._events[s],i]:t._events[s].push(i):(t._events[s]=i,t._eventsCount++),t}function Ge(t,e){--t._eventsCount===0?t._events=new Se:delete t._events[e]}function b(){this._events=new Se,this._eventsCount=0}b.prototype.eventNames=function(){var e=[],r,n;if(this._eventsCount===0)return e;for(n in r=this._events)on.call(r,n)&&e.push(S?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(r)):e};b.prototype.listeners=function(e){var r=S?S+e:e,n=this._events[r];if(!n)return[];if(n.fn)return[n.fn];for(var o=0,i=n.length,s=new Array(i);o(Object.assign(t,e),typeof WorkerGlobalScope<"u"&&self.postMessage({event:"FILE_UPDATED",lufiFile:t}),t),jt=(t,e)=>{q(t,{uploadStatus:2}),self.postMessage({event:"OPERATION_FAILED",error:e})},Wt=()=>{v.once("SOCKET_OPENED",()=>{self.postMessage({event:"SOCKET_OPENED"})}),v.once("OPERATION_FAILED",t=>{self.postMessage({event:"OPERATION_FAILED",error:t})})};var Pr={withStackTrace:!1},Jt=(t,e,r=Pr)=>{let n=e.isOk()?{type:"Ok",value:e.value}:{type:"Err",value:e.error},o=r.withStackTrace?new Error().stack:void 0;return{data:n,message:t,stack:o}};function se(t,e,r,n){function o(i){return i instanceof r?i:new r(function(s){s(i)})}return new(r||(r=Promise))(function(i,s){function c(h){try{f(n.next(h))}catch(l){s(l)}}function u(h){try{f(n.throw(h))}catch(l){s(l)}}function f(h){h.done?i(h.value):o(h.value).then(c,u)}f((n=n.apply(t,e||[])).next())})}function Ft(t){var e=typeof Symbol=="function"&&Symbol.iterator,r=e&&t[e],n=0;if(r)return r.call(t);if(t&&typeof t.length=="number")return{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function H(t){return this instanceof H?(this.v=t,this):new H(t)}function zt(t,e,r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r.apply(t,e||[]),o,i=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",s),o[Symbol.asyncIterator]=function(){return this},o;function s(p){return function(A){return Promise.resolve(A).then(p,l)}}function c(p,A){n[p]&&(o[p]=function(P){return new Promise(function(W,G){i.push([p,P,W,G])>1||u(p,P)})},A&&(o[p]=A(o[p])))}function u(p,A){try{f(n[p](A))}catch(P){m(i[0][3],P)}}function f(p){p.value instanceof H?Promise.resolve(p.value.v).then(h,l):m(i[0][2],p)}function h(p){u("next",p)}function l(p){u("throw",p)}function m(p,A){p(A),i.shift(),i.length&&u(i[0][0],i[0][1])}}function Mr(t){var e,r;return e={},n("next"),n("throw",function(o){throw o}),n("return"),e[Symbol.iterator]=function(){return this},e;function n(o,i){e[o]=t[o]?function(s){return(r=!r)?{value:H(t[o](s)),done:!1}:i?i(s):s}:i}}function Nr(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],r;return e?e.call(t):(t=typeof Ft=="function"?Ft(t):t[Symbol.iterator](),r={},n("next"),n("throw"),n("return"),r[Symbol.asyncIterator]=function(){return this},r);function n(i){r[i]=t[i]&&function(s){return new Promise(function(c,u){s=t[i](s),o(c,u,s.done,s.value)})}}function o(i,s,c,u){Promise.resolve(u).then(function(f){i({value:f,done:c})},s)}}var L=class t{constructor(e){this._promise=e}static fromSafePromise(e){let r=e.then(n=>new N(n));return new t(r)}static fromPromise(e,r){let n=e.then(o=>new N(o)).catch(o=>new U(r(o)));return new t(n)}static fromThrowable(e,r){return(...n)=>new t(se(this,void 0,void 0,function*(){try{return new N(yield e(...n))}catch(o){return new U(r?r(o):o)}}))}static combine(e){return Ur(e)}static combineWithAllErrors(e){return Br(e)}map(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?new U(r.error):new N(yield e(r.value))})))}andThrough(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);let n=yield e(r.value);return n.isErr()?new U(n.error):new N(r.value)})))}andTee(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){if(r.isErr())return new U(r.error);try{yield e(r.value)}catch{}return new N(r.value)})))}mapErr(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isOk()?new N(r.value):new U(yield e(r.error))})))}andThen(e){return new t(this._promise.then(r=>{if(r.isErr())return new U(r.error);let n=e(r.value);return n instanceof t?n._promise:n}))}orElse(e){return new t(this._promise.then(r=>se(this,void 0,void 0,function*(){return r.isErr()?e(r.error):new N(r.value)})))}match(e,r){return this._promise.then(n=>n.match(e,r))}unwrapOr(e){return this._promise.then(r=>r.unwrapOr(e))}safeUnwrap(){return zt(this,arguments,function*(){return yield H(yield H(yield*Mr(Nr(yield H(this._promise.then(r=>r.safeUnwrap()))))))})}then(e,r){return this._promise.then(e,r)}[Symbol.asyncIterator](){return zt(this,arguments,function*(){let r=yield H(this._promise);return r.isErr()&&(yield yield H(C(r.error))),yield H(r.value)})}},K=t=>new L(Promise.resolve(new N(t))),C=t=>new L(Promise.resolve(new U(t))),vn=L.fromPromise,gn=L.fromSafePromise,wn=L.fromThrowable,Ht=t=>{let e=te([]);for(let r of t)if(r.isErr()){e=Y(r.error);break}else e.map(n=>n.push(r.value));return e},Ur=t=>L.fromSafePromise(Promise.all(t)).andThen(Ht),Kt=t=>{let e=te([]);for(let r of t)r.isErr()&&e.isErr()?e.error.push(r.error):r.isErr()&&e.isOk()?e=Y([r.error]):r.isOk()&&e.isOk()&&e.value.push(r.value);return e},Br=t=>L.fromSafePromise(Promise.all(t)).andThen(Kt),ut;(function(t){function e(o,i){return(...s)=>{try{let c=o(...s);return te(c)}catch(c){return Y(i?i(c):c)}}}t.fromThrowable=e;function r(o){return Ht(o)}t.combine=r;function n(o){return Kt(o)}t.combineWithAllErrors=n})(ut||(ut={}));var te=t=>new N(t);function Y(t){return new U(t)}var N=class{constructor(e){this.value=e}isOk(){return!0}isErr(){return!this.isOk()}map(e){return te(e(this.value))}mapErr(e){return te(this.value)}andThen(e){return e(this.value)}andThrough(e){return e(this.value).map(r=>this.value)}andTee(e){try{e(this.value)}catch{}return te(this.value)}orElse(e){return te(this.value)}asyncAndThen(e){return e(this.value)}asyncAndThrough(e){return e(this.value).map(()=>this.value)}asyncMap(e){return L.fromSafePromise(e(this.value))}unwrapOr(e){return this.value}match(e,r){return e(this.value)}safeUnwrap(){let e=this.value;return function*(){return e}()}_unsafeUnwrap(e){return this.value}_unsafeUnwrapErr(e){throw Jt("Called `_unsafeUnwrapErr` on an Ok",this,e)}*[Symbol.iterator](){return this.value}},U=class{constructor(e){this.error=e}isOk(){return!1}isErr(){return!this.isOk()}map(e){return Y(this.error)}mapErr(e){return Y(e(this.error))}andThrough(e){return Y(this.error)}andTee(e){return Y(this.error)}andThen(e){return Y(this.error)}orElse(e){return e(this.error)}asyncAndThen(e){return C(this.error)}asyncAndThrough(e){return C(this.error)}asyncMap(e){return C(this.error)}unwrapOr(e){return e}match(e,r){return r(this.error)}safeUnwrap(){let e=this.error;return function*(){throw yield Y(e),new Error("Do not use this generator out of `safeTry`")}()}_unsafeUnwrap(e){throw Jt("Called `_unsafeUnwrap` on an Err",this,e)}_unsafeUnwrapErr(e){return this.error}*[Symbol.iterator](){let e=this;return yield e,e}},En=ut.fromThrowable;var Z=class extends Error{constructor(r,n={}){let{cause:o,context:i}=n;super(r,{cause:o});M(this,"context");this.name=this.constructor.name,this.context=i}};var $=class extends Z{};var _e=class extends ${constructor(){super(...arguments);M(this,"message","An error occured while trying to connect to WebSocket")}};var re=t=>{if(t instanceof Error)return t;let e="[Unable to stringify the thrown value]";try{e=JSON.stringify(t)}catch{}return new Error(e)};var ae=class{constructor(e,r){if(!e||e.length!=64)throw Error("Charset must contain 64 characters");this._charset=e,this._noPadding=!!r,this._valid=new RegExp("^["+this._charset.replace("-","\\-")+"]+={0,2}$")}Encode(e){let r=e.byteLength;if(!r)return"";let n=new Uint8Array(e),o="";for(let i=0;i>2]+this._charset[(n[i]&3)<<4|n[i+1]>>4]+this._charset[(n[i+1]&15)<<2|n[i+2]>>6]+this._charset[n[i+2]&63];return r%3==2?(o=o.substring(0,o.length-1),this._noPadding||(o+="=")):r%3==1&&(o=o.substring(0,o.length-2),this._noPadding||(o+="==")),o}Decode(e){if(e=(e||"").replace(/[\s]/g,""),!e)return new ArrayBuffer(0);if(!this._valid.test(e))throw Error("Invalid base64 input sequence");let r=Math.floor(e.length*.75);e[e.length-2]=="="?r-=2:e[e.length-1]=="="&&r--;let n=new Uint8Array(r),o,i,s,c,u=0,f=0;for(;u>4,n[u++]=(i&15)<<4|s>>2,n[u++]=(s&3)<<6|c;return n.buffer}};var jr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");function xe(t){return jr.Decode(t)}var Wr=new ae("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",!0);function ft(t){return Wr.Decode(t)}var Qt=st(Yt());var V=class extends Z{};var ue=class extends V{constructor(){super(...arguments);M(this,"message","Unable to decrypt the provided data")}};var Zt=(t,e)=>{try{let r=typeof e=="string"?e:e.data;return K(xe(Qt.default.decrypt(t,r)))}catch(r){return C(new ue(void 0,{cause:re(r)}))}};var er=(t,e)=>Kr(t).andThen(r=>L.fromPromise(crypto.subtle.decrypt({name:"AES-GCM",iv:e.iv},r,e.data),n=>new ue(void 0,{cause:re(n)})));var Kr=t=>L.fromPromise(crypto.subtle.importKey("raw",ft(t),{name:"AES-GCM"},!1,["encrypt","decrypt"]),e=>new V("Unable to import cryptography key",{cause:re(e)}));var tr=(t,e)=>e.algo===void 0||e.algo===0?Zt(t,e):er(t,e);var I={},rr=5,Gr=t=>(v.emit("UPLOAD_CANCELLED",t.success),K(void 0)),qr=(t,e)=>{let r=t.split("XXMOJOXX"),n=r.shift();if(n!==void 0){let o=JSON.parse(n);if(nn(o)){let i=r.shift();if(i){let s=JSON.parse(i);return s.iv&&(s.iv=new Uint8Array(Object.values(s.iv)),s.data=xe(s.data)),tr(e.keys.client,s).andThen(c=>{let u=typeof c=="string"?new TextEncoder().encode(c).buffer:c;return o.part===0?(q(e,{chunksReady:e.chunksReady+1,delAtFirstView:o.del_at_first_view,delay:o.delay,name:o.name,size:o.size,totalChunks:o.total,type:o.type,zipped:o.zipped}),v.emit("DOWNLOAD_STARTED")):q(e,{chunksReady:e.chunksReady+1}),v.emit("CHUNK_DOWNLOADED",u,o.part),e.chunksReady===o.total?Zr(e).andThen(()=>(v.emit("DOWNLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED"),K(void 0))):K(void 0)})}else{let s=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",s),C(s)}}else{let i=new $(o.msg);return v.emit("OPERATION_FAILED",i),C(i)}}else{let o=new $("Cannot retrieve metadata from data received by the server");return v.emit("OPERATION_FAILED",o),C(o)}},Yr=(t,e)=>{if(t.success)return t.j===0&&(q(e,{keys:{client:e.keys.client,server:t.short},actionToken:t.token,queueIndex:t.i}),v.emit("UPLOAD_STARTED")),q(e,{chunksReady:e.chunksReady+1,createdAt:t.created_at}),v.emit("CHUNK_UPLOADED"),e.chunksReady===e.totalChunks&&(q(e,{uploadStatus:1}),v.emit("UPLOAD_COMPLETE"),v.emit("SOCKET_OPERATION_TERMINATED")),K(void 0);{let r=new $(t.msg);return v.emit("OPERATION_FAILED",r),C(r)}},Vr=(t,e)=>{let r=rn(t.data),n;if(r)if(!r.action&&r.msg){let o=new $(r.msg);return v.emit("OPERATION_FAILED",o),C(o)}else"delay"in r?n=Yr(r,e):n=Gr(r);else n=qr(t.data,e);return n},Qr=t=>I!==void 0&&I[t]!==void 0&&I[t].readyState===WebSocket.CONNECTING,lt=t=>I!==void 0&&I[t]!==void 0&&I[t].readyState===WebSocket.OPEN;var dt=(t,e)=>{let r;return t.password?r={part:e,file_pwd:t.password}:r={part:e},pt(or(t),t,JSON.stringify(r))},Zr=t=>{let e;return t.password?e={ended:!0,file_pwd:t.password}:e={ended:!0},pt(or(t),t,JSON.stringify(e))};var pt=(t,e,r)=>lt(t)?(I[t].send(r),K(void 0)):nr(t).andThen(()=>(I[t].onmessage=n=>Vr(n,e),pt(t,e,r))),nr=(t,e=0)=>(!lt(t)&&!Qr(t)&&(I[t]=new WebSocket(t),v.once("SOCKET_OPERATION_TERMINATED",()=>{I[t].close()}),v.once("OPERATION_FAILED",()=>{v.emit("SOCKET_OPERATION_TERMINATED")}),I[t].onopen=()=>{v.emit("SOCKET_OPENED")},I[t].onclose=()=>{},I[t].onerror=()=>++e<=rr?(console.error(`An error happened while trying to connect to WebSocket ${t}. Trying again. ${e} / ${rr}`),nr(t,e)):(v.emit("SOCKET_ONERROR"),C(new _e(`Unable to connect to WebSocket ${t}.`)))),en(t).andThen(()=>K(t)).orElse(r=>C(r))),en=t=>L.fromPromise(new Promise((e,r)=>{lt(t)?e(void 0):(v.once("SOCKET_OPENED",()=>{e(void 0)}),v.on("SOCKET_ONERROR",()=>{r(new _e)}))}),e=>re(e));var tn=(t,e)=>{let r=new URL(t);return["ws:","wss:"].includes(r.protocol)||(r.protocol=r.protocol==="http:"?"ws:":"wss:"),r.pathname+=e,new URL(r.origin+r.pathname)},or=t=>tn(new URL(t.serverUrl),"download"+`/${t.keys.server}`).toString();var rn=t=>{try{let e=JSON.parse(t);if(e&&typeof e=="object")return e}catch{}return!1},nn=t=>typeof t=="object"&&t!==null&&!("msg"in t);var yt=st(sr(),1);var Re=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},vt=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},ar=t=>globalThis.DOMException===void 0?new vt(t):new DOMException(t),cr=t=>{let e=t.reason===void 0?ar("This operation was aborted."):t.reason;return e instanceof Error?e:ar(e)};function gt(t,e){let{milliseconds:r,fallback:n,message:o,customTimers:i={setTimeout,clearTimeout}}=e,s,u=new Promise((f,h)=>{if(typeof r!="number"||Math.sign(r)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(e.signal){let{signal:m}=e;m.aborted&&h(cr(m));let p=()=>{h(cr(m))};m.addEventListener("abort",p,{once:!0}),t.finally(()=>{m.removeEventListener("abort",p)})}if(r===Number.POSITIVE_INFINITY){t.then(f,h);return}let l=new Re;s=i.setTimeout.call(void 0,()=>{if(n){try{f(n())}catch(m){h(m)}return}typeof t.cancel=="function"&&t.cancel(),o===!1?f():o instanceof Error?h(o):(l.message=o!=null?o:`Promise timed out after ${r} milliseconds`,h(l))},r),(async()=>{try{f(await t)}catch(m){h(m)}})()}).finally(()=>{u.clear()});return u.clear=()=>{i.clearTimeout.call(void 0,s),s=void 0},u}function wt(t,e,r){let n=0,o=t.length;for(;o>0;){let i=Math.trunc(o/2),s=n+i;r(t[s],e)<=0?(n=++s,o-=i+1):o=i}return n}var X,ke=class{constructor(){O(this,X,[])}enqueue(e,r){r={priority:0,...r};let n={priority:r.priority,run:e};if(this.size&&d(this,X)[this.size-1].priority>=r.priority){d(this,X).push(n);return}let o=wt(d(this,X),n,(i,s)=>s.priority-i.priority);d(this,X).splice(o,0,n)}dequeue(){let e=d(this,X).shift();return e==null?void 0:e.run}filter(e){return d(this,X).filter(r=>r.priority===e.priority).map(r=>r.run)}get size(){return d(this,X).length}};X=new WeakMap;var fe,he,ee,Ie,le,Pe,B,de,R,Me,j,pe,Q,Ne,y,ur,fr,hr,lr,dr,qe,Et,At,Ye,pr,Ve,Te=class extends yt.default{constructor(r){var n,o,i,s;super();O(this,y);O(this,fe);O(this,he);O(this,ee,0);O(this,Ie);O(this,le);O(this,Pe,0);O(this,B);O(this,de);O(this,R);O(this,Me);O(this,j,0);O(this,pe);O(this,Q);O(this,Ne);M(this,"timeout");if(r={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:ke,...r},!(typeof r.intervalCap=="number"&&r.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${(o=(n=r.intervalCap)==null?void 0:n.toString())!=null?o:""}\` (${typeof r.intervalCap})`);if(r.interval===void 0||!(Number.isFinite(r.interval)&&r.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${(s=(i=r.interval)==null?void 0:i.toString())!=null?s:""}\` (${typeof r.interval})`);w(this,fe,r.carryoverConcurrencyCount),w(this,he,r.intervalCap===Number.POSITIVE_INFINITY||r.interval===0),w(this,Ie,r.intervalCap),w(this,le,r.interval),w(this,R,new r.queueClass),w(this,Me,r.queueClass),this.concurrency=r.concurrency,this.timeout=r.timeout,w(this,Ne,r.throwOnTimeout===!0),w(this,Q,r.autoStart===!1)}get concurrency(){return d(this,pe)}set concurrency(r){if(!(typeof r=="number"&&r>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${r}\` (${typeof r})`);w(this,pe,r),_(this,y,Ye).call(this)}async add(r,n={}){return n={timeout:this.timeout,throwOnTimeout:d(this,Ne),...n},new Promise((o,i)=>{d(this,R).enqueue(async()=>{var s;ze(this,j)._++,ze(this,ee)._++;try{(s=n.signal)==null||s.throwIfAborted();let c=r({signal:n.signal});n.timeout&&(c=gt(Promise.resolve(c),{milliseconds:n.timeout})),n.signal&&(c=Promise.race([c,_(this,y,pr).call(this,n.signal)]));let u=await c;o(u),this.emit("completed",u)}catch(c){if(c instanceof Re&&!n.throwOnTimeout){o();return}i(c),this.emit("error",c)}finally{_(this,y,hr).call(this)}},n),this.emit("add"),_(this,y,qe).call(this)})}async addAll(r,n){return Promise.all(r.map(async o=>this.add(o,n)))}start(){return d(this,Q)?(w(this,Q,!1),_(this,y,Ye).call(this),this):this}pause(){w(this,Q,!0)}clear(){w(this,R,new(d(this,Me)))}async onEmpty(){d(this,R).size!==0&&await _(this,y,Ve).call(this,"empty")}async onSizeLessThan(r){d(this,R).sized(this,R).size{_(this,y,lr).call(this)},n)),!0}return!1},qe=function(){if(d(this,R).size===0)return d(this,B)&&clearInterval(d(this,B)),w(this,B,void 0),this.emit("empty"),d(this,j)===0&&this.emit("idle"),!1;if(!d(this,Q)){let r=!d(this,y,dr);if(d(this,y,ur)&&d(this,y,fr)){let n=d(this,R).dequeue();return n?(this.emit("active"),n(),r&&_(this,y,Et).call(this),!0):!1}}return!1},Et=function(){d(this,he)||d(this,B)!==void 0||(w(this,B,setInterval(()=>{_(this,y,At).call(this)},d(this,le))),w(this,Pe,Date.now()+d(this,le)))},At=function(){d(this,ee)===0&&d(this,j)===0&&d(this,B)&&(clearInterval(d(this,B)),w(this,B,void 0)),w(this,ee,d(this,fe)?d(this,j):0),_(this,y,Ye).call(this)},Ye=function(){for(;_(this,y,qe).call(this););},pr=async function(r){return new Promise((n,o)=>{r.addEventListener("abort",()=>{o(r.reason)},{once:!0})})},Ve=async function(r,n){return new Promise(o=>{let i=()=>{n&&!n()||(this.off(r,i),o())};this.on(r,i)})};var Ze=navigator.hardwareConcurrency||1,Qe=new Te({concurrency:Ze}),me=0,mr=!1,Ue=!1;self.onmessage=t=>{mr||(Wt(),mr=!0,v.once("DOWNLOAD_STARTED",()=>{self.postMessage({event:"DOWNLOAD_STARTED"})}),v.once("DOWNLOAD_COMPLETE",()=>{self.postMessage({event:"DOWNLOAD_COMPLETE"})}),v.on("FILE_UPDATED",q),v.on("CHUNK_DOWNLOADED",(r,n)=>{me--,!Ue&&me{jt(e.args.lufiFile,r)})}};var an=t=>{let{lufiFile:e}=t.args;return v.on("DOWNLOAD_STARTED",async()=>{for(let r=1;r{await dt(e,r),me++,(Ue||me===Ze)&&Qe.pause()})}),me++,dt(e,0)};
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50c0AzLjMuMC9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbHVmaS1zamNsQDEuMC44L25vZGVfbW9kdWxlcy9sdWZpLXNqY2wvc2pjbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vZXZlbnRlbWl0dGVyM0A1LjAuMS9ub2RlX21vZHVsZXMvZXZlbnRlbWl0dGVyMy9pbmRleC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL3NoYXJlZC50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vbmV2ZXJ0aHJvd0A4LjEuMS9ub2RlX21vZHVsZXMvbmV2ZXJ0aHJvdy9kaXN0L2luZGV4LmVzLmpzIiwgIi4uLy4uL3NyYy9lcnJvci9iYXNlLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci93ZWJzb2NrZXQvd2Vic29ja2V0LWNvbm5lY3Rpb24tZXJyb3IudHMiLCAiLi4vLi4vc3JjL3V0aWxzLnRzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9hcnJheWJ1ZmZlci1lbmNvZGluZ0AxLjEuMC9ub2RlX21vZHVsZXMvYXJyYXlidWZmZXItZW5jb2Rpbmcvc3JjL2Jhc2U2NC9lbmNvZGluZy50cyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vYXJyYXlidWZmZXItZW5jb2RpbmdAMS4xLjAvbm9kZV9tb2R1bGVzL2FycmF5YnVmZmVyLWVuY29kaW5nL3NyYy9iYXNlNjQvc3RhbmRhcmQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2FycmF5YnVmZmVyLWVuY29kaW5nQDEuMS4wL25vZGVfbW9kdWxlcy9hcnJheWJ1ZmZlci1lbmNvZGluZy9zcmMvYmFzZTY0L3VybC50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by9zamNsLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzIiwgIi4uLy4uL3NyYy9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50cyIsICIuLi8uLi9zcmMvYXBpL2NyeXB0by93ZWIudHMiLCAiLi4vLi4vc3JjL2FwaS9jcnlwdG8udHMiLCAiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQudHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL2V2ZW50ZW1pdHRlcjNANS4wLjEvbm9kZV9tb2R1bGVzL2V2ZW50ZW1pdHRlcjMvaW5kZXgubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXRpbWVvdXRANi4xLjMvbm9kZV9tb2R1bGVzL3AtdGltZW91dC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmRlbm8vcC1xdWV1ZUA4LjAuMS9ub2RlX21vZHVsZXMvcC1xdWV1ZS9kaXN0L2xvd2VyLWJvdW5kLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uZGVuby9wLXF1ZXVlQDguMC4xL25vZGVfbW9kdWxlcy9wLXF1ZXVlL2Rpc3QvcHJpb3JpdHktcXVldWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5kZW5vL3AtcXVldWVAOC4wLjEvbm9kZV9tb2R1bGVzL3AtcXVldWUvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9zcmMvd29ya2VyL2Rvd25sb2FkLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBlcnJvckxpc3RlbmVyKGVycikge1xuICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCByZXNvbHZlcik7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgZW1pdHRlci5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG5cbiAgICBldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIoZW1pdHRlciwgbmFtZSwgcmVzb2x2ZXIsIHsgb25jZTogdHJ1ZSB9KTtcbiAgICBpZiAobmFtZSAhPT0gJ2Vycm9yJykge1xuICAgICAgYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIoZW1pdHRlciwgZXJyb3JMaXN0ZW5lciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcklmRXZlbnRFbWl0dGVyKGVtaXR0ZXIsIGhhbmRsZXIsIGZsYWdzKSB7XG4gIGlmICh0eXBlb2YgZW1pdHRlci5vbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VGFyZ2V0QWdub3N0aWNBZGRMaXN0ZW5lcihlbWl0dGVyLCAnZXJyb3InLCBoYW5kbGVyLCBmbGFncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZXZlbnRUYXJnZXRBZ25vc3RpY0FkZExpc3RlbmVyKGVtaXR0ZXIsIG5hbWUsIGxpc3RlbmVyLCBmbGFncykge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIub24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgZW1pdHRlci5vbmNlKG5hbWUsIGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1pdHRlci5vbihuYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBFdmVudFRhcmdldCBkb2VzIG5vdCBoYXZlIGBlcnJvcmAgZXZlbnQgc2VtYW50aWNzIGxpa2UgTm9kZVxuICAgIC8vIEV2ZW50RW1pdHRlcnMsIHdlIGRvIG5vdCBsaXN0ZW4gZm9yIGBlcnJvcmAgZXZlbnRzIGhlcmUuXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKG5hbWUsIGZ1bmN0aW9uIHdyYXBMaXN0ZW5lcihhcmcpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgYnVpbHRpbiBgeyBvbmNlOiB0cnVlIH1gIHN1cHBvcnQgc28gd2VcbiAgICAgIC8vIGhhdmUgdG8gZG8gaXQgbWFudWFsbHkuXG4gICAgICBpZiAoZmxhZ3Mub25jZSkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgd3JhcExpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKGFyZyk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwiZW1pdHRlclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBlbWl0dGVyKTtcbiAgfVxufVxuIiwgIlwidXNlIHN0cmljdFwiO3ZhciBzamNsPXtjaXBoZXI6e30saGFzaDp7fSxrZXlleGNoYW5nZTp7fSxtb2RlOnt9LG1pc2M6e30sY29kZWM6e30sZXhjZXB0aW9uOntjb3JydXB0OmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkNPUlJVUFQ6IFwiK3RoaXMubWVzc2FnZX07dGhpcy5tZXNzYWdlPWF9LGludmFsaWQ6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiSU5WQUxJRDogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sYnVnOmZ1bmN0aW9uKGEpe3RoaXMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIkJVRzogXCIrdGhpcy5tZXNzYWdlfTt0aGlzLm1lc3NhZ2U9YX0sbm90UmVhZHk6ZnVuY3Rpb24oYSl7dGhpcy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVyblwiTk9UIFJFQURZOiBcIit0aGlzLm1lc3NhZ2V9O3RoaXMubWVzc2FnZT1hfX19O1xuc2pjbC5jaXBoZXIuYWVzPWZ1bmN0aW9uKGEpe3RoaXMud1swXVswXVswXXx8dGhpcy5DKCk7dmFyIGIsYyxkLGUsZj10aGlzLndbMF1bNF0sZz10aGlzLndbMV07Yj1hLmxlbmd0aDt2YXIgaD0xO2lmKDQhPT1iJiY2IT09YiYmOCE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJpbnZhbGlkIGFlcyBrZXkgc2l6ZVwiKTt0aGlzLmI9W2Q9YS5zbGljZSgwKSxlPVtdXTtmb3IoYT1iO2E8NCpiKzI4O2ErKyl7Yz1kW2EtMV07aWYoMD09PWElYnx8OD09PWImJjQ9PT1hJWIpYz1mW2M+Pj4yNF08PDI0XmZbYz4+MTYmMjU1XTw8MTZeZltjPj44JjI1NV08PDheZltjJjI1NV0sMD09PWElYiYmKGM9Yzw8OF5jPj4+MjReaDw8MjQsaD1oPDwxXjI4MyooaD4+NykpO2RbYV09ZFthLWJdXmN9Zm9yKGI9MDthO2IrKyxhLS0pYz1kW2ImMz9hOmEtNF0sZVtiXT00Pj1hfHw0PmI/YzpnWzBdW2ZbYz4+PjI0XV1eZ1sxXVtmW2M+PjE2JjI1NV1dXmdbMl1bZltjPj44JjI1NV1dXmdbM11bZltjJlxuMjU1XV19O1xuc2pjbC5jaXBoZXIuYWVzLnByb3RvdHlwZT17ZW5jcnlwdDpmdW5jdGlvbihhKXtyZXR1cm4gYWEodGhpcyxhLDApfSxkZWNyeXB0OmZ1bmN0aW9uKGEpe3JldHVybiBhYSh0aGlzLGEsMSl9LHc6W1tbXSxbXSxbXSxbXSxbXV0sW1tdLFtdLFtdLFtdLFtdXV0sQzpmdW5jdGlvbigpe3ZhciBhPXRoaXMud1swXSxiPXRoaXMud1sxXSxjPWFbNF0sZD1iWzRdLGUsZixnLGg9W10saz1bXSxuLGwsbSxwO2ZvcihlPTA7MHgxMDA+ZTtlKyspa1soaFtlXT1lPDwxXjI4MyooZT4+NykpXmVdPWU7Zm9yKGY9Zz0wOyFjW2ZdO2ZePW58fDEsZz1rW2ddfHwxKWZvcihtPWdeZzw8MV5nPDwyXmc8PDNeZzw8NCxtPW0+PjhebSYyNTVeOTksY1tmXT1tLGRbbV09ZixsPWhbZT1oW249aFtmXV1dLHA9MHgxMDEwMTAxKmxeMHgxMDAwMSplXjB4MTAxKm5eMHgxMDEwMTAwKmYsbD0weDEwMSpoW21dXjB4MTAxMDEwMCptLGU9MDs0PmU7ZSsrKWFbZV1bZl09bD1sPDwyNF5sPj4+OCxiW2VdW21dPXA9cDw8MjRecD4+Pjg7Zm9yKGU9XG4wOzU+ZTtlKyspYVtlXT1hW2VdLnNsaWNlKDApLGJbZV09YltlXS5zbGljZSgwKX19O1xuZnVuY3Rpb24gYWEoYSxiLGMpe2lmKDQhPT1iLmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgYWVzIGJsb2NrIHNpemVcIik7dmFyIGQ9YS5iW2NdLGU9YlswXV5kWzBdLGY9YltjPzM6MV1eZFsxXSxnPWJbMl1eZFsyXTtiPWJbYz8xOjNdXmRbM107dmFyIGgsayxuLGw9ZC5sZW5ndGgvNC0yLG0scD00LHo9WzAsMCwwLDBdO2g9YS53W2NdO2E9aFswXTt2YXIgQT1oWzFdLEM9aFsyXSxCPWhbM10sRD1oWzRdO2ZvcihtPTA7bTxsO20rKyloPWFbZT4+PjI0XV5BW2Y+PjE2JjI1NV1eQ1tnPj44JjI1NV1eQltiJjI1NV1eZFtwXSxrPWFbZj4+PjI0XV5BW2c+PjE2JjI1NV1eQ1tiPj44JjI1NV1eQltlJjI1NV1eZFtwKzFdLG49YVtnPj4+MjRdXkFbYj4+MTYmMjU1XV5DW2U+PjgmMjU1XV5CW2YmMjU1XV5kW3ArMl0sYj1hW2I+Pj4yNF1eQVtlPj4xNiYyNTVdXkNbZj4+OCYyNTVdXkJbZyYyNTVdXmRbcCszXSxwKz00LGU9aCxmPWssZz1uO2ZvcihtPVxuMDs0Pm07bSsrKXpbYz8zJi1tOm1dPURbZT4+PjI0XTw8MjReRFtmPj4xNiYyNTVdPDwxNl5EW2c+PjgmMjU1XTw8OF5EW2ImMjU1XV5kW3ArK10saD1lLGU9ZixmPWcsZz1iLGI9aDtyZXR1cm4gen1cbnNqY2wuYml0QXJyYXk9e2JpdFNsaWNlOmZ1bmN0aW9uKGEsYixjKXthPXNqY2wuYml0QXJyYXkuWShhLnNsaWNlKGIvMzIpLDMyLShiJjMxKSkuc2xpY2UoMSk7cmV0dXJuIHZvaWQgMD09PWM/YTpzamNsLmJpdEFycmF5LmNsYW1wKGEsYy1iKX0sZXh0cmFjdDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9TWF0aC5mbG9vcigtYi1jJjMxKTtyZXR1cm4oKGIrYy0xXmIpJi0zMj9hW2IvMzJ8MF08PDMyLWReYVtiLzMyKzF8MF0+Pj5kOmFbYi8zMnwwXT4+PmQpJigxPDxjKS0xfSxjb25jYXQ6ZnVuY3Rpb24oYSxiKXtpZigwPT09YS5sZW5ndGh8fDA9PT1iLmxlbmd0aClyZXR1cm4gYS5jb25jYXQoYik7dmFyIGM9YVthLmxlbmd0aC0xXSxkPXNqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChjKTtyZXR1cm4gMzI9PT1kP2EuY29uY2F0KGIpOnNqY2wuYml0QXJyYXkuWShiLGQsY3wwLGEuc2xpY2UoMCxhLmxlbmd0aC0xKSl9LGJpdExlbmd0aDpmdW5jdGlvbihhKXt2YXIgYj1hLmxlbmd0aDtyZXR1cm4gMD09PVxuYj8wOjMyKihiLTEpK3NqY2wuYml0QXJyYXkuZ2V0UGFydGlhbChhW2ItMV0pfSxjbGFtcDpmdW5jdGlvbihhLGIpe2lmKDMyKmEubGVuZ3RoPGIpcmV0dXJuIGE7YT1hLnNsaWNlKDAsTWF0aC5jZWlsKGIvMzIpKTt2YXIgYz1hLmxlbmd0aDtiPWImMzE7MDxjJiZiJiYoYVtjLTFdPXNqY2wuYml0QXJyYXkucGFydGlhbChiLGFbYy0xXSYyMTQ3NDgzNjQ4Pj5iLTEsMSkpO3JldHVybiBhfSxwYXJ0aWFsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gMzI9PT1hP2I6KGM/YnwwOmI8PDMyLWEpKzB4MTAwMDAwMDAwMDAqYX0sZ2V0UGFydGlhbDpmdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5yb3VuZChhLzB4MTAwMDAwMDAwMDApfHwzMn0sZXF1YWw6ZnVuY3Rpb24oYSxiKXtpZihzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKSE9PXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGIpKXJldHVybiExO3ZhciBjPTAsZDtmb3IoZD0wO2Q8YS5sZW5ndGg7ZCsrKWN8PWFbZF1eYltkXTtyZXR1cm4gMD09PVxuY30sWTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZTtlPTA7Zm9yKHZvaWQgMD09PWQmJihkPVtdKTszMjw9YjtiLT0zMilkLnB1c2goYyksYz0wO2lmKDA9PT1iKXJldHVybiBkLmNvbmNhdChhKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWQucHVzaChjfGFbZV0+Pj5iKSxjPWFbZV08PDMyLWI7ZT1hLmxlbmd0aD9hW2EubGVuZ3RoLTFdOjA7YT1zamNsLmJpdEFycmF5LmdldFBhcnRpYWwoZSk7ZC5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbChiK2EmMzEsMzI8YithP2M6ZC5wb3AoKSwxKSk7cmV0dXJuIGR9LFA6ZnVuY3Rpb24oYSxiKXtyZXR1cm5bYVswXV5iWzBdLGFbMV1eYlsxXSxhWzJdXmJbMl0sYVszXV5iWzNdXX0sYnl0ZXN3YXBNOmZ1bmN0aW9uKGEpe3ZhciBiLGM7Zm9yKGI9MDtiPGEubGVuZ3RoOysrYiljPWFbYl0sYVtiXT1jPj4+MjR8Yz4+PjgmMHhmZjAwfChjJjB4ZmYwMCk8PDh8Yzw8MjQ7cmV0dXJuIGF9fTtcbnNqY2wuY29kZWMudXRmOFN0cmluZz17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7dmFyIGI9XCJcIixjPXNqY2wuYml0QXJyYXkuYml0TGVuZ3RoKGEpLGQsZTtmb3IoZD0wO2Q8Yy84O2QrKykwPT09KGQmMykmJihlPWFbZC80XSksYis9U3RyaW5nLmZyb21DaGFyQ29kZShlPj4+OD4+Pjg+Pj44KSxlPDw9ODtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShiKSl9LHRvQml0czpmdW5jdGlvbihhKXthPXVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhKSk7dmFyIGI9W10sYyxkPTA7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKylkPWQ8PDh8YS5jaGFyQ29kZUF0KGMpLDM9PT0oYyYzKSYmKGIucHVzaChkKSxkPTApO2MmMyYmYi5wdXNoKHNqY2wuYml0QXJyYXkucGFydGlhbCg4KihjJjMpLGQpKTtyZXR1cm4gYn19O1xuc2pjbC5jb2RlYy5oZXg9e2Zyb21CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiPVwiXCIsYztmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWIrPSgoYVtjXXwwKSsweGYwMDAwMDAwMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cig0KTtyZXR1cm4gYi5zdWJzdHIoMCxzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKS80KX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3ZhciBiLGM9W10sZDthPWEucmVwbGFjZSgvXFxzfDB4L2csXCJcIik7ZD1hLmxlbmd0aDthPWErXCIwMDAwMDAwMFwiO2ZvcihiPTA7YjxhLmxlbmd0aDtiKz04KWMucHVzaChwYXJzZUludChhLnN1YnN0cihiLDgpLDE2KV4wKTtyZXR1cm4gc2pjbC5iaXRBcnJheS5jbGFtcChjLDQqZCl9fTtcbnNqY2wuY29kZWMuYmFzZTY0PXtTOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGZyb21CaXRzOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1cIlwiLGU9MCxmPXNqY2wuY29kZWMuYmFzZTY0LlMsZz0wLGg9c2pjbC5iaXRBcnJheS5iaXRMZW5ndGgoYSk7YyYmKGY9Zi5zdWJzdHIoMCw2MikrXCItX1wiKTtmb3IoYz0wOzYqZC5sZW5ndGg8aDspZCs9Zi5jaGFyQXQoKGdeYVtjXT4+PmUpPj4+MjYpLDY+ZT8oZz1hW2NdPDw2LWUsZSs9MjYsYysrKTooZzw8PTYsZS09Nik7Zm9yKDtkLmxlbmd0aCYzJiYhYjspZCs9XCI9XCI7cmV0dXJuIGR9LHRvQml0czpmdW5jdGlvbihhLGIpe2E9YS5yZXBsYWNlKC9cXHN8PS9nLFwiXCIpO3ZhciBjPVtdLGQsZT0wLGY9c2pjbC5jb2RlYy5iYXNlNjQuUyxnPTAsaDtiJiYoZj1mLnN1YnN0cigwLDYyKStcIi1fXCIpO2ZvcihkPTA7ZDxhLmxlbmd0aDtkKyspe2g9Zi5pbmRleE9mKGEuY2hhckF0KGQpKTtcbmlmKDA+aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcInRoaXMgaXNuJ3QgYmFzZTY0IVwiKTsyNjxlPyhlLT0yNixjLnB1c2goZ15oPj4+ZSksZz1oPDwzMi1lKTooZSs9NixnXj1oPDwzMi1lKX1lJjU2JiZjLnB1c2goc2pjbC5iaXRBcnJheS5wYXJ0aWFsKGUmNTYsZywxKSk7cmV0dXJuIGN9fTtzamNsLmNvZGVjLmJhc2U2NHVybD17ZnJvbUJpdHM6ZnVuY3Rpb24oYSl7cmV0dXJuIHNqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGEsMSwxKX0sdG9CaXRzOmZ1bmN0aW9uKGEpe3JldHVybiBzamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYSwxKX19O3NqY2wuaGFzaC5zaGEyNTY9ZnVuY3Rpb24oYSl7dGhpcy5iWzBdfHx0aGlzLkMoKTthPyh0aGlzLmc9YS5nLnNsaWNlKDApLHRoaXMuZj1hLmYuc2xpY2UoMCksdGhpcy5jPWEuYyk6dGhpcy5yZXNldCgpfTtzamNsLmhhc2guc2hhMjU2Lmhhc2g9ZnVuY3Rpb24oYSl7cmV0dXJuKG5ldyBzamNsLmhhc2guc2hhMjU2KS51cGRhdGUoYSkuZmluYWxpemUoKX07XG5zamNsLmhhc2guc2hhMjU2LnByb3RvdHlwZT17YmxvY2tTaXplOjUxMixyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTUxMitiLSg1MTIrYiYweDFmZik7Yjw9YTtiKz01MTIpdGhpcy5sKGQuc3ViYXJyYXkoMTYqZSxcbjE2KihlKzEpKSksZSs9MTtjLnNwbGljZSgwLDE2KmUpfWVsc2UgZm9yKGI9NTEyK2ItKDUxMitiJjB4MWZmKTtiPD1hO2IrPTUxMil0aGlzLmwoYy5zcGxpY2UoMCwxNikpO3JldHVybiB0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5mLGM9dGhpcy5nLGI9c2pjbC5iaXRBcnJheS5jb25jYXQoYixbc2pjbC5iaXRBcnJheS5wYXJ0aWFsKDEsMSldKTtmb3IoYT1iLmxlbmd0aCsyO2EmMTU7YSsrKWIucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMTYpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10sYjpbXSxDOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gMHgxMDAwMDAwMDAqKGEtTWF0aC5mbG9vcihhKSl8MH1mb3IodmFyIGI9MCxjPTIsZCxlOzY0PmI7YysrKXtlPSEwO2ZvcihkPTI7ZCpkPD1jO2QrKylpZigwPT09YyVkKXtlPVxuITE7YnJlYWt9ZSYmKDg+YiYmKHRoaXMub1tiXT1hKE1hdGgucG93KGMsLjUpKSksdGhpcy5iW2JdPWEoTWF0aC5wb3coYywxLzMpKSxiKyspfX0sbDpmdW5jdGlvbihhKXt2YXIgYixjLGQsZT10aGlzLmcsZj10aGlzLmIsZz1lWzBdLGg9ZVsxXSxrPWVbMl0sbj1lWzNdLGw9ZVs0XSxtPWVbNV0scD1lWzZdLHo9ZVs3XTtmb3IoYj0wOzY0PmI7YisrKTE2PmI/Yz1hW2JdOihjPWFbYisxJjE1XSxkPWFbYisxNCYxNV0sYz1hW2ImMTVdPShjPj4+N15jPj4+MTheYz4+PjNeYzw8MjVeYzw8MTQpKyhkPj4+MTdeZD4+PjE5XmQ+Pj4xMF5kPDwxNV5kPDwxMykrYVtiJjE1XSthW2IrOSYxNV18MCksYz1jK3orKGw+Pj42Xmw+Pj4xMV5sPj4+MjVebDw8MjZebDw8MjFebDw8NykrKHBebCYobV5wKSkrZltiXSx6PXAscD1tLG09bCxsPW4rY3wwLG49ayxrPWgsaD1nLGc9YysoaCZrXm4mKGheaykpKyhoPj4+Ml5oPj4+MTNeaD4+PjIyXmg8PDMwXmg8PDE5Xmg8PDEwKXwwO2VbMF09ZVswXStnfFxuMDtlWzFdPWVbMV0raHwwO2VbMl09ZVsyXStrfDA7ZVszXT1lWzNdK258MDtlWzRdPWVbNF0rbHwwO2VbNV09ZVs1XSttfDA7ZVs2XT1lWzZdK3B8MDtlWzddPWVbN10renwwfX07c2pjbC5oYXNoLnNoYTUxMj1mdW5jdGlvbihhKXt0aGlzLmJbMF18fHRoaXMuQygpO2E/KHRoaXMuZz1hLmcuc2xpY2UoMCksdGhpcy5mPWEuZi5zbGljZSgwKSx0aGlzLmM9YS5jKTp0aGlzLnJlc2V0KCl9O3NqY2wuaGFzaC5zaGE1MTIuaGFzaD1mdW5jdGlvbihhKXtyZXR1cm4obmV3IHNqY2wuaGFzaC5zaGE1MTIpLnVwZGF0ZShhKS5maW5hbGl6ZSgpfTtcbnNqY2wuaGFzaC5zaGE1MTIucHJvdG90eXBlPXtibG9ja1NpemU6MTAyNCxyZXNldDpmdW5jdGlvbigpe3RoaXMuZz10aGlzLm8uc2xpY2UoMCk7dGhpcy5mPVtdO3RoaXMuYz0wO3JldHVybiB0aGlzfSx1cGRhdGU6ZnVuY3Rpb24oYSl7XCJzdHJpbmdcIj09PXR5cGVvZiBhJiYoYT1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGEpKTt2YXIgYixjPXRoaXMuZj1zamNsLmJpdEFycmF5LmNvbmNhdCh0aGlzLmYsYSk7Yj10aGlzLmM7YT10aGlzLmM9YitzamNsLmJpdEFycmF5LmJpdExlbmd0aChhKTtpZigweDFmZmZmZmZmZmZmZmZmPGEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0c1wiKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIFVpbnQzMkFycmF5KXt2YXIgZD1uZXcgVWludDMyQXJyYXkoYyksZT0wO2ZvcihiPTEwMjQrYi0oMTAyNCtiJjEwMjMpO2I8PWE7Yis9MTAyNCl0aGlzLmwoZC5zdWJhcnJheSgzMipcbmUsMzIqKGUrMSkpKSxlKz0xO2Muc3BsaWNlKDAsMzIqZSl9ZWxzZSBmb3IoYj0xMDI0K2ItKDEwMjQrYiYxMDIzKTtiPD1hO2IrPTEwMjQpdGhpcy5sKGMuc3BsaWNlKDAsMzIpKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXMuZixjPXRoaXMuZyxiPXNqY2wuYml0QXJyYXkuY29uY2F0KGIsW3NqY2wuYml0QXJyYXkucGFydGlhbCgxLDEpXSk7Zm9yKGE9Yi5sZW5ndGgrNDthJjMxO2ErKyliLnB1c2goMCk7Yi5wdXNoKDApO2IucHVzaCgwKTtiLnB1c2goTWF0aC5mbG9vcih0aGlzLmMvMHgxMDAwMDAwMDApKTtmb3IoYi5wdXNoKHRoaXMuY3wwKTtiLmxlbmd0aDspdGhpcy5sKGIuc3BsaWNlKDAsMzIpKTt0aGlzLnJlc2V0KCk7cmV0dXJuIGN9LG86W10saWE6WzEyMzcyMjMyLDEzMjgxMDgzLDk3NjI4NTksMTkxNDYwOSwxNTEwNjc2OSw0MDkwOTExLDQzMDgzMzEsODI2NjEwNV0sYjpbXSxrYTpbMjY2NjAxOCwxNTY4OTE2NSw1MDYxNDIzLDkwMzQ2ODQsXG40NzY0OTg0LDM4MDk1MywxNjU4Nzc5LDcxNzY0NzIsMTk3MTg2LDczNjg2MzgsMTQ5ODc5MTYsMTY3NTc5ODYsODA5NjExMSwxNDgwMzY5LDEzMDQ2MzI1LDY4OTExNTYsMTU4MTMzMzAsNTE4NzA0Myw5MjI5NzQ5LDExMzEyMjI5LDI4MTg2NzcsMTA5Mzc0NzUsNDMyNDMwOCwxMTM1NTQxLDY3NDE5MzEsMTE4MDkyOTYsMTY0NTgwNDcsMTU2NjY5MTYsMTEwNDY4NTAsNjk4MTQ5LDIyOTk5OSw5NDU3NzYsMTM3NzQ4NDQsMjU0MTg2MiwxMjg1NjA0NSw5ODEwOTExLDExNDk0MzY2LDc4NDQ1MjAsMTU1NzY4MDYsODUzMzMwNywxNTc5NTA0NCw0MzM3NjY1LDE2MjkxNzI5LDU1NTM3MTIsMTU2ODQxMjAsNjY2MjQxNiw3NDEzODAyLDEyMzA4OTIwLDEzODE2MDA4LDQzMDM2OTksOTM2NjQyNSwxMDE3NjY4MCwxMzE5NTg3NSw0Mjk1MzcxLDY1NDYyOTEsMTE3MTI2NzUsMTU3MDg5MjQsMTUxOTQ1NiwxNTc3MjUzMCw2NTY4NDI4LDY0OTU3ODQsODU2ODI5NywxMzAwNzEyNSw3NDkyMzk1LDI1MTUzNTYsXG4xMjYzMjU4MywxNDc0MDI1NCw3MjYyNTg0LDE1MzU5MzAsMTMxNDYyNzgsMTYzMjE5NjYsMTg1MzIxMSwyOTQyNzYsMTMwNTEwMjcsMTMyMjE1NjQsMTA1MTk4MCw0MDgwMzEwLDY2NTE0MzQsMTQwODg5NDAsNDY3NTYwN10sQzpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7cmV0dXJuIDB4MTAwMDAwMDAwKihhLU1hdGguZmxvb3IoYSkpfDB9ZnVuY3Rpb24gYihhKXtyZXR1cm4gMHgxMDAwMDAwMDAwMCooYS1NYXRoLmZsb29yKGEpKSYyNTV9Zm9yKHZhciBjPTAsZD0yLGUsZjs4MD5jO2QrKyl7Zj0hMDtmb3IoZT0yO2UqZTw9ZDtlKyspaWYoMD09PWQlZSl7Zj0hMTticmVha31mJiYoOD5jJiYodGhpcy5vWzIqY109YShNYXRoLnBvdyhkLC41KSksdGhpcy5vWzIqYysxXT1iKE1hdGgucG93KGQsLjUpKTw8MjR8dGhpcy5pYVtjXSksdGhpcy5iWzIqY109YShNYXRoLnBvdyhkLDEvMykpLHRoaXMuYlsyKmMrMV09YihNYXRoLnBvdyhkLDEvMykpPDwyNHx0aGlzLmthW2NdLGMrKyl9fSxsOmZ1bmN0aW9uKGEpe3ZhciBiLFxuYyxkPXRoaXMuZyxlPXRoaXMuYixmPWRbMF0sZz1kWzFdLGg9ZFsyXSxrPWRbM10sbj1kWzRdLGw9ZFs1XSxtPWRbNl0scD1kWzddLHo9ZFs4XSxBPWRbOV0sQz1kWzEwXSxCPWRbMTFdLEQ9ZFsxMl0sUD1kWzEzXSxlYT1kWzE0XSxRPWRbMTVdLHQ7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBVaW50MzJBcnJheSl7dD1BcnJheSgxNjApO2Zvcih2YXIgcj0wOzMyPnI7cisrKXRbcl09YVtyXX1lbHNlIHQ9YTt2YXIgcj1mLHU9ZyxHPWgsRT1rLEg9bixGPWwsVj1tLEk9cCx3PXosdj1BLFI9QyxKPUIsUz1ELEs9UCxXPWVhLEw9UTtmb3IoYT0wOzgwPmE7YSsrKXtpZigxNj5hKWI9dFsyKmFdLGM9dFsyKmErMV07ZWxzZXtjPXRbMiooYS0xNSldO3ZhciBxPXRbMiooYS0xNSkrMV07Yj0ocTw8MzF8Yz4+PjEpXihxPDwyNHxjPj4+OCleYz4+Pjc7dmFyIHg9KGM8PDMxfHE+Pj4xKV4oYzw8MjR8cT4+PjgpXihjPDwyNXxxPj4+Nyk7Yz10WzIqKGEtMildO3ZhciB5PXRbMiooYS0yKSsxXSxcbnE9KHk8PDEzfGM+Pj4xOSleKGM8PDN8eT4+PjI5KV5jPj4+Nix5PShjPDwxM3x5Pj4+MTkpXih5PDwzfGM+Pj4yOSleKGM8PDI2fHk+Pj42KSxYPXRbMiooYS03KV0sWT10WzIqKGEtMTYpXSxNPXRbMiooYS0xNikrMV07Yz14K3RbMiooYS03KSsxXTtiPWIrWCsoYz4+PjA8eD4+PjA/MTowKTtjKz15O2IrPXErKGM+Pj4wPHk+Pj4wPzE6MCk7Yys9TTtiKz1ZKyhjPj4+MDxNPj4+MD8xOjApfXRbMiphXT1ifD0wO3RbMiphKzFdPWN8PTA7dmFyIFg9dyZSXn53JlMsZmE9diZKXn52JksseT1yJkdeciZIXkcmSCxqYT11JkVedSZGXkUmRixZPSh1PDw0fHI+Pj4yOCleKHI8PDMwfHU+Pj4yKV4ocjw8MjV8dT4+PjcpLE09KHI8PDR8dT4+PjI4KV4odTw8MzB8cj4+PjIpXih1PDwyNXxyPj4+Nyksa2E9ZVsyKmFdLGdhPWVbMiphKzFdLHE9TCsoKHc8PDE4fHY+Pj4xNCleKHc8PDE0fHY+Pj4xOCleKHY8PDIzfHc+Pj45KSkseD1XKygodjw8MTh8dz4+PjE0KV4odjw8MTR8dz4+PjE4KV4odzw8XG4yM3x2Pj4+OSkpKyhxPj4+MDxMPj4+MD8xOjApLHE9cStmYSx4PXgrKFgrKHE+Pj4wPGZhPj4+MD8xOjApKSxxPXErZ2EseD14KyhrYSsocT4+PjA8Z2E+Pj4wPzE6MCkpLHE9cStjfDAseD14KyhiKyhxPj4+MDxjPj4+MD8xOjApKTtjPU0ramE7Yj1ZK3krKGM+Pj4wPE0+Pj4wPzE6MCk7Vz1TO0w9SztTPVI7Sz1KO1I9dztKPXY7dj1JK3F8MDt3PVYreCsodj4+PjA8ST4+PjA/MTowKXwwO1Y9SDtJPUY7SD1HO0Y9RTtHPXI7RT11O3U9cStjfDA7cj14K2IrKHU+Pj4wPHE+Pj4wPzE6MCl8MH1nPWRbMV09Zyt1fDA7ZFswXT1mK3IrKGc+Pj4wPHU+Pj4wPzE6MCl8MDtrPWRbM109aytFfDA7ZFsyXT1oK0crKGs+Pj4wPEU+Pj4wPzE6MCl8MDtsPWRbNV09bCtGfDA7ZFs0XT1uK0grKGw+Pj4wPEY+Pj4wPzE6MCl8MDtwPWRbN109cCtJfDA7ZFs2XT1tK1YrKHA+Pj4wPEk+Pj4wPzE6MCl8MDtBPWRbOV09QSt2fDA7ZFs4XT16K3crKEE+Pj4wPHY+Pj4wPzE6MCl8MDtCPWRbMTFdPUIrSnxcbjA7ZFsxMF09QytSKyhCPj4+MDxKPj4+MD8xOjApfDA7UD1kWzEzXT1QK0t8MDtkWzEyXT1EK1MrKFA+Pj4wPEs+Pj4wPzE6MCl8MDtRPWRbMTVdPVErTHwwO2RbMTRdPWVhK1crKFE+Pj4wPEw+Pj4wPzE6MCl8MH19O1xuc2pjbC5tb2RlLmNjbT17bmFtZTpcImNjbVwiLEY6W10sbGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7c2pjbC5tb2RlLmNjbS5GLnB1c2goYSl9LHVuTGlzdGVuUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT1zamNsLm1vZGUuY2NtLkYuaW5kZXhPZihhKTstMTxhJiZzamNsLm1vZGUuY2NtLkYuc3BsaWNlKGEsMSl9LGRhOmZ1bmN0aW9uKGEpe3ZhciBiPXNqY2wubW9kZS5jY20uRi5zbGljZSgpLGM7Zm9yKGM9MDtjPGIubGVuZ3RoO2MrPTEpYltjXShhKX0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGc9Yi5zbGljZSgwKSxoPXNqY2wuYml0QXJyYXksaz1oLmJpdExlbmd0aChjKS84LG49aC5iaXRMZW5ndGgoZykvODtlPWV8fDY0O2Q9ZHx8W107aWYoNz5rKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpdiBtdXN0IGJlIGF0IGxlYXN0IDcgYnl0ZXNcIik7Zm9yKGY9Mjs0PmYmJm4+Pj44KmY7ZisrKTtmPDE1LWsmJihmPTE1LWspO2M9aC5jbGFtcChjLFxuOCooMTUtZikpO2I9c2pjbC5tb2RlLmNjbS5VKGEsYixjLGQsZSxmKTtnPXNqY2wubW9kZS5jY20uVihhLGcsYyxiLGUsZik7cmV0dXJuIGguY29uY2F0KGcuZGF0YSxnLnRhZyl9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtlPWV8fDY0O2Q9ZHx8W107dmFyIGY9c2pjbC5iaXRBcnJheSxnPWYuYml0TGVuZ3RoKGMpLzgsaD1mLmJpdExlbmd0aChiKSxrPWYuY2xhbXAoYixoLWUpLG49Zi5iaXRTbGljZShiLGgtZSksaD0oaC1lKS84O2lmKDc+Zyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImNjbTogaXYgbXVzdCBiZSBhdCBsZWFzdCA3IGJ5dGVzXCIpO2ZvcihiPTI7ND5iJiZoPj4+OCpiO2IrKyk7YjwxNS1nJiYoYj0xNS1nKTtjPWYuY2xhbXAoYyw4KigxNS1iKSk7az1zamNsLm1vZGUuY2NtLlYoYSxrLGMsbixlLGIpO2E9c2pjbC5tb2RlLmNjbS5VKGEsay5kYXRhLGMsZCxlLGIpO2lmKCFmLmVxdWFsKGsudGFnLGEpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5jb3JydXB0KFwiY2NtOiB0YWcgZG9lc24ndCBtYXRjaFwiKTtcbnJldHVybiBrLmRhdGF9LG1hOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1bXSxoPXNqY2wuYml0QXJyYXksaz1oLlA7ZD1baC5wYXJ0aWFsKDgsKGIubGVuZ3RoPzY0OjApfGQtMjw8MnxmLTEpXTtkPWguY29uY2F0KGQsYyk7ZFszXXw9ZTtkPWEuZW5jcnlwdChkKTtpZihiLmxlbmd0aClmb3IoYz1oLmJpdExlbmd0aChiKS84LDY1Mjc5Pj1jP2c9W2gucGFydGlhbCgxNixjKV06MHhmZmZmZmZmZj49YyYmKGc9aC5jb25jYXQoW2gucGFydGlhbCgxNiw2NTUzNCldLFtjXSkpLGc9aC5jb25jYXQoZyxiKSxiPTA7YjxnLmxlbmd0aDtiKz00KWQ9YS5lbmNyeXB0KGsoZCxnLnNsaWNlKGIsYis0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZH0sVTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9c2pjbC5iaXRBcnJheSxoPWcuUDtlLz04O2lmKGUlMnx8ND5lfHwxNjxlKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwiY2NtOiBpbnZhbGlkIHRhZyBsZW5ndGhcIik7XG5pZigweGZmZmZmZmZmPGQubGVuZ3RofHwweGZmZmZmZmZmPGIubGVuZ3RoKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJjY206IGNhbid0IGRlYWwgd2l0aCA0R2lCIG9yIG1vcmUgZGF0YVwiKTtjPXNqY2wubW9kZS5jY20ubWEoYSxkLGMsZSxnLmJpdExlbmd0aChiKS84LGYpO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKz00KWM9YS5lbmNyeXB0KGgoYyxiLnNsaWNlKGQsZCs0KS5jb25jYXQoWzAsMCwwXSkpKTtyZXR1cm4gZy5jbGFtcChjLDgqZSl9LFY6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnLGg9c2pjbC5iaXRBcnJheTtnPWguUDt2YXIgaz1iLmxlbmd0aCxuPWguYml0TGVuZ3RoKGIpLGw9ay81MCxtPWw7Yz1oLmNvbmNhdChbaC5wYXJ0aWFsKDgsZi0xKV0sYykuY29uY2F0KFswLDAsMF0pLnNsaWNlKDAsNCk7ZD1oLmJpdFNsaWNlKGcoZCxhLmVuY3J5cHQoYykpLDAsZSk7aWYoIWspcmV0dXJue3RhZzpkLGRhdGE6W119O2ZvcihnPTA7ZzxrO2crPTQpZz5sJiYoc2pjbC5tb2RlLmNjbS5kYShnL1xuayksbCs9bSksY1szXSsrLGU9YS5lbmNyeXB0KGMpLGJbZ11ePWVbMF0sYltnKzFdXj1lWzFdLGJbZysyXV49ZVsyXSxiW2crM11ePWVbM107cmV0dXJue3RhZzpkLGRhdGE6aC5jbGFtcChiLG4pfX19O3NqY2wubWlzYy5obWFjPWZ1bmN0aW9uKGEsYil7dGhpcy5XPWI9Ynx8c2pjbC5oYXNoLnNoYTI1Njt2YXIgYz1bW10sW11dLGQsZT1iLnByb3RvdHlwZS5ibG9ja1NpemUvMzI7dGhpcy5CPVtuZXcgYixuZXcgYl07YS5sZW5ndGg+ZSYmKGE9Yi5oYXNoKGEpKTtmb3IoZD0wO2Q8ZTtkKyspY1swXVtkXT1hW2RdXjkwOTUyMjQ4NixjWzFdW2RdPWFbZF1eMTU0OTU1NjgyODt0aGlzLkJbMF0udXBkYXRlKGNbMF0pO3RoaXMuQlsxXS51cGRhdGUoY1sxXSk7dGhpcy5PPW5ldyBiKHRoaXMuQlswXSl9O1xuc2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmVuY3J5cHQ9c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLm1hYz1mdW5jdGlvbihhKXtpZih0aGlzLlopdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJlbmNyeXB0IG9uIGFscmVhZHkgdXBkYXRlZCBobWFjIGNhbGxlZCFcIik7dGhpcy51cGRhdGUoYSk7cmV0dXJuIHRoaXMuZGlnZXN0KGEpfTtzamNsLm1pc2MuaG1hYy5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLk89bmV3IHRoaXMuVyh0aGlzLkJbMF0pO3RoaXMuWj0hMX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhKXt0aGlzLlo9ITA7dGhpcy5PLnVwZGF0ZShhKX07c2pjbC5taXNjLmhtYWMucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuTy5maW5hbGl6ZSgpLGE9KG5ldyB0aGlzLlcodGhpcy5CWzFdKSkudXBkYXRlKGEpLmZpbmFsaXplKCk7dGhpcy5yZXNldCgpO3JldHVybiBhfTtcbnNqY2wubWlzYy5wYmtkZjI9ZnVuY3Rpb24oYSxiLGMsZCxlKXtjPWN8fDFFNDtpZigwPmR8fDA+Yyl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImludmFsaWQgcGFyYW1zIHRvIHBia2RmMlwiKTtcInN0cmluZ1wiPT09dHlwZW9mIGEmJihhPXNqY2wuY29kZWMudXRmOFN0cmluZy50b0JpdHMoYSkpO1wic3RyaW5nXCI9PT10eXBlb2YgYiYmKGI9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhiKSk7ZT1lfHxzamNsLm1pc2MuaG1hYzthPW5ldyBlKGEpO3ZhciBmLGcsaCxrLG49W10sbD1zamNsLmJpdEFycmF5O2ZvcihrPTE7MzIqbi5sZW5ndGg8KGR8fDEpO2srKyl7ZT1mPWEuZW5jcnlwdChsLmNvbmNhdChiLFtrXSkpO2ZvcihnPTE7ZzxjO2crKylmb3IoZj1hLmVuY3J5cHQoZiksaD0wO2g8Zi5sZW5ndGg7aCsrKWVbaF1ePWZbaF07bj1uLmNvbmNhdChlKX1kJiYobj1sLmNsYW1wKG4sZCkpO3JldHVybiBufTtcbnNqY2wucHJuZz1mdW5jdGlvbihhKXt0aGlzLmg9W25ldyBzamNsLmhhc2guc2hhMjU2XTt0aGlzLnM9WzBdO3RoaXMuTj0wO3RoaXMuRz17fTt0aGlzLk09MDt0aGlzLlQ9e307dGhpcy5YPXRoaXMuaT10aGlzLnU9dGhpcy5mYT0wO3RoaXMuYj1bMCwwLDAsMCwwLDAsMCwwXTt0aGlzLm09WzAsMCwwLDBdO3RoaXMuSz12b2lkIDA7dGhpcy5MPWE7dGhpcy5EPSExO3RoaXMuSj17cHJvZ3Jlc3M6e30sc2VlZGVkOnt9fTt0aGlzLkE9dGhpcy5lYT0wO3RoaXMuSD0xO3RoaXMuST0yO3RoaXMuYWE9MHgxMDAwMDt0aGlzLlI9WzAsNDgsNjQsOTYsMTI4LDE5MiwweDEwMCwzODQsNTEyLDc2OCwxMDI0XTt0aGlzLmJhPTNFNDt0aGlzLiQ9ODB9O1xuc2pjbC5wcm5nLnByb3RvdHlwZT17cmFuZG9tV29yZHM6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXSxkO2Q9dGhpcy5pc1JlYWR5KGIpO3ZhciBlO2lmKGQ9PT10aGlzLkEpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLm5vdFJlYWR5KFwiZ2VuZXJhdG9yIGlzbid0IHNlZWRlZFwiKTtpZihkJnRoaXMuSSl7ZD0hKGQmdGhpcy5IKTtlPVtdO3ZhciBmPTAsZzt0aGlzLlg9ZVswXT0obmV3IERhdGUpLnZhbHVlT2YoKSt0aGlzLmJhO2ZvcihnPTA7MTY+ZztnKyspZS5wdXNoKDB4MTAwMDAwMDAwKk1hdGgucmFuZG9tKCl8MCk7Zm9yKGc9MDtnPHRoaXMuaC5sZW5ndGgmJihlPWUuY29uY2F0KHRoaXMuaFtnXS5maW5hbGl6ZSgpKSxmKz10aGlzLnNbZ10sdGhpcy5zW2ddPTAsZHx8ISh0aGlzLk4mMTw8ZykpO2crKyk7dGhpcy5OPj0xPDx0aGlzLmgubGVuZ3RoJiYodGhpcy5oLnB1c2gobmV3IHNqY2wuaGFzaC5zaGEyNTYpLHRoaXMucy5wdXNoKDApKTt0aGlzLmktPWY7Zj50aGlzLnUmJih0aGlzLnU9XG5mKTt0aGlzLk4rKzt0aGlzLmI9c2pjbC5oYXNoLnNoYTI1Ni5oYXNoKHRoaXMuYi5jb25jYXQoZSkpO3RoaXMuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKHRoaXMuYik7Zm9yKGQ9MDs0PmQmJih0aGlzLm1bZF09dGhpcy5tW2RdKzF8MCwhdGhpcy5tW2RdKTtkKyspO31mb3IoZD0wO2Q8YTtkKz00KTA9PT0oZCsxKSV0aGlzLmFhJiZiYSh0aGlzKSxlPU4odGhpcyksYy5wdXNoKGVbMF0sZVsxXSxlWzJdLGVbM10pO2JhKHRoaXMpO3JldHVybiBjLnNsaWNlKDAsYSl9LHNldERlZmF1bHRQYXJhbm9pYTpmdW5jdGlvbihhLGIpe2lmKDA9PT1hJiZcIlNldHRpbmcgcGFyYW5vaWE9MCB3aWxsIHJ1aW4geW91ciBzZWN1cml0eTsgdXNlIGl0IG9ubHkgZm9yIHRlc3RpbmdcIiE9PWIpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJTZXR0aW5nIHBhcmFub2lhPTAgd2lsbCBydWluIHlvdXIgc2VjdXJpdHk7IHVzZSBpdCBvbmx5IGZvciB0ZXN0aW5nXCIpO3RoaXMuTD1hfSxhZGRFbnRyb3B5OmZ1bmN0aW9uKGEsXG5iLGMpe2M9Y3x8XCJ1c2VyXCI7dmFyIGQsZSxmPShuZXcgRGF0ZSkudmFsdWVPZigpLGc9dGhpcy5HW2NdLGg9dGhpcy5pc1JlYWR5KCksaz0wO2Q9dGhpcy5UW2NdO3ZvaWQgMD09PWQmJihkPXRoaXMuVFtjXT10aGlzLmZhKyspO3ZvaWQgMD09PWcmJihnPXRoaXMuR1tjXT0wKTt0aGlzLkdbY109KHRoaXMuR1tjXSsxKSV0aGlzLmgubGVuZ3RoO3N3aXRjaCh0eXBlb2YgYSl7Y2FzZSBcIm51bWJlclwiOnZvaWQgMD09PWImJihiPTEpO3RoaXMuaFtnXS51cGRhdGUoW2QsdGhpcy5NKyssMSxiLGYsMSxhfDBdKTticmVhaztjYXNlIFwib2JqZWN0XCI6Yz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7aWYoXCJbb2JqZWN0IFVpbnQzMkFycmF5XVwiPT09Yyl7ZT1bXTtmb3IoYz0wO2M8YS5sZW5ndGg7YysrKWUucHVzaChhW2NdKTthPWV9ZWxzZSBmb3IoXCJbb2JqZWN0IEFycmF5XVwiIT09YyYmKGs9MSksYz0wO2M8YS5sZW5ndGgmJiFrO2MrKylcIm51bWJlclwiIT09dHlwZW9mIGFbY10mJlxuKGs9MSk7aWYoIWspe2lmKHZvaWQgMD09PWIpZm9yKGM9Yj0wO2M8YS5sZW5ndGg7YysrKWZvcihlPWFbY107MDxlOyliKyssZT1lPj4+MTt0aGlzLmhbZ10udXBkYXRlKFtkLHRoaXMuTSsrLDIsYixmLGEubGVuZ3RoXS5jb25jYXQoYSkpfWJyZWFrO2Nhc2UgXCJzdHJpbmdcIjp2b2lkIDA9PT1iJiYoYj1hLmxlbmd0aCk7dGhpcy5oW2ddLnVwZGF0ZShbZCx0aGlzLk0rKywzLGIsZixhLmxlbmd0aF0pO3RoaXMuaFtnXS51cGRhdGUoYSk7YnJlYWs7ZGVmYXVsdDprPTF9aWYoayl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwicmFuZG9tOiBhZGRFbnRyb3B5IG9ubHkgc3VwcG9ydHMgbnVtYmVyLCBhcnJheSBvZiBudW1iZXJzIG9yIHN0cmluZ1wiKTt0aGlzLnNbZ10rPWI7dGhpcy5pKz1iO2g9PT10aGlzLkEmJih0aGlzLmlzUmVhZHkoKSE9PXRoaXMuQSYmY2EoXCJzZWVkZWRcIixNYXRoLm1heCh0aGlzLnUsdGhpcy5pKSksY2EoXCJwcm9ncmVzc1wiLHRoaXMuZ2V0UHJvZ3Jlc3MoKSkpfSxcbmlzUmVhZHk6ZnVuY3Rpb24oYSl7YT10aGlzLlJbdm9pZCAwIT09YT9hOnRoaXMuTF07cmV0dXJuIHRoaXMudSYmdGhpcy51Pj1hP3RoaXMuc1swXT50aGlzLiQmJihuZXcgRGF0ZSkudmFsdWVPZigpPnRoaXMuWD90aGlzLkl8dGhpcy5IOnRoaXMuSDp0aGlzLmk+PWE/dGhpcy5JfHRoaXMuQTp0aGlzLkF9LGdldFByb2dyZXNzOmZ1bmN0aW9uKGEpe2E9dGhpcy5SW2E/YTp0aGlzLkxdO3JldHVybiB0aGlzLnU+PWE/MTp0aGlzLmk+YT8xOnRoaXMuaS9hfSxzdGFydENvbGxlY3RvcnM6ZnVuY3Rpb24oKXtpZighdGhpcy5EKXt0aGlzLmE9e2xvYWRUaW1lQ29sbGVjdG9yOk8odGhpcyx0aGlzLmxhKSxtb3VzZUNvbGxlY3RvcjpPKHRoaXMsdGhpcy5uYSksa2V5Ym9hcmRDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuamEpLGFjY2VsZXJvbWV0ZXJDb2xsZWN0b3I6Tyh0aGlzLHRoaXMuY2EpLHRvdWNoQ29sbGVjdG9yOk8odGhpcyx0aGlzLnBhKX07aWYod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsXG50aGlzLmEubG9hZFRpbWVDb2xsZWN0b3IsITEpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5hLm1vdXNlQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleXByZXNzXCIsdGhpcy5hLmtleWJvYXJkQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImRldmljZW1vdGlvblwiLHRoaXMuYS5hY2NlbGVyb21ldGVyQ29sbGVjdG9yLCExKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMuYS50b3VjaENvbGxlY3RvciwhMSk7ZWxzZSBpZihkb2N1bWVudC5hdHRhY2hFdmVudClkb2N1bWVudC5hdHRhY2hFdmVudChcIm9ubG9hZFwiLHRoaXMuYS5sb2FkVGltZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJvbm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciksZG9jdW1lbnQuYXR0YWNoRXZlbnQoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3Rvcik7ZWxzZSB0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uYnVnKFwiY2FuJ3QgYXR0YWNoIGV2ZW50XCIpO1xudGhpcy5EPSEwfX0sc3RvcENvbGxlY3RvcnM6ZnVuY3Rpb24oKXt0aGlzLkQmJih3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcj8od2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMuYS5tb3VzZUNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLHRoaXMuYS5rZXlib2FyZENvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJkZXZpY2Vtb3Rpb25cIix0aGlzLmEuYWNjZWxlcm9tZXRlckNvbGxlY3RvciwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLmEudG91Y2hDb2xsZWN0b3IsITEpKTpkb2N1bWVudC5kZXRhY2hFdmVudCYmKGRvY3VtZW50LmRldGFjaEV2ZW50KFwib25sb2FkXCIsdGhpcy5hLmxvYWRUaW1lQ29sbGVjdG9yKSxkb2N1bWVudC5kZXRhY2hFdmVudChcIm9ubW91c2Vtb3ZlXCIsXG50aGlzLmEubW91c2VDb2xsZWN0b3IpLGRvY3VtZW50LmRldGFjaEV2ZW50KFwia2V5cHJlc3NcIix0aGlzLmEua2V5Ym9hcmRDb2xsZWN0b3IpKSx0aGlzLkQ9ITEpfSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYil7dGhpcy5KW2FdW3RoaXMuZWErK109Yn0scmVtb3ZlRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZT10aGlzLkpbYV0sZj1bXTtmb3IoZCBpbiBlKWUuaGFzT3duUHJvcGVydHkoZCkmJmVbZF09PT1iJiZmLnB1c2goZCk7Zm9yKGM9MDtjPGYubGVuZ3RoO2MrKylkPWZbY10sZGVsZXRlIGVbZF19LGphOmZ1bmN0aW9uKCl7VCh0aGlzLDEpfSxuYTpmdW5jdGlvbihhKXt2YXIgYixjO3RyeXtiPWEueHx8YS5jbGllbnRYfHxhLm9mZnNldFh8fDAsYz1hLnl8fGEuY2xpZW50WXx8YS5vZmZzZXRZfHwwfWNhdGNoKGQpe2M9Yj0wfTAhPWImJjAhPWMmJnRoaXMuYWRkRW50cm9weShbYixjXSwyLFwibW91c2VcIik7VCh0aGlzLDApfSxwYTpmdW5jdGlvbihhKXthPVxuYS50b3VjaGVzWzBdfHxhLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuYWRkRW50cm9weShbYS5wYWdlWHx8YS5jbGllbnRYLGEucGFnZVl8fGEuY2xpZW50WV0sMSxcInRvdWNoXCIpO1QodGhpcywwKX0sbGE6ZnVuY3Rpb24oKXtUKHRoaXMsMil9LGNhOmZ1bmN0aW9uKGEpe2E9YS5hY2NlbGVyYXRpb25JbmNsdWRpbmdHcmF2aXR5Lnh8fGEuYWNjZWxlcmF0aW9uSW5jbHVkaW5nR3Jhdml0eS55fHxhLmFjY2VsZXJhdGlvbkluY2x1ZGluZ0dyYXZpdHkuejtpZih3aW5kb3cub3JpZW50YXRpb24pe3ZhciBiPXdpbmRvdy5vcmllbnRhdGlvbjtcIm51bWJlclwiPT09dHlwZW9mIGImJnRoaXMuYWRkRW50cm9weShiLDEsXCJhY2NlbGVyb21ldGVyXCIpfWEmJnRoaXMuYWRkRW50cm9weShhLDIsXCJhY2NlbGVyb21ldGVyXCIpO1QodGhpcywwKX19O1xuZnVuY3Rpb24gY2EoYSxiKXt2YXIgYyxkPXNqY2wucmFuZG9tLkpbYV0sZT1bXTtmb3IoYyBpbiBkKWQuaGFzT3duUHJvcGVydHkoYykmJmUucHVzaChkW2NdKTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKWVbY10oYil9ZnVuY3Rpb24gVChhLGIpe1widW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucGVyZm9ybWFuY2UmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiB3aW5kb3cucGVyZm9ybWFuY2Uubm93P2EuYWRkRW50cm9weSh3aW5kb3cucGVyZm9ybWFuY2Uubm93KCksYixcImxvYWR0aW1lXCIpOmEuYWRkRW50cm9weSgobmV3IERhdGUpLnZhbHVlT2YoKSxiLFwibG9hZHRpbWVcIil9ZnVuY3Rpb24gYmEoYSl7YS5iPU4oYSkuY29uY2F0KE4oYSkpO2EuSz1uZXcgc2pjbC5jaXBoZXIuYWVzKGEuYil9ZnVuY3Rpb24gTihhKXtmb3IodmFyIGI9MDs0PmImJihhLm1bYl09YS5tW2JdKzF8MCwhYS5tW2JdKTtiKyspO3JldHVybiBhLksuZW5jcnlwdChhLm0pfVxuZnVuY3Rpb24gTyhhLGIpe3JldHVybiBmdW5jdGlvbigpe2IuYXBwbHkoYSxhcmd1bWVudHMpfX1zamNsLnJhbmRvbT1uZXcgc2pjbC5wcm5nKDYpO1xuYTp0cnl7dmFyIFUsZGEsWixoYTtpZihoYT1cInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHMpe3ZhciBpYTt0cnl7aWE9cmVxdWlyZShcImNyeXB0b1wiKX1jYXRjaChhKXtpYT1udWxsfWhhPWRhPWlhfWlmKGhhJiZkYS5yYW5kb21CeXRlcylVPWRhLnJhbmRvbUJ5dGVzKDEyOCksVT1uZXcgVWludDMyQXJyYXkoKG5ldyBVaW50OEFycmF5KFUpKS5idWZmZXIpLHNqY2wucmFuZG9tLmFkZEVudHJvcHkoVSwxMDI0LFwiY3J5cHRvWydyYW5kb21CeXRlcyddXCIpO2Vsc2UgaWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgVWludDMyQXJyYXkpe1o9bmV3IFVpbnQzMkFycmF5KDMyKTtpZih3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaKTtlbHNlIGlmKHdpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyl3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFopO1xuZWxzZSBicmVhayBhO3NqY2wucmFuZG9tLmFkZEVudHJvcHkoWiwxMDI0LFwiY3J5cHRvWydnZXRSYW5kb21WYWx1ZXMnXVwiKX19Y2F0Y2goYSl7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5jb25zb2xlJiYoY29uc29sZS5sb2coXCJUaGVyZSB3YXMgYW4gZXJyb3IgY29sbGVjdGluZyBlbnRyb3B5IGZyb20gdGhlIGJyb3dzZXI6XCIpLGNvbnNvbGUubG9nKGEpKX1cbnNqY2wuanNvbj17ZGVmYXVsdHM6e3Y6MSxpdGVyOjFFNCxrczoxMjgsdHM6NjQsbW9kZTpcImNjbVwiLGFkYXRhOlwiXCIsY2lwaGVyOlwiYWVzXCJ9LGhhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb24sZj1lLmooe2l2OnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDQsMCl9LGUuZGVmYXVsdHMpLGc7ZS5qKGYsYyk7Yz1mLmFkYXRhO1wic3RyaW5nXCI9PT10eXBlb2YgZi5zYWx0JiYoZi5zYWx0PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLnNhbHQpKTtcInN0cmluZ1wiPT09dHlwZW9mIGYuaXYmJihmLml2PXNqY2wuY29kZWMuYmFzZTY0LnRvQml0cyhmLml2KSk7aWYoIXNqY2wubW9kZVtmLm1vZGVdfHwhc2pjbC5jaXBoZXJbZi5jaXBoZXJdfHxcInN0cmluZ1wiPT09dHlwZW9mIGEmJjEwMD49Zi5pdGVyfHw2NCE9PWYudHMmJjk2IT09Zi50cyYmMTI4IT09Zi50c3x8MTI4IT09Zi5rcyYmMTkyIT09Zi5rcyYmMHgxMDAhPT1mLmtzfHwyPmYuaXYubGVuZ3RofHxcbjQ8Zi5pdi5sZW5ndGgpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGVuY3J5cHQ6IGludmFsaWQgcGFyYW1ldGVyc1wiKTtcInN0cmluZ1wiPT09dHlwZW9mIGE/KGc9c2pjbC5taXNjLmNhY2hlZFBia2RmMihhLGYpLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSxmLnNhbHQ9Zy5zYWx0KTpzamNsLmVjYyYmYSBpbnN0YW5jZW9mIHNqY2wuZWNjLmVsR2FtYWwucHVibGljS2V5JiYoZz1hLmtlbSgpLGYua2VtdGFnPWcudGFnLGE9Zy5rZXkuc2xpY2UoMCxmLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiJiYoYj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGIpKTtcInN0cmluZ1wiPT09dHlwZW9mIGMmJihmLmFkYXRhPWM9c2pjbC5jb2RlYy51dGY4U3RyaW5nLnRvQml0cyhjKSk7Zz1uZXcgc2pjbC5jaXBoZXJbZi5jaXBoZXJdKGEpO2UuaihkLGYpO2Qua2V5PWE7Zi5jdD1cImNjbVwiPT09Zi5tb2RlJiZzamNsLmFycmF5QnVmZmVyJiZzamNsLmFycmF5QnVmZmVyLmNjbSYmXG5iIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZW5jcnlwdChnLGIsZi5pdixjLGYudHMpOnNqY2wubW9kZVtmLm1vZGVdLmVuY3J5cHQoZyxiLGYuaXYsYyxmLnRzKTtyZXR1cm4gZn0sZW5jcnlwdDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZT1zamNsLmpzb24sZj1lLmhhLmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gZS5lbmNvZGUoZil9LGdhOmZ1bmN0aW9uKGEsYixjLGQpe2M9Y3x8e307ZD1kfHx7fTt2YXIgZT1zamNsLmpzb247Yj1lLmooZS5qKGUuaih7fSxlLmRlZmF1bHRzKSxiKSxjLCEwKTt2YXIgZixnO2Y9Yi5hZGF0YTtcInN0cmluZ1wiPT09dHlwZW9mIGIuc2FsdCYmKGIuc2FsdD1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5zYWx0KSk7XCJzdHJpbmdcIj09PXR5cGVvZiBiLml2JiYoYi5pdj1zamNsLmNvZGVjLmJhc2U2NC50b0JpdHMoYi5pdikpO2lmKCFzamNsLm1vZGVbYi5tb2RlXXx8IXNqY2wuY2lwaGVyW2IuY2lwaGVyXXx8XCJzdHJpbmdcIj09PVxudHlwZW9mIGEmJjEwMD49Yi5pdGVyfHw2NCE9PWIudHMmJjk2IT09Yi50cyYmMTI4IT09Yi50c3x8MTI4IT09Yi5rcyYmMTkyIT09Yi5rcyYmMHgxMDAhPT1iLmtzfHwhYi5pdnx8Mj5iLml2Lmxlbmd0aHx8NDxiLml2Lmxlbmd0aCl0aHJvdyBuZXcgc2pjbC5leGNlcHRpb24uaW52YWxpZChcImpzb24gZGVjcnlwdDogaW52YWxpZCBwYXJhbWV0ZXJzXCIpO1wic3RyaW5nXCI9PT10eXBlb2YgYT8oZz1zamNsLm1pc2MuY2FjaGVkUGJrZGYyKGEsYiksYT1nLmtleS5zbGljZSgwLGIua3MvMzIpLGIuc2FsdD1nLnNhbHQpOnNqY2wuZWNjJiZhIGluc3RhbmNlb2Ygc2pjbC5lY2MuZWxHYW1hbC5zZWNyZXRLZXkmJihhPWEudW5rZW0oc2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGIua2VtdGFnKSkuc2xpY2UoMCxiLmtzLzMyKSk7XCJzdHJpbmdcIj09PXR5cGVvZiBmJiYoZj1zamNsLmNvZGVjLnV0ZjhTdHJpbmcudG9CaXRzKGYpKTtnPW5ldyBzamNsLmNpcGhlcltiLmNpcGhlcl0oYSk7Zj1cImNjbVwiPT09XG5iLm1vZGUmJnNqY2wuYXJyYXlCdWZmZXImJnNqY2wuYXJyYXlCdWZmZXIuY2NtJiZiLmN0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/c2pjbC5hcnJheUJ1ZmZlci5jY20uZGVjcnlwdChnLGIuY3QsYi5pdixiLnRhZyxmLGIudHMpOnNqY2wubW9kZVtiLm1vZGVdLmRlY3J5cHQoZyxiLmN0LGIuaXYsZixiLnRzKTtlLmooZCxiKTtkLmtleT1hO3JldHVybiAxPT09Yy5yYXc/ZjpzamNsLmNvZGVjLnV0ZjhTdHJpbmcuZnJvbUJpdHMoZil9LGRlY3J5cHQ6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9c2pjbC5qc29uO3JldHVybiBlLmdhKGEsZS5kZWNvZGUoYiksYyxkKX0sZW5jb2RlOmZ1bmN0aW9uKGEpe3ZhciBiLGM9XCJ7XCIsZD1cIlwiO2ZvcihiIGluIGEpaWYoYS5oYXNPd25Qcm9wZXJ0eShiKSl7aWYoIWIubWF0Y2goL15bYS16MC05XSskL2kpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBlbmNvZGU6IGludmFsaWQgcHJvcGVydHkgbmFtZVwiKTtjKz1kKydcIicrXG5iKydcIjonO2Q9XCIsXCI7c3dpdGNoKHR5cGVvZiBhW2JdKXtjYXNlIFwibnVtYmVyXCI6Y2FzZSBcImJvb2xlYW5cIjpjKz1hW2JdO2JyZWFrO2Nhc2UgXCJzdHJpbmdcIjpjKz0nXCInK2VzY2FwZShhW2JdKSsnXCInO2JyZWFrO2Nhc2UgXCJvYmplY3RcIjpjKz0nXCInK3NqY2wuY29kZWMuYmFzZTY0LmZyb21CaXRzKGFbYl0sMCkrJ1wiJzticmVhaztkZWZhdWx0OnRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5idWcoXCJqc29uIGVuY29kZTogdW5zdXBwb3J0ZWQgdHlwZVwiKTt9fXJldHVybiBjK1wifVwifSxkZWNvZGU6ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccy9nLFwiXCIpO2lmKCFhLm1hdGNoKC9eXFx7LipcXH0kLykpdGhyb3cgbmV3IHNqY2wuZXhjZXB0aW9uLmludmFsaWQoXCJqc29uIGRlY29kZTogdGhpcyBpc24ndCBqc29uIVwiKTthPWEucmVwbGFjZSgvXlxce3xcXH0kL2csXCJcIikuc3BsaXQoLywvKTt2YXIgYj17fSxjLGQ7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrKyl7aWYoIShkPWFbY10ubWF0Y2goL15cXHMqKD86KFtcIiddPykoW2Etel1bYS16MC05XSopXFwxKVxccyo6XFxzKig/OigtP1xcZCspfFwiKFthLXowLTkrXFwvJSpfLkA9XFwtXSopXCJ8KHRydWV8ZmFsc2UpKSQvaSkpKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwianNvbiBkZWNvZGU6IHRoaXMgaXNuJ3QganNvbiFcIik7XG5udWxsIT1kWzNdP2JbZFsyXV09cGFyc2VJbnQoZFszXSwxMCk6bnVsbCE9ZFs0XT9iW2RbMl1dPWRbMl0ubWF0Y2goL14oY3R8YWRhdGF8c2FsdHxpdikkLyk/c2pjbC5jb2RlYy5iYXNlNjQudG9CaXRzKGRbNF0pOnVuZXNjYXBlKGRbNF0pOm51bGwhPWRbNV0mJihiW2RbMl1dPVwidHJ1ZVwiPT09ZFs1XSl9cmV0dXJuIGJ9LGo6ZnVuY3Rpb24oYSxiLGMpe3ZvaWQgMD09PWEmJihhPXt9KTtpZih2b2lkIDA9PT1iKXJldHVybiBhO2Zvcih2YXIgZCBpbiBiKWlmKGIuaGFzT3duUHJvcGVydHkoZCkpe2lmKGMmJnZvaWQgMCE9PWFbZF0mJmFbZF0hPT1iW2RdKXRocm93IG5ldyBzamNsLmV4Y2VwdGlvbi5pbnZhbGlkKFwicmVxdWlyZWQgcGFyYW1ldGVyIG92ZXJyaWRkZW5cIik7YVtkXT1iW2RdfXJldHVybiBhfSxyYTpmdW5jdGlvbihhLGIpe3ZhciBjPXt9LGQ7Zm9yKGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiZhW2RdIT09YltkXSYmKGNbZF09YVtkXSk7cmV0dXJuIGN9LHFhOmZ1bmN0aW9uKGEsXG5iKXt2YXIgYz17fSxkO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspdm9pZCAwIT09YVtiW2RdXSYmKGNbYltkXV09YVtiW2RdXSk7cmV0dXJuIGN9fTtzamNsLmVuY3J5cHQ9c2pjbC5qc29uLmVuY3J5cHQ7c2pjbC5kZWNyeXB0PXNqY2wuanNvbi5kZWNyeXB0O3NqY2wubWlzYy5vYT17fTtzamNsLm1pc2MuY2FjaGVkUGJrZGYyPWZ1bmN0aW9uKGEsYil7dmFyIGM9c2pjbC5taXNjLm9hLGQ7Yj1ifHx7fTtkPWIuaXRlcnx8MUUzO2M9Y1thXT1jW2FdfHx7fTtkPWNbZF09Y1tkXXx8e2ZpcnN0U2FsdDpiLnNhbHQmJmIuc2FsdC5sZW5ndGg/Yi5zYWx0LnNsaWNlKDApOnNqY2wucmFuZG9tLnJhbmRvbVdvcmRzKDIsMCl9O2M9dm9pZCAwPT09Yi5zYWx0P2QuZmlyc3RTYWx0OmIuc2FsdDtkW2NdPWRbY118fHNqY2wubWlzYy5wYmtkZjIoYSxjLGIuaXRlcik7cmV0dXJue2tleTpkW2NdLnNsaWNlKDApLHNhbHQ6Yy5zbGljZSgwKX19O1xuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzJiYobW9kdWxlLmV4cG9ydHM9c2pjbCk7XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHNqY2x9KTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5XG4gICwgcHJlZml4ID0gJ34nO1xuXG4vKipcbiAqIENvbnN0cnVjdG9yIHRvIGNyZWF0ZSBhIHN0b3JhZ2UgZm9yIG91ciBgRUVgIG9iamVjdHMuXG4gKiBBbiBgRXZlbnRzYCBpbnN0YW5jZSBpcyBhIHBsYWluIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSBldmVudCBuYW1lcy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIEV2ZW50cygpIHt9XG5cbi8vXG4vLyBXZSB0cnkgdG8gbm90IGluaGVyaXQgZnJvbSBgT2JqZWN0LnByb3RvdHlwZWAuIEluIHNvbWUgZW5naW5lcyBjcmVhdGluZyBhblxuLy8gaW5zdGFuY2UgaW4gdGhpcyB3YXkgaXMgZmFzdGVyIHRoYW4gY2FsbGluZyBgT2JqZWN0LmNyZWF0ZShudWxsKWAgZGlyZWN0bHkuXG4vLyBJZiBgT2JqZWN0LmNyZWF0ZShudWxsKWAgaXMgbm90IHN1cHBvcnRlZCB3ZSBwcmVmaXggdGhlIGV2ZW50IG5hbWVzIHdpdGggYVxuLy8gY2hhcmFjdGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsdC1pbiBvYmplY3QgcHJvcGVydGllcyBhcmUgbm90XG4vLyBvdmVycmlkZGVuIG9yIHVzZWQgYXMgYW4gYXR0YWNrIHZlY3Rvci5cbi8vXG5pZiAoT2JqZWN0LmNyZWF0ZSkge1xuICBFdmVudHMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAvL1xuICAvLyBUaGlzIGhhY2sgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIGBfX3Byb3RvX19gIHByb3BlcnR5IGlzIHN0aWxsIGluaGVyaXRlZCBpblxuICAvLyBzb21lIG9sZCBicm93c2VycyBsaWtlIEFuZHJvaWQgNCwgaVBob25lIDUuMSwgT3BlcmEgMTEgYW5kIFNhZmFyaSA1LlxuICAvL1xuICBpZiAoIW5ldyBFdmVudHMoKS5fX3Byb3RvX18pIHByZWZpeCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIGV2ZW50IGxpc3RlbmVyLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvbmNlPWZhbHNlXSBTcGVjaWZ5IGlmIHRoZSBsaXN0ZW5lciBpcyBhIG9uZS10aW1lIGxpc3RlbmVyLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBFRShmbiwgY29udGV4dCwgb25jZSkge1xuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMub25jZSA9IG9uY2UgfHwgZmFsc2U7XG59XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHtFdmVudEVtaXR0ZXJ9IGVtaXR0ZXIgUmVmZXJlbmNlIHRvIHRoZSBgRXZlbnRFbWl0dGVyYCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2UgU3BlY2lmeSBpZiB0aGUgbGlzdGVuZXIgaXMgYSBvbmUtdGltZSBsaXN0ZW5lci5cbiAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhZGRMaXN0ZW5lcihlbWl0dGVyLCBldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IG5ldyBFRShmbiwgY29udGV4dCB8fCBlbWl0dGVyLCBvbmNlKVxuICAgICwgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudDtcblxuICBpZiAoIWVtaXR0ZXIuX2V2ZW50c1tldnRdKSBlbWl0dGVyLl9ldmVudHNbZXZ0XSA9IGxpc3RlbmVyLCBlbWl0dGVyLl9ldmVudHNDb3VudCsrO1xuICBlbHNlIGlmICghZW1pdHRlci5fZXZlbnRzW2V2dF0uZm4pIGVtaXR0ZXIuX2V2ZW50c1tldnRdLnB1c2gobGlzdGVuZXIpO1xuICBlbHNlIGVtaXR0ZXIuX2V2ZW50c1tldnRdID0gW2VtaXR0ZXIuX2V2ZW50c1tldnRdLCBsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIGVtaXR0ZXI7XG59XG5cbi8qKlxuICogQ2xlYXIgZXZlbnQgYnkgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge0V2ZW50RW1pdHRlcn0gZW1pdHRlciBSZWZlcmVuY2UgdG8gdGhlIGBFdmVudEVtaXR0ZXJgIGluc3RhbmNlLlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2dCBUaGUgRXZlbnQgbmFtZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyRXZlbnQoZW1pdHRlciwgZXZ0KSB7XG4gIGlmICgtLWVtaXR0ZXIuX2V2ZW50c0NvdW50ID09PSAwKSBlbWl0dGVyLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIGVsc2UgZGVsZXRlIGVtaXR0ZXIuX2V2ZW50c1tldnRdO1xufVxuXG4vKipcbiAqIE1pbmltYWwgYEV2ZW50RW1pdHRlcmAgaW50ZXJmYWNlIHRoYXQgaXMgbW9sZGVkIGFnYWluc3QgdGhlIE5vZGUuanNcbiAqIGBFdmVudEVtaXR0ZXJgIGludGVyZmFjZS5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSBuZXcgRXZlbnRzKCk7XG4gIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYW4gYXJyYXkgbGlzdGluZyB0aGUgZXZlbnRzIGZvciB3aGljaCB0aGUgZW1pdHRlciBoYXMgcmVnaXN0ZXJlZFxuICogbGlzdGVuZXJzLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5ldmVudE5hbWVzID0gZnVuY3Rpb24gZXZlbnROYW1lcygpIHtcbiAgdmFyIG5hbWVzID0gW11cbiAgICAsIGV2ZW50c1xuICAgICwgbmFtZTtcblxuICBpZiAodGhpcy5fZXZlbnRzQ291bnQgPT09IDApIHJldHVybiBuYW1lcztcblxuICBmb3IgKG5hbWUgaW4gKGV2ZW50cyA9IHRoaXMuX2V2ZW50cykpIHtcbiAgICBpZiAoaGFzLmNhbGwoZXZlbnRzLCBuYW1lKSkgbmFtZXMucHVzaChwcmVmaXggPyBuYW1lLnNsaWNlKDEpIDogbmFtZSk7XG4gIH1cblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHJldHVybiBuYW1lcy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhldmVudHMpKTtcbiAgfVxuXG4gIHJldHVybiBuYW1lcztcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCBmb3IgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiBsaXN0ZW5lcnMoZXZlbnQpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnRcbiAgICAsIGhhbmRsZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFoYW5kbGVycykgcmV0dXJuIFtdO1xuICBpZiAoaGFuZGxlcnMuZm4pIHJldHVybiBbaGFuZGxlcnMuZm5dO1xuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gaGFuZGxlcnMubGVuZ3RoLCBlZSA9IG5ldyBBcnJheShsKTsgaSA8IGw7IGkrKykge1xuICAgIGVlW2ldID0gaGFuZGxlcnNbaV0uZm47XG4gIH1cblxuICByZXR1cm4gZWU7XG59O1xuXG4vKipcbiAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGxpc3RlbmVycyBsaXN0ZW5pbmcgdG8gYSBnaXZlbiBldmVudC5cbiAqXG4gKiBAcGFyYW0geyhTdHJpbmd8U3ltYm9sKX0gZXZlbnQgVGhlIGV2ZW50IG5hbWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtYmVyIG9mIGxpc3RlbmVycy5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24gbGlzdGVuZXJDb3VudChldmVudCkge1xuICB2YXIgZXZ0ID0gcHJlZml4ID8gcHJlZml4ICsgZXZlbnQgOiBldmVudFxuICAgICwgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKCFsaXN0ZW5lcnMpIHJldHVybiAwO1xuICBpZiAobGlzdGVuZXJzLmZuKSByZXR1cm4gMTtcbiAgcmV0dXJuIGxpc3RlbmVycy5sZW5ndGg7XG59O1xuXG4vKipcbiAqIENhbGxzIGVhY2ggb2YgdGhlIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGV2ZW50IGhhZCBsaXN0ZW5lcnMsIGVsc2UgYGZhbHNlYC5cbiAqIEBwdWJsaWNcbiAqL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdChldmVudCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7XG4gIHZhciBldnQgPSBwcmVmaXggPyBwcmVmaXggKyBldmVudCA6IGV2ZW50O1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW2V2dF0pIHJldHVybiBmYWxzZTtcblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF1cbiAgICAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGhcbiAgICAsIGFyZ3NcbiAgICAsIGk7XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChsaXN0ZW5lcnMub25jZSkgdGhpcy5yZW1vdmVMaXN0ZW5lcihldmVudCwgbGlzdGVuZXJzLmZuLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgc3dpdGNoIChsZW4pIHtcbiAgICAgIGNhc2UgMTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0KSwgdHJ1ZTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSksIHRydWU7XG4gICAgICBjYXNlIDM6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzKSwgdHJ1ZTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIGxpc3RlbmVycy5mbi5jYWxsKGxpc3RlbmVycy5jb250ZXh0LCBhMSwgYTIsIGEzLCBhNCksIHRydWU7XG4gICAgICBjYXNlIDY6IHJldHVybiBsaXN0ZW5lcnMuZm4uY2FsbChsaXN0ZW5lcnMuY29udGV4dCwgYTEsIGEyLCBhMywgYTQsIGE1KSwgdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAxLCBhcmdzID0gbmV3IEFycmF5KGxlbiAtMSk7IGkgPCBsZW47IGkrKykge1xuICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgbGlzdGVuZXJzLmZuLmFwcGx5KGxpc3RlbmVycy5jb250ZXh0LCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdGVuZXJzLmxlbmd0aFxuICAgICAgLCBqO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAobGlzdGVuZXJzW2ldLm9uY2UpIHRoaXMucmVtb3ZlTGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyc1tpXS5mbiwgdW5kZWZpbmVkLCB0cnVlKTtcblxuICAgICAgc3dpdGNoIChsZW4pIHtcbiAgICAgICAgY2FzZSAxOiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCk7IGJyZWFrO1xuICAgICAgICBjYXNlIDI6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSk7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IGxpc3RlbmVyc1tpXS5mbi5jYWxsKGxpc3RlbmVyc1tpXS5jb250ZXh0LCBhMSwgYTIpOyBicmVhaztcbiAgICAgICAgY2FzZSA0OiBsaXN0ZW5lcnNbaV0uZm4uY2FsbChsaXN0ZW5lcnNbaV0uY29udGV4dCwgYTEsIGEyLCBhMyk7IGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmICghYXJncykgZm9yIChqID0gMSwgYXJncyA9IG5ldyBBcnJheShsZW4gLTEpOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaiAtIDFdID0gYXJndW1lbnRzW2pdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpc3RlbmVyc1tpXS5mbi5hcHBseShsaXN0ZW5lcnNbaV0uY29udGV4dCwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqIEFkZCBhIGxpc3RlbmVyIGZvciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gW2NvbnRleHQ9dGhpc10gVGhlIGNvbnRleHQgdG8gaW52b2tlIHRoZSBsaXN0ZW5lciB3aXRoLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gb24oZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIGZhbHNlKTtcbn07XG5cbi8qKlxuICogQWRkIGEgb25lLXRpbWUgbGlzdGVuZXIgZm9yIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogQHBhcmFtIHsoU3RyaW5nfFN5bWJvbCl9IGV2ZW50IFRoZSBldmVudCBuYW1lLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBbY29udGV4dD10aGlzXSBUaGUgY29udGV4dCB0byBpbnZva2UgdGhlIGxpc3RlbmVyIHdpdGguXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uIG9uY2UoZXZlbnQsIGZuLCBjb250ZXh0KSB7XG4gIHJldHVybiBhZGRMaXN0ZW5lcih0aGlzLCBldmVudCwgZm4sIGNvbnRleHQsIHRydWUpO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBvZiBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBldmVudCBUaGUgZXZlbnQgbmFtZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBtYXRjaCB0aGlzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IE9ubHkgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIHRoaXMgY29udGV4dC5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gb25jZSBPbmx5IHJlbW92ZSBvbmUtdGltZSBsaXN0ZW5lcnMuXG4gKiBAcmV0dXJucyB7RXZlbnRFbWl0dGVyfSBgdGhpc2AuXG4gKiBAcHVibGljXG4gKi9cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcihldmVudCwgZm4sIGNvbnRleHQsIG9uY2UpIHtcbiAgdmFyIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbZXZ0XSkgcmV0dXJuIHRoaXM7XG4gIGlmICghZm4pIHtcbiAgICBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW2V2dF07XG5cbiAgaWYgKGxpc3RlbmVycy5mbikge1xuICAgIGlmIChcbiAgICAgIGxpc3RlbmVycy5mbiA9PT0gZm4gJiZcbiAgICAgICghb25jZSB8fCBsaXN0ZW5lcnMub25jZSkgJiZcbiAgICAgICghY29udGV4dCB8fCBsaXN0ZW5lcnMuY29udGV4dCA9PT0gY29udGV4dClcbiAgICApIHtcbiAgICAgIGNsZWFyRXZlbnQodGhpcywgZXZ0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGV2ZW50cyA9IFtdLCBsZW5ndGggPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGlzdGVuZXJzW2ldLmZuICE9PSBmbiB8fFxuICAgICAgICAob25jZSAmJiAhbGlzdGVuZXJzW2ldLm9uY2UpIHx8XG4gICAgICAgIChjb250ZXh0ICYmIGxpc3RlbmVyc1tpXS5jb250ZXh0ICE9PSBjb250ZXh0KVxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKGxpc3RlbmVyc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBSZXNldCB0aGUgYXJyYXksIG9yIHJlbW92ZSBpdCBjb21wbGV0ZWx5IGlmIHdlIGhhdmUgbm8gbW9yZSBsaXN0ZW5lcnMuXG4gICAgLy9cbiAgICBpZiAoZXZlbnRzLmxlbmd0aCkgdGhpcy5fZXZlbnRzW2V2dF0gPSBldmVudHMubGVuZ3RoID09PSAxID8gZXZlbnRzWzBdIDogZXZlbnRzO1xuICAgIGVsc2UgY2xlYXJFdmVudCh0aGlzLCBldnQpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbGwgbGlzdGVuZXJzLCBvciB0aG9zZSBvZiB0aGUgc3BlY2lmaWVkIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7KFN0cmluZ3xTeW1ib2wpfSBbZXZlbnRdIFRoZSBldmVudCBuYW1lLlxuICogQHJldHVybnMge0V2ZW50RW1pdHRlcn0gYHRoaXNgLlxuICogQHB1YmxpY1xuICovXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9IGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyhldmVudCkge1xuICB2YXIgZXZ0O1xuXG4gIGlmIChldmVudCkge1xuICAgIGV2dCA9IHByZWZpeCA/IHByZWZpeCArIGV2ZW50IDogZXZlbnQ7XG4gICAgaWYgKHRoaXMuX2V2ZW50c1tldnRdKSBjbGVhckV2ZW50KHRoaXMsIGV2dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fZXZlbnRzID0gbmV3IEV2ZW50cygpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy9cbi8vIEFsaWFzIG1ldGhvZHMgbmFtZXMgYmVjYXVzZSBwZW9wbGUgcm9sbCBsaWtlIHRoYXQuXG4vL1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vZmYgPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUub247XG5cbi8vXG4vLyBFeHBvc2UgdGhlIHByZWZpeC5cbi8vXG5FdmVudEVtaXR0ZXIucHJlZml4ZWQgPSBwcmVmaXg7XG5cbi8vXG4vLyBBbGxvdyBgRXZlbnRFbWl0dGVyYCB0byBiZSBpbXBvcnRlZCBhcyBtb2R1bGUgbmFtZXNwYWNlLlxuLy9cbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbi8vXG4vLyBFeHBvc2UgdGhlIG1vZHVsZS5cbi8vXG5pZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBtb2R1bGUpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG59XG4iLCAiaW1wb3J0IEV2ZW50RW1pdHRlciBmcm9tIFwiZXZlbnRzXCI7XG5pbXBvcnQgeyBXT1JLRVJfQUNUSU9OIH0gZnJvbSBcIn4vZW51bS93b3JrZXItYWN0aW9uLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEx1ZmlGaWxlIH0gZnJvbSBcIn4vZW50aXRpZXMvbHVmaS1maWxlLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBFVkVOVCB9IGZyb20gXCJ+L2VudW0vZXZlbnQudHNcIjtcbmltcG9ydCB7IFVQTE9BRF9TVEFUVVMgfSBmcm9tIFwifi9lbnVtL2ZpbGUtc3RhdHVzLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckV2ZW50IH0gZnJvbSBcIn4vaW50ZXJmYWNlL3dvcmtlci1ldmVudC50c1wiO1xuXG5kZWNsYXJlIGxldCBzZWxmOiBXb3JrZXI7XG5cbmV4cG9ydCBjb25zdCBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbi8qKlxuICogVXBkYXRlIGZpbGUgaW4gd29ya2VycyBhbmQgcHJvdmlkZSBtb2RpZmljYXRpb25zIHRvIHRoZSBtYWluIHRocmVhZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIGFyZ3NcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSwgYXJnczogUGFydGlhbDxMdWZpRmlsZT4pID0+IHtcbiAgT2JqZWN0LmFzc2lnbihsdWZpRmlsZSwgYXJncyk7XG5cbiAgaWYgKHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgZXZlbnQ6IEVWRU5ULkZJTEVfVVBEQVRFRCxcbiAgICAgIGx1ZmlGaWxlLFxuICAgIH0gYXMgV29ya2VyRXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIGx1ZmlGaWxlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRGaWxlRXJyb3IgPSAobHVmaUZpbGU6IEx1ZmlGaWxlLCBlcnJvcjogRXJyb3IpID0+IHtcbiAgdXBkYXRlRmlsZShsdWZpRmlsZSwgeyB1cGxvYWRTdGF0dXM6IFVQTE9BRF9TVEFUVVMuRkFJTEVEIH0pO1xuXG4gIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSBhcyBXb3JrZXJFdmVudCk7XG59O1xuXG4vKipcbiAqIEluaXQgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjaGlsZCB3b3JrZXIncyBvbm1lc3NhZ2UgZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0ID0gKCkgPT4ge1xuICBldmVudHMub25jZShFVkVOVC5TT0NLRVRfT1BFTkVELCAoKSA9PiB7XG4gICAgc2VsZi5wb3N0TWVzc2FnZSh7XG4gICAgICBldmVudDogRVZFTlQuU09DS0VUX09QRU5FRCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgZXZlbnRzLm9uY2UoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzV29ya2VyQWN0aW9uTWVzc2FnZSA9IChcbiAgLy8gZGVuby1saW50LWlnbm9yZSBuby1leHBsaWNpdC1hbnlcbiAgbWVzc2FnZTogYW55LFxuKTogbWVzc2FnZSBpcyBXb3JrZXJBY3Rpb25NZXNzYWdlID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgbWVzc2FnZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIG1lc3NhZ2UgIT09IG51bGwgJiZcbiAgICBcImFjdGlvblwiIGluIG1lc3NhZ2UgJiZcbiAgICBPYmplY3QudmFsdWVzKFdPUktFUl9BQ1RJT04pLmluY2x1ZGVzKG1lc3NhZ2UuYWN0aW9uKVxuICApO1xufTtcbiIsICJjb25zdCBkZWZhdWx0RXJyb3JDb25maWcgPSB7XHJcbiAgICB3aXRoU3RhY2tUcmFjZTogZmFsc2UsXHJcbn07XHJcbi8vIEN1c3RvbSBlcnJvciBvYmplY3RcclxuLy8gQ29udGV4dCAvIGRpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBlcm1hY3JvL25ldmVydGhyb3cvcHVsbC8yMTVcclxuY29uc3QgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yID0gKG1lc3NhZ2UsIHJlc3VsdCwgY29uZmlnID0gZGVmYXVsdEVycm9yQ29uZmlnKSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gcmVzdWx0LmlzT2soKVxyXG4gICAgICAgID8geyB0eXBlOiAnT2snLCB2YWx1ZTogcmVzdWx0LnZhbHVlIH1cclxuICAgICAgICA6IHsgdHlwZTogJ0VycicsIHZhbHVlOiByZXN1bHQuZXJyb3IgfTtcclxuICAgIGNvbnN0IG1heWJlU3RhY2sgPSBjb25maWcud2l0aFN0YWNrVHJhY2UgPyBuZXcgRXJyb3IoKS5zdGFjayA6IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgIHN0YWNrOiBtYXliZVN0YWNrLFxyXG4gICAgfTtcclxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlLCBTdXBwcmVzc2VkRXJyb3IsIFN5bWJvbCwgSXRlcmF0b3IgKi9cclxuXHJcblxyXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiLCBhd2FpdFJldHVybiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbnR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xyXG4gICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xyXG59O1xuXG5jbGFzcyBSZXN1bHRBc3luYyB7XHJcbiAgICBjb25zdHJ1Y3RvcihyZXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gcmVzO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21TYWZlUHJvbWlzZShwcm9taXNlKSB7XHJcbiAgICAgICAgY29uc3QgbmV3UHJvbWlzZSA9IHByb21pc2UudGhlbigodmFsdWUpID0+IG5ldyBPayh2YWx1ZSkpO1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMobmV3UHJvbWlzZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbVByb21pc2UocHJvbWlzZSwgZXJyb3JGbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb21pc2UgPSBwcm9taXNlXHJcbiAgICAgICAgICAgIC50aGVuKCh2YWx1ZSkgPT4gbmV3IE9rKHZhbHVlKSlcclxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiBuZXcgRXJyKGVycm9yRm4oZSkpKTtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG5ld1Byb21pc2UpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIHN0YXRpYyBmcm9tVGhyb3dhYmxlKGZuLCBlcnJvckZuKSB7XHJcbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmMoKCgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmbiguLi5hcmdzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycihlcnJvckZuID8gZXJyb3JGbihlcnJvcikgOiBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pKSgpKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNvbWJpbmUoYXN5bmNSZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRBc3luY0xpc3QoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIHN0YXRpYyBjb21iaW5lV2l0aEFsbEVycm9ycyhhc3luY1Jlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMoYXN5bmNSZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayh5aWVsZCBmKHJlcy52YWx1ZSkpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBhbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBuZXdSZXMgPSB5aWVsZCBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdSZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnIobmV3UmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHlpZWxkIGYocmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVGVlIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIGVycm9yXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPayhyZXMudmFsdWUpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICBtYXBFcnIoZikge1xyXG4gICAgICAgIHJldHVybiBuZXcgUmVzdWx0QXN5bmModGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5pc09rKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2socmVzLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycih5aWVsZCBmKHJlcy5lcnJvcikpO1xyXG4gICAgICAgIH0pKSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHRBc3luYyh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzLmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyKHJlcy5lcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBmKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWx1ZSBpbnN0YW5jZW9mIFJlc3VsdEFzeW5jID8gbmV3VmFsdWUuX3Byb21pc2UgOiBuZXdWYWx1ZTtcclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgb3JFbHNlKGYpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGYocmVzLmVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9rKHJlcy52YWx1ZSk7XHJcbiAgICAgICAgfSkpKTtcclxuICAgIH1cclxuICAgIG1hdGNoKG9rLCBfZXJyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbigocmVzKSA9PiByZXMubWF0Y2gob2ssIF9lcnIpKTtcclxuICAgIH1cclxuICAgIHVud3JhcE9yKHQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZS50aGVuKChyZXMpID0+IHJlcy51bndyYXBPcih0KSk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiA5LjAuMC5cclxuICAgICAqXHJcbiAgICAgKiBZb3UgY2FuIHVzZSBgc2FmZVRyeWAgd2l0aG91dCB0aGlzIG1ldGhvZC5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiBzYWZlVHJ5KGFzeW5jIGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgKiAgIGNvbnN0IG9rVmFsdWUgPSB5aWVsZCogeW91clJlc3VsdFxyXG4gICAgICogfSlcclxuICAgICAqIGBgYFxyXG4gICAgICogRW11bGF0ZXMgUnVzdCdzIGA/YCBvcGVyYXRvciBpbiBgc2FmZVRyeWAncyBib2R5LiBTZWUgYWxzbyBgc2FmZVRyeWAuXHJcbiAgICAgKi9cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgcmV0dXJuIF9fYXN5bmNHZW5lcmF0b3IodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiogc2FmZVVud3JhcF8xKCkge1xyXG4gICAgICAgICAgICByZXR1cm4geWllbGQgX19hd2FpdCh5aWVsZCBfX2F3YWl0KHlpZWxkKiBfX2FzeW5jRGVsZWdhdG9yKF9fYXN5bmNWYWx1ZXMoeWllbGQgX19hd2FpdCh0aGlzLl9wcm9taXNlLnRoZW4oKHJlcykgPT4gcmVzLnNhZmVVbndyYXAoKSkpKSkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIE1ha2VzIFJlc3VsdEFzeW5jIGltcGxlbWVudCBQcm9taXNlTGlrZTxSZXN1bHQ+XHJcbiAgICB0aGVuKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2UudGhlbihzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjayk7XHJcbiAgICB9XHJcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xyXG4gICAgICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24qIF9hKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB5aWVsZCBfX2F3YWl0KHRoaXMuX3Byb21pc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgICAgICAgICAgeWllbGQgeWllbGQgX19hd2FpdChlcnJBc3luYyhyZXN1bHQuZXJyb3IpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICAgICAgcmV0dXJuIHlpZWxkIF9fYXdhaXQocmVzdWx0LnZhbHVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5jb25zdCBva0FzeW5jID0gKHZhbHVlKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBPayh2YWx1ZSkpKTtcclxuY29uc3QgZXJyQXN5bmMgPSAoZXJyKSA9PiBuZXcgUmVzdWx0QXN5bmMoUHJvbWlzZS5yZXNvbHZlKG5ldyBFcnIoZXJyKSkpO1xyXG5jb25zdCBmcm9tUHJvbWlzZSA9IFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlO1xyXG5jb25zdCBmcm9tU2FmZVByb21pc2UgPSBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2U7XHJcbmNvbnN0IGZyb21Bc3luY1Rocm93YWJsZSA9IFJlc3VsdEFzeW5jLmZyb21UaHJvd2FibGU7XG5cbi8qKlxyXG4gKiBTaG9ydCBjaXJjdWl0cyBvbiB0aGUgRklSU1QgRXJyIHZhbHVlIHRoYXQgd2UgZmluZFxyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdExpc3QgPSAocmVzdWx0TGlzdCkgPT4ge1xyXG4gICAgbGV0IGFjYyA9IG9rKFtdKTtcclxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdExpc3QpIHtcclxuICAgICAgICBpZiAocmVzdWx0LmlzRXJyKCkpIHtcclxuICAgICAgICAgICAgYWNjID0gZXJyKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgYWNjLm1hcCgobGlzdCkgPT4gbGlzdC5wdXNoKHJlc3VsdC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhY2M7XHJcbn07XHJcbi8qIFRoaXMgaXMgdGhlIHR5cGVzYWZlIHZlcnNpb24gb2YgUHJvbWlzZS5hbGxcclxuICpcclxuICogVGFrZXMgYSBsaXN0IG9mIFJlc3VsdEFzeW5jPFQsIEU+IGFuZCBzdWNjZXNzIGlmIGFsbCBpbm5lciByZXN1bHRzIGFyZSBPayB2YWx1ZXNcclxuICogb3IgZmFpbHMgaWYgb25lIChvciBtb3JlKSBvZiB0aGUgaW5uZXIgcmVzdWx0cyBhcmUgRXJyIHZhbHVlc1xyXG4gKi9cclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdCA9IChhc3luY1Jlc3VsdExpc3QpID0+IFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShQcm9taXNlLmFsbChhc3luY1Jlc3VsdExpc3QpKS5hbmRUaGVuKGNvbWJpbmVSZXN1bHRMaXN0KTtcclxuLyoqXHJcbiAqIEdpdmUgYSBsaXN0IG9mIGFsbCB0aGUgZXJyb3JzIHdlIGZpbmRcclxuICovXHJcbmNvbnN0IGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyA9IChyZXN1bHRMaXN0KSA9PiB7XHJcbiAgICBsZXQgYWNjID0gb2soW10pO1xyXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0TGlzdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNFcnIoKSkge1xyXG4gICAgICAgICAgICBhY2MuZXJyb3IucHVzaChyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyZXN1bHQuaXNFcnIoKSAmJiBhY2MuaXNPaygpKSB7XHJcbiAgICAgICAgICAgIGFjYyA9IGVycihbcmVzdWx0LmVycm9yXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJlc3VsdC5pc09rKCkgJiYgYWNjLmlzT2soKSkge1xyXG4gICAgICAgICAgICBhY2MudmFsdWUucHVzaChyZXN1bHQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkbyBub3RoaW5nIHdoZW4gcmVzdWx0LmlzT2soKSAmJiBhY2MuaXNFcnIoKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFjYztcclxufTtcclxuY29uc3QgY29tYmluZVJlc3VsdEFzeW5jTGlzdFdpdGhBbGxFcnJvcnMgPSAoYXN5bmNSZXN1bHRMaXN0KSA9PiBSZXN1bHRBc3luYy5mcm9tU2FmZVByb21pc2UoUHJvbWlzZS5hbGwoYXN5bmNSZXN1bHRMaXN0KSkuYW5kVGhlbihjb21iaW5lUmVzdWx0TGlzdFdpdGhBbGxFcnJvcnMpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxyXG52YXIgUmVzdWx0O1xyXG4oZnVuY3Rpb24gKFJlc3VsdCkge1xyXG4gICAgLyoqXHJcbiAgICAgKiBXcmFwcyBhIGZ1bmN0aW9uIHdpdGggYSB0cnkgY2F0Y2gsIGNyZWF0aW5nIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhlIHNhbWVcclxuICAgICAqIGFyZ3VtZW50cyBidXQgcmV0dXJuaW5nIGBPa2AgaWYgc3VjY2Vzc2Z1bCwgYEVycmAgaWYgdGhlIGZ1bmN0aW9uIHRocm93c1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBmbiBmdW5jdGlvbiB0byB3cmFwIHdpdGggb2sgb24gc3VjY2VzcyBvciBlcnIgb24gZmFpbHVyZVxyXG4gICAgICogQHBhcmFtIGVycm9yRm4gd2hlbiBhbiBlcnJvciBpcyB0aHJvd24sIHRoaXMgd2lsbCB3cmFwIHRoZSBlcnJvciByZXN1bHQgaWYgcHJvdmlkZWRcclxuICAgICAqL1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZ1bmN0aW9uIGZyb21UaHJvd2FibGUoZm4sIGVycm9yRm4pIHtcclxuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZuKC4uLmFyZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnIoZXJyb3JGbiA/IGVycm9yRm4oZSkgOiBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuZnJvbVRocm93YWJsZSA9IGZyb21UaHJvd2FibGU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lKHJlc3VsdExpc3QpIHtcclxuICAgICAgICByZXR1cm4gY29tYmluZVJlc3VsdExpc3QocmVzdWx0TGlzdCk7XHJcbiAgICB9XHJcbiAgICBSZXN1bHQuY29tYmluZSA9IGNvbWJpbmU7XHJcbiAgICBmdW5jdGlvbiBjb21iaW5lV2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVSZXN1bHRMaXN0V2l0aEFsbEVycm9ycyhyZXN1bHRMaXN0KTtcclxuICAgIH1cclxuICAgIFJlc3VsdC5jb21iaW5lV2l0aEFsbEVycm9ycyA9IGNvbWJpbmVXaXRoQWxsRXJyb3JzO1xyXG59KShSZXN1bHQgfHwgKFJlc3VsdCA9IHt9KSk7XHJcbmNvbnN0IG9rID0gKHZhbHVlKSA9PiBuZXcgT2sodmFsdWUpO1xyXG5mdW5jdGlvbiBlcnIoZXJyKSB7XHJcbiAgICByZXR1cm4gbmV3IEVycihlcnIpO1xyXG59XHJcbmZ1bmN0aW9uIHNhZmVUcnkoYm9keSkge1xyXG4gICAgY29uc3QgbiA9IGJvZHkoKS5uZXh0KCk7XHJcbiAgICBpZiAobiBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFJlc3VsdEFzeW5jKG4udGhlbigocikgPT4gci52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG4udmFsdWU7XHJcbn1cclxuY2xhc3MgT2sge1xyXG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBpc09rKCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaXNFcnIoKSB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLmlzT2soKTtcclxuICAgIH1cclxuICAgIG1hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKGYodGhpcy52YWx1ZSkpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwRXJyKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRoZW4oZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIGFuZFRocm91Z2goZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMudmFsdWUpLm1hcCgoX3ZhbHVlKSA9PiB0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFuZFRlZShmKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZih0aGlzLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8gVGVlIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXJyb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9rKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcclxuICAgIG9yRWxzZShfZikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGFzeW5jQW5kVGhlbihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGYodGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xyXG4gICAgYXN5bmNBbmRUaHJvdWdoKGYpIHtcclxuICAgICAgICByZXR1cm4gZih0aGlzLnZhbHVlKS5tYXAoKCkgPT4gdGhpcy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBhc3luY01hcChmKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21TYWZlUHJvbWlzZShmKHRoaXMudmFsdWUpKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICAgIHVud3JhcE9yKF92KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBtYXRjaChvaywgX2Vycikge1xyXG4gICAgICAgIHJldHVybiBvayh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuICAgIHNhZmVVbndyYXAoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLXlpZWxkICovXHJcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiogKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoXykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgX3Vuc2FmZVVud3JhcEVycihjb25maWcpIHtcclxuICAgICAgICB0aHJvdyBjcmVhdGVOZXZlclRocm93RXJyb3IoJ0NhbGxlZCBgX3Vuc2FmZVVud3JhcEVycmAgb24gYW4gT2snLCB0aGlzLCBjb25maWcpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzLCByZXF1aXJlLXlpZWxkXHJcbiAgICAqW1N5bWJvbC5pdGVyYXRvcl0oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XHJcbiAgICB9XHJcbn1cclxuY2xhc3MgRXJyIHtcclxuICAgIGNvbnN0cnVjdG9yKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgaXNPaygpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpc0VycigpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNPaygpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgbWFwKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIG1hcEVycihmKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycihmKHRoaXMuZXJyb3IpKTtcclxuICAgIH1cclxuICAgIGFuZFRocm91Z2goX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYW5kVGVlKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBhbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycih0aGlzLmVycm9yKTtcclxuICAgIH1cclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXHJcbiAgICBvckVsc2UoZikge1xyXG4gICAgICAgIHJldHVybiBmKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNBbmRUaGVuKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBbmRUaHJvdWdoKF9mKSB7XHJcbiAgICAgICAgcmV0dXJuIGVyckFzeW5jKHRoaXMuZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgYXN5bmNNYXAoX2YpIHtcclxuICAgICAgICByZXR1cm4gZXJyQXN5bmModGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICB1bndyYXBPcih2KSB7XHJcbiAgICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcbiAgICBtYXRjaChfb2ssIGVycikge1xyXG4gICAgICAgIHJldHVybiBlcnIodGhpcy5lcnJvcik7XHJcbiAgICB9XHJcbiAgICBzYWZlVW53cmFwKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5lcnJvcjtcclxuICAgICAgICByZXR1cm4gKGZ1bmN0aW9uKiAoKSB7XHJcbiAgICAgICAgICAgIHlpZWxkIGVycihlcnJvcik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHVzZSB0aGlzIGdlbmVyYXRvciBvdXQgb2YgYHNhZmVUcnlgJyk7XHJcbiAgICAgICAgfSkoKTtcclxuICAgIH1cclxuICAgIF91bnNhZmVVbndyYXAoY29uZmlnKSB7XHJcbiAgICAgICAgdGhyb3cgY3JlYXRlTmV2ZXJUaHJvd0Vycm9yKCdDYWxsZWQgYF91bnNhZmVVbndyYXBgIG9uIGFuIEVycicsIHRoaXMsIGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBfdW5zYWZlVW53cmFwRXJyKF8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvcjtcclxuICAgIH1cclxuICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0tIFRoaXMgaXMgc3RydWN0dXJhbGx5IGVxdWl2YWxlbnQgYW5kIHNhZmVcclxuICAgICAgICB5aWVsZCBzZWxmO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLS0gVGhpcyBpcyBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudCBhbmQgc2FmZVxyXG4gICAgICAgIHJldHVybiBzZWxmO1xyXG4gICAgfVxyXG59XHJcbmNvbnN0IGZyb21UaHJvd2FibGUgPSBSZXN1bHQuZnJvbVRocm93YWJsZTtcclxuLy8jZW5kcmVnaW9uXG5cbmV4cG9ydCB7IEVyciwgT2ssIFJlc3VsdCwgUmVzdWx0QXN5bmMsIGVyciwgZXJyQXN5bmMsIGZyb21Bc3luY1Rocm93YWJsZSwgZnJvbVByb21pc2UsIGZyb21TYWZlUHJvbWlzZSwgZnJvbVRocm93YWJsZSwgb2ssIG9rQXN5bmMsIHNhZmVUcnkgfTtcbiIsICJ0eXBlIEpzb25hYmxlID1cbiAgfCBzdHJpbmdcbiAgfCBudW1iZXJcbiAgfCBib29sZWFuXG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZFxuICB8IHJlYWRvbmx5IEpzb25hYmxlW11cbiAgfCB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IEpzb25hYmxlIH1cbiAgfCB7IHRvSlNPTigpOiBKc29uYWJsZSB9O1xuXG5leHBvcnQgY2xhc3MgQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGV4dD86IEpzb25hYmxlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBjYXVzZT86IEVycm9yOyBjb250ZXh0PzogSnNvbmFibGUgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB7IGNhdXNlLCBjb250ZXh0IH0gPSBvcHRpb25zO1xuXG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgQmFzZUVycm9yIH0gZnJvbSBcIn4vZXJyb3IvYmFzZS1lcnJvci50c1wiO1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0RXJyb3IgZXh0ZW5kcyBCYXNlRXJyb3Ige31cbiIsICJpbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldENvbm5lY3Rpb25FcnJvciBleHRlbmRzIFdlYlNvY2tldEVycm9yIHtcbiAgb3ZlcnJpZGUgbWVzc2FnZSA9IFwiQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBXZWJTb2NrZXRcIjtcbn1cbiIsICJpbXBvcnQgeyBlcnJBc3luYywgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY29ubmVjdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgU2VydmVyRXJyb3IgfSBmcm9tIFwifi9lcnJvci9zZXJ2ZXItZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ29uZmlnIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1jb25maWcudHNcIjtcblxuLyoqXG4gKiBFbnN1cmUgYW4gZXJyb3IgbWVzc2FnZSBpcyB0cmFuc2Zvcm1lZCBpbiBhbiBFcnJvciBvYmplY3RcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbnN1cmVFcnJvciA9ICh2YWx1ZTogdW5rbm93bik6IEVycm9yID0+IHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRXJyb3IpIHJldHVybiB2YWx1ZTtcblxuICBsZXQgc3RyaW5naWZpZWQgPSBcIltVbmFibGUgdG8gc3RyaW5naWZ5IHRoZSB0aHJvd24gdmFsdWVdXCI7XG4gIHRyeSB7XG4gICAgc3RyaW5naWZpZWQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8qIGVtcHR5ICovXG4gIH1cblxuICByZXR1cm4gbmV3IEVycm9yKHN0cmluZ2lmaWVkKTtcbn07XG5cbi8qKlxuICogUmV0cmlldmUgTHVmaSdzIGNvbmZpZyBmcm9tIGl0cyBBUElcbiAqXG4gKiBAcGFyYW0gaW5zdGFuY2VVcmxcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZXRjaFNlcnZlckNvbmZpZyA9IChcbiAgaW5zdGFuY2VVcmw6IFVSTCxcbik6IFJlc3VsdEFzeW5jPFNlcnZlckNvbmZpZywgRXJyb3I+ID0+IHtcbiAgY29uc3Qgb3JpZ2luTWF0Y2hlcyA9IGluc3RhbmNlVXJsLmhyZWYubWF0Y2goXG4gICAgLyguKj8pXFwvPyg/OlxcL1tkcl17MX1cXC98bG9naW5cXC8/fGZpbGVzXFwvPykvLFxuICApO1xuXG4gIGNvbnN0IHVybE9yaWdpbiA9IG9yaWdpbk1hdGNoZXMgJiYgb3JpZ2luTWF0Y2hlc1sxXVxuICAgID8gb3JpZ2luTWF0Y2hlc1sxXVxuICAgIDogaW5zdGFuY2VVcmwub3JpZ2luO1xuXG4gIHJldHVybiBSZXN1bHRBc3luYy5mcm9tUHJvbWlzZShcbiAgICBmZXRjaCh1cmxPcmlnaW4gKyBcIi9hYm91dC9jb25maWdcIiksXG4gICAgKGVycm9yKSA9PlxuICAgICAgbmV3IENvbm5lY3Rpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgIH0pLFxuICApLmFuZFRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLm9rKSB7XG4gICAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICAgIHJlc3BvbnNlLmpzb24oKSxcbiAgICAgICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoXG4gICAgICAgIG5ldyBTZXJ2ZXJFcnJvcih1bmRlZmluZWQsIHsgY29udGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Rlbm9SdW50aW1lID0gKCk6IGJvb2xlYW4gPT4gdHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1NlY3VyZUNvbnRleHQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKCkgfHwgZ2xvYmFsVGhpcy5pc1NlY3VyZUNvbnRleHQgfHxcbiAgICBnbG9iYWxUaGlzLmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiO1xufTtcblxuZXhwb3J0IGNvbnN0IHdvcmtlclVybCA9IChyZWxhdGl2ZVBhdGg6IHN0cmluZyk6IFVSTCA9PiB7XG4gIHJldHVybiBpc0Rlbm9SdW50aW1lKClcbiAgICA/IG5ldyBVUkwoYC4vd29ya2VyLyR7cmVsYXRpdmVQYXRofS50c2AsIG5ldyBVUkwoXCIuXCIsIGltcG9ydC5tZXRhLnVybCkuaHJlZilcbiAgICA6IG5ldyBVUkwoXG4gICAgICBpbXBvcnQubWV0YS5yZXNvbHZlKFxuICAgICAgICBgLi8ke1xuICAgICAgICAgIHJlbGF0aXZlUGF0aCAhPT0gXCJlbmNyeXB0XCIgPyBgd29ya2VyLyR7cmVsYXRpdmVQYXRofWAgOiByZWxhdGl2ZVBhdGhcbiAgICAgICAgfS5qc2AsXG4gICAgICApLFxuICAgICk7XG59O1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgImltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcbmltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgc2pjbCBmcm9tIFwibHVmaS1zamNsXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHsgRGVjcnlwdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2RlY3J5cHRpb24tZXJyb3IudHNcIjtcbmltcG9ydCB7IEVuY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9lbmNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyB0eXBlIEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB7IGVuc3VyZUVycm9yIH0gZnJvbSBcIn4vdXRpbHMudHNcIjtcbmltcG9ydCB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9yIGEgc3RyaW5nIHVzaW5nIHRoZSBrZXkgdXNlZCBmb3IgZW5jcnlwdGlvbi5cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRlY3J5cHQgPSAoXG4gIGtleTogc3RyaW5nLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhIHwgc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8QXJyYXlCdWZmZXIsIERlY3J5cHRpb25FcnJvcj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgZW5jcnlwdGVkRGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBlbmNyeXB0ZWREYXRhXG4gICAgICA6IChlbmNyeXB0ZWREYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIG9rQXN5bmMoYjY0ZGVjb2RlKHNqY2wuZGVjcnlwdChrZXksIGRhdGEpKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IERlY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEVuY3J5cHQgYW4gQXJyYXlCdWZmZXIgaW50byBhbiBFbmNyeXB0ZWREYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBrZXlcbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEFycmF5QnVmZmVyLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW5jcnlwdGVkID0gc2pjbC5lbmNyeXB0KGtleSwgYjY0ZW5jb2RlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gb2tBc3luYyh7XG4gICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uU2pjbCxcbiAgICAgIGRhdGE6IGVuY3J5cHRlZCxcbiAgICAgIGl2OiBKU09OLnBhcnNlKGVuY3J5cHRlZCBhcyB1bmtub3duIGFzIHN0cmluZykuaXYsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBTamNsIEFQSVxuICpcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9ICgpOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5iYXNlNjQuZnJvbUJpdHMoc2pjbC5yYW5kb20ucmFuZG9tV29yZHMoOCwgMTApKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVyckFzeW5jKFxuICAgICAgbmV3IENyeXB0b0Vycm9yKFwiVW5hYmxlIHRvIGdlbmVyYXRlIGtleVwiLCB7XG4gICAgICAgIGNhdXNlOiBlbnN1cmVFcnJvcihlcnJvciksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59O1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyBTamNsIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9rQXN5bmMoc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoc2pjbC5oYXNoLnNoYTUxMi5oYXNoKHBhc3N3b3JkKSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJBc3luYyhuZXcgSGFzaGluZ0Vycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pKTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlY3QgaWYgdGhlIGtleSBoYXMgYmVlbiBnZW5lcmF0ZWQgYnkgU2pjbC4gU2luY2Ugd2UncmUgbm90IGdlbmVyYXRpbmcgYW4gZXF1YWwgc3ltYm9sIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBXZWJDcnlwdG8gQVBJIChieSB1c2luZyBiYXNlNjR1cmwpLCBpdCdzIGVhc3kgdG8gZGV0ZWN0XG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2pjbEtleSA9IChrZXk6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4ga2V5W2tleS5sZW5ndGggLSAxXSA9PT0gXCI9XCI7XG59O1xuIiwgImltcG9ydCB7IEJhc2VFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2Jhc2UtZXJyb3IudHNcIjtcblxuZXhwb3J0IGNsYXNzIENyeXB0b0Vycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBEZWNyeXB0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gIG92ZXJyaWRlIG1lc3NhZ2U6IHN0cmluZyA9IFwiVW5hYmxlIHRvIGRlY3J5cHQgdGhlIHByb3ZpZGVkIGRhdGFcIjtcbn1cbiIsICJpbXBvcnQge1xuICBEZWNvZGUgYXMgYjY0dXJsZGVjb2RlLFxuICBFbmNvZGUgYXMgYjY0dXJsZW5jb2RlLFxufSBmcm9tIFwiYXJyYXlidWZmZXItZW5jb2RpbmcvYmFzZTY0L3VybFwiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgeyBDcnlwdG9BbGdvcml0aG0gfSBmcm9tIFwifi9lbnVtL2NyeXB0by1hbGdvcml0aG0udHNcIjtcbmltcG9ydCB7IERlY3J5cHRpb25FcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9kZWNyeXB0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBlbnN1cmVFcnJvciB9IGZyb20gXCJ+L3V0aWxzLnRzXCI7XG5pbXBvcnQgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgQ3J5cHRvRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vY3J5cHRvLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBIYXNoaW5nRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vaGFzaGluZy1lcnJvci50c1wiO1xuXG4vKipcbiAqIERlY3J5cHQgYW4gZW5jcnlwdGVkRGF0YSB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gZW5jcnlwdGVkXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZGVjcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIGVuY3J5cHRlZDogRW5jcnlwdGVkRGF0YSxcbik6IFJlc3VsdEFzeW5jPEFycmF5QnVmZmVyLCBEZWNyeXB0aW9uRXJyb3I+ID0+IHtcbiAgcmV0dXJuIGltcG9ydEtleShrZXkpLmFuZFRoZW4oKGltcG9ydGVkS2V5KSA9PlxuICAgIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgICAgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICAgICAgaXY6IGVuY3J5cHRlZC5pdiBhcyBVaW50OEFycmF5LFxuICAgICAgICB9LFxuICAgICAgICBpbXBvcnRlZEtleSxcbiAgICAgICAgZW5jcnlwdGVkLmRhdGEgYXMgQXJyYXlCdWZmZXIsXG4gICAgICApLFxuICAgICAgKGVycm9yKSA9PiBuZXcgRGVjcnlwdGlvbkVycm9yKHVuZGVmaW5lZCwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICAgIClcbiAgKTtcbn07XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciBpbnRvIGFuIEVuY3J5cHRlZERhdGEgdXNpbmcgdGhlIHByb3ZpZGVkIGtleVxuICogQHBhcmFtIGtleVxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbik6IFJlc3VsdEFzeW5jPEVuY3J5cHRlZERhdGEsIEVuY3J5cHRpb25FcnJvcj4gPT4ge1xuICByZXR1cm4gaW1wb3J0S2V5KGtleSkuYW5kVGhlbigoaW1wb3J0ZWRLZXkpID0+IHtcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKTtcbiAgICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgICBjcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgICAgICBpdixcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRLZXksXG4gICAgICAgIHZhbHVlLFxuICAgICAgKSxcbiAgICAgIChlcnJvcikgPT5cbiAgICAgICAgbmV3IEVuY3J5cHRpb25FcnJvcih1bmRlZmluZWQsIHtcbiAgICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KSxcbiAgICApLmFuZFRoZW4oKGVuY3J5cHRlZCkgPT4ge1xuICAgICAgcmV0dXJuIG9rQXN5bmMoe1xuICAgICAgICBhbGdvOiBDcnlwdG9BbGdvcml0aG0uV2ViQ3J5cHRvLFxuICAgICAgICBkYXRhOiBlbmNyeXB0ZWQsXG4gICAgICAgIGl2LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gYSBzdHJpbmcgaW50byBhIENyeXB0b0tleSwgdXNhYmxlIGluIFdlYiBDcnlwdG8gQVBJXG4gKlxuICogQHBhcmFtIGtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGltcG9ydEtleSA9IChrZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPENyeXB0b0tleSwgQ3J5cHRvRXJyb3I+ID0+IHtcbiAgcmV0dXJuIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgXCJyYXdcIixcbiAgICAgIGI2NHVybGRlY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiBcIkFFUy1HQ01cIiB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbXG4gICAgICAgIFwiZW5jcnlwdFwiLFxuICAgICAgICBcImRlY3J5cHRcIixcbiAgICAgIF0sXG4gICAgKSxcbiAgICAoZXJyb3IpID0+XG4gICAgICBuZXcgQ3J5cHRvRXJyb3IoXCJVbmFibGUgdG8gaW1wb3J0IGNyeXB0b2dyYXBoeSBrZXlcIiwge1xuICAgICAgICBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSksXG4gICk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgcmFuZG9tIHN0cmluZyB1c2luZyBXZWIgQ3J5cHRvIEFQSS5cbiAqXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVLZXkgPSAoKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBDcnlwdG9FcnJvcj4gPT4ge1xuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgIGNyeXB0by5zdWJ0bGVcbiAgICAgICAgLmdlbmVyYXRlS2V5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgICAgICAgbGVuZ3RoOiAyNTYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdLFxuICAgICAgICApXG4gICAgICAgIC50aGVuKChnZW5lcmF0ZWRLZXkpID0+XG4gICAgICAgICAgY3J5cHRvLnN1YnRsZVxuICAgICAgICAgICAgLmV4cG9ydEtleShcInJhd1wiLCBnZW5lcmF0ZWRLZXkpXG4gICAgICAgICAgICAudGhlbigoa2V5KSA9PiByZXNvbHZlKGI2NHVybGVuY29kZShrZXkpKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KFxuICAgICAgICAgICAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBiYXNlNjQgZW5jb2RlIHRoZSB1cmxcIiwge1xuICAgICAgICAgICAgICAgICAgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4gcmVqZWN0KGVycm9yKSlcbiAgICApLFxuICAgIChlcnJvcikgPT5cbiAgICAgIG5ldyBDcnlwdG9FcnJvcihcIlVuYWJsZSB0byBnZW5lcmF0ZSBrZXlcIiwgeyBjYXVzZTogZW5zdXJlRXJyb3IoZXJyb3IpIH0pLFxuICApO1xufTtcblxuLyoqXG4gKiBIYXNoIGEgcGFzc3dvcmQgdXNpbmcgV2ViQ3J5cHRvIEFQSVxuICpcbiAqIEBwYXJhbSBwYXNzd29yZFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHN0cmluZywgSGFzaGluZ0Vycm9yPiA9PiB7XG4gIGNvbnN0IHByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBuZXcgVWludDhBcnJheShcbiAgICAgICAgYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXG4gICAgICAgICAgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcbiAgICAgICAgKSxcbiAgICAgICksXG4gICAgKS5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSkuam9pbihcIlwiKTtcbiAgfTtcblxuICByZXR1cm4gUmVzdWx0QXN5bmMuZnJvbVByb21pc2UoXG4gICAgcHJvbWlzZSgpLFxuICAgIChlcnJvcikgPT4gbmV3IEhhc2hpbmdFcnJvcih1bmRlZmluZWQsIHsgY2F1c2U6IGVuc3VyZUVycm9yKGVycm9yKSB9KSxcbiAgKTtcbn07XG4iLCAiaW1wb3J0IHsgQ3J5cHRvQWxnb3JpdGhtIH0gZnJvbSBcIn4vZW51bS9jcnlwdG8tYWxnb3JpdGhtLnRzXCI7XG5pbXBvcnQgeyBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgdHlwZSB7IENyeXB0b0Vycm9yIH0gZnJvbSBcIn4vZXJyb3IvY3J5cHRvL2NyeXB0by1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBEZWNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZGVjcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHR5cGUgeyBFbmNyeXB0aW9uRXJyb3IgfSBmcm9tIFwifi9lcnJvci9jcnlwdG8vZW5jcnlwdGlvbi1lcnJvci50c1wiO1xuaW1wb3J0IHsgdHlwZSBFbmNyeXB0ZWREYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL2VuY3J5cHRlZC1kYXRhLnRzXCI7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gXCJ+L2FwaS9jcnlwdG8vc2pjbC50c1wiO1xuaW1wb3J0ICogYXMgd2ViIGZyb20gXCJ+L2FwaS9jcnlwdG8vd2ViLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEhhc2hpbmdFcnJvciB9IGZyb20gXCJ+L2Vycm9yL2NyeXB0by9oYXNoaW5nLWVycm9yLnRzXCI7XG5cbi8qKlxuICogRGVjcnlwdCBhbiBFbmNyeXB0ZWREYXRhIG9iamVjdCB1c2luZyB0aGUga2V5IHVzZWQgZm9yIGVuY3J5cHRpb25cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBkZWNyeXB0ID0gKFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IEVuY3J5cHRlZERhdGEsXG4pOiBSZXN1bHRBc3luYzxBcnJheUJ1ZmZlciwgRGVjcnlwdGlvbkVycm9yPiA9PlxuICB2YWx1ZS5hbGdvID09PSB1bmRlZmluZWQgfHwgdmFsdWUuYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2xcbiAgICA/IHNqY2wuZGVjcnlwdChrZXksIHZhbHVlKVxuICAgIDogd2ViLmRlY3J5cHQoa2V5LCB2YWx1ZSk7XG5cbi8qKlxuICogRW5jcnlwdCBhbiBBcnJheUJ1ZmZlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5IGFuZCBhbGdvcml0aG1cbiAqXG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gdmFsdWVcbiAqIEBwYXJhbSBhbGdvXG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3QgZW5jcnlwdCA9IChcbiAga2V5OiBzdHJpbmcsXG4gIHZhbHVlOiBBcnJheUJ1ZmZlcixcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8RW5jcnlwdGVkRGF0YSwgRW5jcnlwdGlvbkVycm9yPiA9PlxuICAoYWxnbyA9PT0gQ3J5cHRvQWxnb3JpdGhtLlNqY2wpXG4gICAgPyBzamNsLmVuY3J5cHQoa2V5LCB2YWx1ZSlcbiAgICA6IHdlYi5lbmNyeXB0KGtleSwgdmFsdWUpO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IGtleSBmb3IgZW5jcnlwdGlvbi9kZWNyeXB0aW9uXG4gKlxuICogQHBhcmFtIGFsZ29cbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUtleSA9IChcbiAgYWxnbyA9IENyeXB0b0FsZ29yaXRobS5XZWJDcnlwdG8sXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIENyeXB0b0Vycm9yPiA9PlxuICBhbGdvID09PSBDcnlwdG9BbGdvcml0aG0uU2pjbCA/IHNqY2wuZ2VuZXJhdGVLZXkoKSA6IHdlYi5nZW5lcmF0ZUtleSgpO1xuXG4vKipcbiAqIEhhc2ggYSBwYXNzd29yZCB1c2luZyB0aGUgcHJvdmlkZWQgYWxnb3JpdGhtXG4gKlxuICogQHBhcmFtIHBhc3N3b3JkXG4gKiBAcGFyYW0gYWxnb1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc2hQYXNzd29yZCA9IChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgYWxnbzogQ3J5cHRvQWxnb3JpdGhtLFxuKTogUmVzdWx0QXN5bmM8c3RyaW5nLCBIYXNoaW5nRXJyb3I+ID0+XG4gIGFsZ28gPT09IENyeXB0b0FsZ29yaXRobS5TamNsXG4gICAgPyBzamNsLmhhc2hQYXNzd29yZChwYXNzd29yZClcbiAgICA6IHdlYi5oYXNoUGFzc3dvcmQocGFzc3dvcmQpO1xuIiwgImltcG9ydCB7IGVyckFzeW5jLCBva0FzeW5jLCBSZXN1bHRBc3luYyB9IGZyb20gXCJuZXZlcnRocm93XCI7XG5pbXBvcnQgeyBMdWZpRmlsZSB9IGZyb20gXCJ+L2VudGl0aWVzL2x1ZmktZmlsZS50c1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBVUExPQURfU1RBVFVTIH0gZnJvbSBcIn4vZW51bS9maWxlLXN0YXR1cy50c1wiO1xuaW1wb3J0IHsgU29ja2V0UGF0aCB9IGZyb20gXCJ+L2VudW0vc29ja2V0LXBhdGgudHNcIjtcbmltcG9ydCB7IFVwbG9hZEVycm9yIH0gZnJvbSBcIn4vZXJyb3IvdXBsb2FkL3VwbG9hZC1lcnJvci50c1wiO1xuaW1wb3J0IHsgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIH0gZnJvbSBcIn4vZXJyb3Ivd2Vic29ja2V0L3dlYnNvY2tldC1jb25uZWN0aW9uLWVycm9yLnRzXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcbmltcG9ydCB0eXBlIHsgQ2xpZW50VXBsb2FkQ2h1bmtNZXRhZGF0YSB9IGZyb20gXCJ+L2ludGVyZmFjZS9jbGllbnQtdXBsb2FkLWNodW5rLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEVuY3J5cHRlZERhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2UvZW5jcnlwdGVkLWRhdGEudHNcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyQ2FuY2VsTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLWNhbmNlbC1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIH0gZnJvbSBcIn4vaW50ZXJmYWNlL3NlcnZlci1kb3dubG9hZC1jaHVuay1zdWNjZXNzLW1ldGFkYXRhLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi9pbnRlcmZhY2Uvc2VydmVyLXVwbG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGEgfSBmcm9tIFwifi90eXBlL3NlcnZlci1kb3dubG9hZC1jaHVuay1tZXRhZGF0YS50c1wiO1xuaW1wb3J0IHsgZW5zdXJlRXJyb3IgfSBmcm9tIFwifi91dGlscy50c1wiO1xuaW1wb3J0IHsgZXZlbnRzLCB1cGRhdGVGaWxlIH0gZnJvbSBcIn4vd29ya2VyL3NoYXJlZC50c1wiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJ+L2FwaS9jcnlwdG8udHNcIjtcbmltcG9ydCB7XG4gIERlY29kZSBhcyBiNjRkZWNvZGUsXG4gIEVuY29kZSBhcyBiNjRlbmNvZGUsXG59IGZyb20gXCJhcnJheWJ1ZmZlci1lbmNvZGluZy9iYXNlNjRcIjtcblxuZXhwb3J0IGNvbnN0IHNvY2tldHM6IHtcbiAgW2tleTogc3RyaW5nXTogV2ViU29ja2V0O1xufSA9IHt9O1xuXG5jb25zdCBNQVhfRVJST1JTID0gNTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBjYW5jZWwgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSBkYXRhXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbkNhbmNlbE1lc3NhZ2UgPSAoXG4gIGRhdGE6IFNlcnZlckNhbmNlbE1ldGFkYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgRXJyb3I+ID0+IHtcbiAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NBTkNFTExFRCwgZGF0YS5zdWNjZXNzKTtcblxuICByZXR1cm4gb2tBc3luYyh1bmRlZmluZWQpO1xufTtcblxuLyoqXG4gKiBIYW5kbGUgV2ViU29ja2V0IHJlc3BvbnNlIGZvciBkb3dubG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uRG93bmxvYWRNZXNzYWdlID0gKFxuICByZXNwb25zZTogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBjb25zdCByZXN1bHQgPSByZXNwb25zZS5zcGxpdChcIlhYTU9KT1hYXCIpO1xuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gIGlmIChtZXRhZGF0YVN0cmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhU3RyaW5nKSBhcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGE7XG5cbiAgICBpZiAoaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhKG1ldGFkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVN0cmluZyA9IHJlc3VsdC5zaGlmdCgpO1xuXG4gICAgICBpZiAoZGF0YVN0cmluZykge1xuICAgICAgICBjb25zdCBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyaW5nKTtcblxuICAgICAgICAvLyBJZiBmaWxlIHdhcyB1cGxvYWRlZCB1c2luZyBMdWZpIEFQSVxuICAgICAgICBpZiAoZW5jcnlwdGVkRGF0YS5pdikge1xuICAgICAgICAgIGVuY3J5cHRlZERhdGEuaXYgPSBuZXcgVWludDhBcnJheShPYmplY3QudmFsdWVzKGVuY3J5cHRlZERhdGEuaXYpKTtcbiAgICAgICAgICBlbmNyeXB0ZWREYXRhLmRhdGEgPSBiNjRkZWNvZGUoZW5jcnlwdGVkRGF0YS5kYXRhIGFzIHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3J5cHRvLmRlY3J5cHQobHVmaUZpbGUua2V5cy5jbGllbnQsIGVuY3J5cHRlZERhdGEpLmFuZFRoZW4oXG4gICAgICAgICAgKGRlY3J5cHRlZFBhcnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBkZWNyeXB0ZWRQYXJ0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgID8gKG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkZWNyeXB0ZWRQYXJ0KS5idWZmZXIgYXMgQXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIDogZGVjcnlwdGVkUGFydDtcblxuICAgICAgICAgICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICAgICAgICAgIGlmIChtZXRhZGF0YS5wYXJ0ID09PSAwKSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgICAgICAgICAgICBjaHVua3NSZWFkeTogbHVmaUZpbGUuY2h1bmtzUmVhZHkgKyAxLFxuICAgICAgICAgICAgICAgIGRlbEF0Rmlyc3RWaWV3OiBtZXRhZGF0YS5kZWxfYXRfZmlyc3RfdmlldyxcbiAgICAgICAgICAgICAgICBkZWxheTogbWV0YWRhdGEuZGVsYXksXG4gICAgICAgICAgICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSxcbiAgICAgICAgICAgICAgICBzaXplOiBtZXRhZGF0YS5zaXplLFxuICAgICAgICAgICAgICAgIHRvdGFsQ2h1bmtzOiBtZXRhZGF0YS50b3RhbCxcbiAgICAgICAgICAgICAgICB0eXBlOiBtZXRhZGF0YS50eXBlLFxuICAgICAgICAgICAgICAgIHppcHBlZDogbWV0YWRhdGEuemlwcGVkLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5ET1dOTE9BRF9TVEFSVEVEKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHsgY2h1bmtzUmVhZHk6IGx1ZmlGaWxlLmNodW5rc1JlYWR5ICsgMSB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuQ0hVTktfRE9XTkxPQURFRCwgYnVmZmVyLCBtZXRhZGF0YS5wYXJ0KTtcblxuICAgICAgICAgICAgaWYgKGx1ZmlGaWxlLmNodW5rc1JlYWR5ID09PSBtZXRhZGF0YS50b3RhbCkge1xuICAgICAgICAgICAgICByZXR1cm4gZW5kRG93bmxvYWQobHVmaUZpbGUpLmFuZFRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULkRPV05MT0FEX0NPTVBMRVRFKTtcbiAgICAgICAgICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT1BFUkFUSU9OX1RFUk1JTkFURUQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IFdlYlNvY2tldEVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgICAgICk7XG5cbiAgICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihtZXRhZGF0YS5tc2cpO1xuXG4gICAgICBldmVudHMuZW1pdChFVkVOVC5PUEVSQVRJT05fRkFJTEVELCBlcnJvcik7XG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihcbiAgICAgIFwiQ2Fubm90IHJldHJpZXZlIG1ldGFkYXRhIGZyb20gZGF0YSByZWNlaXZlZCBieSB0aGUgc2VydmVyXCIsXG4gICAgKTtcblxuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcbiAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICB9XG59O1xuXG4vKipcbiAqIEhhbmRsZSBXZWJTb2NrZXQgcmVzcG9uc2UgZm9yIHVwbG9hZCByZXF1ZXN0XG4gKlxuICogQHBhcmFtIHJlc3BvbnNlXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IG9uVXBsb2FkTWVzc2FnZSA9IChcbiAgcmVzcG9uc2U6IFNlcnZlclVwbG9hZENodW5rTWV0YWRhdGEsXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFVwbG9hZEVycm9yPiA9PiB7XG4gIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgLy8gSWYgZmlyc3QgY2h1bmtcbiAgICBpZiAocmVzcG9uc2UuaiA9PT0gMCkge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBVcGxvYWQgb2YgJHtsdWZpRmlsZS5rZXlzLmNsaWVudH0gc3RhcnRlZGApO1xuXG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7XG4gICAgICAgIGtleXM6IHsgY2xpZW50OiBsdWZpRmlsZS5rZXlzLmNsaWVudCwgc2VydmVyOiByZXNwb25zZS5zaG9ydCB9LFxuICAgICAgICBhY3Rpb25Ub2tlbjogcmVzcG9uc2UudG9rZW4sXG4gICAgICAgIHF1ZXVlSW5kZXg6IHJlc3BvbnNlLmksXG4gICAgICB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX1NUQVJURUQpO1xuICAgIH1cblxuICAgIHVwZGF0ZUZpbGUobHVmaUZpbGUsIHtcbiAgICAgIGNodW5rc1JlYWR5OiBsdWZpRmlsZS5jaHVua3NSZWFkeSArIDEsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRfYXQsXG4gICAgfSk7XG5cbiAgICBldmVudHMuZW1pdChFVkVOVC5DSFVOS19VUExPQURFRCk7XG5cbiAgICBpZiAobHVmaUZpbGUuY2h1bmtzUmVhZHkgPT09IGx1ZmlGaWxlLnRvdGFsQ2h1bmtzKSB7XG4gICAgICB1cGRhdGVGaWxlKGx1ZmlGaWxlLCB7IHVwbG9hZFN0YXR1czogVVBMT0FEX1NUQVRVUy5DT01QTEVURSB9KTtcblxuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuVVBMT0FEX0NPTVBMRVRFKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9rQXN5bmModW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBXZWJTb2NrZXRFcnJvcihyZXNwb25zZS5tc2cpO1xuICAgIGV2ZW50cy5lbWl0KEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsIGVycm9yKTtcblxuICAgIHJldHVybiBlcnJBc3luYyhlcnJvcik7XG4gIH1cbn07XG5cbi8qKlxuICogQ2FsbGVkIG9uIHNvY2tldHMgXCJvbm1lc3NhZ2VcIiBldmVudFxuICpcbiAqIEBwYXJhbSBlXG4gKiBAcGFyYW0gc29ja2V0VXJsXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBvbk1lc3NhZ2UgPSAoXG4gIGU6IE1lc3NhZ2VFdmVudCxcbiAgbHVmaUZpbGU6IEx1ZmlGaWxlLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgVXBsb2FkRXJyb3I+ID0+IHtcbiAgY29uc3QgZGF0YSA9IHRyeVBhcnNlSnNvbihlLmRhdGEpO1xuICBsZXQgY2FsbGJhY2s7XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBpZiAoIWRhdGEuYWN0aW9uICYmIGRhdGEubXNnKSB7XG4gICAgICAvLyBJZiBlcnJvclxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgV2ViU29ja2V0RXJyb3IoZGF0YS5tc2cpO1xuICAgICAgZXZlbnRzLmVtaXQoRVZFTlQuT1BFUkFUSU9OX0ZBSUxFRCwgZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZXJyQXN5bmMoZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXCJkZWxheVwiIGluIGRhdGEpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvblVwbG9hZE1lc3NhZ2UoZGF0YSwgbHVmaUZpbGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvbkNhbmNlbE1lc3NhZ2UoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrID0gb25Eb3dubG9hZE1lc3NhZ2UoZS5kYXRhLCBsdWZpRmlsZSk7XG4gIH1cblxuICByZXR1cm4gY2FsbGJhY2s7XG59O1xuXG4vKipcbiAqIElzIHNvY2tldCBjb25uZWN0aW5nP1xuICpcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Nvbm5lY3RpbmcgPSAoc29ja2V0S2V5OiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHNvY2tldHMgIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0gIT09IHVuZGVmaW5lZCAmJlxuICBzb2NrZXRzW3NvY2tldEtleV0ucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNPTk5FQ1RJTkc7XG5cbi8qKlxuICogSXMgc29ja2V0IHNwYXduZWQ/XG4gKlxuICogQHBhcmFtIHNvY2tldEtleVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU3Bhd25lZCA9IChzb2NrZXRLZXk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgc29ja2V0cyAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XSAhPT0gdW5kZWZpbmVkICYmXG4gIHNvY2tldHNbc29ja2V0S2V5XS5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTjtcblxuLyoqXG4gKiBBc2sgV2ViU29ja2V0IHRvIGNhbmNlbCBhbiB1cGxvYWRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjYW5jZWxVcGxvYWQgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICB1cGxvYWRTb2NrZXRVcmwobHVmaUZpbGUpLFxuICAgIGx1ZmlGaWxlLFxuICAgIGAke1xuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBpZDogbHVmaUZpbGUua2V5cy5zZXJ2ZXIsXG4gICAgICAgIG1vZF90b2tlbjogbHVmaUZpbGUuYWN0aW9uVG9rZW4sXG4gICAgICAgIGNhbmNlbDogdHJ1ZSxcbiAgICAgICAgaTogbHVmaUZpbGUucXVldWVJbmRleCxcbiAgICAgIH0pXG4gICAgfVhYTU9KT1hYdXNlbGVzc2AsXG4gICk7XG59O1xuXG4vKipcbiAqIERvd25sb2FkIGEgcGFydCBvZiB0aGUgZmlsZSB0aHJvdWdoIHRoZSBXZWJTb2NrZXRcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEBwYXJhbSBjaHVua051bWJlclxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkQ2h1bmsgPSAoXG4gIGx1ZmlGaWxlOiBMdWZpRmlsZSxcbiAgY2h1bmtOdW1iZXI6IG51bWJlcixcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGxldCBtZXNzYWdlO1xuXG4gIGlmIChsdWZpRmlsZS5wYXNzd29yZCkge1xuICAgIG1lc3NhZ2UgPSB7IHBhcnQ6IGNodW5rTnVtYmVyLCBmaWxlX3B3ZDogbHVmaUZpbGUucGFzc3dvcmQgfTtcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0geyBwYXJ0OiBjaHVua051bWJlciB9O1xuICB9XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIGRvd25sb2FkU29ja2V0VXJsKGx1ZmlGaWxlKSxcbiAgICBsdWZpRmlsZSxcbiAgICBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSxcbiAgKTtcbn07XG5cbi8qKlxuICogVGVsbCB0aGUgV2ViU29ja2V0IHRoZSBkb3dubG9hZCBlbmRlZFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGVuZERvd25sb2FkID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4pOiBSZXN1bHRBc3luYzx2b2lkLCBXZWJTb2NrZXRFcnJvcj4gPT4ge1xuICBsZXQgbWVzc2FnZTogeyBlbmRlZDogdHJ1ZTsgZmlsZV9wd2Q/OiBzdHJpbmcgfTtcblxuICBpZiAobHVmaUZpbGUucGFzc3dvcmQpIHtcbiAgICBtZXNzYWdlID0geyBlbmRlZDogdHJ1ZSwgZmlsZV9wd2Q6IGx1ZmlGaWxlLnBhc3N3b3JkIH07XG4gIH0gZWxzZSB7XG4gICAgbWVzc2FnZSA9IHsgZW5kZWQ6IHRydWUgfTtcbiAgfVxuXG4gIHJldHVybiBzZW5kTWVzc2FnZShcbiAgICBkb3dubG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgSlNPTi5zdHJpbmdpZnkobWVzc2FnZSksXG4gICk7XG59O1xuXG4vKipcbiAqIFVwbG9hZCBhIGNodW5rIG9mIHRoZSBmaWxlIHRocm91Z2ggdGhlIFdlYlNvY2tldFxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHBhcmFtIG1ldGFkYXRhXG4gKiBAcGFyYW0gZW5jcnlwdGVkRGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHVwbG9hZENodW5rID0gKFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1ldGFkYXRhOiBDbGllbnRVcGxvYWRDaHVua01ldGFkYXRhLFxuICBlbmNyeXB0ZWREYXRhOiBFbmNyeXB0ZWREYXRhLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+IHtcbiAgZW5jcnlwdGVkRGF0YS5kYXRhID0gYjY0ZW5jb2RlKGVuY3J5cHRlZERhdGEuZGF0YSBhcyBBcnJheUJ1ZmZlcik7XG5cbiAgcmV0dXJuIHNlbmRNZXNzYWdlKFxuICAgIHVwbG9hZFNvY2tldFVybChsdWZpRmlsZSksXG4gICAgbHVmaUZpbGUsXG4gICAgYCR7SlNPTi5zdHJpbmdpZnkobWV0YWRhdGEpfVhYTU9KT1hYJHtKU09OLnN0cmluZ2lmeShlbmNyeXB0ZWREYXRhKX1gLFxuICApO1xufTtcblxuLyoqXG4gKiBTZW5kIGEgbWVzc2FnZSB0byB0aGUgV2ViU29ja2V0XG4gKlxuICogQHBhcmFtIHNvY2tldFVybFxuICogQHBhcmFtIG1lc3NhZ2VcbiAqIEBwYXJhbSBoYXNQcmlvcml0eVxuICogQHJldHVybnNcbiAqL1xuY29uc3Qgc2VuZE1lc3NhZ2UgPSAoXG4gIHNvY2tldFVybDogc3RyaW5nLFxuICBsdWZpRmlsZTogTHVmaUZpbGUsXG4gIG1lc3NhZ2U6IHN0cmluZyxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldFVybCkpIHtcbiAgICByZXR1cm4gc3Bhd24oc29ja2V0VXJsKS5hbmRUaGVuKCgpID0+IHtcbiAgICAgIHNvY2tldHNbc29ja2V0VXJsXS5vbm1lc3NhZ2UgPSAoZSkgPT4gb25NZXNzYWdlKGUsIGx1ZmlGaWxlKTtcbiAgICAgIHJldHVybiBzZW5kTWVzc2FnZShzb2NrZXRVcmwsIGx1ZmlGaWxlLCBtZXNzYWdlKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBzb2NrZXRzW3NvY2tldFVybF0uc2VuZChtZXNzYWdlKTtcblxuICAgIHJldHVybiBva0FzeW5jKHVuZGVmaW5lZCk7XG4gIH1cbn07XG5cbi8qKlxuICogU3Bhd24gYSBuZXcgV2ViU29ja2V0IG9yIHJldXNlIGFuIGV4aXN0aW5nIG9uZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcGFyYW0gZXJyb3JDb3VudFxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IHNwYXduID0gKFxuICBzb2NrZXRLZXk6IHN0cmluZyxcbiAgZXJyb3JDb3VudCA9IDAsXG4pOiBSZXN1bHRBc3luYzxzdHJpbmcsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkgJiYgIWlzQ29ubmVjdGluZyhzb2NrZXRLZXkpKSB7XG4gICAgLy8gY29uc29sZS5pbmZvKGBTcGF3bmluZyBXZWJTb2NrZXQgJHtzb2NrZXRVcmx9YCk7XG4gICAgc29ja2V0c1tzb2NrZXRLZXldID0gbmV3IFdlYlNvY2tldChzb2NrZXRLZXkpO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRVJBVElPTl9URVJNSU5BVEVELCAoKSA9PiB7XG4gICAgICBzb2NrZXRzW3NvY2tldEtleV0uY2xvc2UoKTtcbiAgICB9KTtcblxuICAgIGV2ZW50cy5vbmNlKEVWRU5ULk9QRVJBVElPTl9GQUlMRUQsICgpID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVSQVRJT05fVEVSTUlOQVRFRCk7XG4gICAgfSk7XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25vcGVuID0gKCkgPT4ge1xuICAgICAgLy8gY29uc29sZS5pbmZvKGBXZWJzb2NrZXQgJHtzb2NrZXRLZXl9IGhhcyBiZWVuIG9wZW5gKTtcbiAgICAgIGV2ZW50cy5lbWl0KEVWRU5ULlNPQ0tFVF9PUEVORUQpO1xuICAgIH07XG5cbiAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUuaW5mbyhgV2Vic29ja2V0ICR7c29ja2V0S2V5fSBoYXMgYmVlbiBjbG9zZWRgKTtcbiAgICB9O1xuXG4gICAgc29ja2V0c1tzb2NrZXRLZXldLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBpZiAoKytlcnJvckNvdW50IDw9IE1BWF9FUlJPUlMpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgQW4gZXJyb3IgaGFwcGVuZWQgd2hpbGUgdHJ5aW5nIHRvIGNvbm5lY3QgdG8gV2ViU29ja2V0ICR7c29ja2V0S2V5fS4gVHJ5aW5nIGFnYWluLiAke2Vycm9yQ291bnR9IC8gJHtNQVhfRVJST1JTfWAsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHNwYXduKHNvY2tldEtleSwgZXJyb3JDb3VudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudHMuZW1pdChFVkVOVC5TT0NLRVRfT05FUlJPUik7XG4gICAgICAgIHJldHVybiBlcnJBc3luYyhcbiAgICAgICAgICBuZXcgV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yKFxuICAgICAgICAgICAgYFVuYWJsZSB0byBjb25uZWN0IHRvIFdlYlNvY2tldCAke3NvY2tldEtleX0uYCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gd2FpdEZvckNvbm5lY3Rpb24oc29ja2V0S2V5KVxuICAgIC5hbmRUaGVuKCgpID0+IG9rQXN5bmMoc29ja2V0S2V5KSlcbiAgICAub3JFbHNlKChlcnJvcikgPT4gZXJyQXN5bmMoZXJyb3IpKTtcbn07XG5cbi8qKlxuICogV2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4uIFJldHVybnMgYW4gZXJyb3IgaWYgdG9vIG1hbnkgY29ubmVjdGlvbiBhdHRlbXB0cyBhcmUgbWFkZS5cbiAqXG4gKiBAcGFyYW0gc29ja2V0S2V5XG4gKiBAcmV0dXJuc1xuICovXG5leHBvcnQgY29uc3Qgd2FpdEZvckNvbm5lY3Rpb24gPSAoXG4gIHNvY2tldEtleTogc3RyaW5nLFxuKTogUmVzdWx0QXN5bmM8dm9pZCwgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghaXNTcGF3bmVkKHNvY2tldEtleSkpIHtcbiAgICAgICAgZXZlbnRzLm9uY2UoRVZFTlQuU09DS0VUX09QRU5FRCwgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXZlbnRzLm9uKEVWRU5ULlNPQ0tFVF9PTkVSUk9SLCAoKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IoKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIChlcnJvcikgPT4ge1xuICAgICAgcmV0dXJuIGVuc3VyZUVycm9yKGVycm9yKTtcbiAgICB9LFxuICApO1xuXG4vKipcbiAqIENsb3NlIHRoZSBXZWJTb2NrZXRcbiAqIEBwYXJhbSBzb2NrZXRLZXlcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjbG9zZSA9IChzb2NrZXRLZXk6IHN0cmluZyk6IFJlc3VsdEFzeW5jPHN0cmluZywgV2ViU29ja2V0RXJyb3I+ID0+XG4gIFJlc3VsdEFzeW5jLmZyb21Qcm9taXNlKFxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChpc1NwYXduZWQoc29ja2V0S2V5KSkge1xuICAgICAgICBjb25zdCB0aW1lb3V0SUQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWplY3QobmV3IFdlYlNvY2tldEVycm9yKFwiVW5hYmxlIHRvIGNsb3NlIHRoZSBXZWJTb2NrZXRcIikpO1xuICAgICAgICB9LCAxMDAwKTtcblxuICAgICAgICBzb2NrZXRzW3NvY2tldEtleV0ub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElEKTtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc29ja2V0c1tzb2NrZXRLZXldLmNsb3NlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHNvY2tldEtleSk7XG4gICAgICB9XG4gICAgfSksXG4gICAgKGVycm9yKSA9PiBlbnN1cmVFcnJvcihlcnJvciksXG4gICk7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhbiBpbnN0YW5jZSBVUkwgaW4gYSBXZWJTb2NrZXQgVVJMXG4gKlxuICogQHBhcmFtIGluc3RhbmNlVXJsXG4gKiBAcGFyYW0gcGF0aG5hbWVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBidWlsZFNvY2tldFVybCA9IChpbnN0YW5jZVVybDogVVJMLCBwYXRobmFtZTogc3RyaW5nKTogVVJMID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChpbnN0YW5jZVVybCk7XG5cbiAgaWYgKCFbXCJ3czpcIiwgXCJ3c3M6XCJdLmluY2x1ZGVzKHVybC5wcm90b2NvbCkpIHtcbiAgICB1cmwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIiA/IFwid3M6XCIgOiBcIndzczpcIjtcbiAgfVxuICB1cmwucGF0aG5hbWUgKz0gcGF0aG5hbWU7XG5cbiAgcmV0dXJuIG5ldyBVUkwodXJsLm9yaWdpbiArIHVybC5wYXRobmFtZSk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSBkb3dubG9hZCBVUkwgZm9yIHRoZSBzb2NrZXQuIFJldHVybnMgYSBzdHJpbmcgc2luY2UgaXQncyBtb3N0bHkgdXNlZCBhcyBzb2NrZXRzIGtleVxuICpcbiAqIEBwYXJhbSBsdWZpRmlsZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkU29ja2V0VXJsID0gKGx1ZmlGaWxlOiBMdWZpRmlsZSk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBidWlsZFNvY2tldFVybChcbiAgICBuZXcgVVJMKGx1ZmlGaWxlLnNlcnZlclVybCksXG4gICAgU29ja2V0UGF0aC5ET1dOTE9BRCArIGAvJHtsdWZpRmlsZS5rZXlzLnNlcnZlcn1gLFxuICApLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlIHRoZSB1cGxvYWQgVVJMIGZvciB0aGUgc29ja2V0LiBSZXR1cm5zIGEgc3RyaW5nIHNpbmNlIGl0J3MgbW9zdGx5IHVzZWQgYXMgc29ja2V0cyBrZXlcbiAqXG4gKiBAcGFyYW0gbHVmaUZpbGVcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB1cGxvYWRTb2NrZXRVcmwgPSAobHVmaUZpbGU6IEx1ZmlGaWxlKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGJ1aWxkU29ja2V0VXJsKG5ldyBVUkwobHVmaUZpbGUuc2VydmVyVXJsKSwgU29ja2V0UGF0aC5VUExPQUQpXG4gICAgLnRvU3RyaW5nKCk7XG59O1xuXG4vKipcbiAqIFRyeSB0byBwYXJzZSBhIHN0cmluZyBpbnRvIGEgSlNPTi4gUmV0dXJucyBmYWxzZSBpZiBub3QgcG9zc2libGUuXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IHRyeVBhcnNlSnNvbiA9IChkYXRhOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWRPYmplY3QgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgaWYgKHBhcnNlZE9iamVjdCAmJiB0eXBlb2YgcGFyc2VkT2JqZWN0ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gcGFyc2VkT2JqZWN0O1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgLyogZW1wdHkgKi9cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBTZXJ2ZXJEb3dubG9hZENodW5rTWV0YWRhdGFcbiAqXG4gKiBAcGFyYW0gbWVzc2FnZVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzU2VydmVyRG93bmxvYWRDaHVua1N1Y2Nlc3NNZXRhZGF0YSA9IChcbiAgbWVzc2FnZTogU2VydmVyRG93bmxvYWRDaHVua01ldGFkYXRhLFxuKTogbWVzc2FnZSBpcyBTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSBcIm9iamVjdFwiICYmIG1lc3NhZ2UgIT09IG51bGwgJiYgIShcIm1zZ1wiIGluIG1lc3NhZ2UpO1xuIiwgImltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSAnLi9pbmRleC5qcydcblxuZXhwb3J0IHsgRXZlbnRFbWl0dGVyIH1cbmV4cG9ydCBkZWZhdWx0IEV2ZW50RW1pdHRlclxuIiwgImV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcblx0fVxufVxuXG4vKipcbkFuIGVycm9yIHRvIGJlIHRocm93biB3aGVuIHRoZSByZXF1ZXN0IGlzIGFib3J0ZWQgYnkgQWJvcnRDb250cm9sbGVyLlxuRE9NRXhjZXB0aW9uIGlzIHRocm93biBpbnN0ZWFkIG9mIHRoaXMgRXJyb3Igd2hlbiBET01FeGNlcHRpb24gaXMgYXZhaWxhYmxlLlxuKi9cbmV4cG9ydCBjbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcic7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fVxufVxuXG4vKipcblRPRE86IFJlbW92ZSBBYm9ydEVycm9yIGFuZCBqdXN0IHRocm93IERPTUV4Y2VwdGlvbiB3aGVuIHRhcmdldGluZyBOb2RlIDE4LlxuKi9cbmNvbnN0IGdldERPTUV4Y2VwdGlvbiA9IGVycm9yTWVzc2FnZSA9PiBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvbiA9PT0gdW5kZWZpbmVkXG5cdD8gbmV3IEFib3J0RXJyb3IoZXJyb3JNZXNzYWdlKVxuXHQ6IG5ldyBET01FeGNlcHRpb24oZXJyb3JNZXNzYWdlKTtcblxuLyoqXG5UT0RPOiBSZW1vdmUgYmVsb3cgZnVuY3Rpb24gYW5kIGp1c3QgJ3JlamVjdChzaWduYWwucmVhc29uKScgd2hlbiB0YXJnZXRpbmcgTm9kZSAxOC5cbiovXG5jb25zdCBnZXRBYm9ydGVkUmVhc29uID0gc2lnbmFsID0+IHtcblx0Y29uc3QgcmVhc29uID0gc2lnbmFsLnJlYXNvbiA9PT0gdW5kZWZpbmVkXG5cdFx0PyBnZXRET01FeGNlcHRpb24oJ1RoaXMgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicpXG5cdFx0OiBzaWduYWwucmVhc29uO1xuXG5cdHJldHVybiByZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbiA6IGdldERPTUV4Y2VwdGlvbihyZWFzb24pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcFRpbWVvdXQocHJvbWlzZSwgb3B0aW9ucykge1xuXHRjb25zdCB7XG5cdFx0bWlsbGlzZWNvbmRzLFxuXHRcdGZhbGxiYWNrLFxuXHRcdG1lc3NhZ2UsXG5cdFx0Y3VzdG9tVGltZXJzID0ge3NldFRpbWVvdXQsIGNsZWFyVGltZW91dH0sXG5cdH0gPSBvcHRpb25zO1xuXG5cdGxldCB0aW1lcjtcblxuXHRjb25zdCB3cmFwcGVkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicgfHwgTWF0aC5zaWduKG1pbGxpc2Vjb25kcykgIT09IDEpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYG1pbGxpc2Vjb25kc1xcYCB0byBiZSBhIHBvc2l0aXZlIG51bWJlciwgZ290IFxcYCR7bWlsbGlzZWNvbmRzfVxcYGApO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zLnNpZ25hbCkge1xuXHRcdFx0Y29uc3Qge3NpZ25hbH0gPSBvcHRpb25zO1xuXHRcdFx0aWYgKHNpZ25hbC5hYm9ydGVkKSB7XG5cdFx0XHRcdHJlamVjdChnZXRBYm9ydGVkUmVhc29uKHNpZ25hbCkpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHRcdHJlamVjdChnZXRBYm9ydGVkUmVhc29uKHNpZ25hbCkpO1xuXHRcdFx0fTtcblxuXHRcdFx0c2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyLCB7b25jZTogdHJ1ZX0pO1xuXG5cdFx0XHRwcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKG1pbGxpc2Vjb25kcyA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSB7XG5cdFx0XHRwcm9taXNlLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBXZSBjcmVhdGUgdGhlIGVycm9yIG91dHNpZGUgb2YgYHNldFRpbWVvdXRgIHRvIHByZXNlcnZlIHRoZSBzdGFjayB0cmFjZS5cblx0XHRjb25zdCB0aW1lb3V0RXJyb3IgPSBuZXcgVGltZW91dEVycm9yKCk7XG5cblx0XHR0aW1lciA9IGN1c3RvbVRpbWVycy5zZXRUaW1lb3V0LmNhbGwodW5kZWZpbmVkLCAoKSA9PiB7XG5cdFx0XHRpZiAoZmFsbGJhY2spIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRyZXNvbHZlKGZhbGxiYWNrKCkpO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0eXBlb2YgcHJvbWlzZS5jYW5jZWwgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cHJvbWlzZS5jYW5jZWwoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG1lc3NhZ2UgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH0gZWxzZSBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChtZXNzYWdlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRpbWVvdXRFcnJvci5tZXNzYWdlID0gbWVzc2FnZSA/PyBgUHJvbWlzZSB0aW1lZCBvdXQgYWZ0ZXIgJHttaWxsaXNlY29uZHN9IG1pbGxpc2Vjb25kc2A7XG5cdFx0XHRcdHJlamVjdCh0aW1lb3V0RXJyb3IpO1xuXHRcdFx0fVxuXHRcdH0sIG1pbGxpc2Vjb25kcyk7XG5cblx0XHQoYXN5bmMgKCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShhd2FpdCBwcm9taXNlKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0fSkoKTtcblx0fSk7XG5cblx0Y29uc3QgY2FuY2VsYWJsZVByb21pc2UgPSB3cmFwcGVkUHJvbWlzZS5maW5hbGx5KCgpID0+IHtcblx0XHRjYW5jZWxhYmxlUHJvbWlzZS5jbGVhcigpO1xuXHR9KTtcblxuXHRjYW5jZWxhYmxlUHJvbWlzZS5jbGVhciA9ICgpID0+IHtcblx0XHRjdXN0b21UaW1lcnMuY2xlYXJUaW1lb3V0LmNhbGwodW5kZWZpbmVkLCB0aW1lcik7XG5cdFx0dGltZXIgPSB1bmRlZmluZWQ7XG5cdH07XG5cblx0cmV0dXJuIGNhbmNlbGFibGVQcm9taXNlO1xufVxuIiwgIi8vIFBvcnQgb2YgbG93ZXJfYm91bmQgZnJvbSBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvYWxnb3JpdGhtL2xvd2VyX2JvdW5kXG4vLyBVc2VkIHRvIGNvbXB1dGUgaW5zZXJ0aW9uIGluZGV4IHRvIGtlZXAgcXVldWUgc29ydGVkIGFmdGVyIGluc2VydGlvblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG93ZXJCb3VuZChhcnJheSwgdmFsdWUsIGNvbXBhcmF0b3IpIHtcbiAgICBsZXQgZmlyc3QgPSAwO1xuICAgIGxldCBjb3VudCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoY291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBNYXRoLnRydW5jKGNvdW50IC8gMik7XG4gICAgICAgIGxldCBpdCA9IGZpcnN0ICsgc3RlcDtcbiAgICAgICAgaWYgKGNvbXBhcmF0b3IoYXJyYXlbaXRdLCB2YWx1ZSkgPD0gMCkge1xuICAgICAgICAgICAgZmlyc3QgPSArK2l0O1xuICAgICAgICAgICAgY291bnQgLT0gc3RlcCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb3VudCA9IHN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpcnN0O1xufVxuIiwgImltcG9ydCBsb3dlckJvdW5kIGZyb20gJy4vbG93ZXItYm91bmQuanMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJpb3JpdHlRdWV1ZSB7XG4gICAgI3F1ZXVlID0gW107XG4gICAgZW5xdWV1ZShydW4sIG9wdGlvbnMpIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiAwLFxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgICAgIHByaW9yaXR5OiBvcHRpb25zLnByaW9yaXR5LFxuICAgICAgICAgICAgcnVuLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zaXplICYmIHRoaXMuI3F1ZXVlW3RoaXMuc2l6ZSAtIDFdLnByaW9yaXR5ID49IG9wdGlvbnMucHJpb3JpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuI3F1ZXVlLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBsb3dlckJvdW5kKHRoaXMuI3F1ZXVlLCBlbGVtZW50LCAoYSwgYikgPT4gYi5wcmlvcml0eSAtIGEucHJpb3JpdHkpO1xuICAgICAgICB0aGlzLiNxdWV1ZS5zcGxpY2UoaW5kZXgsIDAsIGVsZW1lbnQpO1xuICAgIH1cbiAgICBkZXF1ZXVlKCkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy4jcXVldWUuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW0/LnJ1bjtcbiAgICB9XG4gICAgZmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLmZpbHRlcigoZWxlbWVudCkgPT4gZWxlbWVudC5wcmlvcml0eSA9PT0gb3B0aW9ucy5wcmlvcml0eSkubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnJ1bik7XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcXVldWUubGVuZ3RoO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCBwVGltZW91dCwgeyBUaW1lb3V0RXJyb3IgfSBmcm9tICdwLXRpbWVvdXQnO1xuaW1wb3J0IFByaW9yaXR5UXVldWUgZnJvbSAnLi9wcmlvcml0eS1xdWV1ZS5qcyc7XG4vKipcblByb21pc2UgcXVldWUgd2l0aCBjb25jdXJyZW5jeSBjb250cm9sLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBRdWV1ZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgI2lzSW50ZXJ2YWxJZ25vcmVkO1xuICAgICNpbnRlcnZhbENvdW50ID0gMDtcbiAgICAjaW50ZXJ2YWxDYXA7XG4gICAgI2ludGVydmFsO1xuICAgICNpbnRlcnZhbEVuZCA9IDA7XG4gICAgI2ludGVydmFsSWQ7XG4gICAgI3RpbWVvdXRJZDtcbiAgICAjcXVldWU7XG4gICAgI3F1ZXVlQ2xhc3M7XG4gICAgI3BlbmRpbmcgPSAwO1xuICAgIC8vIFRoZSBgIWAgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zMjE5NFxuICAgICNjb25jdXJyZW5jeTtcbiAgICAjaXNQYXVzZWQ7XG4gICAgI3Rocm93T25UaW1lb3V0O1xuICAgIC8qKlxuICAgIFBlci1vcGVyYXRpb24gdGltZW91dCBpbiBtaWxsaXNlY29uZHMuIE9wZXJhdGlvbnMgZnVsZmlsbCBvbmNlIGB0aW1lb3V0YCBlbGFwc2VzIGlmIHRoZXkgaGF2ZW4ndCBhbHJlYWR5LlxuXG4gICAgQXBwbGllcyB0byBlYWNoIGZ1dHVyZSBvcGVyYXRpb24uXG4gICAgKi9cbiAgICB0aW1lb3V0O1xuICAgIC8vIFRPRE86IFRoZSBgdGhyb3dPblRpbWVvdXRgIG9wdGlvbiBzaG91bGQgYWZmZWN0IHRoZSByZXR1cm4gdHlwZXMgb2YgYGFkZCgpYCBhbmQgYGFkZEFsbCgpYFxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9jb25zaXN0ZW50LXR5cGUtYXNzZXJ0aW9uc1xuICAgICAgICBvcHRpb25zID0ge1xuICAgICAgICAgICAgY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudDogZmFsc2UsXG4gICAgICAgICAgICBpbnRlcnZhbENhcDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IDAsXG4gICAgICAgICAgICBjb25jdXJyZW5jeTogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuICAgICAgICAgICAgYXV0b1N0YXJ0OiB0cnVlLFxuICAgICAgICAgICAgcXVldWVDbGFzczogUHJpb3JpdHlRdWV1ZSxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghKHR5cGVvZiBvcHRpb25zLmludGVydmFsQ2FwID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLmludGVydmFsQ2FwID49IDEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbENhcFxcYCB0byBiZSBhIG51bWJlciBmcm9tIDEgYW5kIHVwLCBnb3QgXFxgJHtvcHRpb25zLmludGVydmFsQ2FwPy50b1N0cmluZygpID8/ICcnfVxcYCAoJHt0eXBlb2Ygb3B0aW9ucy5pbnRlcnZhbENhcH0pYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCAhKE51bWJlci5pc0Zpbml0ZShvcHRpb25zLmludGVydmFsKSAmJiBvcHRpb25zLmludGVydmFsID49IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcXGBpbnRlcnZhbFxcYCB0byBiZSBhIGZpbml0ZSBudW1iZXIgPj0gMCwgZ290IFxcYCR7b3B0aW9ucy5pbnRlcnZhbD8udG9TdHJpbmcoKSA/PyAnJ31cXGAgKCR7dHlwZW9mIG9wdGlvbnMuaW50ZXJ2YWx9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQgPSBvcHRpb25zLmNhcnJ5b3ZlckNvbmN1cnJlbmN5Q291bnQ7XG4gICAgICAgIHRoaXMuI2lzSW50ZXJ2YWxJZ25vcmVkID0gb3B0aW9ucy5pbnRlcnZhbENhcCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IG9wdGlvbnMuaW50ZXJ2YWwgPT09IDA7XG4gICAgICAgIHRoaXMuI2ludGVydmFsQ2FwID0gb3B0aW9ucy5pbnRlcnZhbENhcDtcbiAgICAgICAgdGhpcy4jaW50ZXJ2YWwgPSBvcHRpb25zLmludGVydmFsO1xuICAgICAgICB0aGlzLiNxdWV1ZSA9IG5ldyBvcHRpb25zLnF1ZXVlQ2xhc3MoKTtcbiAgICAgICAgdGhpcy4jcXVldWVDbGFzcyA9IG9wdGlvbnMucXVldWVDbGFzcztcbiAgICAgICAgdGhpcy5jb25jdXJyZW5jeSA9IG9wdGlvbnMuY29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICAgICAgdGhpcy4jdGhyb3dPblRpbWVvdXQgPSBvcHRpb25zLnRocm93T25UaW1lb3V0ID09PSB0cnVlO1xuICAgICAgICB0aGlzLiNpc1BhdXNlZCA9IG9wdGlvbnMuYXV0b1N0YXJ0ID09PSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0ICNkb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNpc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLiNpbnRlcnZhbENvdW50IDwgdGhpcy4jaW50ZXJ2YWxDYXA7XG4gICAgfVxuICAgIGdldCAjZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwZW5kaW5nIDwgdGhpcy4jY29uY3VycmVuY3k7XG4gICAgfVxuICAgICNuZXh0KCkge1xuICAgICAgICB0aGlzLiNwZW5kaW5nLS07XG4gICAgICAgIHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCk7XG4gICAgICAgIHRoaXMuZW1pdCgnbmV4dCcpO1xuICAgIH1cbiAgICAjb25SZXN1bWVJbnRlcnZhbCgpIHtcbiAgICAgICAgdGhpcy4jb25JbnRlcnZhbCgpO1xuICAgICAgICB0aGlzLiNpbml0aWFsaXplSW50ZXJ2YWxJZk5lZWRlZCgpO1xuICAgICAgICB0aGlzLiN0aW1lb3V0SWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCAjaXNJbnRlcnZhbFBhdXNlZCgpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZGVsYXkgPSB0aGlzLiNpbnRlcnZhbEVuZCAtIG5vdztcbiAgICAgICAgICAgIGlmIChkZWxheSA8IDApIHtcbiAgICAgICAgICAgICAgICAvLyBBY3QgYXMgdGhlIGludGVydmFsIHdhcyBkb25lXG4gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byByZXN1bWUgaXQgaGVyZSBiZWNhdXNlIGl0IHdpbGwgYmUgcmVzdW1lZCBvbiBsaW5lIDE2MFxuICAgICAgICAgICAgICAgIHRoaXMuI2ludGVydmFsQ291bnQgPSAodGhpcy4jY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCkgPyB0aGlzLiNwZW5kaW5nIDogMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEFjdCBhcyB0aGUgaW50ZXJ2YWwgaXMgcGVuZGluZ1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLiN0aW1lb3V0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuI29uUmVzdW1lSW50ZXJ2YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZGVsYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgICN0cnlUb1N0YXJ0QW5vdGhlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGNhbiBjbGVhciB0aGUgaW50ZXJ2YWwgKFwicGF1c2VcIilcbiAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgY2FuIHJlZG8gaXQgbGF0ZXIgKFwicmVzdW1lXCIpXG4gICAgICAgICAgICBpZiAodGhpcy4jaW50ZXJ2YWxJZCkge1xuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy4jaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNpbnRlcnZhbElkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdlbXB0eScpO1xuICAgICAgICAgICAgaWYgKHRoaXMuI3BlbmRpbmcgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2lkbGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuI2lzUGF1c2VkKSB7XG4gICAgICAgICAgICBjb25zdCBjYW5Jbml0aWFsaXplSW50ZXJ2YWwgPSAhdGhpcy4jaXNJbnRlcnZhbFBhdXNlZDtcbiAgICAgICAgICAgIGlmICh0aGlzLiNkb2VzSW50ZXJ2YWxBbGxvd0Fub3RoZXIgJiYgdGhpcy4jZG9lc0NvbmN1cnJlbnRBbGxvd0Fub3RoZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBqb2IgPSB0aGlzLiNxdWV1ZS5kZXF1ZXVlKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFqb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIGpvYigpO1xuICAgICAgICAgICAgICAgIGlmIChjYW5Jbml0aWFsaXplSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAjaW5pdGlhbGl6ZUludGVydmFsSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNpc0ludGVydmFsSWdub3JlZCB8fCB0aGlzLiNpbnRlcnZhbElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jb25JbnRlcnZhbCgpO1xuICAgICAgICB9LCB0aGlzLiNpbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuI2ludGVydmFsRW5kID0gRGF0ZS5ub3coKSArIHRoaXMuI2ludGVydmFsO1xuICAgIH1cbiAgICAjb25JbnRlcnZhbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI2ludGVydmFsQ291bnQgPT09IDAgJiYgdGhpcy4jcGVuZGluZyA9PT0gMCAmJiB0aGlzLiNpbnRlcnZhbElkKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuI2ludGVydmFsSWQpO1xuICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxJZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNpbnRlcnZhbENvdW50ID0gdGhpcy4jY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCA/IHRoaXMuI3BlbmRpbmcgOiAwO1xuICAgICAgICB0aGlzLiNwcm9jZXNzUXVldWUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgRXhlY3V0ZXMgYWxsIHF1ZXVlZCBmdW5jdGlvbnMgdW50aWwgaXQgcmVhY2hlcyB0aGUgbGltaXQuXG4gICAgKi9cbiAgICAjcHJvY2Vzc1F1ZXVlKCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICAgICAgd2hpbGUgKHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCkpIHsgfVxuICAgIH1cbiAgICBnZXQgY29uY3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb25jdXJyZW5jeTtcbiAgICB9XG4gICAgc2V0IGNvbmN1cnJlbmN5KG5ld0NvbmN1cnJlbmN5KSB7XG4gICAgICAgIGlmICghKHR5cGVvZiBuZXdDb25jdXJyZW5jeSA9PT0gJ251bWJlcicgJiYgbmV3Q29uY3VycmVuY3kgPj0gMSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkIFxcYGNvbmN1cnJlbmN5XFxgIHRvIGJlIGEgbnVtYmVyIGZyb20gMSBhbmQgdXAsIGdvdCBcXGAke25ld0NvbmN1cnJlbmN5fVxcYCAoJHt0eXBlb2YgbmV3Q29uY3VycmVuY3l9KWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2NvbmN1cnJlbmN5ID0gbmV3Q29uY3VycmVuY3k7XG4gICAgICAgIHRoaXMuI3Byb2Nlc3NRdWV1ZSgpO1xuICAgIH1cbiAgICBhc3luYyAjdGhyb3dPbkFib3J0KHNpZ25hbCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbik7XG4gICAgICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBhZGQoZnVuY3Rpb25fLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgIHRocm93T25UaW1lb3V0OiB0aGlzLiN0aHJvd09uVGltZW91dCxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNxdWV1ZS5lbnF1ZXVlKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNwZW5kaW5nKys7XG4gICAgICAgICAgICAgICAgdGhpcy4jaW50ZXJ2YWxDb3VudCsrO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgb3BlcmF0aW9uID0gZnVuY3Rpb25fKHsgc2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gcFRpbWVvdXQoUHJvbWlzZS5yZXNvbHZlKG9wZXJhdGlvbiksIHsgbWlsbGlzZWNvbmRzOiBvcHRpb25zLnRpbWVvdXQgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBQcm9taXNlLnJhY2UoW29wZXJhdGlvbiwgdGhpcy4jdGhyb3dPbkFib3J0KG9wdGlvbnMuc2lnbmFsKV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2NvbXBsZXRlZCcsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgJiYgIW9wdGlvbnMudGhyb3dPblRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0KCdhZGQnKTtcbiAgICAgICAgICAgIHRoaXMuI3RyeVRvU3RhcnRBbm90aGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBhZGRBbGwoZnVuY3Rpb25zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChmdW5jdGlvbnMubWFwKGFzeW5jIChmdW5jdGlvbl8pID0+IHRoaXMuYWRkKGZ1bmN0aW9uXywgb3B0aW9ucykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgU3RhcnQgKG9yIHJlc3VtZSkgZXhlY3V0aW5nIGVucXVldWVkIHRhc2tzIHdpdGhpbiBjb25jdXJyZW5jeSBsaW1pdC4gTm8gbmVlZCB0byBjYWxsIHRoaXMgaWYgcXVldWUgaXMgbm90IHBhdXNlZCAodmlhIGBvcHRpb25zLmF1dG9TdGFydCA9IGZhbHNlYCBvciBieSBgLnBhdXNlKClgIG1ldGhvZC4pXG4gICAgKi9cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLiNpc1BhdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jcHJvY2Vzc1F1ZXVlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICBQdXQgcXVldWUgZXhlY3V0aW9uIG9uIGhvbGQuXG4gICAgKi9cbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy4jaXNQYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICBDbGVhciB0aGUgcXVldWUuXG4gICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy4jcXVldWUgPSBuZXcgdGhpcy4jcXVldWVDbGFzcygpO1xuICAgIH1cbiAgICAvKipcbiAgICBDYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBVc2VmdWwgaWYgeW91IGZvciBleGFtcGxlIGFkZCBhZGRpdGlvbmFsIGl0ZW1zIGF0IGEgbGF0ZXIgdGltZS5cblxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgYmVjb21lcyBlbXB0eS5cbiAgICAqL1xuICAgIGFzeW5jIG9uRW1wdHkoKSB7XG4gICAgICAgIC8vIEluc3RhbnRseSByZXNvbHZlIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eVxuICAgICAgICBpZiAodGhpcy4jcXVldWUuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI29uRXZlbnQoJ2VtcHR5Jyk7XG4gICAgfVxuICAgIC8qKlxuICAgIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHNldHRsZXMgd2hlbiB0aGUgcXVldWUgc2l6ZSBpcyBsZXNzIHRoYW4gdGhlIGdpdmVuIGxpbWl0OiBgcXVldWUuc2l6ZSA8IGxpbWl0YC5cblxuICAgIElmIHlvdSB3YW50IHRvIGF2b2lkIGhhdmluZyB0aGUgcXVldWUgZ3JvdyBiZXlvbmQgYSBjZXJ0YWluIHNpemUgeW91IGNhbiBgYXdhaXQgcXVldWUub25TaXplTGVzc1RoYW4oKWAgYmVmb3JlIGFkZGluZyBhIG5ldyBpdGVtLlxuXG4gICAgTm90ZSB0aGF0IHRoaXMgb25seSBsaW1pdHMgdGhlIG51bWJlciBvZiBpdGVtcyB3YWl0aW5nIHRvIHN0YXJ0LiBUaGVyZSBjb3VsZCBzdGlsbCBiZSB1cCB0byBgY29uY3VycmVuY3lgIGpvYnMgYWxyZWFkeSBydW5uaW5nIHRoYXQgdGhpcyBjYWxsIGRvZXMgbm90IGluY2x1ZGUgaW4gaXRzIGNhbGN1bGF0aW9uLlxuICAgICovXG4gICAgYXN5bmMgb25TaXplTGVzc1RoYW4obGltaXQpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICBpZiAodGhpcy4jcXVldWUuc2l6ZSA8IGxpbWl0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jb25FdmVudCgnbmV4dCcsICgpID0+IHRoaXMuI3F1ZXVlLnNpemUgPCBsaW1pdCk7XG4gICAgfVxuICAgIC8qKlxuICAgIFRoZSBkaWZmZXJlbmNlIHdpdGggYC5vbkVtcHR5YCBpcyB0aGF0IGAub25JZGxlYCBndWFyYW50ZWVzIHRoYXQgYWxsIHdvcmsgZnJvbSB0aGUgcXVldWUgaGFzIGZpbmlzaGVkLiBgLm9uRW1wdHlgIG1lcmVseSBzaWduYWxzIHRoYXQgdGhlIHF1ZXVlIGlzIGVtcHR5LCBidXQgaXQgY291bGQgbWVhbiB0aGF0IHNvbWUgcHJvbWlzZXMgaGF2ZW4ndCBjb21wbGV0ZWQgeWV0LlxuXG4gICAgQHJldHVybnMgQSBwcm9taXNlIHRoYXQgc2V0dGxlcyB3aGVuIHRoZSBxdWV1ZSBiZWNvbWVzIGVtcHR5LCBhbmQgYWxsIHByb21pc2VzIGhhdmUgY29tcGxldGVkOyBgcXVldWUuc2l6ZSA9PT0gMCAmJiBxdWV1ZS5wZW5kaW5nID09PSAwYC5cbiAgICAqL1xuICAgIGFzeW5jIG9uSWRsZSgpIHtcbiAgICAgICAgLy8gSW5zdGFudGx5IHJlc29sdmUgaWYgbm9uZSBwZW5kaW5nIGFuZCBpZiBub3RoaW5nIGVsc2UgaXMgcXVldWVkXG4gICAgICAgIGlmICh0aGlzLiNwZW5kaW5nID09PSAwICYmIHRoaXMuI3F1ZXVlLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNvbkV2ZW50KCdpZGxlJyk7XG4gICAgfVxuICAgIGFzeW5jICNvbkV2ZW50KGV2ZW50LCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm9mZihldmVudCwgbGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm9uKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICBTaXplIG9mIHRoZSBxdWV1ZSwgdGhlIG51bWJlciBvZiBxdWV1ZWQgaXRlbXMgd2FpdGluZyB0byBydW4uXG4gICAgKi9cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXVlLnNpemU7XG4gICAgfVxuICAgIC8qKlxuICAgIFNpemUgb2YgdGhlIHF1ZXVlLCBmaWx0ZXJlZCBieSB0aGUgZ2l2ZW4gb3B0aW9ucy5cblxuICAgIEZvciBleGFtcGxlLCB0aGlzIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIG51bWJlciBvZiBpdGVtcyByZW1haW5pbmcgaW4gdGhlIHF1ZXVlIHdpdGggYSBzcGVjaWZpYyBwcmlvcml0eSBsZXZlbC5cbiAgICAqL1xuICAgIHNpemVCeShvcHRpb25zKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWNhbGxiYWNrLXJlZmVyZW5jZVxuICAgICAgICByZXR1cm4gdGhpcy4jcXVldWUuZmlsdGVyKG9wdGlvbnMpLmxlbmd0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgTnVtYmVyIG9mIHJ1bm5pbmcgaXRlbXMgKG5vIGxvbmdlciBpbiB0aGUgcXVldWUpLlxuICAgICovXG4gICAgZ2V0IHBlbmRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwZW5kaW5nO1xuICAgIH1cbiAgICAvKipcbiAgICBXaGV0aGVyIHRoZSBxdWV1ZSBpcyBjdXJyZW50bHkgcGF1c2VkLlxuICAgICovXG4gICAgZ2V0IGlzUGF1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jaXNQYXVzZWQ7XG4gICAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgUmVzdWx0QXN5bmMgfSBmcm9tIFwibmV2ZXJ0aHJvd1wiO1xuaW1wb3J0IHsgRVZFTlQgfSBmcm9tIFwifi9lbnVtL2V2ZW50LnRzXCI7XG5pbXBvcnQgeyBldmVudHMsIGluaXQsIHNlbmRGaWxlRXJyb3IsIHVwZGF0ZUZpbGUgfSBmcm9tIFwifi93b3JrZXIvc2hhcmVkLnRzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtlckFjdGlvbk1lc3NhZ2UgfSBmcm9tIFwifi9pbnRlcmZhY2Uvd29ya2VyLWFjdGlvbi1tZXNzYWdlLnRzXCI7XG5pbXBvcnQgeyBkb3dubG9hZENodW5rIH0gZnJvbSBcIn4vYXBpL3dlYnNvY2tldC50c1wiO1xuaW1wb3J0IFBRdWV1ZSBmcm9tIFwicC1xdWV1ZVwiO1xuaW1wb3J0IHsgV09SS0VSX0FDVElPTiB9IGZyb20gXCJ+L2VudW0vd29ya2VyLWFjdGlvbi50c1wiO1xuaW1wb3J0IHR5cGUgeyBXZWJTb2NrZXRFcnJvciB9IGZyb20gXCJ+L2Vycm9yL3dlYnNvY2tldC93ZWJzb2NrZXQtZXJyb3IudHNcIjtcblxuZGVjbGFyZSBjb25zdCBzZWxmOiBXb3JrZXI7XG5cbmNvbnN0IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUID0gbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kgfHwgMTtcbmNvbnN0IHF1ZXVlID0gbmV3IFBRdWV1ZSh7XG4gIGNvbmN1cnJlbmN5OiBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCxcbn0pO1xubGV0IGl0ZW1zSW5RdWV1ZSA9IDA7XG5sZXQgaXNJbml0aWF0ZWQgPSBmYWxzZTtcbmxldCBpc1BhdXNlZCA9IGZhbHNlO1xuXG5zZWxmLm9ubWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gIGlmICghaXNJbml0aWF0ZWQpIHtcbiAgICBpbml0KCk7XG4gICAgaXNJbml0aWF0ZWQgPSB0cnVlO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgKCkgPT4ge1xuICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5ET1dOTE9BRF9TVEFSVEVEIH0pO1xuICAgIH0pO1xuXG4gICAgZXZlbnRzLm9uY2UoRVZFTlQuRE9XTkxPQURfQ09NUExFVEUsICgpID0+IHtcbiAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuRE9XTkxPQURfQ09NUExFVEUgfSk7XG4gICAgfSk7XG5cbiAgICBldmVudHMub24oRVZFTlQuRklMRV9VUERBVEVELCB1cGRhdGVGaWxlKTtcblxuICAgIGV2ZW50cy5vbihcbiAgICAgIEVWRU5ULkNIVU5LX0RPV05MT0FERUQsXG4gICAgICAoYnVmZmVyOiBBcnJheUJ1ZmZlciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpdGVtc0luUXVldWUtLTtcblxuICAgICAgICBpZiAoIWlzUGF1c2VkICYmIGl0ZW1zSW5RdWV1ZSA8IFFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUKSB7XG4gICAgICAgICAgcXVldWUuc3RhcnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIGV2ZW50OiBFVkVOVC5DSFVOS19ET1dOTE9BREVELFxuICAgICAgICAgIGNodW5rOiB7IGJ1ZmZlciwgaW5kZXggfSxcbiAgICAgICAgfSwgW2J1ZmZlcl0pO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgZGF0YSA9IGV2ZW50LmRhdGEgYXMgV29ya2VyQWN0aW9uTWVzc2FnZTtcblxuICBzd2l0Y2ggKGRhdGEuYWN0aW9uKSB7XG4gICAgY2FzZSBXT1JLRVJfQUNUSU9OLlBBVVNFOlxuICAgICAge1xuICAgICAgICBpc1BhdXNlZCA9IHRydWU7XG4gICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoeyBldmVudDogRVZFTlQuSk9CX1BBVVNFRCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBXT1JLRVJfQUNUSU9OLlJFU1VNRTpcbiAgICAgIHtcbiAgICAgICAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5wb3N0TWVzc2FnZSh7IGV2ZW50OiBFVkVOVC5KT0JfUkVTVU1FRCB9KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGRvd25sb2FkKGRhdGEpLm1hcEVycigoZXJyb3IpID0+IHtcbiAgICAgICAgc2VuZEZpbGVFcnJvcihkYXRhLmFyZ3MubHVmaUZpbGUsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG59O1xuXG5jb25zdCBkb3dubG9hZCA9IChcbiAgd29ya2VyTWVzc2FnZTogV29ya2VyQWN0aW9uTWVzc2FnZSxcbik6IFJlc3VsdEFzeW5jPHZvaWQsIFdlYlNvY2tldEVycm9yPiA9PiB7XG4gIGNvbnN0IHsgbHVmaUZpbGUgfSA9IHdvcmtlck1lc3NhZ2UuYXJncztcblxuICBldmVudHMub24oRVZFTlQuRE9XTkxPQURfU1RBUlRFRCwgYXN5bmMgKCkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbHVmaUZpbGUudG90YWxDaHVua3M7IGkrKykge1xuICAgICAgaWYgKCFpc1BhdXNlZCAmJiBpdGVtc0luUXVldWUgPCBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCkge1xuICAgICAgICBxdWV1ZS5zdGFydCgpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBxdWV1ZS5hZGQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkb3dubG9hZENodW5rKGx1ZmlGaWxlLCBpKTtcblxuICAgICAgICBpdGVtc0luUXVldWUrKztcblxuICAgICAgICBpZiAoaXNQYXVzZWQgfHwgaXRlbXNJblF1ZXVlID09PSBRVUVVRV9DT05DVVJSRU5DWV9MSU1JVCkge1xuICAgICAgICAgIHF1ZXVlLnBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaXRlbXNJblF1ZXVlKys7XG5cbiAgcmV0dXJuIGRvd25sb2FkQ2h1bmsobHVmaUZpbGUsIDApO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICIr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QUUsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFTCxFQUFFRCxFQUFFLE9BQU8sSUFBSU8sRUFBRSxFQUFFLEdBQU9OLElBQUosR0FBV0EsSUFBSixHQUFXQSxJQUFKLEVBQU0sTUFBTSxJQUFJRixFQUFLLFVBQVUsUUFBUSxzQkFBc0IsRUFBNkIsSUFBM0IsS0FBSyxFQUFFLENBQUNJLEVBQUVILEVBQUUsTUFBTSxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxDQUFDLEVBQU1KLEVBQUVDLEVBQUVELEVBQUUsRUFBRUMsRUFBRSxHQUFHRCxJQUFLRSxFQUFFQyxFQUFFSCxFQUFFLENBQUMsR0FBU0EsRUFBRUMsSUFBTixHQUFhQSxJQUFKLEdBQVdELEVBQUVDLElBQU4sS0FBUUMsRUFBRUcsRUFBRUgsSUFBSSxFQUFFLEdBQUcsR0FBR0csRUFBRUgsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHRyxFQUFFSCxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUVHLEVBQUVILEVBQUUsR0FBRyxFQUFNRixFQUFFQyxJQUFOLElBQVVDLEVBQUVBLEdBQUcsRUFBRUEsSUFBSSxHQUFHSyxHQUFHLEdBQUdBLEVBQUVBLEdBQUcsRUFBRSxLQUFLQSxHQUFHLEtBQUlKLEVBQUVILENBQUMsRUFBRUcsRUFBRUgsRUFBRUMsQ0FBQyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUQsRUFBRUMsSUFBSUQsSUFBSUUsRUFBRUMsRUFBRUYsRUFBRSxFQUFFRCxFQUFFQSxFQUFFLENBQUMsRUFBRUksRUFBRUgsQ0FBQyxFQUFFLEdBQUdELEdBQUcsRUFBRUMsRUFBRUMsRUFBRUksRUFBRSxDQUFDLEVBQUVELEVBQUVILElBQUksRUFBRSxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUVJLEVBQUUsQ0FBQyxFQUFFRCxFQUFFSCxFQUMzZixHQUFHLENBQUMsQ0FBQyxFQUNMSCxFQUFLLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxTQUFTQyxFQUFFLENBQUMsT0FBT1EsR0FBRyxLQUFLUixFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsU0FBU0EsRUFBRSxDQUFDLE9BQU9RLEdBQUcsS0FBS1IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxJQUFJQSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUVDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRUMsRUFBRUYsRUFBRSxDQUFDLEVBQUVHLEVBQUVGLEVBQUUsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFQyxFQUFFQyxFQUFFLENBQUMsRUFBRUUsRUFBRSxDQUFDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUVDLEVBQUUsSUFBSVQsRUFBRSxFQUFFLElBQU1BLEVBQUVBLElBQUlLLEdBQUdGLEVBQUVILENBQUMsRUFBRUEsR0FBRyxFQUFFLEtBQUtBLEdBQUcsSUFBSUEsQ0FBQyxFQUFFQSxFQUFFLElBQUlDLEVBQUVDLEVBQUUsRUFBRSxDQUFDSixFQUFFRyxDQUFDLEVBQUVBLEdBQUdLLEdBQUcsRUFBRUosRUFBRUcsRUFBRUgsQ0FBQyxHQUFHLEVBQUUsSUFBSU0sRUFBRU4sRUFBRUEsR0FBRyxFQUFFQSxHQUFHLEVBQUVBLEdBQUcsRUFBRUEsR0FBRyxFQUFFTSxFQUFFQSxHQUFHLEVBQUVBLEVBQUUsSUFBSSxHQUFHVixFQUFFRyxDQUFDLEVBQUVPLEVBQUVULEVBQUVTLENBQUMsRUFBRVAsRUFBRU0sRUFBRUosRUFBRUgsRUFBRUcsRUFBRUcsRUFBRUgsRUFBRUYsQ0FBQyxDQUFDLENBQUMsRUFBRVEsRUFBRSxTQUFVRixFQUFFLE1BQVFQLEVBQUUsSUFBTU0sRUFBRSxTQUFVTCxFQUFFTSxFQUFFLElBQU1KLEVBQUVLLENBQUMsRUFBRSxTQUFVQSxFQUFFUixFQUFFLEVBQUUsRUFBRUEsRUFBRUEsSUFBSUosRUFBRUksQ0FBQyxFQUFFQyxDQUFDLEVBQUVNLEVBQUVBLEdBQUcsR0FBR0EsSUFBSSxFQUFFVixFQUFFRyxDQUFDLEVBQUVRLENBQUMsRUFBRUMsRUFBRUEsR0FBRyxHQUFHQSxJQUFJLEVBQUUsSUFBSVQsRUFDbGdCLEVBQUUsRUFBRUEsRUFBRUEsSUFBSUosRUFBRUksQ0FBQyxFQUFFSixFQUFFSSxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRUgsRUFBRUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDaEQsU0FBU0ksR0FBR1IsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLEdBQU9ELEVBQUUsU0FBTixFQUFhLE1BQU0sSUFBSUYsRUFBSyxVQUFVLFFBQVEsd0JBQXdCLEVBQUUsSUFBSUksRUFBRUgsRUFBRSxFQUFFRSxDQUFDLEVBQUVFLEVBQUVILEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUUsRUFBRUosRUFBRUMsRUFBRSxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVHLEVBQUVMLEVBQUUsQ0FBQyxFQUFFRSxFQUFFLENBQUMsRUFBRUYsRUFBRUEsRUFBRUMsRUFBRSxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUUsSUFBSUksRUFBRUUsRUFBRUMsRUFBRUMsRUFBRVIsRUFBRSxPQUFPLEVBQUUsRUFBRVMsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFUCxFQUFFUCxFQUFFLEVBQUVFLENBQUMsRUFBRUYsRUFBRU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFQSxFQUFFLENBQUMsRUFBRVEsRUFBRVIsRUFBRSxDQUFDLEVBQUVTLEVBQUVULEVBQUUsQ0FBQyxFQUFF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T0QsRUFBRUEsRUFBRUEsRUFBRSxNQUFNLEVBQUUsS0FBSyxLQUFLQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUVGLEVBQUUsT0FBTyxPQUFBQyxFQUFFQSxFQUFFLEdBQUcsRUFBRUMsR0FBR0QsSUFBSUQsRUFBRUUsRUFBRSxDQUFDLEVBQUVILEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFRSxFQUFFLENBQUMsRUFBRSxZQUFZRCxFQUFFLEVBQUUsQ0FBQyxHQUFVRCxDQUFDLEVBQUUsUUFBUSxTQUFTQSxFQUFFQyxFQUFFQyxFQUFFLENBQUMsT0FBWUYsSUFBTCxHQUFPQyxHQUFHQyxFQUFFRCxFQUFFLEVBQUVBLEdBQUcsR0FBR0QsR0FBRyxjQUFjQSxDQUFDLEVBQUUsV0FBVyxTQUFTQSxFQUFFLENBQUMsT0FBTyxLQUFLLE1BQU1BLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxNQUFNLFNBQVNBLEVBQUVDLEVBQUUsQ0FBQyxHQUFHRixFQUFLLFNBQVMsVUFBVUMsQ0FBQyxJQUFJRCxFQUFLLFNBQVMsVUFBVUUsQ0FBQyxFQUFFLE1BQU0sR0FBRyxJQUFJQyxFQUFFLEVBQUVDLEVBQUUsSUFBSUEsRUFBRSxFQUFFQSxFQUFFSCxFQUFFLE9BQU9HLElBQUlELEdBQUdGLEVBQUVHLENBQUMsRUFBRUYsRUFBRUUsQ0FBQyxFQUFFLE9BQzNlRCxJQURrZixDQUNqZixFQUFFLEVBQUUsU0FBU0YsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFDLElBQUlDLEVBQU0sSUFBSkEsRUFBRSxFQUFlRCxJQUFULFNBQWFBLEVBQUUsQ0FBQyxHQUFHLElBQUlGLEVBQUVBLEdBQUcsR0FBR0UsRUFBRSxLQUFLRCxDQUFDLEVBQUVBLEVBQUUsRUFBRSxHQUFPRCxJQUFKLEVBQU0sT0FBT0UsRUFBRSxPQUFPSCxDQUFDLEVBQUUsSUFBSUksRUFBRSxFQUFFQSxFQUFFSixFQUFFLE9BQU9JLElBQUlELEVBQUUsS0FBS0QsRUFBRUYsRUFBRUksQ0FBQyxJQUFJSCxDQUFDLEVBQUVDLEVBQUVGLEVBQUVJLENBQUMsR0FBRyxHQUFHSCxFQUFFLE9BQUFHLEVBQUVKLEVBQUUsT0FBT0EsRUFBRUEsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFQSxFQUFFRCxFQUFLLFNBQVMsV0FBV0ssQ0FBQyxFQUFFRCxFQUFFLEtBQUtKLEVBQUssU0FBUyxRQUFRRSxFQUFFRCxFQUFFLEdBQUcsR0FBR0MsRUFBRUQsRUFBRUUsRUFBRUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQVNBLENBQUMsRUFBRSxFQUFFLFNBQVNILEVBQUVDLEVBQUUsQ0FBQyxNQUFNLENBQUNELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsRUFBRUQsRUFBRSxDQUFDLEVBQUVDLEVBQUUsQ0FBQyxFQUFFRCxFQUFFLENBQUMsRUFBRUMsRUFBRSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxFQUFFQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRSxJQUFJRCxFQUFFLEVBQUVBLEVBQUVELEVBQUUsT0FBTyxFQUFFQyxFQUFFQyxFQUFFRixFQUFFQyxDQUFDLEVBQUVELEVBQUVDLENBQUMsRUFBRUMsSUFBSSxHQUFHQSxJQUFJLEVBQUUsT0FBUUEsRUFBRSxRQUFTLEVBQUVBLEdBQUcsR0FBRyxPQUFPRixDQUFDLENBQUMsRUFDcGRELEVBQUssTUFBTSxXQUFXLENBQUMsU0FBUyxTQUFTQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxHQUFHQyxFQUFFSCxFQUFLLFNBQVMsVUFBVUMsQ0FBQyxFQUFFRyxFQUFFQyxFQUFFLElBQUlELEVBQUUsRUFBRUEsRUFBRUQsRUFBRSxFQUFFQyxJQUFTLEVBQUFBLEVBQUUsS0FBS0MsRUFBRUosRUFBRUcsRUFBRSxDQUFDLEdBQUdGLEdBQUcsT0FBTyxhQUFhRyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUVBLElBQUksRUFBRSxPQUFPLG1CQUFtQixPQUFPSCxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBU0QsRUFBRSxDQUFDQSxFQUFFLFNBQVMs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LFNBQVMsU0FBU0MsRUFBRSxDQUFDLE9BQU9ELEVBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVNBLEVBQUUsQ0FBQyxPQUFPRCxFQUFLLE1BQU0sT0FBTyxPQUFPQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLFNBQVNDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFQSxHQUFHLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRUEsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEVBQUVELEVBQUssS0FBSyxPQUFPLEtBQUssU0FBU0MsRUFBRSxDQUFDLE9BQU8sSUFBSUQsRUFBSyxLQUFLLFNBQVEsT0FBT0MsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUN4Z0JELEVBQUssS0FBSyxPQUFPLFVBQVUsQ0FBQyxVQUFVLElBQUksTUFBTSxVQUFVLENBQUMsWUFBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFTLElBQUksRUFBRSxPQUFPLFNBQVNDLEVBQUUsQ0FBWSxPQUFPQSxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFHLElBQUlDLEVBQUVDLEVBQUUsS0FBSyxFQUFFSCxFQUFLLFNBQVMsT0FBTyxLQUFLLEVBQUVDLENBQUMsRUFBaUQsR0FBL0NDLEVBQUUsS0FBSyxFQUFFRCxFQUFFLEtBQUssRUFBRUMsRUFBRUYsRUFBSyxTQUFTLFVBQVVDLENBQUMsRUFBSyxpQkFBaUJBLEVBQUUsTUFBTSxJQUFJRCxFQUFLLFVBQVUsUUFBUSxxQ0FBcUMsRUFBRSxHQUFpQixPQUFPLFlBQXJCLElBQWlDLENBQUMsSUFBSUksRUFBRSxJQUFJLFlBQVlELENBQUMsRUFBRUUsRUFBRSxFQUFFLElBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVFLEVBQUUsU0FBUyxHQUFHQyxFQUN0ZixJQUFJQSxFQUFFLEVBQUUsQ0FBQyxFQUFFQSxHQUFHLEVBQUVGLEVBQUUsT0FBTyxFQUFFLEdBQUdFLENBQUMsQ0FBQyxLQUFNLEtBQUlILEVBQUUsSUFBSUEsR0FBRyxJQUFJQSxFQUFFLEtBQU9BLEdBQUdELEVBQUVDLEdBQUcsSUFBSSxLQUFLLEVBQUVDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxFQUFFLFNBQVMsVUFBVSxDQUFDLElBQUlGLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFLEtBQUssRUFBRUQsRUFBRUYsRUFBSyxTQUFTLE9BQU9FLEVBQUUsQ0FBQ0YsRUFBSyxTQUFTLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUlDLEVBQUVDLEVBQUUsT0FBTyxFQUFFRCxFQUFFLEdBQUdBLElBQUlDLEVBQUUsS0FBSyxDQUFDLEVBQXlDLElBQXZDQSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssRUFBRSxVQUFXLENBQUMsRUFBTUEsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDLEVBQUVBLEVBQUUsUUFBUSxLQUFLLEVBQUVBLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQUssTUFBTSxFQUFTQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsU0FBU0YsRUFBRUEsRUFBRSxDQUFDLE1BQU8sYUFBYUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0QsRUFBRSxFQUFFQSxFQUFFQSxHQUFHRCxFQUFFQyxJQUFJLEdBQU9ELEVBQUVDLElBQU4sRUFBUSxDQUFDQyxFQUN6ZixHQUFHLEtBQUssQ0FBQ0EsSUFBSSxFQUFFSCxJQUFJLEtBQUssRUFBRUEsQ0FBQyxFQUFFRCxFQUFFLEtBQUssSUFBSUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUVELENBQUMsRUFBRUQsRUFBRSxLQUFLLElBQUlFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTRCxFQUFFLENBQUMsSUFBSUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFQyxFQUFFRixFQUFFLENBQUMsRUFBRUcsRUFBRUgsRUFBRSxDQUFDLEVBQUVLLEVBQUVMLEVBQUUsQ0FBQyxFQUFFTSxFQUFFTixFQUFFLENBQUMsRUFBRU8sRUFBRVAsRUFBRSxDQUFDLEVBQUVRLEVBQUVSLEVBQUUsQ0FBQyxFQUFFUyxFQUFFVCxFQUFFLENBQUMsRUFBRVUsRUFBRVYsRUFBRSxDQUFDLEVBQUUsSUFBSUgsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUksR0FBR0EsRUFBRUMsRUFBRUYsRUFBRUMsQ0FBQyxHQUFHQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsRUFBRSxFQUFFRSxFQUFFSCxFQUFFQyxFQUFFLEdBQUcsRUFBRSxFQUFFQyxFQUFFRixFQUFFQyxFQUFFLEVBQUUsR0FBR0MsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksRUFBRUEsR0FBRyxHQUFHQSxHQUFHLEtBQUtDLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJSCxFQUFFQyxFQUFFLEVBQUUsRUFBRUQsRUFBRUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHQyxFQUFFQSxFQUFFWSxHQUFHSCxJQUFJLEVBQUVBLElBQUksR0FBR0EsSUFBSSxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsR0FBR0EsR0FBRyxJQUFJRSxFQUFFRixHQUFHQyxFQUFFQyxJQUFJUixFQUFFSixDQUFDLEVBQUVhLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVBLEVBQUVELEVBQUVSLEVBQUUsRUFBRVEsRUFBRUQsRUFBRUEsRUFBRUYsRUFBRUEsRUFBRUQsRUFBRUEsRUFBRUosR0FBR0ssRUFBRUUsRUFBRUMsR0FBR0gsRUFBRUUsS0FBS0YsSUFBSSxFQUFFQSxJQUFJLEdBQUdBLElBQUksR0FBR0EsR0FBRyxHQUFHQSxHQUFHLEdBQUdBLEdBQUcsSUFBSSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVFLEVBQ3BmLEVBQUVGLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRUcsRUFBRSxFQUFFSCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVLLEVBQUUsRUFBRUwsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFTSxFQUFFLEVBQUVOLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRU8sRUFBRSxFQUFFUCxFQUFFLENBQUMsRUFBRUEsRUFBRSxDQUFDLEVBQUVRLEVBQUUsRUFBRVIsRUFBRSxDQUFDLEVBQUVBLEVBQUUsQ0FBQyxFQUFFUyxFQUFFLEVBQUVULEVBQUUsQ0FBQyxFQUFFQSxFQUFFLENBQUMsRUFBRVUsRUFBRSxDQUFDLENBQUMsRUFBRWYsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFQSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsRUFBRUQsRUFBSyxLQUFLLE9BQU8sS0FBSyxTQUFTQyxFQUFFLENBQUMsT0FBTyxJQUFJRCxFQUFLLEtBQUssU0FBUSxPQUFPQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQy9TRCxFQUFLLEtBQUssT0FBTyxVQUFVLENBQUMsVUFBVSxLQUFLLE1BQU0sVUFBVSxDQUFDLFlBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBUyxJQUFJLEVBQUUsT0FBTyxTQUFTQyxFQUFFLENBQVksT0FBT0EsR0FBbEIsV0FBc0JBLEVBQUVELEVBQUssTUFBTSxXQUFXLE9BQU9DLENBQUMsR0FBRyxJQUFJQyxFQUFFQyxFQUFFLEtBQUssRUFBRUgsRUFBSyxTQUFTLE9BQU8sS0FBSyxFQUFFQyxDQUFDLEVBQWlELEdBQS9DQyxFQUFFLEtBQUssRUFBRUQsRUFBRSxLQUFLLEVBQUVDLEVBQUVGLEVBQUssU0FBUyxVQUFVQyxDQUFDLEVBQUssaUJBQWlCQSxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEscUNBQXFDLEVBQUUsR0FBaUIsT0FBTyxZQUFyQixJQUFpQyxDQUFDLElBQUlJLEVBQUUsSUFBSSxZQUFZRCxDQUFDLEVBQUVFLEVBQUUsRUFBRSxJQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFRSxFQUFFLFNBQVMsR0FDdGZDLEVBQUUsSUFBSUEsRUFBRSxFQUFFLENBQUMsRUFBRUEsR0FBRyxFQUFFRixFQUFFLE9BQU8sRUFBRSxHQUFHRSxDQUFDLENBQUMsS0FBTSxLQUFJSCxFQUFFLEtBQUtBLEdBQUcsS0FBS0EsRUFBRSxNQUFNQSxHQUFHRCxFQUFFQyxHQUFHLEtBQUssS0FBSyxFQUFFQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxJQUFJRixFQUFFQyxFQUFFLEtBQUssRUFBRUMsRUFBRSxLQUFLLEVBQUVELEVBQUVGLEVBQUssU0FBUyxPQUFPRSxFQUFFLENBQUNGLEVBQUssU0FBUyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJQyxFQUFFQyxFQUFFLE9BQU8sRUFBRUQsRUFBRSxHQUFHQSxJQUFJQyxFQUFFLEtBQUssQ0FBQyxFQUE2RCxJQUEzREEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLENBQUMsRUFBRUEsRUFBRSxLQUFLLEtBQUssTUFBTSxLQUFLLEVBQUUsVUFBVyxDQUFDLEVBQU1BLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQyxFQUFFQSxFQUFFLFFBQVEsS0FBSyxFQUFFQSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFLLE1BQU0sRUFBU0MsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsUUFBUSxRQUFRLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsUUFBUSxTQUFTLFFBQVEsUUFDbGYsUUFBUSxPQUFPLFFBQVEsUUFBUSxPQUFPLFFBQVEsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxRQUFRLFFBQVEsU0FBUyxTQUFTLFNBQVMsU0FBUyxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsU0FBUyxRQUFRLFNBQVMsUUFBUSxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxRQUFRLFNBQVMsU0FBUyxRQUFRLFFBQVEsU0FBUyxTQUFTLFFBQVEsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLFFBQVEsUUFDcGYsU0FBUyxTQUFTLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxPQUFPLFNBQVMsU0FBUyxRQUFRLFFBQVEsUUFBUSxTQUFTLE9BQU8sRUFBRSxFQUFFLFVBQVUsQ0FBQyxTQUFTRixFQUFFQSxFQUFFLENBQUMsTUFBTyxhQUFhQSxFQUFFLEtBQUssTUFBTUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTQyxFQUFFRCxFQUFFLENBQUMsTUFBTyxnQkFBZUEsRUFBRSxLQUFLLE1BQU1BLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUUUsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUVDLEVBQUUsR0FBR0gsRUFBRUMsSUFBSSxDQUFNLElBQUxFLEVBQUUsR0FBT0Qs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QUVDLEVBQUVSLEVBQUssU0FBU08sRUFBRUMsRUFBRSxFQUFFLElBQUlFLEVBQUVSLEVBQUUsT0FBT1MsRUFBRUgsRUFBRSxVQUFVTixDQUFDLEVBQUVVLEVBQUVGLEVBQUUsR0FBR0csRUFBRUQsRUFBa0csR0FBaEdULEVBQUVLLEVBQUUsT0FBTyxDQUFDQSxFQUFFLFFBQVEsRUFBRUYsRUFBRSxDQUFDLENBQUMsRUFBRUgsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRUMsRUFBRUksRUFBRSxTQUFTRCxFQUFFSCxFQUFFSCxFQUFFLFFBQVFFLENBQUMsQ0FBQyxFQUFFLEVBQUVFLENBQUMsRUFBSyxDQUFDSyxFQUFFLE1BQU0sQ0FBQyxJQUFJTixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSUcsRUFBRSxFQUFFQSxFQUFFRyxFQUFFSCxHQUFHLEVBQUVBLEVBQUVLLElBQUlaLEVBQUssS0FBSyxJQUFJLEdBQUdPLEVBQ3JnQkcsQ0FBQyxFQUFFRSxHQUFHQyxHQUFHVixFQUFFLENBQUMsSUFBSUUsRUFBRUosRUFBRSxRQUFRRSxDQUFDLEVBQUVELEVBQUVLLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUVILEVBQUVLLEVBQUUsQ0FBQyxHQUFHRixFQUFFLENBQUMsRUFBRUgsRUFBRUssRUFBRSxDQUFDLEdBQUdGLEVBQUUsQ0FBQyxFQUFFSCxFQUFFSyxFQUFFLENBQUMsR0FBR0YsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUlELEVBQUUsS0FBS0ksRUFBRSxNQUFNTixFQUFFUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUVYLEVBQUssS0FBSyxLQUFLLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxLQUFLLEVBQUVBLEVBQUVBLEdBQUdGLEVBQUssS0FBSyxPQUFPLElBQUlHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUVDLEVBQUVDLEVBQUVILEVBQUUsVUFBVSxVQUFVLEdBQWtELElBQS9DLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsSUFBSUEsQ0FBQyxFQUFFRCxFQUFFLE9BQU9JLElBQUlKLEVBQUVDLEVBQUUsS0FBS0QsQ0FBQyxHQUFPRyxFQUFFLEVBQUVBLEVBQUVDLEVBQUVELElBQUlELEVBQUUsQ0FBQyxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsRUFBRSxVQUFVRCxFQUFFLENBQUMsRUFBRUMsQ0FBQyxFQUFFSCxFQUFFRyxDQUFDLEVBQUUsV0FBVyxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU9ELEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPQSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJRCxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzWUYsRUFBSyxLQUFLLEtBQUssVUFBVSxRQUFRQSxFQUFLLEtBQUssS0FBSyxVQUFVLElBQUksU0FBU0MsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSUQsRUFBSyxVQUFVLFFBQVEseUNBQXlDLEVBQUUsWUFBSyxPQUFPQyxDQUFDLEVBQVMsS0FBSyxPQUFPQSxDQUFDLENBQUMsRUFBRUQsRUFBSyxLQUFLLEtBQUssVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUVBLEVBQUssS0FBSyxLQUFLLFVBQVUsT0FBTyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLE9BQU9BLENBQUMsQ0FBQyxFQUFFRCxFQUFLLEtBQUssS0FBSyxVQUFVLE9BQU8sVUFBVSxDQUFDLElBQUlDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRUEsRUFBRyxJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUcsT0FBT0EsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFLLE1BQU0sRUFBU0EsQ0FBQyxFQUN2ZUQsRUFBSyxLQUFLLE9BQU8sU0FBU0MsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRUMsRUFBRSxDQUFVLEdBQVRGLEVBQUVBLEdBQUcsSUFBTyxFQUFFQyxHQUFHLEVBQUVELEVBQUUsTUFBTSxJQUFJSCxFQUFLLFVBQVUsUUFBUSwwQkFBMEIsRUFBYSxPQUFPQyxHQUFsQixXQUFzQkEsRUFBRUQsRUFBSyxNQUFNLFdBQVcsT0FBT0MsQ0FBQyxHQUFjLE9BQU9DLEdBQWxCLFdBQXNCQSxFQUFFRixFQUFLLE1BQU0sV0FBVyxPQUFPRSxDQUFDLEdBQUdHLEVBQUVBLEdBQUdMLEVBQUssS0FBSyxLQUFLQyxFQUFFLElBQUlJLEVBQUVKLENBQUMsRUFBRSxJQUFJSyxFQUFFQyxFQUFFQyxFQUFFRSxFQUFFQyxFQUFFLENBQUMsRUFBRUMsRUFBRVosRUFBSyxTQUFTLElBQUlVLEVBQUUsRUFBRSxHQUFHQyxFQUFFLFFBQVFQLEdBQUcsR0FBR00sSUFBSSxDQUFnQyxJQUEvQkwsRUFBRUMsRUFBRUwsRUFBRSxRQUFRVyxFQUFFLE9BQU9WLEVBQUUsQ0FBQ1EsQ0FBQyxDQUFDLENBQUMsRUFBTUgsRUFBRSxFQUFFQSxFQUFFSixFQUFFSSxJQUFJLElBQUlELEVBQUVMLEVBQUUsUUFBUUssQ0FBQyxFQUFFRSxFQUFFLEVBQUVBLEVBQUVGLEVBQUUsT0FBT0UsSUFBSUgsRUFBRUcsQ0FBQyxHQUFHRixFQUFFRSxDQUFDLEVBQUVHLEVBQUVBLEVBQUUsT0FBT04sQ0FBQyxDQUFDLENBQUMsT0FBQUQsSUFBSU8sRUFBRUMsRUFBRSxNQUFNRCxFQUFFUCxDQUFDLEdBQVVPLENBQUMsRUFDbmRYLEVBQUssS0FBSyxTQUFTQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsSUFBSUQsRUFBSyxLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxLQUFLLEVBQUVDLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxHQUFHLE1BQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBTSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLEVBQUUsRUFDeldELEVBQUssS0FBSyxVQUFVLENBQUMsWUFBWSxTQUFTQyxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUVBLEVBQUUsS0FBSyxRQUFRRixDQUFDLEVBQUUsSUFBSUcsRUFBRSxHQUFHRCxJQUFJLEtBQUssRUFBRSxNQUFNLElBQUlKLEVBQUssVUFBVSxTQUFTLHdCQUF3QixFQUFFLEdBQUdJLEVBQUUsS0FBSyxFQUFFLENBQUNBLEVBQUUsRUFBRUEsRUFBRSxLQUFLLEdBQUdDLEVBQUUsQ0FBQyxFQUFFLElBQUlDLEVBQUUsRUFBRUMsRUFBMkMsSUFBekMsS0FBSyxFQUFFRixFQUFFLENBQUMsRUFBRyxJQUFJLE9BQU0sUUFBUSxFQUFFLEtBQUssR0FBT0UsRUFBRSxFQUFFLEdBQUdBLEVBQUVBLElBQUlGLEVBQUUsS0FBSyxXQUFZLEtBQUssT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJRSxFQUFFLEVBQUVBLEVBQUUsS0FBSyxFQUFFLFNBQVNGLEVBQUVBLEVBQUUsT0FBTyxLQUFLLEVBQUVFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRUQsR0FBRyxLQUFLLEVBQUVDLENBQUMsRUFBRSxLQUFLLEVBQUVB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QUFFRixFQUFFRSxDQUFDLENBQUMsQ0FBQyxPQUFPSCxDQUFDLEVBQUUsR0FBRyxTQUFTQSxFQUFFQyxFQUFFLENBQUMsSUFBSUMsRUFBRSxDQUFDLEVBQUVDLEVBQUUsSUFBSUEsS0FBS0gsRUFBRUEsRUFBRSxlQUFlRyxDQUFDLEdBQUdILEVBQUVHLENBQUMsSUFBSUYsRUFBRUUsQ0FBQyxJQUFJRCxFQUFFQyxDQUFDLEVBQUVILEVBQUVHLENBQUMsR0FBRyxPQUFPRCxDQUFDLEVBQUUsR0FBRyxTQUFTRixFQUM1ZkMsRUFBRSxDQUFDLElBQUlDLEVBQUUsQ0FBQyxFQUFFQyxFQUFFLElBQUlBLEVBQUUsRUFBRUEsRUFBRUYsRUFBRSxPQUFPRSxJQUFhSCxFQUFFQyxFQUFFRSxDQUFDLENBQUMsSUFBZixTQUFtQkQsRUFBRUQsRUFBRUUsQ0FBQyxDQUFDLEVBQUVILEVBQUVDLEVBQUVFLENBQUMsQ0FBQyxHQUFHLE9BQU9ELENBQUMsQ0FBQyxFQUFFSCxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLFFBQVFBLEVBQUssS0FBSyxRQUFRQSxFQUFLLEtBQUssR0FBRyxDQUFDLEVBQUVBLEVBQUssS0FBSyxhQUFhLFNBQVNDLEVBQUVDLEVBQUUsQ0FBQyxJQUFJQyxFQUFFSCxFQUFLLEtBQUssR0FBR0ksRUFBRSxPQUFBRixFQUFFQSxHQUFHLENBQUMsRUFBRUUsRUFBRUYsRUFBRSxNQUFNLElBQUlDLEVBQUVBLEVBQUVGLENBQUMsRUFBRUUsRUFBRUYsQ0FBQyxHQUFHLENBQUMsRUFBRUcsRUFBRUQsRUFBRUMsQ0FBQyxFQUFFRCxFQUFFQyxDQUFDLEdBQUcsQ0FBQyxVQUFVRixFQUFFLE1BQU1BLEVBQUUsS0FBSyxPQUFPQSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUVGLEVBQUssT0FBTyxZQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUVHLEVBQVdELEVBQUUsT0FBWCxPQUFnQkUsRUFBRSxVQUFVRixFQUFFLEtBQUtFLEVBQUVELENBQUMsRUFBRUMsRUFBRUQsQ0FBQyxHQUFHSCxFQUFLLEtB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QUNMLENBQ0YsRUFFQSxJQUFNRCxHQUNKRyxHQUNzQyxDQUN0QyxHQUFNLENBQUUsU0FBQUMsQ0FBUyxFQUFJRCxFQUFjLEtBRW5DLE9BQUFSLEVBQU8sc0JBQTJCLFNBQVksQ0FDNUMsUUFBU1UsRUFBSSxFQUFHQSxFQUFJRCxFQUFTLFlBQWFDLElBQ3BDLENBQUNiLElBQVlGLEdBQWVILElBQzlCQyxHQUFNLE1BQU0sRUFHZCxNQUFNQSxHQUFNLElBQUksU0FBWSxDQUMxQixNQUFNa0IsR0FBY0YsRUFBVUMsQ0FBQyxFQUUvQmYsTUFFSUUsSUFBWUYsS0FBaUJILEtBQy9CQyxHQUFNLE1BQU0sQ0FFaEIsQ0FBQyxDQUVMLENBQUMsRUFFREUsS0FFT2dCLEdBQWNGLEVBQVUsQ0FBQyxDQUNsQyIsCiAgIm5hbWVzIjogWyJyZXF1aXJlX2V2ZW50cyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlIiLCAiUmVmbGVjdEFwcGx5IiwgInRhcmdldCIsICJyZWNlaXZlciIsICJhcmdzIiwgIlJlZmxlY3RPd25LZXlzIiwgIlByb2Nlc3NFbWl0V2FybmluZyIsICJ3YXJuaW5nIiwgIk51bWJlcklzTmFOIiwgInZhbHVlIiwgIkV2ZW50RW1pdHRlciIsICJvbmNlIiwgImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCAiY2hlY2tMaXN0ZW5lciIsICJsaXN0ZW5lciIsICJhcmciLCAibiIsICJfZ2V0TWF4TGlzdGVuZXJzIiwgInRoYXQiLCAidHlwZSIsICJpIiwgImRvRXJyb3IiLCAiZXZlbnRzIiwgImVyIiwgImVyciIsICJoYW5kbGVyIiwgImxlbiIsICJsaXN0ZW5lcnMiLCAiYXJyYXlDbG9uZSIsICJfYWRkTGlzdGVuZXIiLCAicHJlcGVuZCIsICJtIiwgImV4aXN0aW5nIiwgInciLCAib25jZVdyYXBwZXIiLCAiX29uY2VXcmFwIiwgInN0YXRlIiwgIndyYXBwZWQiLCAibGlzdCIsICJwb3NpdGlvbiIsICJvcmlnaW5hbExpc3RlbmVyIiwgInNwbGljZU9uZSIsICJrZXlzIiwgImtleSIsICJfbGlzdGVuZXJzIiwgInVud3JhcCIsICJldmxpc3RlbmVyIiwgInVud3JhcExpc3RlbmVycyIsICJlbWl0dGVyIiwgImxpc3RlbmVyQ291bnQiLCAiYXJyIiwgImNvcHkiLCAiaW5kZXgiLCAicmV0IiwgIm5hbWUiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiZXJyb3JMaXN0ZW5lciIsICJyZXNvbHZlciIsICJldmVudFRhcmdldEFnbm9zdGljQWRkTGlzdGVuZXIiLCAiYWRkRXJyb3JIYW5kbGVySWZFdmVudEVtaXR0ZXIiLCAiZmxhZ3MiLCAid3JhcExpc3RlbmVyIiwgInJlcXVpcmVfc2pjbCIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInNqY2wiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsICJoIiwgImFhIiwgImsiLCAibiIsICJsIiwgIm0iLCAicCIsICJ6IiwgIkMiLCAiQiIsICJEIiwgIlAiLCAiZWEiLCAiUSIsICJ0IiwgInIiLCAidSIsICJHIiwgIkUiLCAiSCIsICJGIiwgIlYiLCAiSSIsICJ3IiwgInYiLCAiUiIsICJKIiwgIlMiLCAiSyIsICJXIiwgIkwiLCAicSIsICJ4IiwgInkiLCAiWCIsICJZIiwgIk0iLCAiZmEiLCAiamEiLCAia2EiLCAiZ2EiLCAiYmEiLCAiTiIsICJjYSIsICJPIiwgIlQiLCAiaGEiLCAiaWEiLCAiZGEiLCAiVSIsICJaIiwgInJlcXVpcmVfZXZlbnRlbWl0dGVyMyIsICJfX2NvbW1vbkpTTWluIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhcyIsICJwcmVmaXgiLCAiRXZlbnRzIiwgIkVFIiwgImZuIiwgImNvbnRleHQiLCAib25jZSIsICJhZGRMaXN0ZW5lciIsICJlbWl0dGVyIiwgImV2ZW50IiwgImxpc3RlbmVyIiwgImV2dCIsICJjbGVhckV2ZW50IiwgIkV2ZW50RW1pdHRlciIsICJuYW1lcyIsICJldmVudHMiLCAibmFtZSIsICJoYW5kbGVycyIsICJpIiwgImwiLCAiZWUiLCAibGlzdGVuZXJzIiwgImExIiwgImEyIiwgImEzIiwgImE0IiwgImE1IiwgImxlbiIsICJhcmdzIiwgImxlbmd0aCIsICJqIiwgImltcG9ydF9ldmVudHMiLCAiZXZlbnRzIiwgIkV2ZW50RW1pdHRlciIsICJ1cGRhdGVGaWxlIiwgImx1ZmlGaWxlIiwgImFyZ3MiLCAic2VuZEZpbGVFcnJvciIsICJlcnJvciIsICJpbml0IiwgImRlZmF1bHRFcnJvckNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAibWVzc2FnZSIsICJyZXN1bHQiLCAiY29uZmlnIiwgImRhdGEiLCAibWF5YmVTdGFjayIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAiX192YWx1ZXMiLCAibyIsICJzIiwgIm0iLCAiaSIsICJfX2F3YWl0IiwgInYiLCAiX19hc3luY0dlbmVyYXRvciIsICJnIiwgInEiLCAidmVyYiIsICJhd2FpdFJldHVybiIsICJmIiwgIm4iLCAiYSIsICJiIiwgInJlc3VtZSIsICJzZXR0bGUiLCAiciIsICJmdWxmaWxsIiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAicCIsICJfX2FzeW5jVmFsdWVzIiwgImQiLCAiUmVzdWx0QXN5bmMiLCAiX1Jlc3VsdEFzeW5jIiwgInJlcyIsICJwcm9taXNlIiwgIm5ld1Byb21pc2UiLCAidmFsdWUiLCAiT2siLCAiZXJyb3JGbiIsICJlIiwgIkVyciIsICJmbiIsICJhcmdzIiwgIl9fYXdhaXRlciIsICJlcnJvciIsICJhc3luY1Jlc3VsdExpc3QiLCAiY29tYmluZVJlc3VsdEFzeW5jTGlzdCIsICJjb21iaW5lUmVzdWx0QXN5bmNMaXN0V2l0aEFsbEVycm9ycyIsICJmIiwgIm5ld1JlcyIsICJuZXdWYWx1ZSIsICJvayIsICJfZXJyIiwgInQiLCAiX19hc3luY0dlbmVyYXRvciIsICJfX2F3YWl0IiwgIl9fYXN5bmNEZWxlZ2F0b3IiLCAiX19hc3luY1ZhbHVlcyIsICJzdWNjZXNzQ2FsbGJhY2siLCAiZmFpbHVyZUNhbGxiYWNrIiwgInJlc3VsdCIsICJlcnJBc3luYyIsICJva0FzeW5jIiwgImVyciIsICJmcm9tUHJvbWlzZSIsICJmcm9tU2FmZVByb21pc2UiLCAiZnJvbUFzeW5jVGhyb3dhYmxlIiwgImNvbWJpbmVSZXN1bHRMaXN0IiwgInJlc3VsdExpc3QiLCAiYWNjIiwgImxpc3QiLCAiY29tYmluZVJlc3VsdExpc3RXaXRoQWxsRXJyb3JzIiwgIlJlc3VsdCIsICJmcm9tVGhyb3dhYmxlIiwgImNvbWJpbmUiLCAiY29tYmluZVdpdGhBbGxFcnJvcnMiLCAiT2siLCAidmFsdWUiLCAiZiIsICJvayIsICJfZiIsICJfdmFsdWUiLCAiUmVzdWx0QXN5bmMiLCAiX3YiLCAiX2VyciIsICJfIiwgImNvbmZpZyIsICJjcmVhdGVOZXZlclRocm93RXJyb3IiLCAiRXJyIiwgImVycm9yIiwgImVyciIsICJlcnJBc3luYyIsICJ2IiwgIl9vayIsICJzZWxmIiwgImZyb21UaHJvd2FibGUiLCAiUmVzdWx0IiwgIkJhc2VFcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiY2F1c2UiLCAiY29udGV4dCIsICJfX3B1YmxpY0ZpZWxkIiwgIldlYlNvY2tldEVycm9yIiwgIkJhc2VFcnJvciIsICJXZWJTb2NrZXRDb25uZWN0aW9uRXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJlbnN1cmVFcnJvciIsICJ2YWx1ZSIsICJzdHJpbmdpZmllZCIsICJFbmNvZGluZyIsICJjaGFyc2V0IiwgIm5vUGFkZGluZyIsICJhYiIsICJsZW4iLCAidmlldyIsICJyZXMiLCAic3RyIiwgInZpZXdMZW4iLCAiZW5jMSIsICJlbmMyIiwgImVuYzMiLCAiZW5jNCIsICJpIiwgImoiLCAib2JqIiwgIkVuY29kaW5nIiwgIkRlY29kZSIsICJzdHIiLCAib2JqIiwgIm9iaiIsICJFbmNvZGluZyIsICJEZWNvZGUiLCAic3RyIiwgIm9iaiIsICJpbXBvcnRfbHVmaV9zamNsIiwgIkNyeXB0b0Vycm9yIiwgIkJhc2VFcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiX19wdWJsaWNGaWVsZCIsICJkZWNyeXB0IiwgImtleSIsICJlbmNyeXB0ZWREYXRhIiwgImRhdGEiLCAib2tBc3luYyIsICJEZWNvZGUiLCAic2pjbCIsICJlcnJvciIsICJlcnJBc3luYyIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAiZW5jcnlwdGVkIiwgImltcG9ydEtleSIsICJpbXBvcnRlZEtleSIsICJSZXN1bHRBc3luYyIsICJlcnJvciIsICJEZWNyeXB0aW9uRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiaW1wb3J0S2V5IiwgImtleSIsICJSZXN1bHRBc3luYyIsICJEZWNvZGUiLCAiZXJyb3IiLCAiQ3J5cHRvRXJyb3IiLCAiZW5zdXJlRXJyb3IiLCAiZGVjcnlwdCIsICJrZXkiLCAidmFsdWUiLCAic29ja2V0cyIsICJNQVhfRVJST1JTIiwgIm9uQ2FuY2VsTWVzc2FnZSIsICJkYXRhIiwgImV2ZW50cyIsICJva0FzeW5jIiwgIm9uRG93bmxvYWRNZXNzYWdlIiwgInJlc3BvbnNlIiwgImx1ZmlGaWxlIiwgInJlc3VsdCIsICJtZXRhZGF0YVN0cmluZyIsICJtZXRhZGF0YSIsICJpc1NlcnZlckRvd25sb2FkQ2h1bmtTdWNjZXNzTWV0YWRhdGEiLCAiZGF0YVN0cmluZyIsICJlbmNyeXB0ZWREYXRhIiwgIkRlY29kZSIsICJkZWNyeXB0IiwgImRlY3J5cHRlZFBhcnQiLCAiYnVmZmVyIiwgInVwZGF0ZUZpbGUiLCAiZW5kRG93bmxvYWQiLCAiZXJyb3IiLCAiV2ViU29ja2V0RXJyb3IiLCAiZXJyQXN5bmMiLCAib25VcGxvYWRNZXNzYWdlIiwgIm9uTWVzc2FnZSIsICJlIiwgInRyeVBhcnNlSnNvbiIsICJjYWxsYmFjayIsICJpc0Nvbm5lY3RpbmciLCAic29ja2V0S2V5IiwgImlzU3Bhd25lZCIsICJkb3dubG9hZENodW5rIiwgImx1ZmlGaWxlIiwgImNodW5rTnVtYmVyIiwgIm1lc3NhZ2UiLCAic2VuZE1lc3NhZ2UiLCAiZG93bmxvYWRTb2NrZXRVcmwiLCAiZW5kRG93bmxvYWQiLCAic2VuZE1lc3NhZ2UiLCAic29ja2V0VXJsIiwgImx1ZmlGaWxlIiwgIm1lc3NhZ2UiLCAiaXNTcGF3bmVkIiwgInNvY2tldHMiLCAib2tBc3luYyIsICJzcGF3biIsICJlIiwgIm9uTWVzc2FnZSIsICJzb2NrZXRLZXkiLCAiZXJyb3JDb3VudCIsICJpc0Nvbm5lY3RpbmciLCAiZXZlbnRzIiwgIk1BWF9FUlJPUlMiLCAiZXJyQXN5bmMiLCAiV2ViU29ja2V0Q29ubmVjdGlvbkVycm9yIiwgIndhaXRGb3JDb25uZWN0aW9uIiwgImVycm9yIiwgIlJlc3VsdEFzeW5jIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImVuc3VyZUVycm9yIiwgImJ1aWxkU29ja2V0VXJsIiwgImluc3RhbmNlVXJsIiwgInBhdGhuYW1lIiwgInVybCIsICJkb3dubG9hZFNvY2tldFVybCIsICJsdWZpRmlsZSIsICJ0cnlQYXJzZUpzb24iLCAiZGF0YSIsICJwYXJzZWRPYmplY3QiLCAiaXNTZXJ2ZXJEb3dubG9hZENodW5rU3VjY2Vzc01ldGFkYXRhIiwgIm1lc3NhZ2UiLCAiaW1wb3J0X2luZGV4IiwgIlRpbWVvdXRFcnJvciIsICJtZXNzYWdlIiwgIkFib3J0RXJyb3IiLCAiZ2V0RE9NRXhjZXB0aW9uIiwgImVycm9yTWVzc2FnZSIsICJnZXRBYm9ydGVkUmVhc29uIiwgInNpZ25hbCIsICJyZWFzb24iLCAicFRpbWVvdXQiLCAicHJvbWlzZSIsICJvcHRpb25zIiwgIm1pbGxpc2Vjb25kcyIsICJmYWxsYmFjayIsICJjdXN0b21UaW1lcnMiLCAidGltZXIiLCAiY2FuY2VsYWJsZVByb21pc2UiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiYWJvcnRIYW5kbGVyIiwgInRpbWVvdXRFcnJvciIsICJlcnJvciIsICJsb3dlckJvdW5kIiwgImFycmF5IiwgInZhbHVlIiwgImNvbXBhcmF0b3IiLCAiZmlyc3QiLCAiY291bnQiLCAic3RlcCIsICJpdCIsICJfcXVldWUiLCAiUHJpb3JpdHlRdWV1ZSIsICJfX3ByaXZhdGVBZGQiLCAicnVuIiwgIm9wdGlvbnMiLCAiZWxlbWVudCIsICJfX3ByaXZhdGVHZXQiLCAiaW5kZXgiLCAibG93ZXJCb3VuZCIsICJhIiwgImIiLCAiaXRlbSIsICJfY2FycnlvdmVyQ29uY3VycmVuY3lDb3VudCIsICJfaXNJbnRlcnZhbElnbm9yZWQiLCAiX2ludGVydmFsQ291bnQiLCAiX2ludGVydmFsQ2FwIiwgIl9pbnRlcnZhbCIsICJfaW50ZXJ2YWxFbmQiLCAiX2ludGVydmFsSWQiLCAiX3RpbWVvdXRJZCIsICJfcXVldWUiLCAiX3F1ZXVlQ2xhc3MiLCAiX3BlbmRpbmciLCAiX2NvbmN1cnJlbmN5IiwgIl9pc1BhdXNlZCIsICJfdGhyb3dPblRpbWVvdXQiLCAiX1BRdWV1ZV9pbnN0YW5jZXMiLCAiZG9lc0ludGVydmFsQWxsb3dBbm90aGVyX2dldCIsICJkb2VzQ29uY3VycmVudEFsbG93QW5vdGhlcl9nZXQiLCAibmV4dF9mbiIsICJvblJlc3VtZUludGVydmFsX2ZuIiwgImlzSW50ZXJ2YWxQYXVzZWRfZ2V0IiwgInRyeVRvU3RhcnRBbm90aGVyX2ZuIiwgImluaXRpYWxpemVJbnRlcnZhbElmTmVlZGVkX2ZuIiwgIm9uSW50ZXJ2YWxfZm4iLCAicHJvY2Vzc1F1ZXVlX2ZuIiwgInRocm93T25BYm9ydF9mbiIsICJvbkV2ZW50X2ZuIiwgIlBRdWV1ZSIsICJFdmVudEVtaXR0ZXIiLCAib3B0aW9ucyIsICJfYSIsICJfYiIsICJfYyIsICJfZCIsICJfX3ByaXZhdGVBZGQiLCAiX19wdWJsaWNGaWVsZCIsICJQcmlvcml0eVF1ZXVlIiwgIl9fcHJpdmF0ZVNldCIsICJfX3ByaXZhdGVHZXQiLCAibmV3Q29uY3VycmVuY3kiLCAiX19wcml2YXRlTWV0aG9kIiwgImZ1bmN0aW9uXyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJfX3ByaXZhdGVXcmFwcGVyIiwgIm9wZXJhdGlvbiIsICJwVGltZW91dCIsICJyZXN1bHQiLCAiZXJyb3IiLCAiVGltZW91dEVycm9yIiwgImZ1bmN0aW9ucyIsICJsaW1pdCIsICJub3ciLCAiZGVsYXkiLCAiY2FuSW5pdGlhbGl6ZUludGVydmFsIiwgImpvYiIsICJzaWduYWwiLCAiX3Jlc29sdmUiLCAiZXZlbnQiLCAiZmlsdGVyIiwgImxpc3RlbmVyIiwgIlFVRVVFX0NPTkNVUlJFTkNZX0xJTUlUIiwgInF1ZXVlIiwgIlBRdWV1ZSIsICJpdGVtc0luUXVldWUiLCAiaXNJbml0aWF0ZWQiLCAiaXNQYXVzZWQiLCAiZXZlbnQiLCAiaW5pdCIsICJldmVudHMiLCAidXBkYXRlRmlsZSIsICJidWZmZXIiLCAiaW5kZXgiLCAiZGF0YSIsICJkb3dubG9hZCIsICJlcnJvciIsICJzZW5kRmlsZUVycm9yIiwgIndvcmtlck1lc3NhZ2UiLCAibHVmaUZpbGUiLCAiaSIsICJkb3dubG9hZENodW5rIl0KfQo=
diff --git a/themes/default/public/js/worker/infos.js b/themes/default/public/js/worker/infos.js
index bf16fc3..6e39ceb 100644
--- a/themes/default/public/js/worker/infos.js
+++ b/themes/default/public/js/worker/infos.js
@@ -1,2 +1,2 @@
-var vt=Object.create;var xe=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Ot=(t,e,r)=>e in t?xe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Lt=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Ie=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var xt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of wt(e))!At.call(t,o)&&o!==r&&xe(t,o,{get:()=>e[o],enumerable:!(n=gt(e,o))||n.enumerable});return t};var Me=(t,e,r)=>(r=t!=null?vt(Et(t)):{},xt(e||!t||!t.__esModule?xe(r,"default",{value:t,enumerable:!0}):r,t));var T=(t,e,r)=>Ot(t,typeof e!="symbol"?e+"":e,r);var qe=Ie((kr,De)=>{"use strict";var X=typeof Reflect=="object"?Reflect:null,Fe=X&&typeof X.apply=="function"?X.apply:function(e,r,n){return Function.prototype.apply.call(e,r,n)},pe;X&&typeof X.ownKeys=="function"?pe=X.ownKeys:Object.getOwnPropertySymbols?pe=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:pe=function(e){return Object.getOwnPropertyNames(e)};function Ct(t){console&&console.warn&&console.warn(t)}var He=Number.isNaN||function(e){return e!==e};function p(){p.init.call(this)}De.exports=p;De.exports.once=It;p.EventEmitter=p;p.prototype._events=void 0;p.prototype._eventsCount=0;p.prototype._maxListeners=void 0;var Je=10;function me(t){if(typeof t!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}Object.defineProperty(p,"defaultMaxListeners",{enumerable:!0,get:function(){return Je},set:function(t){if(typeof t!="number"||t<0||He(t))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+t+".");Je=t}});p.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};p.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||He(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function ze(t){return t._maxListeners===void 0?p.defaultMaxListeners:t._maxListeners}p.prototype.getMaxListeners=function(){return ze(this)};p.prototype.emit=function(e){for(var r=[],n=1;n0&&(s=r[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=i[e];if(u===void 0)return!1;if(typeof u=="function")Fe(u,this,r);else for(var f=u.length,h=Ve(u,f),n=0;n0&&s.length>o&&!s.warned){s.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=t,a.type=e,a.count=s.length,Ct(a)}return t}p.prototype.addListener=function(e,r){return Ke(this,e,r,!1)};p.prototype.on=p.prototype.addListener;p.prototype.prependListener=function(e,r){return Ke(this,e,r,!0)};function kt(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Xe(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},o=kt.bind(n);return o.listener=r,n.wrapFn=o,o}p.prototype.once=function(e,r){return me(r),this.on(e,Xe(this,e,r)),this};p.prototype.prependOnceListener=function(e,r){return me(r),this.prependListener(e,Xe(this,e,r)),this};p.prototype.removeListener=function(e,r){var n,o,i,s,a;if(me(r),o=this._events,o===void 0)return this;if(n=o[e],n===void 0)return this;if(n===r||n.listener===r)--this._eventsCount===0?this._events=Object.create(null):(delete o[e],o.removeListener&&this.emit("removeListener",e,n.listener||r));else if(typeof n!="function"){for(i=-1,s=n.length-1;s>=0;s--)if(n[s]===r||n[s].listener===r){a=n[s].listener,i=s;break}if(i<0)return this;i===0?n.shift():Pt(n,i),n.length===1&&(o[e]=n[0]),o.removeListener!==void 0&&this.emit("removeListener",e,a||r)}return this};p.prototype.off=p.prototype.removeListener;p.prototype.removeAllListeners=function(e){var r,n,o;if(n=this._events,n===void 0)return this;if(n.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):n[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete n[e]),this;if(arguments.length===0){var i=Object.keys(n),s;for(o=0;o=0;o--)this.removeListener(e,r[o]);return this};function Ge(t,e,r){var n=t._events;if(n===void 0)return[];var o=n[e];return o===void 0?[]:typeof o=="function"?r?[o.listener||o]:[o]:r?Tt(o):Ve(o,o.length)}p.prototype.listeners=function(e){return Ge(this,e,!0)};p.prototype.rawListeners=function(e){return Ge(this,e,!1)};p.listenerCount=function(t,e){return typeof t.listenerCount=="function"?t.listenerCount(e):$e.call(t,e)};p.prototype.listenerCount=$e;function $e(t){var e=this._events;if(e!==void 0){var r=e[t];if(typeof r=="function")return 1;if(r!==void 0)return r.length}return 0}p.prototype.eventNames=function(){return this._eventsCount>0?pe(this._events):[]};function Ve(t,e){for(var r=new Array(e),n=0;n{"use strict";var c={cipher:{},hash:{},keyexchange:{},mode:{},misc:{},codec:{},exception:{corrupt:function(t){this.toString=function(){return"CORRUPT: "+this.message},this.message=t},invalid:function(t){this.toString=function(){return"INVALID: "+this.message},this.message=t},bug:function(t){this.toString=function(){return"BUG: "+this.message},this.message=t},notReady:function(t){this.toString=function(){return"NOT READY: "+this.message},this.message=t}}};c.cipher.aes=function(t){this.w[0][0][0]||this.C();var e,r,n,o,i=this.w[0][4],s=this.w[1];e=t.length;var a=1;if(e!==4&&e!==6&&e!==8)throw new c.exception.invalid("invalid aes key size");for(this.b=[n=t.slice(0),o=[]],t=e;t<4*e+28;t++)r=n[t-1],(t%e===0||e===8&&t%e===4)&&(r=i[r>>>24]<<24^i[r>>16&255]<<16^i[r>>8&255]<<8^i[r&255],t%e===0&&(r=r<<8^r>>>24^a<<24,a=a<<1^283*(a>>7))),n[t]=n[t-e]^r;for(e=0;t;e++,t--)r=n[e&3?t:t-4],o[e]=4>=t||4>e?r:s[0][i[r>>>24]]^s[1][i[r>>16&255]]^s[2][i[r>>8&255]]^s[3][i[r&255]]};c.cipher.aes.prototype={encrypt:function(t){return rt(this,t,0)},decrypt:function(t){return rt(this,t,1)},w:[[[],[],[],[],[]],[[],[],[],[],[]]],C:function(){var t=this.w[0],e=this.w[1],r=t[4],n=e[4],o,i,s,a=[],u=[],f,h,l,y;for(o=0;256>o;o++)u[(a[o]=o<<1^283*(o>>7))^o]=o;for(i=s=0;!r[i];i^=f||1,s=u[s]||1)for(l=s^s<<1^s<<2^s<<3^s<<4,l=l>>8^l&255^99,r[i]=l,n[l]=i,h=a[o=a[f=a[i]]],y=16843009*h^65537*o^257*f^16843008*i,h=257*a[l]^16843008*l,o=0;4>o;o++)t[o][i]=h=h<<24^h>>>8,e[o][l]=y=y<<24^y>>>8;for(o=0;5>o;o++)t[o]=t[o].slice(0),e[o]=e[o].slice(0)}};function rt(t,e,r){if(e.length!==4)throw new c.exception.invalid("invalid aes block size");var n=t.b[r],o=e[0]^n[0],i=e[r?3:1]^n[1],s=e[2]^n[2];e=e[r?1:3]^n[3];var a,u,f,h=n.length/4-2,l,y=4,d=[0,0,0,0];a=t.w[r],t=a[0];var g=a[1],D=a[2],R=a[3],j=a[4];for(l=0;l>>24]^g[i>>16&255]^D[s>>8&255]^R[e&255]^n[y],u=t[i>>>24]^g[s>>16&255]^D[e>>8&255]^R[o&255]^n[y+1],f=t[s>>>24]^g[e>>16&255]^D[o>>8&255]^R[i&255]^n[y+2],e=t[e>>>24]^g[o>>16&255]^D[i>>8&255]^R[s&255]^n[y+3],y+=4,o=a,i=u,s=f;for(l=0;4>l;l++)d[r?3&-l:l]=j[o>>>24]<<24^j[i>>16&255]<<16^j[s>>8&255]<<8^j[e&255]^n[y++],a=o,o=i,i=s,s=e,e=a;return d}c.bitArray={bitSlice:function(t,e,r){return t=c.bitArray.Y(t.slice(e/32),32-(e&31)).slice(1),r===void 0?t:c.bitArray.clamp(t,r-e)},extract:function(t,e,r){var n=Math.floor(-e-r&31);return((e+r-1^e)&-32?t[e/32|0]<<32-n^t[e/32+1|0]>>>n:t[e/32|0]>>>n)&(1<>e-1,1)),t},partial:function(t,e,r){return t===32?e:(r?e|0:e<<32-t)+1099511627776*t},getPartial:function(t){return Math.round(t/1099511627776)||32},equal:function(t,e){if(c.bitArray.bitLength(t)!==c.bitArray.bitLength(e))return!1;var r=0,n;for(n=0;n