@allbridge/bridge-core-sdk 3.29.1 → 3.29.2-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/index.js +2 -2
- package/dist/browser/index.js.map +3 -3
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/index.js.map +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +3 -3
- package/dist/src/services/bridge/sol/jupiter-service.js +14 -3
- package/dist/src/services/bridge/sol/jupiter-service.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/package.json +1 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var Hs=Object.create;var ka=Object.defineProperty;var Ms=Object.getOwnPropertyDescriptor;var js=Object.getOwnPropertyNames;var Js=Object.getPrototypeOf,zs=Object.prototype.hasOwnProperty;var zt=(o,i)=>()=>(o&&(i=o(o=0)),i);var Ha=(o,i)=>()=>(i||o((i={exports:{}}).exports,i),i.exports),Ma=(o,i)=>{for(var a in i)ka(o,a,{get:i[a],enumerable:!0})},xs=(o,i,a,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of js(i))!zs.call(o,s)&&s!==a&&ka(o,s,{get:()=>i[s],enumerable:!(r=Ms(i,s))||r.enumerable});return o};var at=(o,i,a)=>(a=o!=null?Hs(Js(o)):{},xs(i||!o||!o.__esModule?ka(a,"default",{value:o,enumerable:!0}):a,o));var b=zt(()=>{});function Os(o,i){this.fun=o,this.array=i}function Or(o){var i=Math.floor((Date.now()-xt.now())*.001),a=xt.now()*.001,r=Math.floor(a)+i,s=Math.floor(a%1*1e9);return o&&(r=r-o[0],s=s-o[1],s<0&&(r--,s+=Ja)),[r,s]}var cg,xt,ja,Ja,Qr=zt(()=>{b();C();y();Os.prototype.run=function(){this.fun.apply(null,this.array)};cg={PATH:"/usr/bin",LANG:typeof navigator<"u"?navigator.language+".UTF-8":void 0,PWD:"/",HOME:"/home",TMP:"/tmp"},xt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};xt.now===void 0&&(ja=Date.now(),xt.timing&&xt.timing.navigationStart&&(ja=xt.timing.navigationStart),xt.now=()=>Date.now()-ja);Ja=1e9;Or.bigint=function(o){var i=Or(o);return typeof BigInt>"u"?i[0]*Ja+i[1]:BigInt(i[0]*Ja)+BigInt(i[1])}});var y=zt(()=>{Qr()});function Qs(){if(Kr)return Fn;Kr=!0,Fn.byteLength=u,Fn.toByteArray=I,Fn.fromByteArray=B;for(var o=[],i=[],a=typeof Uint8Array<"u"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,d=r.length;s<d;++s)o[s]=r[s],i[r.charCodeAt(s)]=s;i[45]=62,i[95]=63;function c(W){var N=W.length;if(N%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var Z=W.indexOf("=");Z===-1&&(Z=N);var V=Z===N?0:4-Z%4;return[Z,V]}function u(W){var N=c(W),Z=N[0],V=N[1];return(Z+V)*3/4-V}function p(W,N,Z){return(N+Z)*3/4-Z}function I(W){var N,Z=c(W),V=Z[0],S=Z[1],T=new a(p(W,V,S)),k=0,L=S>0?V-4:V,H;for(H=0;H<L;H+=4)N=i[W.charCodeAt(H)]<<18|i[W.charCodeAt(H+1)]<<12|i[W.charCodeAt(H+2)]<<6|i[W.charCodeAt(H+3)],T[k++]=N>>16&255,T[k++]=N>>8&255,T[k++]=N&255;return S===2&&(N=i[W.charCodeAt(H)]<<2|i[W.charCodeAt(H+1)]>>4,T[k++]=N&255),S===1&&(N=i[W.charCodeAt(H)]<<10|i[W.charCodeAt(H+1)]<<4|i[W.charCodeAt(H+2)]>>2,T[k++]=N>>8&255,T[k++]=N&255),T}function h(W){return o[W>>18&63]+o[W>>12&63]+o[W>>6&63]+o[W&63]}function R(W,N,Z){for(var V,S=[],T=N;T<Z;T+=3)V=(W[T]<<16&16711680)+(W[T+1]<<8&65280)+(W[T+2]&255),S.push(h(V));return S.join("")}function B(W){for(var N,Z=W.length,V=Z%3,S=[],T=16383,k=0,L=Z-V;k<L;k+=T)S.push(R(W,k,k+T>L?L:k+T));return V===1?(N=W[Z-1],S.push(o[N>>2]+o[N<<4&63]+"==")):V===2&&(N=(W[Z-2]<<8)+W[Z-1],S.push(o[N>>10]+o[N>>4&63]+o[N<<2&63]+"=")),S.join("")}return Fn}function Ks(){if(Ur)return ai;Ur=!0;return ai.read=function(o,i,a,r,s){var d,c,u=s*8-r-1,p=(1<<u)-1,I=p>>1,h=-7,R=a?s-1:0,B=a?-1:1,W=o[i+R];for(R+=B,d=W&(1<<-h)-1,W>>=-h,h+=u;h>0;d=d*256+o[i+R],R+=B,h-=8);for(c=d&(1<<-h)-1,d>>=-h,h+=r;h>0;c=c*256+o[i+R],R+=B,h-=8);if(d===0)d=1-I;else{if(d===p)return c?NaN:(W?-1:1)*(1/0);c=c+Math.pow(2,r),d=d-I}return(W?-1:1)*c*Math.pow(2,d-r)},ai.write=function(o,i,a,r,s,d){var c,u,p,I=d*8-s-1,h=(1<<I)-1,R=h>>1,B=s===23?Math.pow(2,-24)-Math.pow(2,-77):0,W=r?0:d-1,N=r?1:-1,Z=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(u=isNaN(i)?1:0,c=h):(c=Math.floor(Math.log(i)/Math.LN2),i*(p=Math.pow(2,-c))<1&&(c--,p*=2),c+R>=1?i+=B/p:i+=B*Math.pow(2,1-R),i*p>=2&&(c++,p/=2),c+R>=h?(u=0,c=h):c+R>=1?(u=(i*p-1)*Math.pow(2,s),c=c+R):(u=i*Math.pow(2,R-1)*Math.pow(2,s),c=0));s>=8;o[a+W]=u&255,W+=N,u/=256,s-=8);for(c=c<<s|u,I+=s;I>0;o[a+W]=c&255,W+=N,c/=256,I-=8);o[a+W-N]|=Z*128},ai}function Er(){if(Dr)return Ot;Dr=!0;let o=Qs(),i=Ks(),a=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Ot.Buffer=c,Ot.SlowBuffer=S,Ot.INSPECT_MAX_BYTES=50;let r=2147483647;Ot.kMaxLength=r,c.TYPED_ARRAY_SUPPORT=s(),!c.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function s(){try{let l=new Uint8Array(1),A={foo:function(){return 42}};return Object.setPrototypeOf(A,Uint8Array.prototype),Object.setPrototypeOf(l,A),l.foo()===42}catch{return!1}}Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}});function d(l){if(l>r)throw new RangeError('The value "'+l+'" is invalid for option "size"');let A=new Uint8Array(l);return Object.setPrototypeOf(A,c.prototype),A}function c(l,A,g){if(typeof l=="number"){if(typeof A=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return h(l)}return u(l,A,g)}c.poolSize=8192;function u(l,A,g){if(typeof l=="string")return R(l,A);if(ArrayBuffer.isView(l))return W(l);if(l==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l);if(At(l,ArrayBuffer)||l&&At(l.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(At(l,SharedArrayBuffer)||l&&At(l.buffer,SharedArrayBuffer)))return N(l,A,g);if(typeof l=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let m=l.valueOf&&l.valueOf();if(m!=null&&m!==l)return c.from(m,A,g);let v=Z(l);if(v)return v;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof l[Symbol.toPrimitive]=="function")return c.from(l[Symbol.toPrimitive]("string"),A,g);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l)}c.from=function(l,A,g){return u(l,A,g)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array);function p(l){if(typeof l!="number")throw new TypeError('"size" argument must be of type number');if(l<0)throw new RangeError('The value "'+l+'" is invalid for option "size"')}function I(l,A,g){return p(l),l<=0?d(l):A!==void 0?typeof g=="string"?d(l).fill(A,g):d(l).fill(A):d(l)}c.alloc=function(l,A,g){return I(l,A,g)};function h(l){return p(l),d(l<0?0:V(l)|0)}c.allocUnsafe=function(l){return h(l)},c.allocUnsafeSlow=function(l){return h(l)};function R(l,A){if((typeof A!="string"||A==="")&&(A="utf8"),!c.isEncoding(A))throw new TypeError("Unknown encoding: "+A);let g=T(l,A)|0,m=d(g),v=m.write(l,A);return v!==g&&(m=m.slice(0,v)),m}function B(l){let A=l.length<0?0:V(l.length)|0,g=d(A);for(let m=0;m<A;m+=1)g[m]=l[m]&255;return g}function W(l){if(At(l,Uint8Array)){let A=new Uint8Array(l);return N(A.buffer,A.byteOffset,A.byteLength)}return B(l)}function N(l,A,g){if(A<0||l.byteLength<A)throw new RangeError('"offset" is outside of buffer bounds');if(l.byteLength<A+(g||0))throw new RangeError('"length" is outside of buffer bounds');let m;return A===void 0&&g===void 0?m=new Uint8Array(l):g===void 0?m=new Uint8Array(l,A):m=new Uint8Array(l,A,g),Object.setPrototypeOf(m,c.prototype),m}function Z(l){if(c.isBuffer(l)){let A=V(l.length)|0,g=d(A);return g.length===0||l.copy(g,0,0,A),g}if(l.length!==void 0)return typeof l.length!="number"||La(l.length)?d(0):B(l);if(l.type==="Buffer"&&Array.isArray(l.data))return B(l.data)}function V(l){if(l>=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return l|0}function S(l){return+l!=l&&(l=0),c.alloc(+l)}c.isBuffer=function(A){return A!=null&&A._isBuffer===!0&&A!==c.prototype},c.compare=function(A,g){if(At(A,Uint8Array)&&(A=c.from(A,A.offset,A.byteLength)),At(g,Uint8Array)&&(g=c.from(g,g.offset,g.byteLength)),!c.isBuffer(A)||!c.isBuffer(g))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(A===g)return 0;let m=A.length,v=g.length;for(let f=0,X=Math.min(m,v);f<X;++f)if(A[f]!==g[f]){m=A[f],v=g[f];break}return m<v?-1:v<m?1:0},c.isEncoding=function(A){switch(String(A).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(A,g){if(!Array.isArray(A))throw new TypeError('"list" argument must be an Array of Buffers');if(A.length===0)return c.alloc(0);let m;if(g===void 0)for(g=0,m=0;m<A.length;++m)g+=A[m].length;let v=c.allocUnsafe(g),f=0;for(m=0;m<A.length;++m){let X=A[m];if(At(X,Uint8Array))f+X.length>v.length?(c.isBuffer(X)||(X=c.from(X)),X.copy(v,f)):Uint8Array.prototype.set.call(v,X,f);else if(c.isBuffer(X))X.copy(v,f);else throw new TypeError('"list" argument must be an Array of Buffers');f+=X.length}return v};function T(l,A){if(c.isBuffer(l))return l.length;if(ArrayBuffer.isView(l)||At(l,ArrayBuffer))return l.byteLength;if(typeof l!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof l);let g=l.length,m=arguments.length>2&&arguments[2]===!0;if(!m&&g===0)return 0;let v=!1;for(;;)switch(A){case"ascii":case"latin1":case"binary":return g;case"utf8":case"utf-8":return Sa(l).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return g*2;case"hex":return g>>>1;case"base64":return xr(l).length;default:if(v)return m?-1:Sa(l).length;A=(""+A).toLowerCase(),v=!0}}c.byteLength=T;function k(l,A,g){let m=!1;if((A===void 0||A<0)&&(A=0),A>this.length||((g===void 0||g>this.length)&&(g=this.length),g<=0)||(g>>>=0,A>>>=0,g<=A))return"";for(l||(l="utf8");;)switch(l){case"hex":return Ue(this,A,g);case"utf8":case"utf-8":return me(this,A,g);case"ascii":return fe(this,A,g);case"latin1":case"binary":return Ge(this,A,g);case"base64":return oe(this,A,g);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,A,g);default:if(m)throw new TypeError("Unknown encoding: "+l);l=(l+"").toLowerCase(),m=!0}}c.prototype._isBuffer=!0;function L(l,A,g){let m=l[A];l[A]=l[g],l[g]=m}c.prototype.swap16=function(){let A=this.length;if(A%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let g=0;g<A;g+=2)L(this,g,g+1);return this},c.prototype.swap32=function(){let A=this.length;if(A%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let g=0;g<A;g+=4)L(this,g,g+3),L(this,g+1,g+2);return this},c.prototype.swap64=function(){let A=this.length;if(A%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let g=0;g<A;g+=8)L(this,g,g+7),L(this,g+1,g+6),L(this,g+2,g+5),L(this,g+3,g+4);return this},c.prototype.toString=function(){let A=this.length;return A===0?"":arguments.length===0?me(this,0,A):k.apply(this,arguments)},c.prototype.toLocaleString=c.prototype.toString,c.prototype.equals=function(A){if(!c.isBuffer(A))throw new TypeError("Argument must be a Buffer");return this===A?!0:c.compare(this,A)===0},c.prototype.inspect=function(){let A="",g=Ot.INSPECT_MAX_BYTES;return A=this.toString("hex",0,g).replace(/(.{2})/g,"$1 ").trim(),this.length>g&&(A+=" ... "),"<Buffer "+A+">"},a&&(c.prototype[a]=c.prototype.inspect),c.prototype.compare=function(A,g,m,v,f){if(At(A,Uint8Array)&&(A=c.from(A,A.offset,A.byteLength)),!c.isBuffer(A))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof A);if(g===void 0&&(g=0),m===void 0&&(m=A?A.length:0),v===void 0&&(v=0),f===void 0&&(f=this.length),g<0||m>A.length||v<0||f>this.length)throw new RangeError("out of range index");if(v>=f&&g>=m)return 0;if(v>=f)return-1;if(g>=m)return 1;if(g>>>=0,m>>>=0,v>>>=0,f>>>=0,this===A)return 0;let X=f-v,D=m-g,ye=Math.min(X,D),pe=this.slice(v,f),Ce=A.slice(g,m);for(let Ae=0;Ae<ye;++Ae)if(pe[Ae]!==Ce[Ae]){X=pe[Ae],D=Ce[Ae];break}return X<D?-1:D<X?1:0};function H(l,A,g,m,v){if(l.length===0)return-1;if(typeof g=="string"?(m=g,g=0):g>2147483647?g=2147483647:g<-2147483648&&(g=-2147483648),g=+g,La(g)&&(g=v?0:l.length-1),g<0&&(g=l.length+g),g>=l.length){if(v)return-1;g=l.length-1}else if(g<0)if(v)g=0;else return-1;if(typeof A=="string"&&(A=c.from(A,m)),c.isBuffer(A))return A.length===0?-1:J(l,A,g,m,v);if(typeof A=="number")return A=A&255,typeof Uint8Array.prototype.indexOf=="function"?v?Uint8Array.prototype.indexOf.call(l,A,g):Uint8Array.prototype.lastIndexOf.call(l,A,g):J(l,[A],g,m,v);throw new TypeError("val must be string, number or Buffer")}function J(l,A,g,m,v){let f=1,X=l.length,D=A.length;if(m!==void 0&&(m=String(m).toLowerCase(),m==="ucs2"||m==="ucs-2"||m==="utf16le"||m==="utf-16le")){if(l.length<2||A.length<2)return-1;f=2,X/=2,D/=2,g/=2}function ye(Ce,Ae){return f===1?Ce[Ae]:Ce.readUInt16BE(Ae*f)}let pe;if(v){let Ce=-1;for(pe=g;pe<X;pe++)if(ye(l,pe)===ye(A,Ce===-1?0:pe-Ce)){if(Ce===-1&&(Ce=pe),pe-Ce+1===D)return Ce*f}else Ce!==-1&&(pe-=pe-Ce),Ce=-1}else for(g+D>X&&(g=X-D),pe=g;pe>=0;pe--){let Ce=!0;for(let Ae=0;Ae<D;Ae++)if(ye(l,pe+Ae)!==ye(A,Ae)){Ce=!1;break}if(Ce)return pe}return-1}c.prototype.includes=function(A,g,m){return this.indexOf(A,g,m)!==-1},c.prototype.indexOf=function(A,g,m){return H(this,A,g,m,!0)},c.prototype.lastIndexOf=function(A,g,m){return H(this,A,g,m,!1)};function ie(l,A,g,m){g=Number(g)||0;let v=l.length-g;m?(m=Number(m),m>v&&(m=v)):m=v;let f=A.length;m>f/2&&(m=f/2);let X;for(X=0;X<m;++X){let D=parseInt(A.substr(X*2,2),16);if(La(D))return X;l[g+X]=D}return X}function ge(l,A,g,m){return ii(Sa(A,l.length-g),l,g,m)}function le(l,A,g,m){return ii(Ps(A),l,g,m)}function ce(l,A,g,m){return ii(xr(A),l,g,m)}function ue(l,A,g,m){return ii(Ss(A,l.length-g),l,g,m)}c.prototype.write=function(A,g,m,v){if(g===void 0)v="utf8",m=this.length,g=0;else if(m===void 0&&typeof g=="string")v=g,m=this.length,g=0;else if(isFinite(g))g=g>>>0,isFinite(m)?(m=m>>>0,v===void 0&&(v="utf8")):(v=m,m=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let f=this.length-g;if((m===void 0||m>f)&&(m=f),A.length>0&&(m<0||g<0)||g>this.length)throw new RangeError("Attempt to write outside buffer bounds");v||(v="utf8");let X=!1;for(;;)switch(v){case"hex":return ie(this,A,g,m);case"utf8":case"utf-8":return ge(this,A,g,m);case"ascii":case"latin1":case"binary":return le(this,A,g,m);case"base64":return ce(this,A,g,m);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ue(this,A,g,m);default:if(X)throw new TypeError("Unknown encoding: "+v);v=(""+v).toLowerCase(),X=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function oe(l,A,g){return A===0&&g===l.length?o.fromByteArray(l):o.fromByteArray(l.slice(A,g))}function me(l,A,g){g=Math.min(l.length,g);let m=[],v=A;for(;v<g;){let f=l[v],X=null,D=f>239?4:f>223?3:f>191?2:1;if(v+D<=g){let ye,pe,Ce,Ae;switch(D){case 1:f<128&&(X=f);break;case 2:ye=l[v+1],(ye&192)===128&&(Ae=(f&31)<<6|ye&63,Ae>127&&(X=Ae));break;case 3:ye=l[v+1],pe=l[v+2],(ye&192)===128&&(pe&192)===128&&(Ae=(f&15)<<12|(ye&63)<<6|pe&63,Ae>2047&&(Ae<55296||Ae>57343)&&(X=Ae));break;case 4:ye=l[v+1],pe=l[v+2],Ce=l[v+3],(ye&192)===128&&(pe&192)===128&&(Ce&192)===128&&(Ae=(f&15)<<18|(ye&63)<<12|(pe&63)<<6|Ce&63,Ae>65535&&Ae<1114112&&(X=Ae))}}X===null?(X=65533,D=1):X>65535&&(X-=65536,m.push(X>>>10&1023|55296),X=56320|X&1023),m.push(X),v+=D}return Ze(m)}let We=4096;function Ze(l){let A=l.length;if(A<=We)return String.fromCharCode.apply(String,l);let g="",m=0;for(;m<A;)g+=String.fromCharCode.apply(String,l.slice(m,m+=We));return g}function fe(l,A,g){let m="";g=Math.min(l.length,g);for(let v=A;v<g;++v)m+=String.fromCharCode(l[v]&127);return m}function Ge(l,A,g){let m="";g=Math.min(l.length,g);for(let v=A;v<g;++v)m+=String.fromCharCode(l[v]);return m}function Ue(l,A,g){let m=l.length;(!A||A<0)&&(A=0),(!g||g<0||g>m)&&(g=m);let v="";for(let f=A;f<g;++f)v+=Ls[l[f]];return v}function _(l,A,g){let m=l.slice(A,g),v="";for(let f=0;f<m.length-1;f+=2)v+=String.fromCharCode(m[f]+m[f+1]*256);return v}c.prototype.slice=function(A,g){let m=this.length;A=~~A,g=g===void 0?m:~~g,A<0?(A+=m,A<0&&(A=0)):A>m&&(A=m),g<0?(g+=m,g<0&&(g=0)):g>m&&(g=m),g<A&&(g=A);let v=this.subarray(A,g);return Object.setPrototypeOf(v,c.prototype),v};function Ye(l,A,g){if(l%1!==0||l<0)throw new RangeError("offset is not uint");if(l+A>g)throw new RangeError("Trying to access beyond buffer length")}c.prototype.readUintLE=c.prototype.readUIntLE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=this[A],f=1,X=0;for(;++X<g&&(f*=256);)v+=this[A+X]*f;return v},c.prototype.readUintBE=c.prototype.readUIntBE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=this[A+--g],f=1;for(;g>0&&(f*=256);)v+=this[A+--g]*f;return v},c.prototype.readUint8=c.prototype.readUInt8=function(A,g){return A=A>>>0,g||Ye(A,1,this.length),this[A]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(A,g){return A=A>>>0,g||Ye(A,2,this.length),this[A]|this[A+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(A,g){return A=A>>>0,g||Ye(A,2,this.length),this[A]<<8|this[A+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),(this[A]|this[A+1]<<8|this[A+2]<<16)+this[A+3]*16777216},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),this[A]*16777216+(this[A+1]<<16|this[A+2]<<8|this[A+3])},c.prototype.readBigUInt64LE=wt(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=g+this[++A]*2**8+this[++A]*2**16+this[++A]*2**24,f=this[++A]+this[++A]*2**8+this[++A]*2**16+m*2**24;return BigInt(v)+(BigInt(f)<<BigInt(32))}),c.prototype.readBigUInt64BE=wt(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=g*2**24+this[++A]*2**16+this[++A]*2**8+this[++A],f=this[++A]*2**24+this[++A]*2**16+this[++A]*2**8+m;return(BigInt(v)<<BigInt(32))+BigInt(f)}),c.prototype.readIntLE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=this[A],f=1,X=0;for(;++X<g&&(f*=256);)v+=this[A+X]*f;return f*=128,v>=f&&(v-=Math.pow(2,8*g)),v},c.prototype.readIntBE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=g,f=1,X=this[A+--v];for(;v>0&&(f*=256);)X+=this[A+--v]*f;return f*=128,X>=f&&(X-=Math.pow(2,8*g)),X},c.prototype.readInt8=function(A,g){return A=A>>>0,g||Ye(A,1,this.length),this[A]&128?(255-this[A]+1)*-1:this[A]},c.prototype.readInt16LE=function(A,g){A=A>>>0,g||Ye(A,2,this.length);let m=this[A]|this[A+1]<<8;return m&32768?m|4294901760:m},c.prototype.readInt16BE=function(A,g){A=A>>>0,g||Ye(A,2,this.length);let m=this[A+1]|this[A]<<8;return m&32768?m|4294901760:m},c.prototype.readInt32LE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),this[A]|this[A+1]<<8|this[A+2]<<16|this[A+3]<<24},c.prototype.readInt32BE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),this[A]<<24|this[A+1]<<16|this[A+2]<<8|this[A+3]},c.prototype.readBigInt64LE=wt(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=this[A+4]+this[A+5]*2**8+this[A+6]*2**16+(m<<24);return(BigInt(v)<<BigInt(32))+BigInt(g+this[++A]*2**8+this[++A]*2**16+this[++A]*2**24)}),c.prototype.readBigInt64BE=wt(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=(g<<24)+this[++A]*2**16+this[++A]*2**8+this[++A];return(BigInt(v)<<BigInt(32))+BigInt(this[++A]*2**24+this[++A]*2**16+this[++A]*2**8+m)}),c.prototype.readFloatLE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),i.read(this,A,!0,23,4)},c.prototype.readFloatBE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),i.read(this,A,!1,23,4)},c.prototype.readDoubleLE=function(A,g){return A=A>>>0,g||Ye(A,8,this.length),i.read(this,A,!0,52,8)},c.prototype.readDoubleBE=function(A,g){return A=A>>>0,g||Ye(A,8,this.length),i.read(this,A,!1,52,8)};function Me(l,A,g,m,v,f){if(!c.isBuffer(l))throw new TypeError('"buffer" argument must be a Buffer instance');if(A>v||A<f)throw new RangeError('"value" argument is out of bounds');if(g+m>l.length)throw new RangeError("Index out of range")}c.prototype.writeUintLE=c.prototype.writeUIntLE=function(A,g,m,v){if(A=+A,g=g>>>0,m=m>>>0,!v){let D=Math.pow(2,8*m)-1;Me(this,A,g,m,D,0)}let f=1,X=0;for(this[g]=A&255;++X<m&&(f*=256);)this[g+X]=A/f&255;return g+m},c.prototype.writeUintBE=c.prototype.writeUIntBE=function(A,g,m,v){if(A=+A,g=g>>>0,m=m>>>0,!v){let D=Math.pow(2,8*m)-1;Me(this,A,g,m,D,0)}let f=m-1,X=1;for(this[g+f]=A&255;--f>=0&&(X*=256);)this[g+f]=A/X&255;return g+m},c.prototype.writeUint8=c.prototype.writeUInt8=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,1,255,0),this[g]=A&255,g+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,65535,0),this[g]=A&255,this[g+1]=A>>>8,g+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,65535,0),this[g]=A>>>8,this[g+1]=A&255,g+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,4294967295,0),this[g+3]=A>>>24,this[g+2]=A>>>16,this[g+1]=A>>>8,this[g]=A&255,g+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,4294967295,0),this[g]=A>>>24,this[g+1]=A>>>16,this[g+2]=A>>>8,this[g+3]=A&255,g+4};function Lr(l,A,g,m,v){zr(A,m,v,l,g,7);let f=Number(A&BigInt(4294967295));l[g++]=f,f=f>>8,l[g++]=f,f=f>>8,l[g++]=f,f=f>>8,l[g++]=f;let X=Number(A>>BigInt(32)&BigInt(4294967295));return l[g++]=X,X=X>>8,l[g++]=X,X=X>>8,l[g++]=X,X=X>>8,l[g++]=X,g}function kr(l,A,g,m,v){zr(A,m,v,l,g,7);let f=Number(A&BigInt(4294967295));l[g+7]=f,f=f>>8,l[g+6]=f,f=f>>8,l[g+5]=f,f=f>>8,l[g+4]=f;let X=Number(A>>BigInt(32)&BigInt(4294967295));return l[g+3]=X,X=X>>8,l[g+2]=X,X=X>>8,l[g+1]=X,X=X>>8,l[g]=X,g+8}c.prototype.writeBigUInt64LE=wt(function(A,g=0){return Lr(this,A,g,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeBigUInt64BE=wt(function(A,g=0){return kr(this,A,g,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeIntLE=function(A,g,m,v){if(A=+A,g=g>>>0,!v){let ye=Math.pow(2,8*m-1);Me(this,A,g,m,ye-1,-ye)}let f=0,X=1,D=0;for(this[g]=A&255;++f<m&&(X*=256);)A<0&&D===0&&this[g+f-1]!==0&&(D=1),this[g+f]=(A/X>>0)-D&255;return g+m},c.prototype.writeIntBE=function(A,g,m,v){if(A=+A,g=g>>>0,!v){let ye=Math.pow(2,8*m-1);Me(this,A,g,m,ye-1,-ye)}let f=m-1,X=1,D=0;for(this[g+f]=A&255;--f>=0&&(X*=256);)A<0&&D===0&&this[g+f+1]!==0&&(D=1),this[g+f]=(A/X>>0)-D&255;return g+m},c.prototype.writeInt8=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,1,127,-128),A<0&&(A=255+A+1),this[g]=A&255,g+1},c.prototype.writeInt16LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,32767,-32768),this[g]=A&255,this[g+1]=A>>>8,g+2},c.prototype.writeInt16BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,32767,-32768),this[g]=A>>>8,this[g+1]=A&255,g+2},c.prototype.writeInt32LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,2147483647,-2147483648),this[g]=A&255,this[g+1]=A>>>8,this[g+2]=A>>>16,this[g+3]=A>>>24,g+4},c.prototype.writeInt32BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,2147483647,-2147483648),A<0&&(A=4294967295+A+1),this[g]=A>>>24,this[g+1]=A>>>16,this[g+2]=A>>>8,this[g+3]=A&255,g+4},c.prototype.writeBigInt64LE=wt(function(A,g=0){return Lr(this,A,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),c.prototype.writeBigInt64BE=wt(function(A,g=0){return kr(this,A,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Hr(l,A,g,m,v,f){if(g+m>l.length)throw new RangeError("Index out of range");if(g<0)throw new RangeError("Index out of range")}function Mr(l,A,g,m,v){return A=+A,g=g>>>0,v||Hr(l,A,g,4),i.write(l,A,g,m,23,4),g+4}c.prototype.writeFloatLE=function(A,g,m){return Mr(this,A,g,!0,m)},c.prototype.writeFloatBE=function(A,g,m){return Mr(this,A,g,!1,m)};function jr(l,A,g,m,v){return A=+A,g=g>>>0,v||Hr(l,A,g,8),i.write(l,A,g,m,52,8),g+8}c.prototype.writeDoubleLE=function(A,g,m){return jr(this,A,g,!0,m)},c.prototype.writeDoubleBE=function(A,g,m){return jr(this,A,g,!1,m)},c.prototype.copy=function(A,g,m,v){if(!c.isBuffer(A))throw new TypeError("argument should be a Buffer");if(m||(m=0),!v&&v!==0&&(v=this.length),g>=A.length&&(g=A.length),g||(g=0),v>0&&v<m&&(v=m),v===m||A.length===0||this.length===0)return 0;if(g<0)throw new RangeError("targetStart out of bounds");if(m<0||m>=this.length)throw new RangeError("Index out of range");if(v<0)throw new RangeError("sourceEnd out of bounds");v>this.length&&(v=this.length),A.length-g<v-m&&(v=A.length-g+m);let f=v-m;return this===A&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(g,m,v):Uint8Array.prototype.set.call(A,this.subarray(m,v),g),f},c.prototype.fill=function(A,g,m,v){if(typeof A=="string"){if(typeof g=="string"?(v=g,g=0,m=this.length):typeof m=="string"&&(v=m,m=this.length),v!==void 0&&typeof v!="string")throw new TypeError("encoding must be a string");if(typeof v=="string"&&!c.isEncoding(v))throw new TypeError("Unknown encoding: "+v);if(A.length===1){let X=A.charCodeAt(0);(v==="utf8"&&X<128||v==="latin1")&&(A=X)}}else typeof A=="number"?A=A&255:typeof A=="boolean"&&(A=Number(A));if(g<0||this.length<g||this.length<m)throw new RangeError("Out of range index");if(m<=g)return this;g=g>>>0,m=m===void 0?this.length:m>>>0,A||(A=0);let f;if(typeof A=="number")for(f=g;f<m;++f)this[f]=A;else{let X=c.isBuffer(A)?A:c.from(A,v),D=X.length;if(D===0)throw new TypeError('The value "'+A+'" is invalid for argument "value"');for(f=0;f<m-g;++f)this[f+g]=X[f%D]}return this};let an={};function Pa(l,A,g){an[l]=class extends g{constructor(){super(),Object.defineProperty(this,"message",{value:A.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${l}]`,this.stack,delete this.name}get code(){return l}set code(v){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:v,writable:!0})}toString(){return`${this.name} [${l}]: ${this.message}`}}}Pa("ERR_BUFFER_OUT_OF_BOUNDS",function(l){return l?`${l} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Pa("ERR_INVALID_ARG_TYPE",function(l,A){return`The "${l}" argument must be of type number. Received type ${typeof A}`},TypeError),Pa("ERR_OUT_OF_RANGE",function(l,A,g){let m=`The value of "${l}" is out of range.`,v=g;return Number.isInteger(g)&&Math.abs(g)>2**32?v=Jr(String(g)):typeof g=="bigint"&&(v=String(g),(g>BigInt(2)**BigInt(32)||g<-(BigInt(2)**BigInt(32)))&&(v=Jr(v)),v+="n"),m+=` It must be ${A}. Received ${v}`,m},RangeError);function Jr(l){let A="",g=l.length,m=l[0]==="-"?1:0;for(;g>=m+4;g-=3)A=`_${l.slice(g-3,g)}${A}`;return`${l.slice(0,g)}${A}`}function Gs(l,A,g){rn(A,"offset"),(l[A]===void 0||l[A+g]===void 0)&&wn(A,l.length-(g+1))}function zr(l,A,g,m,v,f){if(l>g||l<A){let X=typeof A=="bigint"?"n":"",D;throw A===0||A===BigInt(0)?D=`>= 0${X} and < 2${X} ** ${(f+1)*8}${X}`:D=`>= -(2${X} ** ${(f+1)*8-1}${X}) and < 2 ** ${(f+1)*8-1}${X}`,new an.ERR_OUT_OF_RANGE("value",D,l)}Gs(m,v,f)}function rn(l,A){if(typeof l!="number")throw new an.ERR_INVALID_ARG_TYPE(A,"number",l)}function wn(l,A,g){throw Math.floor(l)!==l?(rn(l,g),new an.ERR_OUT_OF_RANGE("offset","an integer",l)):A<0?new an.ERR_BUFFER_OUT_OF_BOUNDS:new an.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${A}`,l)}let Xs=/[^+/0-9A-Za-z-_]/g;function Vs(l){if(l=l.split("=")[0],l=l.trim().replace(Xs,""),l.length<2)return"";for(;l.length%4!==0;)l=l+"=";return l}function Sa(l,A){A=A||1/0;let g,m=l.length,v=null,f=[];for(let X=0;X<m;++X){if(g=l.charCodeAt(X),g>55295&&g<57344){if(!v){if(g>56319){(A-=3)>-1&&f.push(239,191,189);continue}else if(X+1===m){(A-=3)>-1&&f.push(239,191,189);continue}v=g;continue}if(g<56320){(A-=3)>-1&&f.push(239,191,189),v=g;continue}g=(v-55296<<10|g-56320)+65536}else v&&(A-=3)>-1&&f.push(239,191,189);if(v=null,g<128){if((A-=1)<0)break;f.push(g)}else if(g<2048){if((A-=2)<0)break;f.push(g>>6|192,g&63|128)}else if(g<65536){if((A-=3)<0)break;f.push(g>>12|224,g>>6&63|128,g&63|128)}else if(g<1114112){if((A-=4)<0)break;f.push(g>>18|240,g>>12&63|128,g>>6&63|128,g&63|128)}else throw new Error("Invalid code point")}return f}function Ps(l){let A=[];for(let g=0;g<l.length;++g)A.push(l.charCodeAt(g)&255);return A}function Ss(l,A){let g,m,v,f=[];for(let X=0;X<l.length&&!((A-=2)<0);++X)g=l.charCodeAt(X),m=g>>8,v=g%256,f.push(v),f.push(m);return f}function xr(l){return o.toByteArray(Vs(l))}function ii(l,A,g,m){let v;for(v=0;v<m&&!(v+g>=A.length||v>=l.length);++v)A[v+g]=l[v];return v}function At(l,A){return l instanceof A||l!=null&&l.constructor!=null&&l.constructor.name!=null&&l.constructor.name===A.name}function La(l){return l!==l}let Ls=function(){let l="0123456789abcdef",A=new Array(256);for(let g=0;g<16;++g){let m=g*16;for(let v=0;v<16;++v)A[m+v]=l[g]+l[v]}return A}();function wt(l){return typeof BigInt>"u"?ks:l}function ks(){throw new Error("BigInt not supported")}return Ot}var Fn,Kr,ai,Ur,Ot,Dr,_r=zt(()=>{b();C();y();Fn={},Kr=!1;ai={},Ur=!1;Ot={},Dr=!1});var Qt,Y,hg,vg,$r=zt(()=>{b();C();y();_r();Qt=Er();Qt.Buffer;Qt.SlowBuffer;Qt.INSPECT_MAX_BYTES;Qt.kMaxLength;Y=Qt.Buffer,hg=Qt.INSPECT_MAX_BYTES,vg=Qt.kMaxLength});var C=zt(()=>{$r()});import{bcs as $e}from"@mysten/sui/bcs";function bc(o,i=["<",">"]){let[a,r]=i,s=[],d="",c=0;for(let u=0;u<o.length;u++){let p=o[u];if(p===a&&c++,p===r&&c--,c===0&&p===","){s.push(d.trim()),d="";continue}d+=p}return s.push(d.trim()),s}function Je(o){if(typeof o!="string")throw new Error(`Illegal type passed as a name of the type: ${o}`);let[i,a]=["<",">"],r=o.indexOf(i),s=Array.from(o).reverse().indexOf(a);if(r===-1&&s===-1)return{typeName:o,typeArgs:[]};if(r===-1||s===-1)throw new Error(`Unclosed generic in name '${o}'`);let d=o.slice(0,r),c=bc(o.slice(r+1,o.length-s-1),[i,a]);return{typeName:d,typeArgs:c}}function Mo(o){return!o||typeof o!="object"||Array.isArray(o)?!1:"GasCoin"in o||"Input"in o||"Result"in o||"NestedResult"in o}function Q(o,i){return Mo(i)?i:o.object(i)}function nt(o,i,a){if(Mo(i))return Q(o,i);function r(I){let{typeName:h,typeArgs:R}=Je(I);switch(h){case"bool":return $e.Bool;case"u8":return $e.U8;case"u16":return $e.U16;case"u32":return $e.U32;case"u64":return $e.U64;case"u128":return $e.U128;case"u256":return $e.U256;case"address":return $e.Address;case"0x1::string::String":case"0x1::ascii::String":return $e.String;case"0x2::object::ID":return $e.Address;case"0x1::option::Option":return $e.option(r(R[0]));case"vector":return $e.vector(r(R[0]));default:throw new Error(`invalid primitive type ${I}`)}}function s(I){for(let h of I){if(typeof h>"u"||h===null)return!0;if(Array.isArray(h))return s(h)}return!1}function d(I){for(let h of I){if(!Array.isArray(h)){if(h===null)continue;switch(typeof h){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return d(h)}return!0}function c(I){for(let h of I){if(!Array.isArray(h))switch(typeof h){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(h)}return!1}let{typeName:u,typeArgs:p}=Je(a);switch(u){case"0x1::option::Option":if(i===null)return o.pure.option("bool",null);if(d([i]))return o.pure(r(a).serialize(i));if(c([i]))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.moveCall({target:"0x1::option::some",typeArguments:[p[0]],arguments:[nt(o,i,p[0])]});case"vector":if(!Array.isArray(i))throw new Error("expected an array for vector type");if(i.length===0)return o.pure($e.vector($e.Bool).serialize([]));if(s(i))throw new Error("the provided array contains undefined or null values");if(d(i))return o.pure(r(a).serialize(i));if(c(i))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.makeMoveVec({type:p[0],elements:i});default:return o.pure(r(a).serialize(i))}}function yc(o){let i=o.split("0x").join("");for(let a=0;a<i.length;a++)if(i[a]!=="0")return`0x${i.substring(a)}`;return"0x0"}function x(o){let{typeName:i,typeArgs:a}=Je(o);switch(i){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return i;case"vector":return`vector<${x(a[0])}>`;default:{let r=i.split("::");r[0]=yc(r[0]);let s=r.join("::");return a.length>0?`${s}<${a.map(d=>x(d)).join(",")}>`:s}}}function re(o,...i){return i.length>0?`${o}<${i.join(", ")}>`:o}var Le=zt(()=>{"use strict";b();C();y()});var Lt=Ha((PI,jo)=>{"use strict";b();C();y();Le();var Ar=class o{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return x(o.$PACKAGE_ID)}get PUBLISHED_AT(){return x(o.$PUBLISHED_AT)}get PKG_V1(){return x(o.$PKG_V[1])}setPackageId(i){o.$PACKAGE_ID=i}setPublishedAt(i){o.$PUBLISHED_AT=i}setPkgV(i,a){o.$PKG_V[i]=a}setAddress(i,a){o.$PACKAGE_ID=i,o.$PUBLISHED_AT=i,o.$PKG_V[1]=a||i}},Cc=new Ar;jo.exports=Cc});var pr=Ha((OI,Uo)=>{"use strict";b();C();y();Le();var ur=class o{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return x(o.$PACKAGE_ID)}get PUBLISHED_AT(){return x(o.$PUBLISHED_AT)}get PKG_V1(){return x(o.$PKG_V[1])}setPackageId(i){o.$PACKAGE_ID=i}setPublishedAt(i){o.$PUBLISHED_AT=i}setPkgV(i,a){o.$PKG_V[i]=a}setAddress(i,a){o.$PACKAGE_ID=i,o.$PUBLISHED_AT=i,o.$PKG_V[1]=a||i}},Ic=new ur;Uo.exports=Ic});var yr=Ha((th,Eo)=>{"use strict";b();C();y();Le();var br=class o{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return x(o.$PACKAGE_ID)}get PUBLISHED_AT(){return x(o.$PUBLISHED_AT)}get PKG_V1(){return x(o.$PKG_V[1])}setPackageId(i){o.$PACKAGE_ID=i}setPublishedAt(i){o.$PUBLISHED_AT=i}setPkgV(i,a){o.$PKG_V[i]=a}setAddress(i,a){o.$PACKAGE_ID=i,o.$PUBLISHED_AT=i,o.$PKG_V[1]=a||i}},hc=new br;Eo.exports=hc});b();C();y();b();C();y();b();C();y();var ri={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},wg={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Fg={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};b();C();y();b();C();y();b();C();y();import{AlgorandClient as as}from"@algorandfoundation/algokit-utils";import{TronWeb as Gc}from"tronweb";import{Web3 as Xc}from"web3";b();C();y();b();C();y();b();C();y();var Ie=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},G=class extends Ie{constructor(i){super("SdkError",i)}},gt=class extends Ie{constructor(i){super("InvalidAmountError",i)}},Ft=class extends Ie{constructor(i){super("AmountNotEnoughError",i)}},ht=class extends Ie{constructor(i){super("InsufficientPoolLiquidityError",i)}},Xe=class extends Ie{constructor(i){super("JupiterError",i)}},Nt=class extends Ie{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},oi=class extends Ie{constructor(i){super("InvalidMessengerOptionError",i)}},E=class extends Ie{constructor(i){super("MethodNotSupportedError",i)}},Nn=class extends Ie{constructor(i){super("VerifyTxError",i)}},on=class extends Ie{constructor(i){super("InvalidTxError",i)}},si=class extends Ie{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},di=class extends Ie{constructor(i,a,r){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${r}'`)}},Zn=class extends Ie{constructor(i){super("TimeoutError",i)}},ci=class extends Ie{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},Ve=class extends Ie{constructor(i){super("CCTPDoesNotSupportedError",i)}},Pe=class extends Ie{constructor(i){super("OFTDoesNotSupportedError",i)}},Ai=class extends Ie{constructor(i){super("YieldDoesNotSupportedError",i)}},gi=class extends Ie{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Us=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",T.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(Us||{});b();C();y();var qe=(T=>(T.BSC="BSC",T.ETH="ETH",T.BAS="BAS",T.SOL="SOL",T.TRX="TRX",T.POL="POL",T.ARB="ARB",T.CEL="CEL",T.AVA="AVA",T.SRB="SRB",T.STLR="STLR",T.OPT="OPT",T.SUI="SUI",T.SNC="SNC",T.UNI="UNI",T.LIN="LIN",T.ALG="ALG",T.STX="STX",T))(qe||{}),ee=(u=>(u.EVM="EVM",u.SOLANA="SOLANA",u.TRX="TRX",u.SRB="SRB",u.SUI="SUI",u.ALG="ALG",u.STX="STX",u))(ee||{});var Ds={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},Es={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},U=(()=>{let o={...Es};return{addChainsProperties(i){o={...o,...i}},getChainProperty(i){let a=o[i];if(!a)throw new G(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return o},getChainDecimalsByType(i){return Ds[i]}}})();b();C();y();var za=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(za||{}),xa=(d=>(d.ALLBRIDGE="allbridge",d.WORMHOLE="wormhole",d.CCTP="cctp",d.CCTP_V2="cctpV2",d.OFT="oft",d))(xa||{}),De=(d=>(d[d.ALLBRIDGE=1]="ALLBRIDGE",d[d.WORMHOLE=2]="WORMHOLE",d[d.CCTP=3]="CCTP",d[d.CCTP_V2=4]="CCTP_V2",d[d.OFT=5]="OFT",d))(De||{});b();C();y();import{Big as Oa}from"big.js";function se(o,i){throw new Error(i??`Unexpected value: ${o}`)}async function we(o,i){return await o.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function ae(o){if(Oa(o).lte(0))throw new gt("Amount must be greater than zero")}function Qa(o){if(Oa(o).lt(0))throw new gt("Amount must be greater or equal than zero")}function te(o,i,a){let r=Oa(i).toFixed(),[s,d]=r.split(".");if(d&&d.length>a)throw new di(o,d.length,a)}async function li(o,i,a){return await Promise.race([o,new Promise((r,s)=>{setTimeout(()=>s(new Zn(i)),a)})])}async function Ka(o,i,a,r){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let s=0;for(;;)try{return await li(o(),i,r)}catch{if(++s>=a)throw new Zn(i)}}async function qr(o,i,a,r=1.5,s=!1){let d=[],c=0,u=await o();if(d.push(u),!i(u))return d;let p=new Date(Date.now()+a*1e3).valueOf(),I=1e3,h=I;for(;Date.now()<p;){let R=d[d.length-1];if(R===void 0||!i(R))break;c++,s&&console.info(`Waiting ${I}ms before trying again (bringing the total wait time to ${h}ms so far, of total ${a*1e3}ms)`),await new Promise(W=>setTimeout(W,I)),I=I*r,new Date(Date.now()+I).valueOf()>p&&(I=p-Date.now(),s&&console.info(`was gonna wait too long; new waitTime: ${I}ms`)),h=I+h;let B=await o(R);d.push(B),s&&i(B)&&console.info(`${c}. Called ${o.name}; ${d.length} prev attempts. Most recent: ${JSON.stringify(d[d.length-1],null,2)}`)}return d}b();C();y();import{SigningAccount as pd}from"@algorandfoundation/algokit-utils/types/account";import{AlgoAmount as md}from"@algorandfoundation/algokit-utils/types/amount";import bd,{Address as uo}from"algosdk";b();C();y();import{getArc56ReturnValue as _s}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as ui}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as Zl}from"@algorandfoundation/algokit-utils/types/app-factory";var pi={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var P=class o{static get create(){return{_resolveByMethod(i){switch(i.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return o.create.createApplication(i)}throw new Error("Unknown ' + verb + ' method")},createApplication(i){return{...i,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.owner,i.args.chainId,i.args.messenger,i.args.gasOracle]}}}}static optInAsset(i){return{...i,method:"optInAsset(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.asset]}}static swapAndBridge(i){return{...i,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(i.args)?i.args:[i.args.paymentRef,i.args.assetTransferRef,i.args.recipient,i.args.destinationChainId,i.args.receiveToken,i.args.nonce,i.args.budget]}}static swapAndBridgeWithStable(i){return{...i,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.recipient,i.args.destinationChainId,i.args.receiveToken,i.args.nonce,i.args.feeTokenAmount,i.args.budget]}}static receiveTokens(i){return{...i,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(i.args)?i.args:[i.args.paymentRef,i.args.amount,i.args.recipient,i.args.sourceChainId,i.args.receiveToken,i.args.nonce,i.args.receiveAmountMin]}}static registerBridge(i){return{...i,method:"registerBridge(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.bridgeAddress]}}static addBridgeToken(i){return{...i,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.tokenAddress]}}static removeBridgeToken(i){return{...i,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.tokenAddress]}}static withdrawGasTokens(i){return{...i,method:"withdrawGasTokens(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amount]}}static withdrawBridgingFeeInTokens(i){return{...i,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.asset]}}static getBridgingCostInTokens(i){return{...i,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(i.args)?i.args:[i.args.destinationChainId,i.args.asset]}}static hashMessage(i){return{...i,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(i.args)?i.args:[i.args.amount,i.args.recipient,i.args.sourceChainId,i.args.destinationChainId,i.args.receiveToken,i.args.nonce]}}static isOtherBridgeTokenSupported(i){return{...i,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.token]}}static getTransactionCost(i){return{...i,method:"getTransactionCost(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static getReceiveTokensCost(i){return{...i,method:"getReceiveTokensCost()uint64",args:Array.isArray(i.args)?i.args:[]}}static getSendTransactionStorageCost(i){return{...i,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(i.args)?i.args:[]}}static swap(i){return{...i,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.receiveAsset,i.args.recipient,i.args.receiveAmountMin,i.args.budget]}}static addPool(i){return{...i,method:"addPool(uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.poolId,i.args.asset]}}static removePool(i){return{...i,method:"removePool(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.tokenId]}}static stopSwap(i){return{...i,method:"stopSwap()void",args:Array.isArray(i.args)?i.args:[]}}static startSwap(i){return{...i,method:"startSwap()void",args:Array.isArray(i.args)?i.args:[]}}static setStopAuthority(i){return{...i,method:"setStopAuthority(address)void",args:Array.isArray(i.args)?i.args:[i.args.stopAuthority]}}static setRebalancer(i){return{...i,method:"setRebalancer(address)void",args:Array.isArray(i.args)?i.args:[i.args.rebalancer]}}static getGasUsage(i){return{...i,method:"getGasUsage(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static setGasUsage(i){return{...i,method:"setGasUsage(byte,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.gasAmount]}}static setGasOracle(i){return{...i,method:"setGasOracle(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.gasOracle]}}static getTransactionRelayerCost(i){return{...i,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static transferOwnership(i){return{...i,method:"transferOwnership(address)void",args:Array.isArray(i.args)?i.args:[i.args.newOwner]}}};var mi=class o{appClient;constructor(i){this.appClient=i instanceof ui?i:new ui({...i,appSpec:pi})}decodeReturnValue(i,a){return a!==void 0?_s(a,this.appClient.getABIMethod(i),pi.structs):void 0}static async fromCreatorAndName(i){return new o(await ui.fromCreatorAndName({...i,appSpec:pi}))}static async fromNetwork(i){return new o(await ui.fromNetwork({...i,appSpec:pi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:i=>this.appClient.params.bare.clearState(i),optInAsset:i=>this.appClient.params.call(P.optInAsset(i)),swapAndBridge:i=>this.appClient.params.call(P.swapAndBridge(i)),swapAndBridgeWithStable:i=>this.appClient.params.call(P.swapAndBridgeWithStable(i)),receiveTokens:i=>this.appClient.params.call(P.receiveTokens(i)),registerBridge:i=>this.appClient.params.call(P.registerBridge(i)),addBridgeToken:i=>this.appClient.params.call(P.addBridgeToken(i)),removeBridgeToken:i=>this.appClient.params.call(P.removeBridgeToken(i)),withdrawGasTokens:i=>this.appClient.params.call(P.withdrawGasTokens(i)),withdrawBridgingFeeInTokens:i=>this.appClient.params.call(P.withdrawBridgingFeeInTokens(i)),getBridgingCostInTokens:i=>this.appClient.params.call(P.getBridgingCostInTokens(i)),hashMessage:i=>this.appClient.params.call(P.hashMessage(i)),isOtherBridgeTokenSupported:i=>this.appClient.params.call(P.isOtherBridgeTokenSupported(i)),getTransactionCost:i=>this.appClient.params.call(P.getTransactionCost(i)),getReceiveTokensCost:(i={args:[]})=>this.appClient.params.call(P.getReceiveTokensCost(i)),getSendTransactionStorageCost:(i={args:[]})=>this.appClient.params.call(P.getSendTransactionStorageCost(i)),swap:i=>this.appClient.params.call(P.swap(i)),addPool:i=>this.appClient.params.call(P.addPool(i)),removePool:i=>this.appClient.params.call(P.removePool(i)),stopSwap:(i={args:[]})=>this.appClient.params.call(P.stopSwap(i)),startSwap:(i={args:[]})=>this.appClient.params.call(P.startSwap(i)),setStopAuthority:i=>this.appClient.params.call(P.setStopAuthority(i)),setRebalancer:i=>this.appClient.params.call(P.setRebalancer(i)),getGasUsage:i=>this.appClient.params.call(P.getGasUsage(i)),setGasUsage:i=>this.appClient.params.call(P.setGasUsage(i)),setGasOracle:i=>this.appClient.params.call(P.setGasOracle(i)),getTransactionRelayerCost:i=>this.appClient.params.call(P.getTransactionRelayerCost(i)),transferOwnership:i=>this.appClient.params.call(P.transferOwnership(i))};createTransaction={clearState:i=>this.appClient.createTransaction.bare.clearState(i),optInAsset:i=>this.appClient.createTransaction.call(P.optInAsset(i)),swapAndBridge:i=>this.appClient.createTransaction.call(P.swapAndBridge(i)),swapAndBridgeWithStable:i=>this.appClient.createTransaction.call(P.swapAndBridgeWithStable(i)),receiveTokens:i=>this.appClient.createTransaction.call(P.receiveTokens(i)),registerBridge:i=>this.appClient.createTransaction.call(P.registerBridge(i)),addBridgeToken:i=>this.appClient.createTransaction.call(P.addBridgeToken(i)),removeBridgeToken:i=>this.appClient.createTransaction.call(P.removeBridgeToken(i)),withdrawGasTokens:i=>this.appClient.createTransaction.call(P.withdrawGasTokens(i)),withdrawBridgingFeeInTokens:i=>this.appClient.createTransaction.call(P.withdrawBridgingFeeInTokens(i)),getBridgingCostInTokens:i=>this.appClient.createTransaction.call(P.getBridgingCostInTokens(i)),hashMessage:i=>this.appClient.createTransaction.call(P.hashMessage(i)),isOtherBridgeTokenSupported:i=>this.appClient.createTransaction.call(P.isOtherBridgeTokenSupported(i)),getTransactionCost:i=>this.appClient.createTransaction.call(P.getTransactionCost(i)),getReceiveTokensCost:(i={args:[]})=>this.appClient.createTransaction.call(P.getReceiveTokensCost(i)),getSendTransactionStorageCost:(i={args:[]})=>this.appClient.createTransaction.call(P.getSendTransactionStorageCost(i)),swap:i=>this.appClient.createTransaction.call(P.swap(i)),addPool:i=>this.appClient.createTransaction.call(P.addPool(i)),removePool:i=>this.appClient.createTransaction.call(P.removePool(i)),stopSwap:(i={args:[]})=>this.appClient.createTransaction.call(P.stopSwap(i)),startSwap:(i={args:[]})=>this.appClient.createTransaction.call(P.startSwap(i)),setStopAuthority:i=>this.appClient.createTransaction.call(P.setStopAuthority(i)),setRebalancer:i=>this.appClient.createTransaction.call(P.setRebalancer(i)),getGasUsage:i=>this.appClient.createTransaction.call(P.getGasUsage(i)),setGasUsage:i=>this.appClient.createTransaction.call(P.setGasUsage(i)),setGasOracle:i=>this.appClient.createTransaction.call(P.setGasOracle(i)),getTransactionRelayerCost:i=>this.appClient.createTransaction.call(P.getTransactionRelayerCost(i)),transferOwnership:i=>this.appClient.createTransaction.call(P.transferOwnership(i))};send={clearState:i=>this.appClient.send.bare.clearState(i),optInAsset:async i=>{let a=await this.appClient.send.call(P.optInAsset(i));return{...a,return:a.return}},swapAndBridge:async i=>{let a=await this.appClient.send.call(P.swapAndBridge(i));return{...a,return:a.return}},swapAndBridgeWithStable:async i=>{let a=await this.appClient.send.call(P.swapAndBridgeWithStable(i));return{...a,return:a.return}},receiveTokens:async i=>{let a=await this.appClient.send.call(P.receiveTokens(i));return{...a,return:a.return}},registerBridge:async i=>{let a=await this.appClient.send.call(P.registerBridge(i));return{...a,return:a.return}},addBridgeToken:async i=>{let a=await this.appClient.send.call(P.addBridgeToken(i));return{...a,return:a.return}},removeBridgeToken:async i=>{let a=await this.appClient.send.call(P.removeBridgeToken(i));return{...a,return:a.return}},withdrawGasTokens:async i=>{let a=await this.appClient.send.call(P.withdrawGasTokens(i));return{...a,return:a.return}},withdrawBridgingFeeInTokens:async i=>{let a=await this.appClient.send.call(P.withdrawBridgingFeeInTokens(i));return{...a,return:a.return}},getBridgingCostInTokens:async i=>{let a=await this.appClient.send.call(P.getBridgingCostInTokens(i));return{...a,return:a.return}},hashMessage:async i=>{let a=await this.appClient.send.call(P.hashMessage(i));return{...a,return:a.return}},isOtherBridgeTokenSupported:async i=>{let a=await this.appClient.send.call(P.isOtherBridgeTokenSupported(i));return{...a,return:a.return}},getTransactionCost:async i=>{let a=await this.appClient.send.call(P.getTransactionCost(i));return{...a,return:a.return}},getReceiveTokensCost:async(i={args:[]})=>{let a=await this.appClient.send.call(P.getReceiveTokensCost(i));return{...a,return:a.return}},getSendTransactionStorageCost:async(i={args:[]})=>{let a=await this.appClient.send.call(P.getSendTransactionStorageCost(i));return{...a,return:a.return}},swap:async i=>{let a=await this.appClient.send.call(P.swap(i));return{...a,return:a.return}},addPool:async i=>{let a=await this.appClient.send.call(P.addPool(i));return{...a,return:a.return}},removePool:async i=>{let a=await this.appClient.send.call(P.removePool(i));return{...a,return:a.return}},stopSwap:async(i={args:[]})=>{let a=await this.appClient.send.call(P.stopSwap(i));return{...a,return:a.return}},startSwap:async(i={args:[]})=>{let a=await this.appClient.send.call(P.startSwap(i));return{...a,return:a.return}},setStopAuthority:async i=>{let a=await this.appClient.send.call(P.setStopAuthority(i));return{...a,return:a.return}},setRebalancer:async i=>{let a=await this.appClient.send.call(P.setRebalancer(i));return{...a,return:a.return}},getGasUsage:async i=>{let a=await this.appClient.send.call(P.getGasUsage(i));return{...a,return:a.return}},setGasUsage:async i=>{let a=await this.appClient.send.call(P.setGasUsage(i));return{...a,return:a.return}},setGasOracle:async i=>{let a=await this.appClient.send.call(P.setGasOracle(i));return{...a,return:a.return}},getTransactionRelayerCost:async i=>{let a=await this.appClient.send.call(P.getTransactionRelayerCost(i));return{...a,return:a.return}},transferOwnership:async i=>{let a=await this.appClient.send.call(P.transferOwnership(i));return{...a,return:a.return}}};clone(i){return new o(this.appClient.clone(i))}async getBridgingCostInTokens(i){return(await this.appClient.send.call(P.getBridgingCostInTokens(i))).return}async hashMessage(i){return(await this.appClient.send.call(P.hashMessage(i))).return}async isOtherBridgeTokenSupported(i){return(await this.appClient.send.call(P.isOtherBridgeTokenSupported(i))).return}async getTransactionCost(i){return(await this.appClient.send.call(P.getTransactionCost(i))).return}async getReceiveTokensCost(i={args:[]}){return(await this.appClient.send.call(P.getReceiveTokensCost(i))).return}async getSendTransactionStorageCost(i={args:[]}){return(await this.appClient.send.call(P.getSendTransactionStorageCost(i))).return}async getGasUsage(i){return(await this.appClient.send.call(P.getGasUsage(i))).return}async getTransactionRelayerCost(i){return(await this.appClient.send.call(P.getTransactionRelayerCost(i))).return}state={global:{getAll:async()=>{let i=await this.appClient.state.global.getAll();return{chainId:i.chainId,messenger:i.messenger,stopAuthority:i.stopAuthority,rebalancer:i.rebalancer,canSwap:i.canSwap,gasOracle:i.gasOracle,owner:i.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let i=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async i=>await this.appClient.state.box.getMapValue("processedMessages",i)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async i=>await this.appClient.state.box.getMapValue("sentMessages",i)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async i=>await this.appClient.state.box.getMapValue("otherBridges",i)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async i=>await this.appClient.state.box.getMapValue("otherBridgeTokens",i)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async i=>await this.appClient.state.box.getMapValue("pools",i)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async i=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",i)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async i=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",i)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async i=>await this.appClient.state.box.getMapValue("gasUsage",i)}}};newGroup(){let i=this,a=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.optInAsset(d))),s.push(void 0),this},swapAndBridge(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapAndBridge(d))),s.push(void 0),this},swapAndBridgeWithStable(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapAndBridgeWithStable(d))),s.push(void 0),this},receiveTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.receiveTokens(d))),s.push(void 0),this},registerBridge(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.registerBridge(d))),s.push(void 0),this},addBridgeToken(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.addBridgeToken(d))),s.push(void 0),this},removeBridgeToken(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.removeBridgeToken(d))),s.push(void 0),this},withdrawGasTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.withdrawGasTokens(d))),s.push(void 0),this},withdrawBridgingFeeInTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.withdrawBridgingFeeInTokens(d))),s.push(void 0),this},getBridgingCostInTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getBridgingCostInTokens(d))),s.push(c=>i.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",c)),this},hashMessage(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.hashMessage(d))),s.push(c=>i.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",c)),this},isOtherBridgeTokenSupported(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.isOtherBridgeTokenSupported(d))),s.push(c=>i.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",c)),this},getTransactionCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getTransactionCost(d))),s.push(c=>i.decodeReturnValue("getTransactionCost(byte)uint64",c)),this},getReceiveTokensCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getReceiveTokensCost(d))),s.push(c=>i.decodeReturnValue("getReceiveTokensCost()uint64",c)),this},getSendTransactionStorageCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getSendTransactionStorageCost(d))),s.push(c=>i.decodeReturnValue("getSendTransactionStorageCost()uint64",c)),this},swap(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swap(d))),s.push(void 0),this},addPool(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.addPool(d))),s.push(void 0),this},removePool(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.removePool(d))),s.push(void 0),this},stopSwap(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.stopSwap(d))),s.push(void 0),this},startSwap(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.startSwap(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setStopAuthority(d))),s.push(void 0),this},setRebalancer(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setRebalancer(d))),s.push(void 0),this},getGasUsage(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getGasUsage(d))),s.push(c=>i.decodeReturnValue("getGasUsage(byte)uint64",c)),this},setGasUsage(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setGasUsage(d))),s.push(void 0),this},setGasOracle(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setGasOracle(d))),s.push(void 0),this},getTransactionRelayerCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getTransactionRelayerCost(d))),s.push(c=>i.decodeReturnValue("getTransactionRelayerCost(byte)uint64",c)),this},transferOwnership(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.transferOwnership(d))),s.push(void 0),this},clearState(d){return r=r.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,c){return r=r.then(()=>a.addTransaction(d,c)),this},async composer(){return await r,a},async simulate(d){await r;let c=await(d?a.simulate(d):a.simulate());return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}},async send(d){await r;let c=await a.send(d);return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}}}}};b();C();y();import{getArc56ReturnValue as $s}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as bi}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as eu}from"@algorandfoundation/algokit-utils/types/app-factory";var yi={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var Ci=class o{appClient;constructor(i){this.appClient=i instanceof bi?i:new bi({...i,appSpec:yi})}decodeReturnValue(i,a){return a!==void 0?$s(a,this.appClient.getABIMethod(i),yi.structs):void 0}static async fromCreatorAndName(i){return new o(await bi.fromCreatorAndName({...i,appSpec:yi}))}static async fromNetwork(i){return new o(await bi.fromNetwork({...i,appSpec:yi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:i=>this.appClient.params.bare.clearState(i),bare:i=>this.appClient.params.bare.call(i)};createTransaction={clearState:i=>this.appClient.createTransaction.bare.clearState(i),bare:i=>this.appClient.createTransaction.bare.call(i)};send={clearState:i=>this.appClient.send.bare.clearState(i),bare:i=>this.appClient.send.bare.call(i)};clone(i){return new o(this.appClient.clone(i))}state={};newGroup(){let i=this,a=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{bare(d){return r=r.then(()=>a.addAppCall(i.params.bare(d))),this},clearState(d){return r=r.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,c){return r=r.then(()=>a.addTransaction(d,c)),this},async composer(){return await r,a},async simulate(d){await r;let c=await(d?a.simulate(d):a.simulate());return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}},async send(d){await r;let c=await a.send(d);return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}}}}};b();C();y();import{populateAppCallResources as qs}from"@algorandfoundation/algokit-utils";import ed,{AtomicTransactionComposer as td,makeBasicAccountTransactionSigner as nd}from"algosdk";function Zt(o){return(o*1e3).microAlgos()}async function Ua(o,i,a){let r=new td,s=nd({addr:i,sk:new Uint8Array(64)});o.forEach(u=>{r.addTransaction({txn:u,signer:s})});let c=(await qs(r,a)).buildGroup().map(u=>u.txn);return Gt(...c)}function Gt(...o){return o.map(a=>ed.encodeUnsignedTransaction(a)).map(a=>Y.from(a).toString("hex"))}async function Ii(o,i,a){typeof o=="string"&&(o=BigInt(o));let s=(await a.account.getInformation(i)).assets;return s?s.find(({assetId:c})=>c===o)!==void 0:!1}async function hi(o,i,a){typeof o=="string"&&(o=BigInt(o));let s=(await a.account.getInformation(i)).appsLocalState;return s?s.find(({id:c})=>c===o)!==void 0:!1}b();C();y();b();C();y();var Se=class{};b();C();y();import{PublicKey as id}from"@solana/web3.js";import{createAddress as oo,parseContractId as ad}from"@stacks/transactions";import{Address as rd}from"@stellar/stellar-sdk";import od,{Address as sd}from"algosdk";import{Big as Fe}from"big.js";import Ao from"randombytes";import{utils as so}from"tronweb";import{Web3 as dd}from"web3";b();C();y();import{Big as j}from"big.js";import Da from"bn.js";b();C();y();function Ea(o,i){return j(100).minus(j(100).times(i).div(o)).toNumber()}function vt(o,i){return Oe(o,i,3).round(0,j.roundDown)}function xe(o,i){return Oe(o,3,i)}function Oe(o,i,a){let r=j(a).minus(i).toNumber();return j(o).times(Gn(r))}function Gn(o){return j(10).pow(o)}function O(o,i){return j(o).times(Gn(i))}function z(o,i){let a=j(o);return a.eq(0)?j(0):j(a).div(Gn(i))}function Te(o){return z(j(o.tokenBalance).minus(o.vUsdBalance).toFixed(),3).div(2).toFixed()}function lt(o,{feeShare:i,decimals:a},r){let s=j(o);if(s.lte(0))return"0";let d=s.times(i),c=s.minus(d),u=vt(c,a),p=j(r.tokenBalance).plus(u),I=ut(p,r.aValue,r.dValue);return j(r.vUsdBalance).minus(I).round(0,j.roundDown).toFixed()}function Xn(o,{feeShare:i,decimals:a},r){let s=j(o);if(s.lte(0))return j(0).toFixed();let d=s.plus(r.vUsdBalance),c=ut(d,r.aValue,r.dValue),u=xe(j(r.tokenBalance).minus(c),a),p=j(u).times(i);return j(u).minus(p).round(0,j.roundDown).toFixed()}function eo(o,i){let a=j(o);if(a.lte(0))return i;let r=a.plus(i.vUsdBalance),s=ut(r,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:s.toFixed(0),vUsdBalance:r.toFixed(0)}}function to(o,{feeShare:i,decimals:a},r){if(j(o).lte(0))return j(0);let s=j(r.vUsdBalance).minus(o);if(s.lte(0))throw new ht;let d=ut(s,r.aValue,r.dValue),c=j(d).minus(r.tokenBalance),u=xe(c,a),p=j(i).div(j(1).minus(i)),I=j(u).times(p).round(0,j.roundUp);return j(u).plus(I).round(0,j.roundDown)}function no(o,{feeShare:i,decimals:a},r){if(j(o).lte(0))return j(0);let s=j(i).div(j(1).minus(i)),d=j(o).times(s).round(0,j.roundUp),c=j(o).plus(d),u=vt(c,a),p=j(r.tokenBalance).minus(u);if(p.lte(0))throw new ht;let I=ut(p,r.aValue,r.dValue);return j(I).minus(r.vUsdBalance).round(0,j.roundDown)}function ut(o,i,a){let r=j(4).times(i).times(j(a).minus(o)).minus(a),s=j(a).pow(3),d=r.pow(2),c=j(o).times(j(o).times(d).plus(j(4).times(i).times(s))).sqrt().round(0,j.roundDown),u=j(8).times(i).times(o),p=r.times(o).plus(c).div(u).round(0,j.roundDown);return p.eq(0)?j(0):p.plus(1)}function io(o,i,a,r){let s=new Da(o),d=new Da(a),c=new Da(i);return s.mul(d).shrn(r).sub(c).toString()}function ao(o){return j(o).gt(0)?`${Number(j(o).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ro(o,i,a){let r=j(i).times(a),s=j(i).plus(a),d=j(8).times(o).times(r).times(s),c=r.times(j(16).times(o).minus(4)).div(3),u=d.times(d),p=c.times(c).times(c),I=u.plus(p),h=j(I).sqrt(),R=j(Math.cbrt(+d.plus(h).toFixed())),B=j(Math.cbrt(+d.minus(h).toFixed()));return R.plus(B).toFixed()}function Rt(o,i,a){let r;switch(i){case"EVM":{r=co(o);break}case"SOLANA":{r=new id(o).toBuffer();break}case"TRX":{r=gd(o);break}case"SRB":{r=new rd(o).toBuffer();break}case"SUI":{r=co(o);break}case"ALG":{r=cd(o);break}case"STX":{r=Ad(o);break}}switch(a){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function rt(o){return o.replace(/^0x/i,"")}function _a(o){return Y.from(o.replace(/^0x/i,""),"hex")}function co(o){let a=_a(o);return Y.concat([Y.alloc(32-a.length,0),a],32)}function cd(o){if(od.isValidAddress(o))return Y.from(sd.fromString(o).publicKey);if(/^\d+$/.test(o)){let i=BigInt(o).toString(16);return i=i.padStart(64,"0"),Y.from(i,"hex")}throw new G(`Unexpected Alg address: ${o}`)}function Ad(o){if(o.includes(".")){let[a,r]=ad(o);if(!a||!r)throw new G(`Unexpected Alg address: ${o}`);let s=Y.from(oo(a).hash160,"hex"),d=dd.utils.keccak256(Y.concat([s,Y.from(r)]));return _a(d)}let i=Y.from(oo(o).hash160,"hex");return go(i,32)}function gd(o){let i=Vn(o),a=_a(i);return go(a,32)}function Vn(o){let i=so.crypto.decodeBase58Address(o);return i?so.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function go(o,i){if(o.length>=i)return o;let a=Y.alloc(i,0);return o.copy(a,i-o.length),a}function pt(){return Ao(32)}function mt(){let o=Ao(32).readBigInt64BE();return o<0?o*-1n:o}function Ee(o,i){let a={},r=i.sourceToken;switch(a.amount=O(i.amount,r.decimals).toFixed(),a.contractAddress=r.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,o){case"SUI":{if(!r.originTokenAddress)throw new G("SUI sourceToken must contain 'originTokenAddress'");a.fromTokenAddress=r.originTokenAddress;break}case"ALG":{a.fromTokenAddress=r.tokenAddress;break}default:a.fromTokenAddress=Rt(r.tokenAddress,o,o)}switch(a.toAccountAddress=i.toAccountAddress,o){case"SUI":{if(!i.destinationToken.originTokenAddress)throw new G("SUI destinationToken must contain 'originTokenAddress'");a.toTokenAddress=i.destinationToken.originTokenAddress;break}case"ALG":{a.toTokenAddress=i.destinationToken.tokenAddress;break}default:a.toTokenAddress=Rt(i.destinationToken.tokenAddress,o,o)}return a.minimumReceiveAmount=i.minimumReceiveAmount?O(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Qe(o,i,a){let r={};r.fromChainId=i.sourceToken.allbridgeChainId,r.fromChainSymbol=i.sourceToken.chainSymbol;let s=U.getChainProperty(i.destinationToken.chainSymbol).chainType;if(o==="SUI"){if(!i.sourceToken.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=i.sourceToken.originTokenAddress}else r.fromTokenAddress=i.sourceToken.tokenAddress;if(r.toChainId=i.destinationToken.allbridgeChainId,r.toTokenAddress=i.destinationToken.tokenAddress,r.gasFeePaymentMethod=i.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!i.sourceToken.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");let d=i.sourceToken;switch(i.messenger){case 3:if(!d.cctpAddress||!i.destinationToken.cctpAddress)throw new Ve("Such route does not support CCTP protocol");r.contractAddress=d.cctpAddress;break;case 4:if(!d.cctpV2Address||!i.destinationToken.cctpV2Address)throw new Ve("Such route does not support CCTP V2 protocol");r.contractAddress=d.cctpV2Address;break;case 5:if(!d.oftBridgeAddress||!i.destinationToken.oftBridgeAddress||d.oftId!==i.destinationToken.oftId)throw new Pe("Such route does not support OFT protocol");r.contractAddress=d.oftBridgeAddress;break;case 1:case 2:r.contractAddress=d.bridgeAddress;break}r.messenger=i.messenger,r.fromAccountAddress=i.fromAccountAddress,r.amount=O(i.amount,d.decimals).toFixed();let{fee:c,feeFormat:u}=i;if(!c){let R=(await $a(i.sourceToken,r.toChainId,r.messenger,a))[r.gasFeePaymentMethod];if(!R)throw new Nt;c=R.int,u="int"}if(u=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=O(c,U.getChainDecimalsByType(d.chainType)).toFixed(0);break;case"stablecoin":r.fee=O(c,d.decimals).toFixed(0);break;case"abr":if(!d.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");r.fee=O(c,d.abrPayer.abrToken.decimals).toFixed(0);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=c;let{extraGas:p,extraGasFormat:I}=i;if(p&&+p>0){let h=await qa(d,i.destinationToken,r.messenger,a),R,B;switch(r.gasFeePaymentMethod){case"native":R=U.getChainDecimalsByType(d.chainType),B=Fe(h.exchangeRate);break;case"stablecoin":R=d.decimals,B=Fe(h.exchangeRate).div(h.sourceNativeTokenPrice);break;case"abr":if(!d.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");if(!h.abrExchangeRate)throw new G("Cannot transfer WITH_ABR option");R=d.abrPayer.abrToken.decimals,B=Fe(h.exchangeRate).div(h.abrExchangeRate);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(I??"int"){case"float":{r.extraGas=O(p,R).toFixed(0);let W=B.mul(p);r.extraGasDest=O(W,U.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,Fe.roundDown);break}case"int":{r.extraGas=p;let W=z(r.extraGas,U.getChainDecimalsByType(d.chainType)),N=B.mul(W);r.extraGasDest=O(N,U.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,Fe.roundDown);break}}ud(r.extraGas,r.gasFeePaymentMethod,h)}switch(["SUI","ALG"].includes(o)||(r.fromTokenAddress=Rt(r.fromTokenAddress,o,o)),r.toAccountAddress=Rt(i.toAccountAddress,s,o),r.toTokenAddress=Rt(r.toTokenAddress,s,o),r.gasFeePaymentMethod){case"native":break;case"stablecoin":ld(r.amount,d.decimals,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:h}=await a.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:i.sourceToken.tokenAddress});r.abrExchangeRate=h;break}default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function ld(o,i,a,r){let s=Fe(o).minus(a).minus(r??0);if(s.lte(0))throw new Ft(`Amount not enough to pay fee, ${z(Fe(s).minus(1).neg(),i).toFixed()} stables is missing`)}async function $a(o,i,a,r){let s=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:i,messenger:a,sourceToken:o.tokenAddress}),d={native:{int:s.fee,float:z(s.fee,U.getChainDecimalsByType(o.chainType)).toFixed()},adminFeeShareWithExtras:s.adminFeeShareWithExtras};if(s.sourceNativeTokenPrice){let c=Oe(new Fe(s.fee).mul(s.sourceNativeTokenPrice),U.getChainDecimalsByType(o.chainType),o.decimals).toFixed(0,Fe.roundUp);d.stablecoin={int:c,float:z(c,o.decimals).toFixed()}}if(s.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[a]){let c=Oe(new Fe(s.fee).mul(s.abrExchangeRate),U.getChainDecimalsByType(o.chainType),o.abrPayer.abrToken.decimals).toFixed(0,Fe.roundUp);d.abr={int:c,float:z(c,o.abrPayer.abrToken.decimals).toFixed()}}return d}function ud(o,i,a){let r=a.extraGasMax[i];if(!r)throw new Nt(`Impossible to pay extra gas by '${i}' payment method`);let s=r.int;if(Fe(o).gt(s))throw new si(`Extra gas ${o} in int format, exceeded limit ${s} for '${i}' payment method`)}async function qa(o,i,a,r){let s={},d=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:a,sourceToken:o.tokenAddress}),c=i.txCostAmount.maxAmount,u=z(c,U.getChainDecimalsByType(i.chainType)).toFixed(),p=Fe(u).div(d.exchangeRate).toFixed(U.getChainDecimalsByType(o.chainType),Fe.roundDown),I=O(p,U.getChainDecimalsByType(o.chainType)).toFixed(0);if(s.native={int:I,float:p},d.sourceNativeTokenPrice){let R=Fe(p).mul(d.sourceNativeTokenPrice).toFixed(o.decimals,Fe.roundDown);s.stablecoin={int:O(R,o.decimals).toFixed(0),float:R}}let h;if(d.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[a]){h=!0;let R=Fe(p).mul(d.abrExchangeRate).toFixed(o.abrPayer.abrToken.decimals,Fe.roundDown);s.abr={int:O(R,o.abrPayer.abrToken.decimals).toFixed(0),float:R}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:c,float:u},swap:{int:i.txCostAmount.swap,float:z(i.txCostAmount.swap,U.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:z(i.txCostAmount.transfer,U.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:d.exchangeRate,abrExchangeRate:h?d.abrExchangeRate:void 0,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}function lo(o){return o.sourceToken.chainSymbol!==o.destinationToken.chainSymbol}var Pn=class extends Se{constructor(a,r){super();this.algorand=a;this.api=r;let s=bd.generateAccount(),d=new pd(s,s.addr);a.setDefaultSigner(d),a.setDefaultValidityWindow(100)}chainType="ALG";send(a){throw new E}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api);if(!a.sourceToken.bridgeId)throw new G("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new G("ALG sourceToken must contain 'paddingUtilId'");let s=BigInt(a.sourceToken.bridgeId),d=this.getBridge(s),c=BigInt(a.sourceToken.paddingUtilId),u=this.getPaddingUtil(c),p=uo.fromString(a.fromAccountAddress),I=BigInt(a.sourceToken.tokenAddress),h=r.toChainId,R=r.toAccountAddress,B=r.toTokenAddress,W=pt(),N=BigInt(r.amount),Z=BigInt(r.fee);r.extraGas&&(Z=Z+BigInt(r.extraGas));let V=this.algorand.newGroup(),S=await this.algorand.createTransaction.assetTransfer({amount:N,assetId:I,receiver:d.appAddress,sender:p});switch(r.gasFeePaymentMethod){case"native":{let H=await this.algorand.createTransaction.payment({amount:md.MicroAlgo(Z),receiver:d.appAddress,sender:p});V.addAppCallMethodCall(await d.params.swapAndBridge({args:{paymentRef:H,assetTransferRef:S,recipient:R,destinationChainId:h,receiveToken:B,nonce:W},sender:p,extraFee:Zt(8)}));break}case"stablecoin":{V.addAppCallMethodCall(await d.params.swapAndBridgeWithStable({args:{assetTransferRef:S,recipient:R,destinationChainId:h,receiveToken:B,nonce:W,feeTokenAmount:Z},sender:p,extraFee:Zt(9)}));break}case"abr":throw new G("ALG bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let T=await this.algorand.createTransaction.appCall({appId:u.appId,sender:p,note:"padding1"});V.addTransaction(T);let k=await this.algorand.createTransaction.appCall({appId:u.appId,sender:p,note:"padding2"});V.addTransaction(k);let{transactions:L}=await V.buildTransactions();return Ua(L,p,this.algorand.client.algod)}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a),s=uo.fromString(a.fromAccountAddress),d=a.toAccountAddress,c=BigInt(a.sourceToken.tokenAddress),u=BigInt(a.destinationToken.tokenAddress),p=BigInt(r.minimumReceiveAmount),I=BigInt(r.amount);if(!a.sourceToken.bridgeId)throw new G("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new G("ALG sourceToken must contain 'paddingUtilId'");let h=BigInt(a.sourceToken.bridgeId),R=this.getBridge(h),B=BigInt(a.sourceToken.paddingUtilId),W=this.getPaddingUtil(B),N=this.algorand.newGroup();a.fromAccountAddress===d&&(await Ii(u,d,this.algorand)||N.addAssetOptIn({sender:s,assetId:u}));let Z=this.algorand.createTransaction.assetTransfer({assetId:c,amount:I,sender:s,receiver:R.appAddress});N.addAppCallMethodCall(await R.params.swap({args:{assetTransferRef:Z,recipient:d,receiveAsset:u,receiveAmountMin:p},sender:s,extraFee:Zt(4)}));let V=await this.algorand.createTransaction.appCall({appId:W.appId,sender:s});N.addTransaction(V);let{transactions:S}=await N.buildTransactions();return Ua(S,s,this.algorand.client.algod)}getBridge(a){return this.algorand.client.getTypedAppClientById(mi,{appId:a})}getPaddingUtil(a){return this.algorand.client.getTypedAppClientById(Ci,{appId:a})}};b();C();y();import{Big as vo}from"big.js";b();C();y();var yd={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},po=yd;b();C();y();var Cd={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},mo=Cd;b();C();y();var Id={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},bo=Id;b();C();y();var hd={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},yo=hd;b();C();y();import*as ho from"@coral-xyz/anchor";import{getAccount as Bd}from"@solana/spl-token";import{PublicKey as Io}from"@solana/web3.js";b();C();y();import*as je from"@coral-xyz/anchor";import{PublicKey as Ke}from"@solana/web3.js";function _e(o,i){return je.utils.token.associatedAddress({mint:i,owner:o})}async function tt(o){let[i]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("config")],o);return i}async function Ri(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("lock"),Uint8Array.from(o)],i);return a}async function Xt(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([o])],i);return a}async function Vt(o){let i=await tt(o),[a]=await Ke.findProgramAddress([i.toBuffer()],o);return a}async function Yi(o,i){let[a]=await Ke.findProgramAddress([o.toBuffer()],i);return a}async function Yt(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("token"),o.toBytes()],i);return a}async function Bi(o,i,a){let[r]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("other_bridge_token"),Y.from([o]),i],a);return r}async function sn(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([o])],i);return a}async function dn(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([o])],i);return a}async function Wi(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("sent_message"),o],i);return a}async function er(o,i,a){let[r]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),o.toBytes()],a);return r}async function fi(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("cctp_bridge"),o.toBytes()],i);return a}async function Co(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("token"),o.toBytes()],i);return a}function Ti(o,i){let[a]=Ke.findProgramAddressSync([je.utils.bytes.utf8.encode("lock"),i.toBuffer()],o);return a}function wi(o,i,a,r){let s=Kt("message_transmitter",a),d=Kt("token_messenger",r),c=Kt("__event_authority",r),u=Kt("token_minter",r),p=Kt("local_token",r,[i]),I=Kt("remote_token_messenger",r,[o.toString()]),h=Kt("sender_authority",r);return{messageTransmitterAccount:s,tokenMessenger:d,tokenMessengerEventAuthority:c,tokenMinter:u,localToken:p,remoteTokenMessengerKey:I,authorityPda:h}}function Kt(o,i,a=[]){let r=[Y.from(je.utils.bytes.utf8.encode(o))];for(let d of a)typeof d=="string"?r.push(Y.from(je.utils.bytes.utf8.encode(d))):Array.isArray(d)?r.push(Y.from(Uint8Array.from(d))):Y.isBuffer(d)?r.push(Y.from(Uint8Array.from(d))):r.push(Y.from(Uint8Array.from(d.toBuffer())));return Ke.findProgramAddressSync(r,i)[0]}b();C();y();import{AnchorProvider as vd}from"@coral-xyz/anchor";import{Connection as Rd,PublicKey as Yd}from"@solana/web3.js";function bt(o,i){let a=new Rd(o,"confirmed"),r=new Yd(i);return new vd(a,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function Fi(o,i,a,r){let s,d=new Io(i),c=new Io(a),u=_e(d,c),p=bt(r,i);ho.setProvider(p);let I=await Bd(p.connection,u);if(I?.owner.equals(d))s=Rt(u.toBase58(),"SOLANA",o);else{let h=await p.connection.getTokenAccountsByOwner(d,{mint:c});if(h.value.length===0&&!I)s=Rt(u.toBase58(),"SOLANA",o);else if(h.value.length>0){let R=h.value[0];if(!R?.pubkey)throw new G("First token account or its public key is undefined");s=Rt(R.pubkey.toBase58(),"SOLANA",o)}else throw new G("Associated account has wrong owner")}return s}var Sn=class extends Se{constructor(a,r,s){super();this.web3=a;this.api=r;this.nodeRpcUrlsConfig=s}chainType="EVM";async send(a){let r=await this.buildRawTransactionSend(a);return this.sendRawTransaction(r)}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toAccountAddress:u,toTokenAddress:p,minimumReceiveAmount:I}=a,R=this.getBridgeContract(s).methods.swap(r,c,p,u,I);return Promise.resolve({from:d,to:s,data:R.encodeABI()})}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api),{amount:s,contractAddress:d,fromAccountAddress:c,fromTokenAddress:u,toChainId:p,toAccountAddress:I,toTokenAddress:h,messenger:R,fee:B,gasFeePaymentMethod:W,extraGas:N,extraGasDest:Z,abrExchangeRate:V}=r,S="0x"+pt().toString("hex"),T,k,L=B;N&&(L=vo(L).plus(N).toFixed());let H;if(W==="abr"){if(!V)throw new G("Cannot find 'abrExchangeRate' for ABR payment method");if(!a.sourceToken.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");H=L;let J=vo(L).div(V);L=Oe(J,a.sourceToken.abrPayer.abrToken.decimals,U.getChainDecimalsByType(a.sourceToken.chainType)).toFixed()}switch(R){case 3:case 4:{let J=await this.buildRawTransactionCctpSend(a,r,L);T=J.sendMethod,k=J.value;break}case 5:{let J=this.buildRawTransactionOftSend(a,r,L,Z);T=J.sendMethod,k=J.value;break}case 1:case 2:{let J=this.getBridgeContract(d);switch(W){case"abr":case"native":{T=J.methods.swapAndBridge(u,s,I,p,h,S,R,0),k=L;break}case"stablecoin":{T=J.methods.swapAndBridge(u,s,I,p,h,S,R,L),k="0";break}default:return se(W,"Unhandled FeePaymentMethod")}}break}if(W==="abr"){if(!a.sourceToken.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");let J=a.sourceToken.abrPayer.payerAddress;if(!H)throw new G("Failed to calculate totalFeeInAbr");let ie=this.getAbrPayerContract(J),le="0x"+T.encodeABI().slice(10),ce=R;return a.destinationToken.chainType==="SOLANA"&&(R===3&&(ce=6),R===4&&(ce=7)),T=ie.methods.transferTokensAndCallTarget(a.sourceToken.tokenAddress,s,H,ce,le),Promise.resolve({from:c,to:J,value:"0",data:T.encodeABI()})}return Promise.resolve({from:c,to:d,value:k,data:T.encodeABI()})}async buildRawTransactionCctpSend(a,r,s){let{amount:d,contractAddress:c,toChainId:u,toAccountAddress:p,gasFeePaymentMethod:I}=r,h=this.getCctpBridgeContract(c),R,B;if(a.destinationToken.chainType==="SOLANA"){let W=await Fi(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(I){case"abr":case"native":{R=h.methods.bridgeWithWalletAddress(d,W,p,u,0),B=s;break}case"stablecoin":{R=h.methods.bridgeWithWalletAddress(d,W,p,u,s),B="0";break}default:return se(I,"Unhandled FeePaymentMethod")}}else switch(I){case"abr":case"native":{R=h.methods.bridge(d,p,u,0),B=s;break}case"stablecoin":{R=h.methods.bridge(d,p,u,s),B="0";break}default:return se(I,"Unhandled FeePaymentMethod")}return{sendMethod:R,value:B}}buildRawTransactionOftSend(a,r,s,d){let{amount:c,contractAddress:u,toChainId:p,toAccountAddress:I,gasFeePaymentMethod:h}=r,R=this.getOftBridgeContract(u),B,W;switch(h){case"abr":case"native":{B=R.methods.bridge(a.sourceToken.tokenAddress,c,I,p,0,d??"0","10"),W=s;break}case"stablecoin":{B=R.methods.bridge(a.sourceToken.tokenAddress,c,I,p,s,d??"0","10"),W="0";break}default:return se(h,"Unhandled FeePaymentMethod")}return{sendMethod:B,value:W}}async sendRawTransaction(a){let r=await this.web3.eth.estimateGas(a),s={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:d}=await this.web3.eth.sendTransaction({...a,gas:r,...s});return{txId:d.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(po.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(mo.abi,a)}getOftBridgeContract(a){return new this.web3.eth.Contract(bo.abi,a)}getAbrPayerContract(a){return new this.web3.eth.Contract(yo.abi,a)}};b();C();y();var Ni=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s}async approve(i,a){let r,s;a?(r=i,s=a):s=i;let d=Ln(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...s,spender:d},r)}async send(i,a){return ae(i.amount),te("amount",i.amount,i.sourceToken.decimals),lo(i)?Zi(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Zi(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};b();C();y();import{Connection as dc}from"@solana/web3.js";b();C();y();import{ComputeBudgetInstruction as Yo,ComputeBudgetProgram as Gi,Connection as Bo,TransactionMessage as Wd}from"@solana/web3.js";import{Big as fd}from"big.js";b();C();y();import{AddressLookupTableAccount as Ro}from"@solana/web3.js";async function Ut(o,i){return await Promise.all(o.message.addressTableLookups.map(async a=>new Ro({key:a.accountKey,state:Ro.deserialize(await i.getAccountInfo(a.accountKey).then(r=>{if(!r)throw new G("Cannot get AccountInfo");return r.data}))})))}b();C();y();b();C();y();var tr="AUTO";async function cn(o,i,a){let r=new Bo(a,"confirmed"),s=(await r.simulateTransaction(o)).value.unitsConsumed;await fo(o.instructions,s,i,r)}async function Wo(o,i,a){let r=new Bo(a,"confirmed"),s=await Ut(o,r),d=Wd.decompile(o.message,{addressLookupTableAccounts:s});if(o.serialize().length>1232)throw new gi;await fo(d.instructions,769230,i,r),o.message=d.compileToV0Message(s)}async function fo(o,i,a,r){if(i<=0)return;let s=Td(i,o),c=ir(a?.solana)?.fee;if(!c||c===tr){await nr(o,r);return}if("pricePerUnitInMicroLamports"in c){await nr(o,r,c.pricePerUnitInMicroLamports);return}let u=fd(c.extraFeeInLamports).div(s).mul(Gn(6)).toFixed(0);await nr(o,r,u)}function ir(o){return o?typeof o!="object"?{fee:o}:"pricePerUnitInMicroLamports"in o||"extraFeeInLamports"in o?{fee:o}:"fee"in o||"payTxFeeWithStablecoinSwap"in o?o:{}:{}}function Td(o,i){let a=i.findIndex(d=>d.programId.equals(Gi.programId)&&Yo.decodeInstructionType(d)==="SetComputeUnitLimit"),r=Number((o*1.3).toFixed(0)),s=Gi.setComputeUnitLimit({units:r});return a>=0?i[a]=s:i.push(s),r.toString()}async function nr(o,i,a){let r=o.findIndex(c=>c.programId.equals(Gi.programId)&&Yo.decodeInstructionType(c)==="SetComputeUnitPrice"),s=BigInt(a||await wd(i)),d=Gi.setComputeUnitPrice({microLamports:s});return r>=0?o[r]=d:o.push(d),s.toString()}async function wd(o){let i=await o.getRecentPrioritizationFees(),a=0;for(let r of i)a+=r.prioritizationFee;return(a/i.length).toFixed(0)}b();C();y();import{BN as gn,Program as ar,web3 as ln}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as Qd,getAssociatedTokenAddressSync as Kd}from"@solana/spl-token";import{Keypair as No,PublicKey as be,SystemProgram as Ud}from"@solana/web3.js";var Pt={};Ma(Pt,{accounts:()=>Gd,address:()=>Fd,default:()=>Pd,errors:()=>Xd,instructions:()=>Zd,metadata:()=>Nd,types:()=>Vd});var Fd="EmLt85sXNvqjzZo3C6BCq55ZzSuvSNFomVnf6b1PgY8R",Nd={name:"bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Zd=[{name:"add_other_bridge_token",discriminator:[103,180,1,186,219,156,185,114],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"adjust_total_lp_amount",discriminator:[8,190,6,31,121,124,62,241],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"admin"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"claim_rewards",discriminator:[4,144,132,71,116,23,151,80],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"deposit",discriminator:[242,35,198,137,82,225,242,182],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"init_deposit_account",discriminator:[136,79,202,206,211,146,182,158],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"initialize_pool",discriminator:[95,180,10,172,84,174,232,40],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"mint"},{name:"token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializePoolArgs"}}}]},{name:"receive_and_swap",discriminator:[49,243,231,17,38,214,140,225],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"receive_and_swap_wormhole",discriminator:[53,141,209,156,114,7,54,229],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"remove_other_bridge_token",discriminator:[149,232,199,145,241,219,24,154],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_allbridge_messenger_program_id",discriminator:[168,21,145,139,97,252,84,77],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_balance_ratio_min",discriminator:[210,171,132,168,93,237,9,201],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"balance_ratio_min_bp",type:"u16"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_pool_admin_fee_share",discriminator:[235,219,45,195,124,82,164,230],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_pool_fee_share",discriminator:[151,35,220,215,38,227,226,9],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_rebalancer",discriminator:[28,161,168,250,215,4,144,154],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"rebalancer"}],args:[]},{name:"set_stop_authority",discriminator:[238,229,235,32,221,191,227,43],accounts:[{name:"admin",signer:!0},{name:"new_authority"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_wormhole_messenger_program_id",discriminator:[215,127,198,117,43,17,36,24],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"start_bridge",discriminator:[213,146,40,152,47,121,85,18],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"stop_bridge",discriminator:[187,52,235,53,245,59,218,1],accounts:[{name:"stop_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"swap",discriminator:[248,198,158,145,225,117,135,200],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"send_mint"},{name:"receive_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"send_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"send_mint"}]}},{name:"receive_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"receive_mint"}]}},{name:"send_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"send_mint"}]}},{name:"receive_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"receive_mint"}]}},{name:"send_user_token",writable:!0},{name:"receive_user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[{name:"amount",type:"u64"},{name:"receive_amount_min",type:"u64"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw",discriminator:[183,18,70,156,148,109,161,34],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount_lp",type:"u64"}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"amount",type:"u64"}]}],Gd=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"OtherBridgeToken",discriminator:[27,112,167,155,2,141,52,167]},{name:"Pool",discriminator:[241,154,109,4,17,177,109,188]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]},{name:"Unlock",discriminator:[187,122,21,254,7,157,241,10]},{name:"UserDeposit",discriminator:[69,238,23,217,255,137,185,35]}],Xd=[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"Pool overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"},{code:6013,name:"EmptyRecipient",msg:"Empty recipient"}],Vd=[{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"rebalancer",type:"pubkey"},{name:"stop_authority",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"can_swap",type:"bool"},{name:"can_deposit",type:"bool"},{name:"can_withdraw",type:"bool"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"sent_token_address",type:"pubkey"},{name:"amount",type:"u64"},{name:"vusd_amount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"OtherBridgeToken",type:{kind:"struct",fields:[]}},{name:"Pool",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"token_balance",type:"u64"},{name:"v_usd_balance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"total_lp_amount",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"acc_reward_per_share_p",type:"u128"},{name:"admin_fee_amount",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"v_usd_amount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"},{name:"source_chain_id",type:"u8"},{name:"receive_token",type:"pubkey"},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"hash",type:{array:["u8",32]}},{name:"receive_amount_min",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"UserDeposit",type:{kind:"struct",fields:[{name:"user_address",type:"pubkey"},{name:"mint",type:"pubkey"},{name:"lp_amount",type:"u64"},{name:"reward_debt",type:"u64"}]}}],Pd={address:Fd,metadata:Nd,instructions:Zd,accounts:Gd,errors:Xd,types:Vd};var kn={};Ma(kn,{accounts:()=>Hd,address:()=>Sd,default:()=>Jd,errors:()=>Md,instructions:()=>kd,metadata:()=>Ld,types:()=>jd});var Sd="XHXBA5WK4PTaLjjVfhPLttXwjeiq18yLdPsBL42YKaY",Ld={name:"cctp_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},kd=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_cctp_token_messenger_minter",discriminator:[7,23,157,231,197,83,45,203],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],Hd=[{name:"CctpBridge",discriminator:[164,2,216,77,99,83,161,159]},{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],Md=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],jd=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"CctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}}],Jd={address:Sd,metadata:Ld,instructions:kd,accounts:Hd,errors:Md,types:jd};b();C();y();import{getAccount as zd}from"@solana/spl-token";import xd from"big.js";import{Web3 as Xi}from"web3";async function An(o,i){return await zd(i.connection,o)}async function Vi(o,i,a){let r=await i.account.pool.fetch(a),s=r.decimals,d=xd(r.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};if(vt(o,s).lte(0))throw new Ft(`Swap amount ${z(o,s).toFixed()} is too small for the liquidity pool. Minimum required amount is 0.001.`);return lt(o,{decimals:s,feeShare:d},c)}function Pi(o){let i=o.amount,a="0x"+o.recipient.toString("hex"),r=o.sourceChainId,s=o.destinationChainId,d="0x"+o.receiveToken.toString("hex"),c="0x"+o.nonce.toString("hex"),u=1,p="0x"+o.chainBridge.toString("hex"),I=Xi.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:r},{t:"bytes32",v:d},{t:"uint256",v:c},{t:"uint8",v:u});if(!I)throw new G("message cannot be undefined");let h=Xi.utils.keccak256(Y.from(I.replace("0x",""),"hex")),R=Y.from(h.replace("0x",""),"hex");R[0]=r,R[1]=s;let B=Xi.utils.encodePacked({t:"bytes32",v:"0x"+R.toString("hex")},{t:"bytes32",v:p});if(!B)throw new on("messageWithSigner cannot be undefined");let W=Xi.utils.keccak256(Y.from(B.replace("0x",""),"hex")),N=Y.from(W.replace("0x",""),"hex");return N[0]=R[0],N[1]=R[1],N}b();C();y();import{web3 as To}from"@coral-xyz/anchor";import{PublicKey as Od,TransactionMessage as wo}from"@solana/web3.js";async function Fo(o,i,a){try{let r=await Ut(i,o),s=await Ut(a,o),d=wo.decompile(i.message,{addressLookupTableAccounts:r}),c=wo.decompile(a.message,{addressLookupTableAccounts:s});if(c.instructions.shift(),d.instructions.push(...c.instructions),r.push(...s),i.message=d.compileToV0Message(r),a.message.header.numRequiredSignatures===2&&i.signatures.length===1){let u=a.signatures[0];if(!u)throw new G("Signature is undefined");i.signatures.push(u)}return i}catch(r){throw r instanceof Error&&r.message?new Xe(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new Xe("Some error occurred during creation final swap and bridge transaction")}}async function _t(o,i,a){let r=await i.getAddressLookupTable(new Od(a)).then(d=>d.value);if(!r)throw new G("Cannot find allbridgeLookupTableAccount");let s=new To.TransactionMessage({payerKey:o.feePayer,recentBlockhash:o.recentBlockhash,instructions:o.instructions}).compileToV0Message([r]);return new To.VersionedTransaction(s)}var rr=1e6,Si=class{constructor(i,a,r){this.solanaRpcUrl=i;this.params=a;this.api=r}chainType="SOLANA";async buildRawTransactionSwap(i){let a=Ee(this.chainType,i);return await this.buildSwapTransaction(a,i.sourceToken.poolAddress,i.destinationToken.poolAddress,i.txFeeParams)}async buildSwapTransaction(i,a,r,s){let{fromAccountAddress:d,amount:c,contractAddress:u,fromTokenAddress:p,toTokenAddress:I,toAccountAddress:h,minimumReceiveAmount:R}=i,B=d,W=u,N=p,Z=I,V=r,S=h,T=new be(B),k=bt(this.solanaRpcUrl,T.toString()),L=new ar({...Pt,address:W},k),H=await Vt(L.programId),J=await tt(L.programId),ie=new be(N),ge=await Yt(ie,L.programId),le=new be(a),ce=_e(T,ie),ue=new be(S),oe=new be(Z),me=await Yt(oe,L.programId),We=new be(V),Ze=_e(ue,oe),fe=[ln.ComputeBudgetProgram.setComputeUnitLimit({units:rr})];try{await An(Ze,k)}catch{let Ye=Kd(oe,ue),Me=Qd(T,Ye,ue,oe);fe.push(Me)}let Ge=await L.methods.swap(new gn(c),new gn(R||0)).accountsPartial({payer:T,config:J,bridgeAuthority:H,user:T,sendBridgeToken:ge,sendMint:ie,sendPool:le,sendUserToken:ce,receiveBridgeToken:me,receiveMint:oe,receivePool:We,receiveUserToken:Ze}).preInstructions(fe).transaction(),Ue=k.connection;return Ge.recentBlockhash=(await Ue.getLatestBlockhash()).blockhash,Ge.feePayer=T,await cn(Ge,s,this.solanaRpcUrl),await _t(Ge,Ue,this.params.solanaLookUpTable)}async buildRawTransactionSend(i,a){let r,s;switch(i.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(a);r=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(a),{transaction:c,messageAccount:u}=await this.buildSwapAndBridgeWormholeTransaction(d);r=c,s=u;break}case 3:case 4:{let d=await this.prepareSwapAndBridgeCctpData(a),{transaction:c,messageSentEventDataKeypair:u}=await this.buildSwapAndBridgeCctpTransaction(i.destinationToken.chainSymbol,d);r=c,s=u;break}case 5:throw new Pe("Messenger OFT is not supported yet.");default:return se(i.messenger,"Unhandled Messenger type")}return{tx:r,requiredMessageSigner:s}}getExtraGasInstruction(i,a,r){return ln.SystemProgram.transfer({fromPubkey:a,toPubkey:r,lamports:+i})}async prepareSwapAndBridgeData(i){let{amount:a,contractAddress:r,fromChainId:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:u,toAccountAddress:p,toTokenAddress:I,poolAddress:h,extraGas:R}=i,B=c,W=d,N=u,Z=I,V=p,S=r,T=s,k=bt(this.solanaRpcUrl,W),L=new ar({...Pt,address:S},k),H=Array.from(pt()),J=new be(h),ie=await Vi(a,L,J),ge=await Ri(H,L.programId),le=await Vt(L.programId),ce=_e(new be(W),new be(B)),ue=await Yt(new be(B),L.programId),oe=await sn(N,L.programId),me=await Bi(N,Y.from(Z),L.programId),We=await tt(L.programId),Ze=await L.account.config.fetch(We),fe=await Xt(N,Ze.gasOracleProgramId),Ge=await Xt(T,Ze.gasOracleProgramId),Ue=Pi({amount:ie,recipient:Y.from(V),nonce:Y.from(H),receiveToken:Y.from(Z),destinationChainId:N,sourceChainId:T,chainBridge:(await Vt(L.programId)).toBuffer()}),_={};return _.bridge=L,_.amount=new gn(a),_.vusdAmount=new gn(ie),_.nonce=H,_.recipient=Array.from(V),_.receiveToken=Array.from(Z),_.poolAccount=J,_.lockAccount=ge,_.bridgeAuthority=le,_.userToken=ce,_.bridgeTokenAccount=ue,_.chainBridgeAccount=oe,_.otherBridgeTokenAccount=me,_.userAccount=new be(W),_.destinationChainId=N,_.mint=new be(B),_.config=We,_.configAccountInfo=Ze,_.gasPrice=fe,_.thisGasPrice=Ge,_.message=Ue,R&&(_.extraGasInstruction=this.getExtraGasInstruction(R,_.userAccount,We)),_}async buildSwapAndBridgeAllbridgeTransaction(i){let{bridge:a,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:u,lockAccount:p,bridgeAuthority:I,userToken:h,bridgeTokenAccount:R,chainBridgeAccount:B,otherBridgeTokenAccount:W,userAccount:N,destinationChainId:Z,mint:V,config:S,configAccountInfo:T,gasPrice:k,thisGasPrice:L,message:H,extraGasInstruction:J}=i,ie=T.allbridgeMessengerProgramId,ge=await dn(Z,ie),le=await tt(ie),ce=await Wi(H,ie),ue=[];J&&ue.push(J);let oe=await a.methods.swapAndBridge({vusdAmount:r,nonce:s,destinationChainId:Z,recipient:d,receiveToken:c}).accountsPartial({payer:N,mint:V,user:N,config:S,lock:p,pool:u,gasPrice:k,thisGasPrice:L,bridgeAuthority:I,userToken:h,bridgeToken:R,chainBridge:B,messenger:ie,messengerGasUsage:ge,messengerConfig:le,sentMessageAccount:ce,otherBridgeToken:W}).preInstructions([ln.ComputeBudgetProgram.setComputeUnitLimit({units:rr})]).postInstructions(ue).transaction(),me=bt(this.solanaRpcUrl,N.toString()).connection;return oe.recentBlockhash=(await me.getLatestBlockhash()).blockhash,oe.feePayer=N,await _t(oe,me,this.params.solanaLookUpTable)}async buildSwapAndBridgeWormholeTransaction(i){let{bridge:a,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:u,lockAccount:p,bridgeAuthority:I,userToken:h,bridgeTokenAccount:R,chainBridgeAccount:B,otherBridgeTokenAccount:W,userAccount:N,destinationChainId:Z,mint:V,config:S,configAccountInfo:T,gasPrice:k,thisGasPrice:L,extraGasInstruction:H}=i,J=this.params.wormholeMessengerProgramId,[ie]=be.findProgramAddressSync([Y.from("Bridge")],new be(J)),[ge]=be.findProgramAddressSync([Y.from("fee_collector")],new be(J)),[le]=be.findProgramAddressSync([Y.from("Sequence"),I.toBuffer()],new be(J)),ce=await dn(Z,T.wormholeMessengerProgramId),ue=await tt(T.wormholeMessengerProgramId),oe=No.generate(),me=bt(this.solanaRpcUrl,N.toString()),We=await me.connection.getAccountInfo(ie);if(We==null)throw new G("Cannot fetch wormhole bridge account info");let Ze=new gn(We.data.slice(16,24),"le").toString(),fe=Ud.transfer({fromPubkey:N,toPubkey:ge,lamports:+Ze}),Ge=[];H&&Ge.push(H);let Ue={payer:N,mint:V,user:N,config:S,lock:p,pool:u,gasPrice:k,thisGasPrice:L,bridgeAuthority:I,userToken:h,bridgeToken:R,chainBridge:B,otherBridgeToken:W,messengerGasUsage:ce,wormholeProgram:J,bridge:ie,message:oe.publicKey,wormholeMessenger:T.wormholeMessengerProgramId,sequence:le,feeCollector:ge,wormholeMessengerConfig:ue,clock:ln.SYSVAR_CLOCK_PUBKEY},_=await a.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:s,destinationChainId:Z,recipient:d,receiveToken:c}).accounts(Ue).preInstructions([ln.ComputeBudgetProgram.setComputeUnitLimit({units:rr}),fe]).postInstructions(Ge).signers([oe]).transaction();return _.recentBlockhash=(await me.connection.getLatestBlockhash()).blockhash,_.feePayer=N,{transaction:await _t(_,me.connection,this.params.solanaLookUpTable),messageAccount:oe}}async prepareSwapAndBridgeCctpData(i){let{contractAddress:a,amount:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:u,toTokenAddress:p,extraGas:I}=i,h=a;if(!h)throw new Ve("Such route does not support CCTP protocol");let R=4,B=s,W=p,N=u,Z=bt(this.solanaRpcUrl,B),V=new ar({...kn,address:h},Z),S=new be(d),T=await fi(S,V.programId),k=new be(B),L=await V.account.cctpBridge.fetch(T),H={};return H.cctpBridge=V,H.cctpBridgeAccount=T,H.cctpAddressAccount=new be(h),H.amount=new gn(r),H.recipient=Array.from(N),H.receiveToken=Array.from(W),H.userToken=_e(k,S),H.bridgeAuthority=await Yi(T,V.programId),H.bridgeTokenAccount=await Co(S,V.programId),H.chainBridgeAccount=await sn(c,V.programId),H.userAccount=k,H.destinationChainId=c,H.mint=S,H.gasPrice=await Xt(c,L.gasOracleProgramId),H.thisGasPrice=await Xt(R,L.gasOracleProgramId),H.provider=Z,I&&(H.extraGasInstruction=this.getExtraGasInstruction(I,H.userAccount,T)),H}async buildSwapAndBridgeCctpTransaction(i,a){let{cctpBridge:r,cctpBridgeAccount:s,amount:d,recipient:c,receiveToken:u,bridgeAuthority:p,userToken:I,bridgeTokenAccount:h,chainBridgeAccount:R,userAccount:B,destinationChainId:W,mint:N,gasPrice:Z,thisGasPrice:V,extraGasInstruction:S,provider:T}=a,k=this.params.cctpParams.cctpDomains[i],L=this.params.cctpParams.cctpTransmitterProgramId,H=this.params.cctpParams.cctpTokenMessengerMinter;if(k==null||!L||!H)throw new G("CCTP is not configured");let J=new be(L),ie=new be(H),{messageTransmitterAccount:ge,tokenMessenger:le,tokenMessengerEventAuthority:ce,tokenMinter:ue,localToken:oe,remoteTokenMessengerKey:me,authorityPda:We}=wi(k,N,J,ie),Ze=[];S&&Ze.push(S);let fe=No.generate(),Ge=Ti(r.programId,fe.publicKey),Ue=await r.methods.bridge({amount:d,destinationChainId:W,recipient:c,receiveToken:u}).accountsPartial({mint:N,user:B,cctpBridge:s,payer:B,messageSentEventData:fe.publicKey,lock:Ge,cctpMessenger:ie,messageTransmitterProgram:J,messageTransmitterAccount:ge,tokenMessenger:le,tokenMinter:ue,localToken:oe,remoteTokenMessengerKey:me,authorityPda:We,eventAuthority:ce,bridgeToken:h,gasPrice:Z,thisGasPrice:V,chainBridge:R,userToken:I,bridgeAuthority:p}).preInstructions([ln.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Ze).transaction(),_=T.connection;return Ue.recentBlockhash=(await _.getLatestBlockhash()).blockhash,Ue.feePayer=B,{transaction:await _t(Ue,_,this.params.solanaLookUpTable),messageSentEventDataKeypair:fe}}};b();C();y();import{NATIVE_MINT as Dd}from"@solana/spl-token";import{VersionedTransaction as Ed}from"@solana/web3.js";import Zo,{AxiosError as Go}from"axios";import{Big as et}from"big.js";var Xo=1.1,Li=class{constructor(i,a){this.api=i;this.jupiterUrl=a.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=a.jupiterApiKeyHeader,this.maxAccounts=a.jupiterMaxAccounts}jupiterUrl;apiKeyHeader;maxAccounts;async buildJupAndUpdateTxSendParams(i,a){let r=ir(i.txFeeParams?.solana);try{let{tx:s,solTxSendUpdatedParams:d}=await this.processJup(a,i,r,!0);return{jupTx:s,solTxSendParams:{...a,...d}}}catch{try{let{tx:d,solTxSendUpdatedParams:c}=await this.processJup(a,i,r,!1);return{jupTx:d,solTxSendParams:{...a,...c}}}catch(d){throw d instanceof Ie?d:d instanceof Error&&d.message?new Xe(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Xe("Some error occurred during creation Jupiter swap transaction")}}}async processJup(i,a,r,s){let{fee:d,extraGas:c,gasFeePaymentMethod:u,sourceNativeTokenPrice:p}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(a.sourceToken,i),I=s?et(d):et(i.fee);if(c&&(I=I.plus(c)),r?.payTxFeeWithStablecoinSwap)if(s)I=I.plus(3526760);else{if(!p)throw new G("sourceNativeTokenPrice is undefined.");let V=et(3526760).mul(p).div(et(10).pow(U.getChainDecimalsByType("SOLANA")-a.sourceToken.decimals)).toFixed(0);I=I.plus(V)}s||(I=I.mul(Xo));let{tx:h,amountIn:R}=await this.getJupiterSwapTx(a.fromAccountAddress,a.sourceToken.tokenAddress,I.toFixed(0),s),B;if(s){if(!R)throw new Xe("Cannot get inAmount");B=et(i.amount).minus(et(R).mul(Xo)).toFixed(0)}else B=et(i.amount).minus(I).toFixed(0);if(et(B).lte(0))throw new Ft(`Amount not enough to pay fee, ${z(et(B).minus(1).neg(),a.sourceToken.decimals).toFixed()} stables is missing`);return{tx:h,solTxSendUpdatedParams:{amount:B,fee:d,extraGas:c,gasFeePaymentMethod:u}}}async convertStableCoinFeeAndExtraGasToNativeCurrency(i,a){if(a.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger,sourceToken:i.tokenAddress})).sourceNativeTokenPrice,s=et(a.fee).div(r).mul(et(10).pow(U.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0),d;return a.extraGas&&(d=et(a.extraGas).div(r).mul(et(10).pow(U.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native",sourceNativeTokenPrice:r}}return{fee:a.fee,extraGas:a.extraGas,gasFeePaymentMethod:"native"}}async getJupiterSwapTx(i,a,r,s){let d;try{let R=s?"ExactOut":"ExactIn",B=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${Dd.toString()}&amount=${r}&swapMode=${R}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(B+=`&maxAccounts=${this.maxAccounts}`),d=await Zo.get(B,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(R){throw R instanceof Go&&R.response&&R.response.data&&R.response.data.error?new Xe(R.response.data.error):new Xe("Cannot get route")}let c;if(s&&d?.data?.inAmount)c=d.data.inAmount;else if(s)throw new Xe("Cannot get inAmount");let u;try{u=await Zo.post(`${this.jupiterUrl}/swap`,{quoteResponse:d.data,userPublicKey:i,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(R){throw R instanceof Go&&R.response&&R.response.data&&R.response.data.error?new Xe(R.response.data.error):new Xe("Cannot get swap transaction")}let p;if(u?.data?.swapTransaction)p=u.data.swapTransaction;else throw new Xe("Cannot get swap transaction");let I=Y.from(p,"base64"),h=Ed.deserialize(I);return s?{tx:h,amountIn:c}:{tx:h}}};b();C();y();import{BN as Hn,Program as sr,web3 as rc}from"@coral-xyz/anchor";import{Keypair as Vo,PublicKey as yt,SystemProgram as oc}from"@solana/web3.js";var or={};Ma(or,{accounts:()=>ec,address:()=>_d,default:()=>ac,errors:()=>nc,events:()=>tc,instructions:()=>qd,metadata:()=>$d,types:()=>ic});var _d="DfB5pJSykRUuUT2ViG8V382R6RB5CQ3GTMVFajoyxXn1",$d={name:"payer_with_token",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},qd=[{name:"add_fee_token",discriminator:[171,6,150,97,69,55,13,136],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"AddFeeTokenArgs"}}}]},{name:"bridge_cctp",discriminator:[35,114,66,117,122,78,225,186],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpBridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"remove_fee_token",discriminator:[46,96,240,63,28,173,62,131],accounts:[{name:"admin",writable:!0,signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",writable:!0,signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_bridge_program_id",discriminator:[59,191,249,155,146,73,202,139],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_bridge_program_id",discriminator:[164,36,75,241,35,30,47,159],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_fee_token_price",discriminator:[116,201,189,21,190,10,242,241],accounts:[{name:"price_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}}],args:[{name:"new_price",type:"u64"}]},{name:"set_price_authority",discriminator:[51,241,68,137,206,207,244,107],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_address",type:"pubkey"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token_account",writable:!0},{name:"bridge_authority"},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"wormhole_bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"withdraw_fee_token",discriminator:[131,103,89,216,53,78,255,118],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"admin_fee_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],ec=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"FeeTokenConfig",discriminator:[226,113,31,124,53,31,222,222]}],tc=[{name:"ExtraGasSentEvent",discriminator:[111,21,139,73,113,95,104,52]}],nc=[{code:6e3,name:"PayerFeeSlippage",msg:"Payer fee slippage"}],ic=[{name:"AddFeeTokenArgs",type:{kind:"struct",fields:[{name:"price",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"price_authority",type:"pubkey"}]}},{name:"ExtraGasSentEvent",type:{kind:"struct",fields:[{name:"fee_token_mint",type:"pubkey"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"extra_gas_amount_in_sol",type:"u64"},{name:"extra_gas_amount_in_usd",type:"u64"}]}},{name:"FeeTokenConfig",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"decimals",type:"u8"},{name:"price",type:"u64"},{name:"bump",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"}]}},{name:"PayerCctpBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerSwapAndBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"destination_chain_id",type:"u8"},{name:"recipient",type:{array:["u8",32]}},{name:"recipient_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"},{name:"nonce",type:{array:["u8",32]}}]}}],ac={address:_d,metadata:$d,instructions:qd,accounts:ec,events:tc,errors:nc,types:ic};var sc=1e6,ki=class{constructor(i,a,r){this.solanaRpcUrl=i;this.params=a;this.api=r}chainType="SOLANA";async buildRawTransactionSend(i,a){switch(i.messenger){case 1:{let r=await this.prepareSwapAndBridgeAllbridgeData(i,a);return{tx:await this.buildSwapAndBridgeTx(r)}}case 2:{let r=await this.prepareSwapAndBridgeWormholeData(i,a);return await this.buildSwapAndBridgeWormholeTx(r)}case 3:case 4:{let r=await this.prepareBridgeCctpData(i,a);return this.buildBridgeCctpTx(r)}case 5:throw new Pe("Messenger OFT is not supported yet.");default:return se(i.messenger,"Unhandled Messenger type")}}async prepareSwapAndBridgeBaseData(i,a){let{fromChainId:r,fromAccountAddress:s,fromTokenAddress:d,poolAddress:c,toAccountAddress:u,toTokenAddress:p,toChainId:I,fee:h,extraGas:R="0"}=a,B=new yt(s),W=Array.from(u),N=Array.from(p),Z=new Hn(h),V=new Hn(R),S=bt(this.solanaRpcUrl,s),T=this.getPayerProgram(i,S),k=new sr({...Pt,address:i.sourceToken.bridgeAddress},S),L=new yt(c),H=await tt(k.programId),J=await k.account.config.fetch(H),ie=new yt(d),ge=new yt(this.getAbrFeeTokenMintAddress(i)),le=_e(B,ie),ce=_e(B,ge),ue=await Xt(I,J.gasOracleProgramId),oe=await Xt(r,J.gasOracleProgramId);return{provider:S,payerProgram:T,bridgeProgram:k,userAccount:B,recipient:W,recipientToken:N,recipientChain:I,maxFeeAmount:Z,extraGasAmountInFeeToken:V,mintAccount:ie,feeTokenMintAccount:ge,userTokenAccount:le,userFeeTokenAccount:ce,gasPriceAccount:ue,thisGasPriceAccount:oe,poolAccount:L,bridgeConfigAccount:H,bridgeConfigInfo:J}}getComputeUnitLimitInstruction(){return rc.ComputeBudgetProgram.setComputeUnitLimit({units:sc})}getPayerProgram(i,a){let r=i.sourceToken.abrPayer?.payerAddress;if(!r)throw new Nt("Payer with token not supported yet for ABR tokens");return new sr({...or,address:r},a)}getAbrFeeTokenMintAddress(i){let a=i.sourceToken.abrPayer?.abrToken.tokenAddress;if(!a)throw new Nt("Payer with token not supported yet for ABR tokens");return a}async prepareSwapAndBridgeCommonData(i,a){let{amount:r,toChainId:s,toTokenAddress:d}=a,{bridgeProgram:c,poolAccount:u,mintAccount:p}=i,I=await Vi(r,c,u),h=Array.from(pt()),R=await Ri(h,c.programId),B=c.programId,W=await sn(s,B),N=await Vt(B),Z=await Yt(p,B),V=await Bi(s,Y.from(d),B);return{...i,vusdAmount:new Hn(I),nonce:h,lockAccount:R,chainBridgeAccount:W,bridgeProgramId:B,bridgeAuthorityAccount:N,bridgeTokenAccount:Z,otherBridgeTokenAccount:V}}getWormholeProgramAddresses(i,a){let r=new yt(i),[s]=yt.findProgramAddressSync([Y.from("Bridge")],r),[d]=yt.findProgramAddressSync([Y.from("Sequence"),a.toBuffer()],r),[c]=yt.findProgramAddressSync([Y.from("fee_collector")],r);return{wormholeBridgeAccount:s,wormholeSequenceAccount:d,wormholeFeeCollectorAccount:c}}async getWormholeFeeInstruction(i,a,r,s){let d=await i.connection.getAccountInfo(a);if(d==null)throw new G("Cannot fetch wormhole bridge account info");let c=new Hn(d.data.slice(16,24),"le").toString();return oc.transfer({fromPubkey:r,toPubkey:s,lamports:+c})}async prepareSwapAndBridgeAllbridgeData(i,a){let r=await this.prepareSwapAndBridgeBaseData(i,a),s=await this.prepareSwapAndBridgeCommonData(r,a),{recipient:d,recipientToken:c,recipientChain:u,bridgeConfigInfo:p}=r,{vusdAmount:I,nonce:h,bridgeAuthorityAccount:R}=s,{fromChainId:B,toChainId:W}=a,N=Pi({amount:I.toString(),recipient:Y.from(d),nonce:Y.from(h),receiveToken:Y.from(c),destinationChainId:u,sourceChainId:B,chainBridge:R.toBuffer()}),Z=p.allbridgeMessengerProgramId,V=await Wi(N,Z),S=await tt(Z),T=await dn(W,Z);return{...s,sentMessageAccount:V,messengerProgramId:Z,messengerConfigAccount:S,messengerGasUsageAccount:T}}async prepareSwapAndBridgeWormholeData(i,a){let r=await this.prepareSwapAndBridgeBaseData(i,a),s=await this.prepareSwapAndBridgeCommonData(r,a),{provider:d,userAccount:c,bridgeConfigInfo:u}=r,{bridgeAuthorityAccount:p}=s,{toChainId:I}=a,h=u.wormholeMessengerProgramId,R=await tt(h),B=await dn(I,h),W=this.params.wormholeMessengerProgramId,{wormholeBridgeAccount:N,wormholeSequenceAccount:Z,wormholeFeeCollectorAccount:V}=this.getWormholeProgramAddresses(W,p),S=Vo.generate(),T=await this.getWormholeFeeInstruction(d,N,c,V);return{...s,wormholeMessengerAccount:h,wormholeMessengerConfigAccount:R,wormholeProgramId:W,sequenceAccount:Z,feeCollectorAccount:V,messengerGasUsageAccount:B,messageAccount:S,wormholeBridgeAccount:N,feeInstruction:T}}async prepareBridgeCctpData(i,a){let r=await this.prepareSwapAndBridgeBaseData(i,a),{mintAccount:s,provider:d}=r,{amount:c,toChainId:u}=a,p=i.sourceToken.cctpAddress;if(!p)throw new Ve("Such route does not support CCTP protocol");let I=new sr({...kn,address:p},d),h=await sn(u,I.programId),R=I.programId,B=await fi(s,I.programId),W=await Yi(B,I.programId),N=await Yt(s,I.programId),Z=i.destinationToken.chainSymbol,V=this.params.cctpParams.cctpDomains[Z],S=this.params.cctpParams.cctpTransmitterProgramId,T=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!S||!T)throw new G("CCTP is not configured");let k=new yt(S),L=new yt(T),{messageTransmitterAccount:H,tokenMessenger:J,tokenMessengerEventAuthority:ie,tokenMinter:ge,localToken:le,remoteTokenMessengerKey:ce,authorityPda:ue}=wi(V,s,k,L),oe=Vo.generate(),me=Ti(I.programId,oe.publicKey);return{...r,lockAccount:me,messageSentEventDataKeypair:oe,amount:new Hn(c),chainBridgeAccount:h,cctpBridgeProgramId:R,cctpBridgeAuthorityAccount:W,cctpBridgeConfigAccount:B,cctpBridgeTokenAccount:N,cctpTokenMessengerMinter:L,cctpTransmitterProgramId:k,messageTransmitterAccount:H,tokenMessenger:J,tokenMessengerEventAuthority:ie,tokenMinter:ge,localToken:le,remoteTokenMessengerKey:ce,authorityPda:ue}}async buildSwapAndBridgeTx(i){let{provider:a,payerProgram:r,userAccount:s,vusdAmount:d,recipient:c,recipientChain:u,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,lockAccount:B,chainBridgeAccount:W,bridgeProgramId:N,bridgeAuthorityAccount:Z,bridgeTokenAccount:V,mintAccount:S,feeTokenMintAccount:T,userTokenAccount:k,userFeeTokenAccount:L,gasPriceAccount:H,thisGasPriceAccount:J,sentMessageAccount:ie,messengerProgramId:ge,messengerConfigAccount:le,messengerGasUsageAccount:ce,bridgeConfigAccount:ue,otherBridgeTokenAccount:oe,poolAccount:me}=i,We=await r.methods.swapAndBridge({vusdAmount:d,recipient:c,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,destinationChainId:u}).accountsPartial({lock:B,chainBridge:W,bridge:N,bridgeAuthority:Z,bridgeToken:V,mint:S,feeTokenMint:T,userTokenAccount:k,userFeeTokenAccount:L,gasPrice:H,thisGasPrice:J,sentMessageAccount:ie,messenger:ge,messengerConfig:le,messengerGasUsage:ce,bridgeConfig:ue,otherBridgeToken:oe,pool:me}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return await this.finalizeTransaction(We,a,s)}async buildSwapAndBridgeWormholeTx(i){let{provider:a,payerProgram:r,userAccount:s,vusdAmount:d,recipient:c,recipientChain:u,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,lockAccount:B,chainBridgeAccount:W,bridgeProgramId:N,bridgeAuthorityAccount:Z,bridgeTokenAccount:V,mintAccount:S,feeTokenMintAccount:T,userTokenAccount:k,userFeeTokenAccount:L,gasPriceAccount:H,thisGasPriceAccount:J,messengerGasUsageAccount:ie,bridgeConfigAccount:ge,otherBridgeTokenAccount:le,poolAccount:ce,wormholeMessengerAccount:ue,wormholeMessengerConfigAccount:oe,wormholeProgramId:me,sequenceAccount:We,feeCollectorAccount:Ze,messageAccount:fe,wormholeBridgeAccount:Ge,feeInstruction:Ue}=i,_=await r.methods.swapAndBridgeWormhole({vusdAmount:d,recipient:c,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,destinationChainId:u}).accounts({lock:B,chainBridge:W,bridge:N,bridgeAuthority:Z,bridgeToken:V,mint:S,feeTokenMint:T,userTokenAccount:k,userFeeTokenAccount:L,gasPrice:H,thisGasPrice:J,messengerGasUsage:ie,bridgeConfig:ge,otherBridgeToken:le,pool:ce,wormholeMessenger:ue,wormholeMessengerConfig:oe,wormholeProgram:me,sequence:We,feeCollector:Ze,message:fe.publicKey,wormholeBridge:Ge}).preInstructions([this.getComputeUnitLimitInstruction(),Ue]).signers([fe]).transaction();return{tx:await this.finalizeTransaction(_,a,s),requiredMessageSigner:fe}}async buildBridgeCctpTx(i){let{provider:a,payerProgram:r,amount:s,recipient:d,recipientToken:c,userAccount:u,recipientChain:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,lockAccount:R,mintAccount:B,feeTokenMintAccount:W,userTokenAccount:N,userFeeTokenAccount:Z,gasPriceAccount:V,thisGasPriceAccount:S,chainBridgeAccount:T,cctpBridgeProgramId:k,cctpBridgeAuthorityAccount:L,cctpBridgeConfigAccount:H,cctpBridgeTokenAccount:J,cctpTokenMessengerMinter:ie,cctpTransmitterProgramId:ge,messageTransmitterAccount:le,tokenMessenger:ce,tokenMessengerEventAuthority:ue,tokenMinter:oe,localToken:me,remoteTokenMessengerKey:We,authorityPda:Ze,messageSentEventDataKeypair:fe}=i,Ge=await r.methods.bridgeCctp({amount:s,recipient:d,receiveToken:c,destinationChainId:p,maxFeeAmount:I,extraGasAmountInFeeToken:h}).accounts({lock:R,messageSentEventData:fe.publicKey,mint:B,feeTokenMint:W,userFeeTokenAccount:Z,bridgeToken:J,cctpBridge:k,cctpBridgeConfig:H,cctpMessenger:ie,messageTransmitterProgram:ge,messageTransmitterAccount:le,tokenMessenger:ce,tokenMinter:oe,localToken:me,remoteTokenMessengerKey:We,authorityPda:Ze,eventAuthority:ue,gasPrice:V,thisGasPrice:S,chainBridge:T,bridgeAuthority:L,userTokenAccount:N}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(Ge,a,u),requiredMessageSigner:fe}}async finalizeTransaction(i,a,r){let s=a.connection;return i.recentBlockhash=(await s.getLatestBlockhash()).blockhash,i.feePayer=r,await _t(i,s,this.params.solanaLookUpTable)}};var Hi=class extends Se{constructor(a,r,s){super();this.solanaRpcUrl=a;this.params=r;this.api=s;this.connection=new dc(a),this.jupiterService=new Li(s,r.jupiterParams),this.bridgeTxService=new Si(a,r,s),this.payerWithTokenService=new ki(a,r,s)}chainType="SOLANA";connection;jupiterService;bridgeTxService;payerWithTokenService;async buildRawTransactionSwap(a){return this.bridgeTxService.buildRawTransactionSwap(a)}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api),s=this.addPoolAddress(a,r),d=a.gasFeePaymentMethod??"native",c,u;switch(d){case"native":{let p=await this.buildTxWithNativePayment(a,s);c=p.tx,u=p.requiredMessageSigner;break}case"stablecoin":{let p=await this.buildTxWithStablePayment(a,s);c=p.tx,u=p.requiredMessageSigner;break}case"abr":{let p=await this.buildTxWithAbrPayment(a,s);c=p.tx,u=p.requiredMessageSigner;break}default:return se(d,"Unhandled FeePaymentMethod")}return await Wo(c,a.txFeeParams,this.solanaRpcUrl),u&&c.sign([u]),c}async buildTxWithNativePayment(a,r){return await this.bridgeTxService.buildRawTransactionSend(a,r)}async buildTxWithStablePayment(a,r){let{jupTx:s,solTxSendParams:d}=await this.jupiterService.buildJupAndUpdateTxSendParams(a,r),{tx:c,requiredMessageSigner:u}=await this.bridgeTxService.buildRawTransactionSend(a,d);if(!s)throw new Xe("Swap tx is absent");return{tx:await Fo(this.connection,s,c),requiredMessageSigner:u}}async buildTxWithAbrPayment(a,r){return this.payerWithTokenService.buildRawTransactionSend(a,r)}send(a){throw new E}addPoolAddress(a,r){return{...r,poolAddress:a.sourceToken.poolAddress}}};b();C();y();import{Address as dr,contract as MP}from"@stellar/stellar-sdk";import{Big as gc}from"big.js";b();C();y();import{contract as n}from"@stellar/stellar-sdk";var cc=n.Spec,Ac=n.Client;var Mn=class extends Ac{constructor(a){super(new cc(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Mi=class extends Se{constructor(a,r,s){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=s}chainType="SRB";async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(r)}async buildRawTransactionSendFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:u,toAccountAddress:p,toTokenAddress:I,fee:h,gasFeePaymentMethod:R,extraGas:B}=a,W=h;B&&(W=gc(W).plus(B).toFixed());let N=this.getContract(Mn,s,d),Z;switch(R){case"native":Z=await N.swap_and_bridge({sender:d,token:dr.contract(Y.from(c)).toString(),amount:BigInt(r),recipient:Y.from(p),destination_chain_id:+u,receive_token:Y.from(I),nonce:mt(),gas_amount:BigInt(W),fee_token_amount:BigInt(0)});break;case"stablecoin":Z=await N.swap_and_bridge({sender:d,token:dr.contract(Y.from(c)).toString(),amount:BigInt(r),recipient:Y.from(p),destination_chain_id:+u,receive_token:Y.from(I),nonce:mt(),gas_amount:BigInt(0),fee_token_amount:BigInt(W)});break;case"abr":throw new G("SRB bridge does not support ABR payment method");default:return se(R,"Unhandled FeePaymentMethod")}return Z.toXDR()}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toAccountAddress:u,toTokenAddress:p,minimumReceiveAmount:I}=a;return(await this.getContract(Mn,s,d).swap({sender:d,amount:BigInt(r),token:dr.contract(Y.from(c)).toBuffer(),receive_token:Y.from(p),recipient:u,receive_amount_min:BigInt(I)})).toXDR()}send(a){throw new E}getContract(a,r,s){let d={publicKey:s,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(d)}};b();C();y();import{ClarigenClient as uc,contractFactory as Po}from"@clarigen/core";import{createNetwork as pc}from"@stacks/network";import{makeRandomPrivKey as So,makeUnsignedContractCall as Lo,parseContractId as mc,PostConditionMode as ko,privateKeyToPublic as Ho}from"@stacks/transactions";b();C();y();var st={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"}};b();C();y();function Bt(o){if(!o.originTokenAddress)throw new G("STX token must contain 'originTokenAddress'");let[i,a]=o.originTokenAddress.split("::");if(!a)throw new G("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return a}b();C();y();import{parseContractId as lc}from"@stacks/transactions";function Wt(o,i,a,r,s){let[d,c]=lc(r);if(!d||!c)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:a,condition:i,asset:`${d}.${c}::${s}`,amount:o}}function cr(o,i,a){return{type:"stx-postcondition",address:a,condition:i,amount:o}}var ji=class extends Se{constructor(a,r,s){super();this.nodeRpcUrl=a;this.params=r;this.api=s;let d=pc({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new uc(d,this.params.stxHeroApiKey)}chainType="STX";client;send(a){throw new E}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api),{contractAddress:s,messenger:d,toChainId:c,toAccountAddress:u,toTokenAddress:p}=r,I=BigInt(r.amount),h=Wt(I,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,Bt(a.sourceToken)),R=cr(0,"gte",a.sourceToken.bridgeAddress),B=[h,R],W=BigInt(r.fee);r.extraGas&&(W=W+BigInt(r.extraGas));let N,Z;switch(r.gasFeePaymentMethod){case"native":{N=0n,Z=W;let ce=cr(W,"lte",a.fromAccountAddress);B.push(ce);break}case"stablecoin":{N=W,Z=0n;break}case"abr":throw new G("STX bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[V]=mc(s),S=Po(st.bridge,s),{contractAddress:T,contractName:k,functionName:L,functionArgs:H}=S.swapAndBridge({ftRef:a.sourceToken.tokenAddress,poolRef:a.sourceToken.poolAddress,messengerRef:`${V}.messenger`,gasOracleRef:`${V}.gas-oracle`,amount:I,recipient:Uint8Array.from(u),destinationChainId:c,receiveToken:Uint8Array.from(p),nonce:Uint8Array.from(pt()),messengerId:d,feeNativeAmount:Z,feeTokenAmount:N}),J=So(),ie=Ho(J),ge={contractAddress:T,contractName:k,functionName:L,functionArgs:H,publicKey:ie,validateWithAbi:!0,network:this.client.network,postConditions:B,postConditionMode:ko.Deny};return(await Lo(ge)).serialize()}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a),s=BigInt(r.amount),d=BigInt(r.minimumReceiveAmount),c=a.sourceToken.bridgeAddress,u=Po(st.bridge,c),{contractAddress:p,contractName:I,functionName:h,functionArgs:R}=u.swap({amount:s,sendPoolRef:a.sourceToken.poolAddress,sendFtRef:a.sourceToken.tokenAddress,receivePoolRef:a.destinationToken.poolAddress,receiveFtRef:a.destinationToken.tokenAddress,recipient:a.toAccountAddress,receiveAmountMin:d}),B=So(),W=Ho(B),N=Wt(s,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,Bt(a.sourceToken)),Z=Wt(d,"gte",a.destinationToken.poolAddress,a.destinationToken.tokenAddress,Bt(a.destinationToken)),V={contractAddress:p,contractName:I,functionName:h,functionArgs:R,publicKey:W,validateWithAbi:!0,network:this.client.network,postConditions:[N,Z],postConditionMode:ko.Deny};return(await Lo(V)).serialize()}};b();C();y();import{SuiClient as wc}from"@mysten/sui/client";import{coinWithBalance as ve,Transaction as vr}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as es}from"@mysten/sui/utils";import{Big as Rr}from"big.js";var Yr=at(Lt());b();C();y();var ft=at(Lt());Le();function Jo(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:i,arguments:[Q(o,a.bridge),Q(o,a.coin),nt(o,a.receiveAmountMin,"u64")]})}function zo(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.userDeposit),Q(o,a.coin)]})}function xo(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.userDeposit),nt(o,a.amountLp,"u64")]})}function Oo(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.userDeposit)]})}function Qo(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[i],arguments:[Q(o,a)]})}function gr(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.messenger),Q(o,a.wormholeState),Q(o,a.theClock),Q(o,a.gasOracle),Q(o,a.amount),Q(o,a.recipient),nt(o,a.destinationChainId,"u8"),Q(o,a.receiveToken),nt(o,a.nonce,"u256"),Q(o,a.feeSuiCoin),Q(o,a.feeTokenCoin)]})}function Ko(o,i){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[i],arguments:[]})}function lr(o,i,a){return o.moveCall({target:`${ft.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.messenger),Q(o,a.gasOracle),Q(o,a.amount),Q(o,a.recipient),nt(o,a.destinationChainId,"u8"),Q(o,a.receiveToken),nt(o,a.nonce,"u256"),Q(o,a.feeSuiCoin),Q(o,a.feeTokenCoin)]})}var ts=at(pr());b();C();y();var Do=at(pr());Le();function mr(o,i,a){return o.moveCall({target:`${Do.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[i],arguments:[Q(o,a.cctpBridge),Q(o,a.gasOracle),Q(o,a.tokenMessengerMinterState),Q(o,a.messageTransmitterState),Q(o,a.treasury),Q(o,a.denyList),Q(o,a.amount),Q(o,a.feeSuiCoin),Q(o,a.feeTokenCoin),nt(o,a.destinationChainId,"u8"),Q(o,a.recipient),Q(o,a.recipientWalletAddress)]})}var ns=at(yr());b();C();y();var qo=at(yr());b();C();y();b();C();y();Le();import{bcs as kt}from"@mysten/sui/bcs";import{fromHEX as Rc,toHEX as Yc}from"@mysten/sui/utils";b();C();y();import{bcs as vc}from"@mysten/sui/bcs";Le();var Cr=class o{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(i,a){this.$fullTypeName=re(this.$typeName,...i),this.$typeArgs=i,this.elements=a}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs(jn(i)),fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),new:a=>new o([K(i)],a),kind:"VectorClassReified"}}static get r(){return o.reified}static get bcs(){return vc.vector}static fromFields(i,a){return o.reified(i).new(a.map(r=>ne(i,r)))}static fromFieldsWithTypes(i,a){return o.reified(i).new(a.map(r=>$(i,r)))}static fromBcs(i,a){return o.fromFields(i,o.bcs(jn(i)).parse(a))}toJSONField(){return this.elements.map(i=>$t(this.$typeArgs[0],i))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new(a.map(r=>q(i,r)))}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a vector json object");return o.fromJSONField(i,a.elements)}};function un(o){return Cr.r(o)}function he(o){return typeof o=="string"?{phantomType:o,kind:"PhantomReified"}:{phantomType:o.fullTypeName,kind:"PhantomReified"}}var Bc=kt.bytes(32).transform({input:o=>Rc(o),output:o=>Yc(o)});function jn(o){switch(o){case"bool":return kt.bool();case"u8":return kt.u8();case"u16":return kt.u16();case"u32":return kt.u32();case"u64":return kt.u64();case"u128":return kt.u128();case"u256":return kt.u256();case"address":return Bc;default:return o.bcs}}function K(o){switch(o){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return o}switch(o.kind){case"PhantomReified":return o.phantomType;case"StructClassReified":return o.fullTypeName;case"VectorClassReified":return o.fullTypeName}throw new Error("unreachable")}function ne(o,i){switch(o){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return`0x${i}`}if(o.kind==="VectorClassReified")return o.fromFields(i).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(i.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(i.url.bytes)).toString();case"0x2::object::ID":return`0x${i.bytes}`;case"0x2::object::UID":return`0x${i.id.bytes}`;case"0x1::option::Option":return i.vec.length===0?null:o.fromFields(i).vec[0];default:return o.fromFields(i)}}function $(o,i){switch(o){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(o.kind==="VectorClassReified")return o.fromFieldsWithTypes(i).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return i;case"0x2::object::UID":return i.id;case"0x2::balance::Balance":return o.fromFields({value:BigInt(i)});case"0x1::option::Option":return i===null?null:$(o.reifiedTypeArgs[0],i);default:return o.fromFieldsWithTypes(i)}}function dt(o,i,a){if(a.length!==i.length)throw new Error(`provided item has mismatching number of type argments ${o} (expected ${a.length}, got ${i.length}))`);for(let r=0;r<i.length;r++)if(x(i[r])!==x(K(a[r])))throw new Error(`provided item has mismatching type argments ${o} (expected ${K(a[r])}, got ${i[r]}))`)}function Ct(o,i){let{typeArgs:a}=Je(o.type);dt(o.type,a,i)}function $t(o,i){let{typeName:a,typeArgs:r}=Je(o);switch(a){case"bool":return i;case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return i.toString();case"address":case"signer":return i;case"vector":return i.map(s=>$t(r[0],s));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:$t(r[0],i);default:return i.toJSONField()}}function q(o,i){switch(o){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(o.kind==="VectorClassReified")return o.fromJSONField(i).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:q(o.reifiedTypeArgs[0],i);default:return o.fromJSONField(i)}}Le();b();C();y();var Ji="0x1";import{bcs as zh}from"@mysten/sui/bcs";import{fromB64 as Oh}from"@mysten/sui/utils";b();C();y();Le();import{bcs as Ir}from"@mysten/sui/bcs";import{fromB64 as Wc}from"@mysten/sui/utils";function zi(o){return o=x(o),o===`${Ji}::string::String`}var xi=class o{__StructClass=!0;static get $typeName(){return`${Ji}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.bytes=a.bytes}static reified(){return{typeName:o.$typeName,fullTypeName:re(o.$typeName),typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromBcs(i),bcs:o.bcs,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,a)=>o.fetch(i,a),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return he(o.reified())}static get p(){return o.phantom()}static get bcs(){return Ir.struct("String",{bytes:Ir.vector(Ir.u8())})}static fromFields(i){return o.reified().new({bytes:ne(un("u8"),i.bytes)})}static fromFieldsWithTypes(i){if(!zi(i.type))throw new Error("not a String type");return o.reified().new({bytes:$(un("u8"),i.fields.bytes)})}static fromBcs(i){return o.fromFields(o.bcs.parse(i))}toJSONField(){return{bytes:$t("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return o.reified().new({bytes:q(un("u8"),i.bytes)})}static fromJSON(i){if(i.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return o.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!zi(i.type))throw new Error(`object at ${i.fields.id} is not a String object`);return o.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!zi(i.bcs.type))throw new Error("object at is not a String object");return o.fromBcs(Wc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a){let r=await i.getObject({id:a,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching String object at id ${a}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!zi(r.data.bcs.type))throw new Error(`object at id ${a} is not a String object`);return o.fromSuiObjectData(r.data)}};Le();b();C();y();Le();b();C();y();var Ht="0x2";import{bcs as hr}from"@mysten/sui/bcs";import{fromB64 as $o,fromHEX as fc,toHEX as Tc}from"@mysten/sui/utils";function Oi(o){return o=x(o),o===`${Ht}::object::ID`}var qt=class o{__StructClass=!0;static get $typeName(){return`${Ht}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.bytes=a.bytes}static reified(){return{typeName:o.$typeName,fullTypeName:re(o.$typeName),typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromBcs(i),bcs:o.bcs,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,a)=>o.fetch(i,a),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return he(o.reified())}static get p(){return o.phantom()}static get bcs(){return hr.struct("ID",{bytes:hr.bytes(32).transform({input:i=>fc(i),output:i=>Tc(i)})})}static fromFields(i){return o.reified().new({bytes:ne("address",i.bytes)})}static fromFieldsWithTypes(i){if(!Oi(i.type))throw new Error("not a ID type");return o.reified().new({bytes:$("address",i.fields.bytes)})}static fromBcs(i){return o.fromFields(o.bcs.parse(i))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return o.reified().new({bytes:q("address",i.bytes)})}static fromJSON(i){if(i.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return o.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Oi(i.type))throw new Error(`object at ${i.fields.id} is not a ID object`);return o.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Oi(i.bcs.type))throw new Error("object at is not a ID object");return o.fromBcs($o(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a){let r=await i.getObject({id:a,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching ID object at id ${a}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Oi(r.data.bcs.type))throw new Error(`object at id ${a} is not a ID object`);return o.fromSuiObjectData(r.data)}};function Qi(o){return o=x(o),o===`${Ht}::object::UID`}var it=class o{__StructClass=!0;static get $typeName(){return`${Ht}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.id=a.id}static reified(){return{typeName:o.$typeName,fullTypeName:re(o.$typeName),typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromBcs(i),bcs:o.bcs,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,a)=>o.fetch(i,a),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return he(o.reified())}static get p(){return o.phantom()}static get bcs(){return hr.struct("UID",{id:qt.bcs})}static fromFields(i){return o.reified().new({id:ne(qt.reified(),i.id)})}static fromFieldsWithTypes(i){if(!Qi(i.type))throw new Error("not a UID type");return o.reified().new({id:$(qt.reified(),i.fields.id)})}static fromBcs(i){return o.fromFields(o.bcs.parse(i))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return o.reified().new({id:q(qt.reified(),i.id)})}static fromJSON(i){if(i.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return o.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Qi(i.type))throw new Error(`object at ${i.fields.id} is not a UID object`);return o.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Qi(i.bcs.type))throw new Error("object at is not a UID object");return o.fromBcs($o(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a){let r=await i.getObject({id:a,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching UID object at id ${a}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Qi(r.data.bcs.type))throw new Error(`object at id ${a} is not a UID object`);return o.fromSuiObjectData(r.data)}};function ct(o,i){return o.moveCall({target:`${qo.PUBLISHED_AT}::bytes32::from_hex`,arguments:[nt(o,i,`${xi.$typeName}`)]})}b();C();y();async function It(o,i,a=[]){let r=await o(i),s=a.concat(r.data);return r.hasNextPage&&r.nextCursor?It(o,r.nextCursor,s):s}var pn=class extends Se{constructor(a,r){super();this.nodeRpcUrlsConfig=a;this.api=r;this.client=new wc({url:a.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new G("Method send not implemented.")}async buildRawTransactionSwap(a){let r=a.sourceToken.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");(0,Yr.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin);let s=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s,r)}async buildRawTransactionSwapFromParams(a,r){let{amount:s,fromAccountAddress:d,fromTokenAddress:c,toTokenAddress:u,minimumReceiveAmount:p}=a,I=new vr;I.setSender(d);let h={bridge:r.bridgeObjectAddress,coin:ve({balance:BigInt(s),type:c}),receiveAmountMin:BigInt(p)},R=Jo(I,[c,u],h),B=await It(W=>this.client.getCoins({owner:a.toAccountAddress,coinType:u,cursor:W}));return B.length===0||!B[0]?I.transferObjects([R],a.toAccountAddress):I.mergeCoins(B[0].coinObjectId,[R]),await I.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(a,r,s){let d=vr.from(a);return this.buildRawTransactionSendFromTx(s,d,r)}async buildRawTransactionSend(a){return this.buildRawTransactionSendFromTx(a,new vr)}async buildRawTransactionSendFromTx(a,r,s){let d=await Qe(this.chainType,a,this.api),{messenger:c}=d,u=a.sourceToken.suiAddresses;if(!u)throw new G("SUI token must contain 'suiAddresses'");switch((0,Yr.setAddress)(u.bridgeAddress,u.bridgeAddressOrigin),(0,ns.setAddress)(u.utilsAddress),c){case 1:return this.buildRawTransactionAllbridgeSend(d,u,r,s);case 2:return this.buildRawTransactionWormholeSend(d,u,r,s);case 3:case 4:return this.buildRawTransactionCctpSend(a,d,u,r,s);case 5:throw new Pe("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(a,r,s,d){let{amount:c,fromAccountAddress:u,fromTokenAddress:p,toChainId:I,toAccountAddress:h,toTokenAddress:R,fee:B,gasFeePaymentMethod:W,extraGas:N}=a,Z=B;switch(N&&(Z=Rr(Z).plus(N).toFixed()),s.setSender(u),W){case"native":{let V=Z==="0"?ve({balance:BigInt(Z),useGasCoin:!1}):ve({balance:BigInt(Z)}),S={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:d??ve({balance:BigInt(c),type:p}),destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:ve({balance:BigInt(0),type:p}),feeSuiCoin:V};lr(s,p,S);break}case"stablecoin":{let V=BigInt(c)-BigInt(Z),S,T;if(d){let[L]=s.splitCoins(d,[Z]);S=d,T=L}else S=ve({balance:V,type:p}),T=ve({balance:BigInt(Z),type:p});let k={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:S,destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:T,feeSuiCoin:ve({balance:BigInt(0),useGasCoin:!1})};lr(s,p,k);break}case"abr":throw new G("SUI bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionWormholeSend(a,r,s,d){let{amount:c,fromAccountAddress:u,fromTokenAddress:p,toChainId:I,toAccountAddress:h,toTokenAddress:R,fee:B,gasFeePaymentMethod:W,extraGas:N}=a,Z=B;switch(N&&(Z=Rr(Z).plus(N).toFixed()),s.setSender(u),W){case"native":{let V=Z==="0"?ve({balance:BigInt(Z),useGasCoin:!1}):ve({balance:BigInt(Z)}),S={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:es,amount:d??ve({balance:BigInt(c),type:p}),destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:ve({balance:BigInt(0),type:p}),feeSuiCoin:V};gr(s,p,S);break}case"stablecoin":{let V=BigInt(c)-BigInt(Z),S,T;if(d){let[L]=s.splitCoins(d,[Z]);S=d,T=L}else S=ve({balance:V,type:p}),T=ve({balance:BigInt(Z),type:p});let k={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:es,amount:S,destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:T,feeSuiCoin:ve({balance:BigInt(0),useGasCoin:!1})};gr(s,p,k);break}case"abr":throw new G("SUI bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionCctpSend(a,r,s,d,c){let{amount:u,fromAccountAddress:p,fromTokenAddress:I,toChainId:h,toAccountAddress:R,fee:B,gasFeePaymentMethod:W,extraGas:N}=r;(0,ts.setAddress)(s.cctpAddress,s.cctpAddressOrigin);let Z=B;N&&(Z=Rr(Z).plus(N).toFixed()),d.setSender(p);let V=ct(d,rt(R)),S;if(a.destinationToken.chainType==="SOLANA"){let T=await Fi(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));S=ct(d,rt(T))}else S=V;switch(W){case"native":{let T=Z==="0"?ve({balance:BigInt(Z),useGasCoin:!1}):ve({balance:BigInt(Z)}),k={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:c??ve({balance:BigInt(u),type:I}),destinationChainId:h,recipient:S,recipientWalletAddress:V,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:ve({balance:BigInt(0),type:I}),feeSuiCoin:T};mr(d,I,k);break}case"stablecoin":{let T=BigInt(u)-BigInt(Z),k,L;if(c){let[J]=d.splitCoins(c,[Z]);k=c,L=J}else k=ve({balance:T,type:I}),L=ve({balance:BigInt(Z),type:I});let H={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:k,destinationChainId:h,recipient:S,recipientWalletAddress:V,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:L,feeSuiCoin:ve({balance:BigInt(0),useGasCoin:!1})};mr(d,I,H);break}case"abr":throw new G("SUI bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}return await d.toJSON({client:this.client})}};b();C();y();import{Big as Zc}from"big.js";b();C();y();b();C();y();import Fc from"bn.js";function Ki(o){return"0x"+new Fc(o).toString("hex")}function is(o){return new Promise(i=>setTimeout(()=>i(),o))}async function Ui(o,i){let a=await o.trx.sign(i);if(!a.signature)throw new on("Transaction was not signed properly");let s=(await o.trx.sendRawTransaction(a)).transaction.txID;return await Nc(o,s),{txId:s}}async function Nc(o,i,a=1e4){let r=Date.now();for(;;){if(Date.now()-r>a)throw new Nn("Transaction not found");let s=await o.trx.getUnconfirmedTransactionInfo(i);if(!s?.receipt){await is(2e3);continue}if(s.receipt.result==="SUCCESS")return s;throw new Nn(`Transaction status is ${s.receipt.result}`)}}var Jn=class extends Se{constructor(a,r){super();this.tronWeb=a;this.api=r}chainType="TRX";async send(a){let r=await Qe(this.chainType,a,this.api),s=await this.buildRawTransactionSendFromParams(a,r);return await Ui(this.tronWeb,s)}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toAccountAddress:u,toTokenAddress:p,minimumReceiveAmount:I}=a,h=[{type:"uint256",value:r},{type:"bytes32",value:c},{type:"bytes32",value:p},{type:"address",value:u},{type:"uint256",value:I}];return this.buildRawTransaction(s,"swap(uint256,bytes32,bytes32,address,uint256)",h,"0",d)}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(a,r)}async buildRawTransactionSendFromParams(a,r){let{amount:s,contractAddress:d,fromAccountAddress:c,fromTokenAddress:u,toChainId:p,toAccountAddress:I,toTokenAddress:h,messenger:R,fee:B,gasFeePaymentMethod:W,extraGas:N,extraGasDest:Z}=r,V=B;N&&(V=Zc(V).plus(N).toFixed());let S=mt().toString(),T,k,L;switch(R){case 3:case 4:switch(W){case"native":{T=[{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:0}],k=V;break}case"stablecoin":{T=[{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:V}],k="0";break}case"abr":throw new G("TRX bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}L="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(W){case"native":{T=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:0},{type:"uint256",value:Z??"0"},{type:"uint256",value:"10"}],k=V;break}case"stablecoin":{T=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:V},{type:"uint256",value:Z??"0"},{type:"uint256",value:"10"}],k="0";break}case"abr":throw new G("TRX bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}L="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:switch(W){case"native":{T=[{type:"bytes32",value:u},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"bytes32",value:h},{type:"uint256",value:S},{type:"uint8",value:R},{type:"uint256",value:0}],k=V;break}case"stablecoin":{T=[{type:"bytes32",value:u},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"bytes32",value:h},{type:"uint256",value:S},{type:"uint8",value:R},{type:"uint256",value:V}],k="0";break}case"abr":throw new G("TRX bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}L="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(d,L,T,k,c)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}};var Di=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s;this.rawTxBuilder=new Ni(i,a,r,s)}rawTxBuilder;async getAllowance(i,a){let r,s;a?(r=i,s=a):s=i;let d=Ln(s.token,s.messenger,s.gasFeePaymentMethod);return await this.tokenService.getAllowance({...s,spender:d},r)}async checkAllowance(i,a){let r,s;a?(r=i,s=a):s=i;let d=Ln(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.checkAllowance({...s,spender:d},r)}async approve(i,a){let r=Ln(a.token,a.messenger,a.gasFeePaymentMethod);return this.tokenService.approve(i,{...a,spender:r})}async send(i,a){return ae(a.amount),te("amount",a.amount,a.sourceToken.decimals),Zi(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function Ln(o,i=1,a="native"){if(a==="abr"){if(o.abrPayer)return o.abrPayer.payerAddress;throw new G("Token must contain 'abrPayer' for ABR payment method")}switch(i){case 3:if(o.cctpAddress)return o.cctpAddress;throw new Ve("Such route does not support CCTP protocol");case 4:if(o.cctpV2Address)return o.cctpV2Address;throw new Ve("Such route does not support CCTP V2 protocol");case 5:if(o.oftBridgeAddress)return o.oftBridgeAddress;throw new Pe("Such route does not support OFT protocol");case 1:case 2:return o.bridgeAddress}}function Zi(o,i,a,r,s){switch(U.getChainProperty(o).chainType){case"EVM":{if(s)return new Sn(s,i,a);{let d=a.getNodeRpcUrl(o);return new Sn(new Xc(d),i,a)}}case"TRX":{if(s)return new Jn(s,i);{let d=a.getNodeRpcUrl(o);return new Jn(new Gc({fullHost:d,solidityNode:d,eventServer:d}),i)}}case"SOLANA":return new Hi(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},i);case"SRB":return new Mi(a,r,i);case"SUI":return new pn(a,i);case"ALG":if(s){let d=s,c=as.fromClients({algod:d});return new Pn(c,i)}else{let d=a.getNodeRpcUrl(o),c=as.fromConfig({algodConfig:{server:d}});return new Pn(c,i)}case"STX":{let d=a.getNodeRpcUrl(o);return new ji(d,r,i)}}}b();C();y();import{AlgorandClient as ps}from"@algorandfoundation/algokit-utils";import{Big as iA}from"big.js";import aA from"timed-cache";import{TronWeb as rA}from"tronweb";import{FMT_BYTES as oA,FMT_NUMBER as sA,Web3 as dA}from"web3";b();C();y();import{Big as Tt}from"big.js";function rs(o,i,a,r,s){let d=O(o,3),c=Tt(d),u=Tt(a),p=Tt(r).plus(s),I,h;if(u.eq(0)||p.eq(0)){let B=c.div(2);I=Tt(r).plus(B),h=Tt(s).plus(B)}else I=Tt(r).plus(c.mul(r).div(p)),h=Tt(s).plus(c.mul(s).div(p));return Tt(ro(i,I.toFixed(),h.toFixed())).minus(u).toFixed()}function os(o){let i=O(o,3);return Tt(i).round().toFixed()}b();C();y();import{assignGroupID as Br,bytesToBigInt as Sc,OnApplicationComplete as ss}from"algosdk";b();C();y();import{getArc56ReturnValue as Vc}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as Ei}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as wR}from"@algorandfoundation/algokit-utils/types/app-factory";import{encodeAddress as Pc}from"algosdk";var _i={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
1
|
+
var ks=Object.create;var ka=Object.defineProperty;var Hs=Object.getOwnPropertyDescriptor;var Ms=Object.getOwnPropertyNames;var js=Object.getPrototypeOf,Js=Object.prototype.hasOwnProperty;var zt=(o,i)=>()=>(o&&(i=o(o=0)),i);var Ha=(o,i)=>()=>(i||o((i={exports:{}}).exports,i),i.exports),Ma=(o,i)=>{for(var a in i)ka(o,a,{get:i[a],enumerable:!0})},zs=(o,i,a,r)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of Ms(i))!Js.call(o,s)&&s!==a&&ka(o,s,{get:()=>i[s],enumerable:!(r=Hs(i,s))||r.enumerable});return o};var at=(o,i,a)=>(a=o!=null?ks(js(o)):{},zs(i||!o||!o.__esModule?ka(a,"default",{value:o,enumerable:!0}):a,o));var b=zt(()=>{});function xs(o,i){this.fun=o,this.array=i}function Or(o){var i=Math.floor((Date.now()-xt.now())*.001),a=xt.now()*.001,r=Math.floor(a)+i,s=Math.floor(a%1*1e9);return o&&(r=r-o[0],s=s-o[1],s<0&&(r--,s+=Ja)),[r,s]}var Ag,xt,ja,Ja,Qr=zt(()=>{b();C();y();xs.prototype.run=function(){this.fun.apply(null,this.array)};Ag={PATH:"/usr/bin",LANG:typeof navigator<"u"?navigator.language+".UTF-8":void 0,PWD:"/",HOME:"/home",TMP:"/tmp"},xt={now:typeof performance<"u"?performance.now.bind(performance):void 0,timing:typeof performance<"u"?performance.timing:void 0};xt.now===void 0&&(ja=Date.now(),xt.timing&&xt.timing.navigationStart&&(ja=xt.timing.navigationStart),xt.now=()=>Date.now()-ja);Ja=1e9;Or.bigint=function(o){var i=Or(o);return typeof BigInt>"u"?i[0]*Ja+i[1]:BigInt(i[0]*Ja)+BigInt(i[1])}});var y=zt(()=>{Qr()});function Os(){if(Kr)return Fn;Kr=!0,Fn.byteLength=u,Fn.toByteArray=I,Fn.fromByteArray=B;for(var o=[],i=[],a=typeof Uint8Array<"u"?Uint8Array:Array,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,d=r.length;s<d;++s)o[s]=r[s],i[r.charCodeAt(s)]=s;i[45]=62,i[95]=63;function c(W){var N=W.length;if(N%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var Z=W.indexOf("=");Z===-1&&(Z=N);var V=Z===N?0:4-Z%4;return[Z,V]}function u(W){var N=c(W),Z=N[0],V=N[1];return(Z+V)*3/4-V}function p(W,N,Z){return(N+Z)*3/4-Z}function I(W){var N,Z=c(W),V=Z[0],S=Z[1],T=new a(p(W,V,S)),k=0,L=S>0?V-4:V,H;for(H=0;H<L;H+=4)N=i[W.charCodeAt(H)]<<18|i[W.charCodeAt(H+1)]<<12|i[W.charCodeAt(H+2)]<<6|i[W.charCodeAt(H+3)],T[k++]=N>>16&255,T[k++]=N>>8&255,T[k++]=N&255;return S===2&&(N=i[W.charCodeAt(H)]<<2|i[W.charCodeAt(H+1)]>>4,T[k++]=N&255),S===1&&(N=i[W.charCodeAt(H)]<<10|i[W.charCodeAt(H+1)]<<4|i[W.charCodeAt(H+2)]>>2,T[k++]=N>>8&255,T[k++]=N&255),T}function h(W){return o[W>>18&63]+o[W>>12&63]+o[W>>6&63]+o[W&63]}function R(W,N,Z){for(var V,S=[],T=N;T<Z;T+=3)V=(W[T]<<16&16711680)+(W[T+1]<<8&65280)+(W[T+2]&255),S.push(h(V));return S.join("")}function B(W){for(var N,Z=W.length,V=Z%3,S=[],T=16383,k=0,L=Z-V;k<L;k+=T)S.push(R(W,k,k+T>L?L:k+T));return V===1?(N=W[Z-1],S.push(o[N>>2]+o[N<<4&63]+"==")):V===2&&(N=(W[Z-2]<<8)+W[Z-1],S.push(o[N>>10]+o[N>>4&63]+o[N<<2&63]+"=")),S.join("")}return Fn}function Qs(){if(Ur)return ai;Ur=!0;return ai.read=function(o,i,a,r,s){var d,c,u=s*8-r-1,p=(1<<u)-1,I=p>>1,h=-7,R=a?s-1:0,B=a?-1:1,W=o[i+R];for(R+=B,d=W&(1<<-h)-1,W>>=-h,h+=u;h>0;d=d*256+o[i+R],R+=B,h-=8);for(c=d&(1<<-h)-1,d>>=-h,h+=r;h>0;c=c*256+o[i+R],R+=B,h-=8);if(d===0)d=1-I;else{if(d===p)return c?NaN:(W?-1:1)*(1/0);c=c+Math.pow(2,r),d=d-I}return(W?-1:1)*c*Math.pow(2,d-r)},ai.write=function(o,i,a,r,s,d){var c,u,p,I=d*8-s-1,h=(1<<I)-1,R=h>>1,B=s===23?Math.pow(2,-24)-Math.pow(2,-77):0,W=r?0:d-1,N=r?1:-1,Z=i<0||i===0&&1/i<0?1:0;for(i=Math.abs(i),isNaN(i)||i===1/0?(u=isNaN(i)?1:0,c=h):(c=Math.floor(Math.log(i)/Math.LN2),i*(p=Math.pow(2,-c))<1&&(c--,p*=2),c+R>=1?i+=B/p:i+=B*Math.pow(2,1-R),i*p>=2&&(c++,p/=2),c+R>=h?(u=0,c=h):c+R>=1?(u=(i*p-1)*Math.pow(2,s),c=c+R):(u=i*Math.pow(2,R-1)*Math.pow(2,s),c=0));s>=8;o[a+W]=u&255,W+=N,u/=256,s-=8);for(c=c<<s|u,I+=s;I>0;o[a+W]=c&255,W+=N,c/=256,I-=8);o[a+W-N]|=Z*128},ai}function Er(){if(Dr)return Ot;Dr=!0;let o=Os(),i=Qs(),a=typeof Symbol=="function"&&typeof Symbol.for=="function"?Symbol.for("nodejs.util.inspect.custom"):null;Ot.Buffer=c,Ot.SlowBuffer=S,Ot.INSPECT_MAX_BYTES=50;let r=2147483647;Ot.kMaxLength=r,c.TYPED_ARRAY_SUPPORT=s(),!c.TYPED_ARRAY_SUPPORT&&typeof console<"u"&&typeof console.error=="function"&&console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.");function s(){try{let l=new Uint8Array(1),A={foo:function(){return 42}};return Object.setPrototypeOf(A,Uint8Array.prototype),Object.setPrototypeOf(l,A),l.foo()===42}catch{return!1}}Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}});function d(l){if(l>r)throw new RangeError('The value "'+l+'" is invalid for option "size"');let A=new Uint8Array(l);return Object.setPrototypeOf(A,c.prototype),A}function c(l,A,g){if(typeof l=="number"){if(typeof A=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return h(l)}return u(l,A,g)}c.poolSize=8192;function u(l,A,g){if(typeof l=="string")return R(l,A);if(ArrayBuffer.isView(l))return W(l);if(l==null)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l);if(At(l,ArrayBuffer)||l&&At(l.buffer,ArrayBuffer)||typeof SharedArrayBuffer<"u"&&(At(l,SharedArrayBuffer)||l&&At(l.buffer,SharedArrayBuffer)))return N(l,A,g);if(typeof l=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');let m=l.valueOf&&l.valueOf();if(m!=null&&m!==l)return c.from(m,A,g);let v=Z(l);if(v)return v;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof l[Symbol.toPrimitive]=="function")return c.from(l[Symbol.toPrimitive]("string"),A,g);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof l)}c.from=function(l,A,g){return u(l,A,g)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array);function p(l){if(typeof l!="number")throw new TypeError('"size" argument must be of type number');if(l<0)throw new RangeError('The value "'+l+'" is invalid for option "size"')}function I(l,A,g){return p(l),l<=0?d(l):A!==void 0?typeof g=="string"?d(l).fill(A,g):d(l).fill(A):d(l)}c.alloc=function(l,A,g){return I(l,A,g)};function h(l){return p(l),d(l<0?0:V(l)|0)}c.allocUnsafe=function(l){return h(l)},c.allocUnsafeSlow=function(l){return h(l)};function R(l,A){if((typeof A!="string"||A==="")&&(A="utf8"),!c.isEncoding(A))throw new TypeError("Unknown encoding: "+A);let g=T(l,A)|0,m=d(g),v=m.write(l,A);return v!==g&&(m=m.slice(0,v)),m}function B(l){let A=l.length<0?0:V(l.length)|0,g=d(A);for(let m=0;m<A;m+=1)g[m]=l[m]&255;return g}function W(l){if(At(l,Uint8Array)){let A=new Uint8Array(l);return N(A.buffer,A.byteOffset,A.byteLength)}return B(l)}function N(l,A,g){if(A<0||l.byteLength<A)throw new RangeError('"offset" is outside of buffer bounds');if(l.byteLength<A+(g||0))throw new RangeError('"length" is outside of buffer bounds');let m;return A===void 0&&g===void 0?m=new Uint8Array(l):g===void 0?m=new Uint8Array(l,A):m=new Uint8Array(l,A,g),Object.setPrototypeOf(m,c.prototype),m}function Z(l){if(c.isBuffer(l)){let A=V(l.length)|0,g=d(A);return g.length===0||l.copy(g,0,0,A),g}if(l.length!==void 0)return typeof l.length!="number"||La(l.length)?d(0):B(l);if(l.type==="Buffer"&&Array.isArray(l.data))return B(l.data)}function V(l){if(l>=r)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r.toString(16)+" bytes");return l|0}function S(l){return+l!=l&&(l=0),c.alloc(+l)}c.isBuffer=function(A){return A!=null&&A._isBuffer===!0&&A!==c.prototype},c.compare=function(A,g){if(At(A,Uint8Array)&&(A=c.from(A,A.offset,A.byteLength)),At(g,Uint8Array)&&(g=c.from(g,g.offset,g.byteLength)),!c.isBuffer(A)||!c.isBuffer(g))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(A===g)return 0;let m=A.length,v=g.length;for(let f=0,X=Math.min(m,v);f<X;++f)if(A[f]!==g[f]){m=A[f],v=g[f];break}return m<v?-1:v<m?1:0},c.isEncoding=function(A){switch(String(A).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(A,g){if(!Array.isArray(A))throw new TypeError('"list" argument must be an Array of Buffers');if(A.length===0)return c.alloc(0);let m;if(g===void 0)for(g=0,m=0;m<A.length;++m)g+=A[m].length;let v=c.allocUnsafe(g),f=0;for(m=0;m<A.length;++m){let X=A[m];if(At(X,Uint8Array))f+X.length>v.length?(c.isBuffer(X)||(X=c.from(X)),X.copy(v,f)):Uint8Array.prototype.set.call(v,X,f);else if(c.isBuffer(X))X.copy(v,f);else throw new TypeError('"list" argument must be an Array of Buffers');f+=X.length}return v};function T(l,A){if(c.isBuffer(l))return l.length;if(ArrayBuffer.isView(l)||At(l,ArrayBuffer))return l.byteLength;if(typeof l!="string")throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof l);let g=l.length,m=arguments.length>2&&arguments[2]===!0;if(!m&&g===0)return 0;let v=!1;for(;;)switch(A){case"ascii":case"latin1":case"binary":return g;case"utf8":case"utf-8":return Sa(l).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return g*2;case"hex":return g>>>1;case"base64":return xr(l).length;default:if(v)return m?-1:Sa(l).length;A=(""+A).toLowerCase(),v=!0}}c.byteLength=T;function k(l,A,g){let m=!1;if((A===void 0||A<0)&&(A=0),A>this.length||((g===void 0||g>this.length)&&(g=this.length),g<=0)||(g>>>=0,A>>>=0,g<=A))return"";for(l||(l="utf8");;)switch(l){case"hex":return Ue(this,A,g);case"utf8":case"utf-8":return me(this,A,g);case"ascii":return fe(this,A,g);case"latin1":case"binary":return Ge(this,A,g);case"base64":return oe(this,A,g);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return _(this,A,g);default:if(m)throw new TypeError("Unknown encoding: "+l);l=(l+"").toLowerCase(),m=!0}}c.prototype._isBuffer=!0;function L(l,A,g){let m=l[A];l[A]=l[g],l[g]=m}c.prototype.swap16=function(){let A=this.length;if(A%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let g=0;g<A;g+=2)L(this,g,g+1);return this},c.prototype.swap32=function(){let A=this.length;if(A%4!==0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let g=0;g<A;g+=4)L(this,g,g+3),L(this,g+1,g+2);return this},c.prototype.swap64=function(){let A=this.length;if(A%8!==0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let g=0;g<A;g+=8)L(this,g,g+7),L(this,g+1,g+6),L(this,g+2,g+5),L(this,g+3,g+4);return this},c.prototype.toString=function(){let A=this.length;return A===0?"":arguments.length===0?me(this,0,A):k.apply(this,arguments)},c.prototype.toLocaleString=c.prototype.toString,c.prototype.equals=function(A){if(!c.isBuffer(A))throw new TypeError("Argument must be a Buffer");return this===A?!0:c.compare(this,A)===0},c.prototype.inspect=function(){let A="",g=Ot.INSPECT_MAX_BYTES;return A=this.toString("hex",0,g).replace(/(.{2})/g,"$1 ").trim(),this.length>g&&(A+=" ... "),"<Buffer "+A+">"},a&&(c.prototype[a]=c.prototype.inspect),c.prototype.compare=function(A,g,m,v,f){if(At(A,Uint8Array)&&(A=c.from(A,A.offset,A.byteLength)),!c.isBuffer(A))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof A);if(g===void 0&&(g=0),m===void 0&&(m=A?A.length:0),v===void 0&&(v=0),f===void 0&&(f=this.length),g<0||m>A.length||v<0||f>this.length)throw new RangeError("out of range index");if(v>=f&&g>=m)return 0;if(v>=f)return-1;if(g>=m)return 1;if(g>>>=0,m>>>=0,v>>>=0,f>>>=0,this===A)return 0;let X=f-v,D=m-g,ye=Math.min(X,D),pe=this.slice(v,f),Ce=A.slice(g,m);for(let Ae=0;Ae<ye;++Ae)if(pe[Ae]!==Ce[Ae]){X=pe[Ae],D=Ce[Ae];break}return X<D?-1:D<X?1:0};function H(l,A,g,m,v){if(l.length===0)return-1;if(typeof g=="string"?(m=g,g=0):g>2147483647?g=2147483647:g<-2147483648&&(g=-2147483648),g=+g,La(g)&&(g=v?0:l.length-1),g<0&&(g=l.length+g),g>=l.length){if(v)return-1;g=l.length-1}else if(g<0)if(v)g=0;else return-1;if(typeof A=="string"&&(A=c.from(A,m)),c.isBuffer(A))return A.length===0?-1:J(l,A,g,m,v);if(typeof A=="number")return A=A&255,typeof Uint8Array.prototype.indexOf=="function"?v?Uint8Array.prototype.indexOf.call(l,A,g):Uint8Array.prototype.lastIndexOf.call(l,A,g):J(l,[A],g,m,v);throw new TypeError("val must be string, number or Buffer")}function J(l,A,g,m,v){let f=1,X=l.length,D=A.length;if(m!==void 0&&(m=String(m).toLowerCase(),m==="ucs2"||m==="ucs-2"||m==="utf16le"||m==="utf-16le")){if(l.length<2||A.length<2)return-1;f=2,X/=2,D/=2,g/=2}function ye(Ce,Ae){return f===1?Ce[Ae]:Ce.readUInt16BE(Ae*f)}let pe;if(v){let Ce=-1;for(pe=g;pe<X;pe++)if(ye(l,pe)===ye(A,Ce===-1?0:pe-Ce)){if(Ce===-1&&(Ce=pe),pe-Ce+1===D)return Ce*f}else Ce!==-1&&(pe-=pe-Ce),Ce=-1}else for(g+D>X&&(g=X-D),pe=g;pe>=0;pe--){let Ce=!0;for(let Ae=0;Ae<D;Ae++)if(ye(l,pe+Ae)!==ye(A,Ae)){Ce=!1;break}if(Ce)return pe}return-1}c.prototype.includes=function(A,g,m){return this.indexOf(A,g,m)!==-1},c.prototype.indexOf=function(A,g,m){return H(this,A,g,m,!0)},c.prototype.lastIndexOf=function(A,g,m){return H(this,A,g,m,!1)};function ie(l,A,g,m){g=Number(g)||0;let v=l.length-g;m?(m=Number(m),m>v&&(m=v)):m=v;let f=A.length;m>f/2&&(m=f/2);let X;for(X=0;X<m;++X){let D=parseInt(A.substr(X*2,2),16);if(La(D))return X;l[g+X]=D}return X}function ge(l,A,g,m){return ii(Sa(A,l.length-g),l,g,m)}function le(l,A,g,m){return ii(Vs(A),l,g,m)}function ce(l,A,g,m){return ii(xr(A),l,g,m)}function ue(l,A,g,m){return ii(Ps(A,l.length-g),l,g,m)}c.prototype.write=function(A,g,m,v){if(g===void 0)v="utf8",m=this.length,g=0;else if(m===void 0&&typeof g=="string")v=g,m=this.length,g=0;else if(isFinite(g))g=g>>>0,isFinite(m)?(m=m>>>0,v===void 0&&(v="utf8")):(v=m,m=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");let f=this.length-g;if((m===void 0||m>f)&&(m=f),A.length>0&&(m<0||g<0)||g>this.length)throw new RangeError("Attempt to write outside buffer bounds");v||(v="utf8");let X=!1;for(;;)switch(v){case"hex":return ie(this,A,g,m);case"utf8":case"utf-8":return ge(this,A,g,m);case"ascii":case"latin1":case"binary":return le(this,A,g,m);case"base64":return ce(this,A,g,m);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ue(this,A,g,m);default:if(X)throw new TypeError("Unknown encoding: "+v);v=(""+v).toLowerCase(),X=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function oe(l,A,g){return A===0&&g===l.length?o.fromByteArray(l):o.fromByteArray(l.slice(A,g))}function me(l,A,g){g=Math.min(l.length,g);let m=[],v=A;for(;v<g;){let f=l[v],X=null,D=f>239?4:f>223?3:f>191?2:1;if(v+D<=g){let ye,pe,Ce,Ae;switch(D){case 1:f<128&&(X=f);break;case 2:ye=l[v+1],(ye&192)===128&&(Ae=(f&31)<<6|ye&63,Ae>127&&(X=Ae));break;case 3:ye=l[v+1],pe=l[v+2],(ye&192)===128&&(pe&192)===128&&(Ae=(f&15)<<12|(ye&63)<<6|pe&63,Ae>2047&&(Ae<55296||Ae>57343)&&(X=Ae));break;case 4:ye=l[v+1],pe=l[v+2],Ce=l[v+3],(ye&192)===128&&(pe&192)===128&&(Ce&192)===128&&(Ae=(f&15)<<18|(ye&63)<<12|(pe&63)<<6|Ce&63,Ae>65535&&Ae<1114112&&(X=Ae))}}X===null?(X=65533,D=1):X>65535&&(X-=65536,m.push(X>>>10&1023|55296),X=56320|X&1023),m.push(X),v+=D}return Ze(m)}let We=4096;function Ze(l){let A=l.length;if(A<=We)return String.fromCharCode.apply(String,l);let g="",m=0;for(;m<A;)g+=String.fromCharCode.apply(String,l.slice(m,m+=We));return g}function fe(l,A,g){let m="";g=Math.min(l.length,g);for(let v=A;v<g;++v)m+=String.fromCharCode(l[v]&127);return m}function Ge(l,A,g){let m="";g=Math.min(l.length,g);for(let v=A;v<g;++v)m+=String.fromCharCode(l[v]);return m}function Ue(l,A,g){let m=l.length;(!A||A<0)&&(A=0),(!g||g<0||g>m)&&(g=m);let v="";for(let f=A;f<g;++f)v+=Ss[l[f]];return v}function _(l,A,g){let m=l.slice(A,g),v="";for(let f=0;f<m.length-1;f+=2)v+=String.fromCharCode(m[f]+m[f+1]*256);return v}c.prototype.slice=function(A,g){let m=this.length;A=~~A,g=g===void 0?m:~~g,A<0?(A+=m,A<0&&(A=0)):A>m&&(A=m),g<0?(g+=m,g<0&&(g=0)):g>m&&(g=m),g<A&&(g=A);let v=this.subarray(A,g);return Object.setPrototypeOf(v,c.prototype),v};function Ye(l,A,g){if(l%1!==0||l<0)throw new RangeError("offset is not uint");if(l+A>g)throw new RangeError("Trying to access beyond buffer length")}c.prototype.readUintLE=c.prototype.readUIntLE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=this[A],f=1,X=0;for(;++X<g&&(f*=256);)v+=this[A+X]*f;return v},c.prototype.readUintBE=c.prototype.readUIntBE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=this[A+--g],f=1;for(;g>0&&(f*=256);)v+=this[A+--g]*f;return v},c.prototype.readUint8=c.prototype.readUInt8=function(A,g){return A=A>>>0,g||Ye(A,1,this.length),this[A]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(A,g){return A=A>>>0,g||Ye(A,2,this.length),this[A]|this[A+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(A,g){return A=A>>>0,g||Ye(A,2,this.length),this[A]<<8|this[A+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),(this[A]|this[A+1]<<8|this[A+2]<<16)+this[A+3]*16777216},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),this[A]*16777216+(this[A+1]<<16|this[A+2]<<8|this[A+3])},c.prototype.readBigUInt64LE=Ft(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=g+this[++A]*2**8+this[++A]*2**16+this[++A]*2**24,f=this[++A]+this[++A]*2**8+this[++A]*2**16+m*2**24;return BigInt(v)+(BigInt(f)<<BigInt(32))}),c.prototype.readBigUInt64BE=Ft(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=g*2**24+this[++A]*2**16+this[++A]*2**8+this[++A],f=this[++A]*2**24+this[++A]*2**16+this[++A]*2**8+m;return(BigInt(v)<<BigInt(32))+BigInt(f)}),c.prototype.readIntLE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=this[A],f=1,X=0;for(;++X<g&&(f*=256);)v+=this[A+X]*f;return f*=128,v>=f&&(v-=Math.pow(2,8*g)),v},c.prototype.readIntBE=function(A,g,m){A=A>>>0,g=g>>>0,m||Ye(A,g,this.length);let v=g,f=1,X=this[A+--v];for(;v>0&&(f*=256);)X+=this[A+--v]*f;return f*=128,X>=f&&(X-=Math.pow(2,8*g)),X},c.prototype.readInt8=function(A,g){return A=A>>>0,g||Ye(A,1,this.length),this[A]&128?(255-this[A]+1)*-1:this[A]},c.prototype.readInt16LE=function(A,g){A=A>>>0,g||Ye(A,2,this.length);let m=this[A]|this[A+1]<<8;return m&32768?m|4294901760:m},c.prototype.readInt16BE=function(A,g){A=A>>>0,g||Ye(A,2,this.length);let m=this[A+1]|this[A]<<8;return m&32768?m|4294901760:m},c.prototype.readInt32LE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),this[A]|this[A+1]<<8|this[A+2]<<16|this[A+3]<<24},c.prototype.readInt32BE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),this[A]<<24|this[A+1]<<16|this[A+2]<<8|this[A+3]},c.prototype.readBigInt64LE=Ft(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=this[A+4]+this[A+5]*2**8+this[A+6]*2**16+(m<<24);return(BigInt(v)<<BigInt(32))+BigInt(g+this[++A]*2**8+this[++A]*2**16+this[++A]*2**24)}),c.prototype.readBigInt64BE=Ft(function(A){A=A>>>0,rn(A,"offset");let g=this[A],m=this[A+7];(g===void 0||m===void 0)&&wn(A,this.length-8);let v=(g<<24)+this[++A]*2**16+this[++A]*2**8+this[++A];return(BigInt(v)<<BigInt(32))+BigInt(this[++A]*2**24+this[++A]*2**16+this[++A]*2**8+m)}),c.prototype.readFloatLE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),i.read(this,A,!0,23,4)},c.prototype.readFloatBE=function(A,g){return A=A>>>0,g||Ye(A,4,this.length),i.read(this,A,!1,23,4)},c.prototype.readDoubleLE=function(A,g){return A=A>>>0,g||Ye(A,8,this.length),i.read(this,A,!0,52,8)},c.prototype.readDoubleBE=function(A,g){return A=A>>>0,g||Ye(A,8,this.length),i.read(this,A,!1,52,8)};function Me(l,A,g,m,v,f){if(!c.isBuffer(l))throw new TypeError('"buffer" argument must be a Buffer instance');if(A>v||A<f)throw new RangeError('"value" argument is out of bounds');if(g+m>l.length)throw new RangeError("Index out of range")}c.prototype.writeUintLE=c.prototype.writeUIntLE=function(A,g,m,v){if(A=+A,g=g>>>0,m=m>>>0,!v){let D=Math.pow(2,8*m)-1;Me(this,A,g,m,D,0)}let f=1,X=0;for(this[g]=A&255;++X<m&&(f*=256);)this[g+X]=A/f&255;return g+m},c.prototype.writeUintBE=c.prototype.writeUIntBE=function(A,g,m,v){if(A=+A,g=g>>>0,m=m>>>0,!v){let D=Math.pow(2,8*m)-1;Me(this,A,g,m,D,0)}let f=m-1,X=1;for(this[g+f]=A&255;--f>=0&&(X*=256);)this[g+f]=A/X&255;return g+m},c.prototype.writeUint8=c.prototype.writeUInt8=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,1,255,0),this[g]=A&255,g+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,65535,0),this[g]=A&255,this[g+1]=A>>>8,g+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,65535,0),this[g]=A>>>8,this[g+1]=A&255,g+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,4294967295,0),this[g+3]=A>>>24,this[g+2]=A>>>16,this[g+1]=A>>>8,this[g]=A&255,g+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,4294967295,0),this[g]=A>>>24,this[g+1]=A>>>16,this[g+2]=A>>>8,this[g+3]=A&255,g+4};function Lr(l,A,g,m,v){zr(A,m,v,l,g,7);let f=Number(A&BigInt(4294967295));l[g++]=f,f=f>>8,l[g++]=f,f=f>>8,l[g++]=f,f=f>>8,l[g++]=f;let X=Number(A>>BigInt(32)&BigInt(4294967295));return l[g++]=X,X=X>>8,l[g++]=X,X=X>>8,l[g++]=X,X=X>>8,l[g++]=X,g}function kr(l,A,g,m,v){zr(A,m,v,l,g,7);let f=Number(A&BigInt(4294967295));l[g+7]=f,f=f>>8,l[g+6]=f,f=f>>8,l[g+5]=f,f=f>>8,l[g+4]=f;let X=Number(A>>BigInt(32)&BigInt(4294967295));return l[g+3]=X,X=X>>8,l[g+2]=X,X=X>>8,l[g+1]=X,X=X>>8,l[g]=X,g+8}c.prototype.writeBigUInt64LE=Ft(function(A,g=0){return Lr(this,A,g,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeBigUInt64BE=Ft(function(A,g=0){return kr(this,A,g,BigInt(0),BigInt("0xffffffffffffffff"))}),c.prototype.writeIntLE=function(A,g,m,v){if(A=+A,g=g>>>0,!v){let ye=Math.pow(2,8*m-1);Me(this,A,g,m,ye-1,-ye)}let f=0,X=1,D=0;for(this[g]=A&255;++f<m&&(X*=256);)A<0&&D===0&&this[g+f-1]!==0&&(D=1),this[g+f]=(A/X>>0)-D&255;return g+m},c.prototype.writeIntBE=function(A,g,m,v){if(A=+A,g=g>>>0,!v){let ye=Math.pow(2,8*m-1);Me(this,A,g,m,ye-1,-ye)}let f=m-1,X=1,D=0;for(this[g+f]=A&255;--f>=0&&(X*=256);)A<0&&D===0&&this[g+f+1]!==0&&(D=1),this[g+f]=(A/X>>0)-D&255;return g+m},c.prototype.writeInt8=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,1,127,-128),A<0&&(A=255+A+1),this[g]=A&255,g+1},c.prototype.writeInt16LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,32767,-32768),this[g]=A&255,this[g+1]=A>>>8,g+2},c.prototype.writeInt16BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,2,32767,-32768),this[g]=A>>>8,this[g+1]=A&255,g+2},c.prototype.writeInt32LE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,2147483647,-2147483648),this[g]=A&255,this[g+1]=A>>>8,this[g+2]=A>>>16,this[g+3]=A>>>24,g+4},c.prototype.writeInt32BE=function(A,g,m){return A=+A,g=g>>>0,m||Me(this,A,g,4,2147483647,-2147483648),A<0&&(A=4294967295+A+1),this[g]=A>>>24,this[g+1]=A>>>16,this[g+2]=A>>>8,this[g+3]=A&255,g+4},c.prototype.writeBigInt64LE=Ft(function(A,g=0){return Lr(this,A,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),c.prototype.writeBigInt64BE=Ft(function(A,g=0){return kr(this,A,g,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))});function Hr(l,A,g,m,v,f){if(g+m>l.length)throw new RangeError("Index out of range");if(g<0)throw new RangeError("Index out of range")}function Mr(l,A,g,m,v){return A=+A,g=g>>>0,v||Hr(l,A,g,4),i.write(l,A,g,m,23,4),g+4}c.prototype.writeFloatLE=function(A,g,m){return Mr(this,A,g,!0,m)},c.prototype.writeFloatBE=function(A,g,m){return Mr(this,A,g,!1,m)};function jr(l,A,g,m,v){return A=+A,g=g>>>0,v||Hr(l,A,g,8),i.write(l,A,g,m,52,8),g+8}c.prototype.writeDoubleLE=function(A,g,m){return jr(this,A,g,!0,m)},c.prototype.writeDoubleBE=function(A,g,m){return jr(this,A,g,!1,m)},c.prototype.copy=function(A,g,m,v){if(!c.isBuffer(A))throw new TypeError("argument should be a Buffer");if(m||(m=0),!v&&v!==0&&(v=this.length),g>=A.length&&(g=A.length),g||(g=0),v>0&&v<m&&(v=m),v===m||A.length===0||this.length===0)return 0;if(g<0)throw new RangeError("targetStart out of bounds");if(m<0||m>=this.length)throw new RangeError("Index out of range");if(v<0)throw new RangeError("sourceEnd out of bounds");v>this.length&&(v=this.length),A.length-g<v-m&&(v=A.length-g+m);let f=v-m;return this===A&&typeof Uint8Array.prototype.copyWithin=="function"?this.copyWithin(g,m,v):Uint8Array.prototype.set.call(A,this.subarray(m,v),g),f},c.prototype.fill=function(A,g,m,v){if(typeof A=="string"){if(typeof g=="string"?(v=g,g=0,m=this.length):typeof m=="string"&&(v=m,m=this.length),v!==void 0&&typeof v!="string")throw new TypeError("encoding must be a string");if(typeof v=="string"&&!c.isEncoding(v))throw new TypeError("Unknown encoding: "+v);if(A.length===1){let X=A.charCodeAt(0);(v==="utf8"&&X<128||v==="latin1")&&(A=X)}}else typeof A=="number"?A=A&255:typeof A=="boolean"&&(A=Number(A));if(g<0||this.length<g||this.length<m)throw new RangeError("Out of range index");if(m<=g)return this;g=g>>>0,m=m===void 0?this.length:m>>>0,A||(A=0);let f;if(typeof A=="number")for(f=g;f<m;++f)this[f]=A;else{let X=c.isBuffer(A)?A:c.from(A,v),D=X.length;if(D===0)throw new TypeError('The value "'+A+'" is invalid for argument "value"');for(f=0;f<m-g;++f)this[f+g]=X[f%D]}return this};let an={};function Pa(l,A,g){an[l]=class extends g{constructor(){super(),Object.defineProperty(this,"message",{value:A.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${l}]`,this.stack,delete this.name}get code(){return l}set code(v){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:v,writable:!0})}toString(){return`${this.name} [${l}]: ${this.message}`}}}Pa("ERR_BUFFER_OUT_OF_BOUNDS",function(l){return l?`${l} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),Pa("ERR_INVALID_ARG_TYPE",function(l,A){return`The "${l}" argument must be of type number. Received type ${typeof A}`},TypeError),Pa("ERR_OUT_OF_RANGE",function(l,A,g){let m=`The value of "${l}" is out of range.`,v=g;return Number.isInteger(g)&&Math.abs(g)>2**32?v=Jr(String(g)):typeof g=="bigint"&&(v=String(g),(g>BigInt(2)**BigInt(32)||g<-(BigInt(2)**BigInt(32)))&&(v=Jr(v)),v+="n"),m+=` It must be ${A}. Received ${v}`,m},RangeError);function Jr(l){let A="",g=l.length,m=l[0]==="-"?1:0;for(;g>=m+4;g-=3)A=`_${l.slice(g-3,g)}${A}`;return`${l.slice(0,g)}${A}`}function Zs(l,A,g){rn(A,"offset"),(l[A]===void 0||l[A+g]===void 0)&&wn(A,l.length-(g+1))}function zr(l,A,g,m,v,f){if(l>g||l<A){let X=typeof A=="bigint"?"n":"",D;throw A===0||A===BigInt(0)?D=`>= 0${X} and < 2${X} ** ${(f+1)*8}${X}`:D=`>= -(2${X} ** ${(f+1)*8-1}${X}) and < 2 ** ${(f+1)*8-1}${X}`,new an.ERR_OUT_OF_RANGE("value",D,l)}Zs(m,v,f)}function rn(l,A){if(typeof l!="number")throw new an.ERR_INVALID_ARG_TYPE(A,"number",l)}function wn(l,A,g){throw Math.floor(l)!==l?(rn(l,g),new an.ERR_OUT_OF_RANGE("offset","an integer",l)):A<0?new an.ERR_BUFFER_OUT_OF_BOUNDS:new an.ERR_OUT_OF_RANGE("offset",`>= 0 and <= ${A}`,l)}let Gs=/[^+/0-9A-Za-z-_]/g;function Xs(l){if(l=l.split("=")[0],l=l.trim().replace(Gs,""),l.length<2)return"";for(;l.length%4!==0;)l=l+"=";return l}function Sa(l,A){A=A||1/0;let g,m=l.length,v=null,f=[];for(let X=0;X<m;++X){if(g=l.charCodeAt(X),g>55295&&g<57344){if(!v){if(g>56319){(A-=3)>-1&&f.push(239,191,189);continue}else if(X+1===m){(A-=3)>-1&&f.push(239,191,189);continue}v=g;continue}if(g<56320){(A-=3)>-1&&f.push(239,191,189),v=g;continue}g=(v-55296<<10|g-56320)+65536}else v&&(A-=3)>-1&&f.push(239,191,189);if(v=null,g<128){if((A-=1)<0)break;f.push(g)}else if(g<2048){if((A-=2)<0)break;f.push(g>>6|192,g&63|128)}else if(g<65536){if((A-=3)<0)break;f.push(g>>12|224,g>>6&63|128,g&63|128)}else if(g<1114112){if((A-=4)<0)break;f.push(g>>18|240,g>>12&63|128,g>>6&63|128,g&63|128)}else throw new Error("Invalid code point")}return f}function Vs(l){let A=[];for(let g=0;g<l.length;++g)A.push(l.charCodeAt(g)&255);return A}function Ps(l,A){let g,m,v,f=[];for(let X=0;X<l.length&&!((A-=2)<0);++X)g=l.charCodeAt(X),m=g>>8,v=g%256,f.push(v),f.push(m);return f}function xr(l){return o.toByteArray(Xs(l))}function ii(l,A,g,m){let v;for(v=0;v<m&&!(v+g>=A.length||v>=l.length);++v)A[v+g]=l[v];return v}function At(l,A){return l instanceof A||l!=null&&l.constructor!=null&&l.constructor.name!=null&&l.constructor.name===A.name}function La(l){return l!==l}let Ss=function(){let l="0123456789abcdef",A=new Array(256);for(let g=0;g<16;++g){let m=g*16;for(let v=0;v<16;++v)A[m+v]=l[g]+l[v]}return A}();function Ft(l){return typeof BigInt>"u"?Ls:l}function Ls(){throw new Error("BigInt not supported")}return Ot}var Fn,Kr,ai,Ur,Ot,Dr,_r=zt(()=>{b();C();y();Fn={},Kr=!1;ai={},Ur=!1;Ot={},Dr=!1});var Qt,Y,vg,Rg,$r=zt(()=>{b();C();y();_r();Qt=Er();Qt.Buffer;Qt.SlowBuffer;Qt.INSPECT_MAX_BYTES;Qt.kMaxLength;Y=Qt.Buffer,vg=Qt.INSPECT_MAX_BYTES,Rg=Qt.kMaxLength});var C=zt(()=>{$r()});import{bcs as qe}from"@mysten/sui/bcs";function yc(o,i=["<",">"]){let[a,r]=i,s=[],d="",c=0;for(let u=0;u<o.length;u++){let p=o[u];if(p===a&&c++,p===r&&c--,c===0&&p===","){s.push(d.trim()),d="";continue}d+=p}return s.push(d.trim()),s}function Je(o){if(typeof o!="string")throw new Error(`Illegal type passed as a name of the type: ${o}`);let[i,a]=["<",">"],r=o.indexOf(i),s=Array.from(o).reverse().indexOf(a);if(r===-1&&s===-1)return{typeName:o,typeArgs:[]};if(r===-1||s===-1)throw new Error(`Unclosed generic in name '${o}'`);let d=o.slice(0,r),c=yc(o.slice(r+1,o.length-s-1),[i,a]);return{typeName:d,typeArgs:c}}function Ho(o){return!o||typeof o!="object"||Array.isArray(o)?!1:"GasCoin"in o||"Input"in o||"Result"in o||"NestedResult"in o}function Q(o,i){return Ho(i)?i:o.object(i)}function nt(o,i,a){if(Ho(i))return Q(o,i);function r(I){let{typeName:h,typeArgs:R}=Je(I);switch(h){case"bool":return qe.Bool;case"u8":return qe.U8;case"u16":return qe.U16;case"u32":return qe.U32;case"u64":return qe.U64;case"u128":return qe.U128;case"u256":return qe.U256;case"address":return qe.Address;case"0x1::string::String":case"0x1::ascii::String":return qe.String;case"0x2::object::ID":return qe.Address;case"0x1::option::Option":return qe.option(r(R[0]));case"vector":return qe.vector(r(R[0]));default:throw new Error(`invalid primitive type ${I}`)}}function s(I){for(let h of I){if(typeof h>"u"||h===null)return!0;if(Array.isArray(h))return s(h)}return!1}function d(I){for(let h of I){if(!Array.isArray(h)){if(h===null)continue;switch(typeof h){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return d(h)}return!0}function c(I){for(let h of I){if(!Array.isArray(h))switch(typeof h){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return c(h)}return!1}let{typeName:u,typeArgs:p}=Je(a);switch(u){case"0x1::option::Option":if(i===null)return o.pure.option("bool",null);if(d([i]))return o.pure(r(a).serialize(i));if(c([i]))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.moveCall({target:"0x1::option::some",typeArguments:[p[0]],arguments:[nt(o,i,p[0])]});case"vector":if(!Array.isArray(i))throw new Error("expected an array for vector type");if(i.length===0)return o.pure(qe.vector(qe.Bool).serialize([]));if(s(i))throw new Error("the provided array contains undefined or null values");if(d(i))return o.pure(r(a).serialize(i));if(c(i))throw new Error("mixing primitive and TransactionArgument values is not supported");return o.makeMoveVec({type:p[0],elements:i});default:return o.pure(r(a).serialize(i))}}function Cc(o){let i=o.split("0x").join("");for(let a=0;a<i.length;a++)if(i[a]!=="0")return`0x${i.substring(a)}`;return"0x0"}function x(o){let{typeName:i,typeArgs:a}=Je(o);switch(i){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return i;case"vector":return`vector<${x(a[0])}>`;default:{let r=i.split("::");r[0]=Cc(r[0]);let s=r.join("::");return a.length>0?`${s}<${a.map(d=>x(d)).join(",")}>`:s}}}function re(o,...i){return i.length>0?`${o}<${i.join(", ")}>`:o}var Le=zt(()=>{"use strict";b();C();y()});var Lt=Ha((SI,Mo)=>{"use strict";b();C();y();Le();var Ar=class o{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return x(o.$PACKAGE_ID)}get PUBLISHED_AT(){return x(o.$PUBLISHED_AT)}get PKG_V1(){return x(o.$PKG_V[1])}setPackageId(i){o.$PACKAGE_ID=i}setPublishedAt(i){o.$PUBLISHED_AT=i}setPkgV(i,a){o.$PKG_V[i]=a}setAddress(i,a){o.$PACKAGE_ID=i,o.$PUBLISHED_AT=i,o.$PKG_V[1]=a||i}},Ic=new Ar;Mo.exports=Ic});var pr=Ha((QI,Ko)=>{"use strict";b();C();y();Le();var ur=class o{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return x(o.$PACKAGE_ID)}get PUBLISHED_AT(){return x(o.$PUBLISHED_AT)}get PKG_V1(){return x(o.$PKG_V[1])}setPackageId(i){o.$PACKAGE_ID=i}setPublishedAt(i){o.$PUBLISHED_AT=i}setPkgV(i,a){o.$PKG_V[i]=a}setAddress(i,a){o.$PACKAGE_ID=i,o.$PUBLISHED_AT=i,o.$PKG_V[1]=a||i}},hc=new ur;Ko.exports=hc});var yr=Ha((nh,Do)=>{"use strict";b();C();y();Le();var br=class o{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return x(o.$PACKAGE_ID)}get PUBLISHED_AT(){return x(o.$PUBLISHED_AT)}get PKG_V1(){return x(o.$PKG_V[1])}setPackageId(i){o.$PACKAGE_ID=i}setPublishedAt(i){o.$PUBLISHED_AT=i}setPkgV(i,a){o.$PKG_V[i]=a}setAddress(i,a){o.$PACKAGE_ID=i,o.$PUBLISHED_AT=i,o.$PKG_V[1]=a||i}},vc=new br;Do.exports=vc});b();C();y();b();C();y();b();C();y();var ri={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Fg={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},Ng={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};b();C();y();b();C();y();b();C();y();import{AlgorandClient as is}from"@algorandfoundation/algokit-utils";import{TronWeb as Xc}from"tronweb";import{Web3 as Vc}from"web3";b();C();y();b();C();y();b();C();y();var Ie=class extends Error{errorCode;constructor(i,a){super(a),this.errorCode=i}},G=class extends Ie{constructor(i){super("SdkError",i)}},gt=class extends Ie{constructor(i){super("InvalidAmountError",i)}},ht=class extends Ie{constructor(i){super("AmountNotEnoughError",i)}},vt=class extends Ie{constructor(i){super("InsufficientPoolLiquidityError",i)}},Xe=class extends Ie{constructor(i){super("JupiterError",i)}},Nt=class extends Ie{constructor(i){super("InvalidGasFeePaymentOptionError",i)}},oi=class extends Ie{constructor(i){super("InvalidMessengerOptionError",i)}},E=class extends Ie{constructor(i){super("MethodNotSupportedError",i)}},Nn=class extends Ie{constructor(i){super("VerifyTxError",i)}},on=class extends Ie{constructor(i){super("InvalidTxError",i)}},si=class extends Ie{constructor(i){super("ExtraGasMaxLimitExceededError",i)}},di=class extends Ie{constructor(i,a,r){super("ArgumentInvalidDecimalsError",`Argument '${i}' decimals '${a}' cannot be greater than '${r}'`)}},Zn=class extends Ie{constructor(i){super("TimeoutError",i)}},ci=class extends Ie{constructor(i){super("NodeRpcUrlNotInitializedError",`For chain '${i}' Node RPC URL not initialized`)}},Ve=class extends Ie{constructor(i){super("CCTPDoesNotSupportedError",i)}},Pe=class extends Ie{constructor(i){super("OFTDoesNotSupportedError",i)}},Ai=class extends Ie{constructor(i){super("YieldDoesNotSupportedError",i)}},gi=class extends Ie{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ks=(T=>(T.SDK_ERROR="SdkError",T.INVALID_AMOUNT_ERROR="InvalidAmountError",T.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",T.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",T.JUPITER_ERROR="JupiterError",T.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",T.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",T.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",T.VERIFY_TX_ERROR="VerifyTxError",T.INVALID_TX_ERROR="InvalidTxError",T.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",T.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",T.TIMEOUT_ERROR="TimeoutError",T.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",T.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",T.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",T.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",T.TX_TOO_LARGE="TxTooLargeError",T))(Ks||{});b();C();y();var et=(T=>(T.BSC="BSC",T.ETH="ETH",T.BAS="BAS",T.SOL="SOL",T.TRX="TRX",T.POL="POL",T.ARB="ARB",T.CEL="CEL",T.AVA="AVA",T.SRB="SRB",T.STLR="STLR",T.OPT="OPT",T.SUI="SUI",T.SNC="SNC",T.UNI="UNI",T.LIN="LIN",T.ALG="ALG",T.STX="STX",T))(et||{}),ee=(u=>(u.EVM="EVM",u.SOLANA="SOLANA",u.TRX="TRX",u.SRB="SRB",u.SUI="SUI",u.ALG="ALG",u.STX="STX",u))(ee||{});var Us={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},Ds={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},U=(()=>{let o={...Ds};return{addChainsProperties(i){o={...o,...i}},getChainProperty(i){let a=o[i];if(!a)throw new G(`Cannot find chain properties for ${i}`);return a},getChainsProperties(){return o},getChainDecimalsByType(i){return Us[i]}}})();b();C();y();var za=(c=>(c.OK="OK",c.INVALID="INVALID",c.FORBIDDEN="FORBIDDEN",c.UNINITIALIZED="UNINITIALIZED",c.CONTRACT_ADDRESS="CONTRACT_ADDRESS",c.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",c))(za||{}),xa=(d=>(d.ALLBRIDGE="allbridge",d.WORMHOLE="wormhole",d.CCTP="cctp",d.CCTP_V2="cctpV2",d.OFT="oft",d))(xa||{}),De=(d=>(d[d.ALLBRIDGE=1]="ALLBRIDGE",d[d.WORMHOLE=2]="WORMHOLE",d[d.CCTP=3]="CCTP",d[d.CCTP_V2=4]="CCTP_V2",d[d.OFT=5]="OFT",d))(De||{});b();C();y();import{Big as Oa}from"big.js";function se(o,i){throw new Error(i??`Unexpected value: ${o}`)}async function we(o,i){return await o.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}function ae(o){if(Oa(o).lte(0))throw new gt("Amount must be greater than zero")}function Qa(o){if(Oa(o).lt(0))throw new gt("Amount must be greater or equal than zero")}function te(o,i,a){let r=Oa(i).toFixed(),[s,d]=r.split(".");if(d&&d.length>a)throw new di(o,d.length,a)}async function li(o,i,a){return await Promise.race([o,new Promise((r,s)=>{setTimeout(()=>s(new Zn(i)),a)})])}async function Ka(o,i,a,r){if(a<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${a} was received.`);let s=0;for(;;)try{return await li(o(),i,r)}catch{if(++s>=a)throw new Zn(i)}}async function qr(o,i,a,r=1.5,s=!1){let d=[],c=0,u=await o();if(d.push(u),!i(u))return d;let p=new Date(Date.now()+a*1e3).valueOf(),I=1e3,h=I;for(;Date.now()<p;){let R=d[d.length-1];if(R===void 0||!i(R))break;c++,s&&console.info(`Waiting ${I}ms before trying again (bringing the total wait time to ${h}ms so far, of total ${a*1e3}ms)`),await new Promise(W=>setTimeout(W,I)),I=I*r,new Date(Date.now()+I).valueOf()>p&&(I=p-Date.now(),s&&console.info(`was gonna wait too long; new waitTime: ${I}ms`)),h=I+h;let B=await o(R);d.push(B),s&&i(B)&&console.info(`${c}. Called ${o.name}; ${d.length} prev attempts. Most recent: ${JSON.stringify(d[d.length-1],null,2)}`)}return d}b();C();y();import{SigningAccount as ud}from"@algorandfoundation/algokit-utils/types/account";import{AlgoAmount as pd}from"@algorandfoundation/algokit-utils/types/amount";import md,{Address as uo}from"algosdk";b();C();y();import{getArc56ReturnValue as Es}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as ui}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as Gl}from"@algorandfoundation/algokit-utils/types/app-factory";var pi={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var P=class o{static get create(){return{_resolveByMethod(i){switch(i.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return o.create.createApplication(i)}throw new Error("Unknown ' + verb + ' method")},createApplication(i){return{...i,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.owner,i.args.chainId,i.args.messenger,i.args.gasOracle]}}}}static optInAsset(i){return{...i,method:"optInAsset(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.asset]}}static swapAndBridge(i){return{...i,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(i.args)?i.args:[i.args.paymentRef,i.args.assetTransferRef,i.args.recipient,i.args.destinationChainId,i.args.receiveToken,i.args.nonce,i.args.budget]}}static swapAndBridgeWithStable(i){return{...i,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.recipient,i.args.destinationChainId,i.args.receiveToken,i.args.nonce,i.args.feeTokenAmount,i.args.budget]}}static receiveTokens(i){return{...i,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(i.args)?i.args:[i.args.paymentRef,i.args.amount,i.args.recipient,i.args.sourceChainId,i.args.receiveToken,i.args.nonce,i.args.receiveAmountMin]}}static registerBridge(i){return{...i,method:"registerBridge(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.bridgeAddress]}}static addBridgeToken(i){return{...i,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.tokenAddress]}}static removeBridgeToken(i){return{...i,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.tokenAddress]}}static withdrawGasTokens(i){return{...i,method:"withdrawGasTokens(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amount]}}static withdrawBridgingFeeInTokens(i){return{...i,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.asset]}}static getBridgingCostInTokens(i){return{...i,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(i.args)?i.args:[i.args.destinationChainId,i.args.asset]}}static hashMessage(i){return{...i,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(i.args)?i.args:[i.args.amount,i.args.recipient,i.args.sourceChainId,i.args.destinationChainId,i.args.receiveToken,i.args.nonce]}}static isOtherBridgeTokenSupported(i){return{...i,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.token]}}static getTransactionCost(i){return{...i,method:"getTransactionCost(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static getReceiveTokensCost(i){return{...i,method:"getReceiveTokensCost()uint64",args:Array.isArray(i.args)?i.args:[]}}static getSendTransactionStorageCost(i){return{...i,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(i.args)?i.args:[]}}static swap(i){return{...i,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.receiveAsset,i.args.recipient,i.args.receiveAmountMin,i.args.budget]}}static addPool(i){return{...i,method:"addPool(uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.poolId,i.args.asset]}}static removePool(i){return{...i,method:"removePool(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.tokenId]}}static stopSwap(i){return{...i,method:"stopSwap()void",args:Array.isArray(i.args)?i.args:[]}}static startSwap(i){return{...i,method:"startSwap()void",args:Array.isArray(i.args)?i.args:[]}}static setStopAuthority(i){return{...i,method:"setStopAuthority(address)void",args:Array.isArray(i.args)?i.args:[i.args.stopAuthority]}}static setRebalancer(i){return{...i,method:"setRebalancer(address)void",args:Array.isArray(i.args)?i.args:[i.args.rebalancer]}}static getGasUsage(i){return{...i,method:"getGasUsage(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static setGasUsage(i){return{...i,method:"setGasUsage(byte,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.chainId,i.args.gasAmount]}}static setGasOracle(i){return{...i,method:"setGasOracle(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.gasOracle]}}static getTransactionRelayerCost(i){return{...i,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(i.args)?i.args:[i.args.chainId]}}static transferOwnership(i){return{...i,method:"transferOwnership(address)void",args:Array.isArray(i.args)?i.args:[i.args.newOwner]}}};var mi=class o{appClient;constructor(i){this.appClient=i instanceof ui?i:new ui({...i,appSpec:pi})}decodeReturnValue(i,a){return a!==void 0?Es(a,this.appClient.getABIMethod(i),pi.structs):void 0}static async fromCreatorAndName(i){return new o(await ui.fromCreatorAndName({...i,appSpec:pi}))}static async fromNetwork(i){return new o(await ui.fromNetwork({...i,appSpec:pi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:i=>this.appClient.params.bare.clearState(i),optInAsset:i=>this.appClient.params.call(P.optInAsset(i)),swapAndBridge:i=>this.appClient.params.call(P.swapAndBridge(i)),swapAndBridgeWithStable:i=>this.appClient.params.call(P.swapAndBridgeWithStable(i)),receiveTokens:i=>this.appClient.params.call(P.receiveTokens(i)),registerBridge:i=>this.appClient.params.call(P.registerBridge(i)),addBridgeToken:i=>this.appClient.params.call(P.addBridgeToken(i)),removeBridgeToken:i=>this.appClient.params.call(P.removeBridgeToken(i)),withdrawGasTokens:i=>this.appClient.params.call(P.withdrawGasTokens(i)),withdrawBridgingFeeInTokens:i=>this.appClient.params.call(P.withdrawBridgingFeeInTokens(i)),getBridgingCostInTokens:i=>this.appClient.params.call(P.getBridgingCostInTokens(i)),hashMessage:i=>this.appClient.params.call(P.hashMessage(i)),isOtherBridgeTokenSupported:i=>this.appClient.params.call(P.isOtherBridgeTokenSupported(i)),getTransactionCost:i=>this.appClient.params.call(P.getTransactionCost(i)),getReceiveTokensCost:(i={args:[]})=>this.appClient.params.call(P.getReceiveTokensCost(i)),getSendTransactionStorageCost:(i={args:[]})=>this.appClient.params.call(P.getSendTransactionStorageCost(i)),swap:i=>this.appClient.params.call(P.swap(i)),addPool:i=>this.appClient.params.call(P.addPool(i)),removePool:i=>this.appClient.params.call(P.removePool(i)),stopSwap:(i={args:[]})=>this.appClient.params.call(P.stopSwap(i)),startSwap:(i={args:[]})=>this.appClient.params.call(P.startSwap(i)),setStopAuthority:i=>this.appClient.params.call(P.setStopAuthority(i)),setRebalancer:i=>this.appClient.params.call(P.setRebalancer(i)),getGasUsage:i=>this.appClient.params.call(P.getGasUsage(i)),setGasUsage:i=>this.appClient.params.call(P.setGasUsage(i)),setGasOracle:i=>this.appClient.params.call(P.setGasOracle(i)),getTransactionRelayerCost:i=>this.appClient.params.call(P.getTransactionRelayerCost(i)),transferOwnership:i=>this.appClient.params.call(P.transferOwnership(i))};createTransaction={clearState:i=>this.appClient.createTransaction.bare.clearState(i),optInAsset:i=>this.appClient.createTransaction.call(P.optInAsset(i)),swapAndBridge:i=>this.appClient.createTransaction.call(P.swapAndBridge(i)),swapAndBridgeWithStable:i=>this.appClient.createTransaction.call(P.swapAndBridgeWithStable(i)),receiveTokens:i=>this.appClient.createTransaction.call(P.receiveTokens(i)),registerBridge:i=>this.appClient.createTransaction.call(P.registerBridge(i)),addBridgeToken:i=>this.appClient.createTransaction.call(P.addBridgeToken(i)),removeBridgeToken:i=>this.appClient.createTransaction.call(P.removeBridgeToken(i)),withdrawGasTokens:i=>this.appClient.createTransaction.call(P.withdrawGasTokens(i)),withdrawBridgingFeeInTokens:i=>this.appClient.createTransaction.call(P.withdrawBridgingFeeInTokens(i)),getBridgingCostInTokens:i=>this.appClient.createTransaction.call(P.getBridgingCostInTokens(i)),hashMessage:i=>this.appClient.createTransaction.call(P.hashMessage(i)),isOtherBridgeTokenSupported:i=>this.appClient.createTransaction.call(P.isOtherBridgeTokenSupported(i)),getTransactionCost:i=>this.appClient.createTransaction.call(P.getTransactionCost(i)),getReceiveTokensCost:(i={args:[]})=>this.appClient.createTransaction.call(P.getReceiveTokensCost(i)),getSendTransactionStorageCost:(i={args:[]})=>this.appClient.createTransaction.call(P.getSendTransactionStorageCost(i)),swap:i=>this.appClient.createTransaction.call(P.swap(i)),addPool:i=>this.appClient.createTransaction.call(P.addPool(i)),removePool:i=>this.appClient.createTransaction.call(P.removePool(i)),stopSwap:(i={args:[]})=>this.appClient.createTransaction.call(P.stopSwap(i)),startSwap:(i={args:[]})=>this.appClient.createTransaction.call(P.startSwap(i)),setStopAuthority:i=>this.appClient.createTransaction.call(P.setStopAuthority(i)),setRebalancer:i=>this.appClient.createTransaction.call(P.setRebalancer(i)),getGasUsage:i=>this.appClient.createTransaction.call(P.getGasUsage(i)),setGasUsage:i=>this.appClient.createTransaction.call(P.setGasUsage(i)),setGasOracle:i=>this.appClient.createTransaction.call(P.setGasOracle(i)),getTransactionRelayerCost:i=>this.appClient.createTransaction.call(P.getTransactionRelayerCost(i)),transferOwnership:i=>this.appClient.createTransaction.call(P.transferOwnership(i))};send={clearState:i=>this.appClient.send.bare.clearState(i),optInAsset:async i=>{let a=await this.appClient.send.call(P.optInAsset(i));return{...a,return:a.return}},swapAndBridge:async i=>{let a=await this.appClient.send.call(P.swapAndBridge(i));return{...a,return:a.return}},swapAndBridgeWithStable:async i=>{let a=await this.appClient.send.call(P.swapAndBridgeWithStable(i));return{...a,return:a.return}},receiveTokens:async i=>{let a=await this.appClient.send.call(P.receiveTokens(i));return{...a,return:a.return}},registerBridge:async i=>{let a=await this.appClient.send.call(P.registerBridge(i));return{...a,return:a.return}},addBridgeToken:async i=>{let a=await this.appClient.send.call(P.addBridgeToken(i));return{...a,return:a.return}},removeBridgeToken:async i=>{let a=await this.appClient.send.call(P.removeBridgeToken(i));return{...a,return:a.return}},withdrawGasTokens:async i=>{let a=await this.appClient.send.call(P.withdrawGasTokens(i));return{...a,return:a.return}},withdrawBridgingFeeInTokens:async i=>{let a=await this.appClient.send.call(P.withdrawBridgingFeeInTokens(i));return{...a,return:a.return}},getBridgingCostInTokens:async i=>{let a=await this.appClient.send.call(P.getBridgingCostInTokens(i));return{...a,return:a.return}},hashMessage:async i=>{let a=await this.appClient.send.call(P.hashMessage(i));return{...a,return:a.return}},isOtherBridgeTokenSupported:async i=>{let a=await this.appClient.send.call(P.isOtherBridgeTokenSupported(i));return{...a,return:a.return}},getTransactionCost:async i=>{let a=await this.appClient.send.call(P.getTransactionCost(i));return{...a,return:a.return}},getReceiveTokensCost:async(i={args:[]})=>{let a=await this.appClient.send.call(P.getReceiveTokensCost(i));return{...a,return:a.return}},getSendTransactionStorageCost:async(i={args:[]})=>{let a=await this.appClient.send.call(P.getSendTransactionStorageCost(i));return{...a,return:a.return}},swap:async i=>{let a=await this.appClient.send.call(P.swap(i));return{...a,return:a.return}},addPool:async i=>{let a=await this.appClient.send.call(P.addPool(i));return{...a,return:a.return}},removePool:async i=>{let a=await this.appClient.send.call(P.removePool(i));return{...a,return:a.return}},stopSwap:async(i={args:[]})=>{let a=await this.appClient.send.call(P.stopSwap(i));return{...a,return:a.return}},startSwap:async(i={args:[]})=>{let a=await this.appClient.send.call(P.startSwap(i));return{...a,return:a.return}},setStopAuthority:async i=>{let a=await this.appClient.send.call(P.setStopAuthority(i));return{...a,return:a.return}},setRebalancer:async i=>{let a=await this.appClient.send.call(P.setRebalancer(i));return{...a,return:a.return}},getGasUsage:async i=>{let a=await this.appClient.send.call(P.getGasUsage(i));return{...a,return:a.return}},setGasUsage:async i=>{let a=await this.appClient.send.call(P.setGasUsage(i));return{...a,return:a.return}},setGasOracle:async i=>{let a=await this.appClient.send.call(P.setGasOracle(i));return{...a,return:a.return}},getTransactionRelayerCost:async i=>{let a=await this.appClient.send.call(P.getTransactionRelayerCost(i));return{...a,return:a.return}},transferOwnership:async i=>{let a=await this.appClient.send.call(P.transferOwnership(i));return{...a,return:a.return}}};clone(i){return new o(this.appClient.clone(i))}async getBridgingCostInTokens(i){return(await this.appClient.send.call(P.getBridgingCostInTokens(i))).return}async hashMessage(i){return(await this.appClient.send.call(P.hashMessage(i))).return}async isOtherBridgeTokenSupported(i){return(await this.appClient.send.call(P.isOtherBridgeTokenSupported(i))).return}async getTransactionCost(i){return(await this.appClient.send.call(P.getTransactionCost(i))).return}async getReceiveTokensCost(i={args:[]}){return(await this.appClient.send.call(P.getReceiveTokensCost(i))).return}async getSendTransactionStorageCost(i={args:[]}){return(await this.appClient.send.call(P.getSendTransactionStorageCost(i))).return}async getGasUsage(i){return(await this.appClient.send.call(P.getGasUsage(i))).return}async getTransactionRelayerCost(i){return(await this.appClient.send.call(P.getTransactionRelayerCost(i))).return}state={global:{getAll:async()=>{let i=await this.appClient.state.global.getAll();return{chainId:i.chainId,messenger:i.messenger,stopAuthority:i.stopAuthority,rebalancer:i.rebalancer,canSwap:i.canSwap,gasOracle:i.gasOracle,owner:i.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let i=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async i=>await this.appClient.state.box.getMapValue("processedMessages",i)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async i=>await this.appClient.state.box.getMapValue("sentMessages",i)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async i=>await this.appClient.state.box.getMapValue("otherBridges",i)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async i=>await this.appClient.state.box.getMapValue("otherBridgeTokens",i)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async i=>await this.appClient.state.box.getMapValue("pools",i)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async i=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",i)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async i=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",i)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async i=>await this.appClient.state.box.getMapValue("gasUsage",i)}}};newGroup(){let i=this,a=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.optInAsset(d))),s.push(void 0),this},swapAndBridge(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapAndBridge(d))),s.push(void 0),this},swapAndBridgeWithStable(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapAndBridgeWithStable(d))),s.push(void 0),this},receiveTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.receiveTokens(d))),s.push(void 0),this},registerBridge(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.registerBridge(d))),s.push(void 0),this},addBridgeToken(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.addBridgeToken(d))),s.push(void 0),this},removeBridgeToken(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.removeBridgeToken(d))),s.push(void 0),this},withdrawGasTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.withdrawGasTokens(d))),s.push(void 0),this},withdrawBridgingFeeInTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.withdrawBridgingFeeInTokens(d))),s.push(void 0),this},getBridgingCostInTokens(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getBridgingCostInTokens(d))),s.push(c=>i.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",c)),this},hashMessage(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.hashMessage(d))),s.push(c=>i.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",c)),this},isOtherBridgeTokenSupported(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.isOtherBridgeTokenSupported(d))),s.push(c=>i.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",c)),this},getTransactionCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getTransactionCost(d))),s.push(c=>i.decodeReturnValue("getTransactionCost(byte)uint64",c)),this},getReceiveTokensCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getReceiveTokensCost(d))),s.push(c=>i.decodeReturnValue("getReceiveTokensCost()uint64",c)),this},getSendTransactionStorageCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getSendTransactionStorageCost(d))),s.push(c=>i.decodeReturnValue("getSendTransactionStorageCost()uint64",c)),this},swap(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swap(d))),s.push(void 0),this},addPool(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.addPool(d))),s.push(void 0),this},removePool(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.removePool(d))),s.push(void 0),this},stopSwap(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.stopSwap(d))),s.push(void 0),this},startSwap(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.startSwap(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setStopAuthority(d))),s.push(void 0),this},setRebalancer(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setRebalancer(d))),s.push(void 0),this},getGasUsage(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getGasUsage(d))),s.push(c=>i.decodeReturnValue("getGasUsage(byte)uint64",c)),this},setGasUsage(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setGasUsage(d))),s.push(void 0),this},setGasOracle(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setGasOracle(d))),s.push(void 0),this},getTransactionRelayerCost(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.getTransactionRelayerCost(d))),s.push(c=>i.decodeReturnValue("getTransactionRelayerCost(byte)uint64",c)),this},transferOwnership(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.transferOwnership(d))),s.push(void 0),this},clearState(d){return r=r.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,c){return r=r.then(()=>a.addTransaction(d,c)),this},async composer(){return await r,a},async simulate(d){await r;let c=await(d?a.simulate(d):a.simulate());return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}},async send(d){await r;let c=await a.send(d);return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}}}}};b();C();y();import{getArc56ReturnValue as _s}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as bi}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as tu}from"@algorandfoundation/algokit-utils/types/app-factory";var yi={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var Ci=class o{appClient;constructor(i){this.appClient=i instanceof bi?i:new bi({...i,appSpec:yi})}decodeReturnValue(i,a){return a!==void 0?_s(a,this.appClient.getABIMethod(i),yi.structs):void 0}static async fromCreatorAndName(i){return new o(await bi.fromCreatorAndName({...i,appSpec:yi}))}static async fromNetwork(i){return new o(await bi.fromNetwork({...i,appSpec:yi}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:i=>this.appClient.params.bare.clearState(i),bare:i=>this.appClient.params.bare.call(i)};createTransaction={clearState:i=>this.appClient.createTransaction.bare.clearState(i),bare:i=>this.appClient.createTransaction.bare.call(i)};send={clearState:i=>this.appClient.send.bare.clearState(i),bare:i=>this.appClient.send.bare.call(i)};clone(i){return new o(this.appClient.clone(i))}state={};newGroup(){let i=this,a=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{bare(d){return r=r.then(()=>a.addAppCall(i.params.bare(d))),this},clearState(d){return r=r.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,c){return r=r.then(()=>a.addTransaction(d,c)),this},async composer(){return await r,a},async simulate(d){await r;let c=await(d?a.simulate(d):a.simulate());return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}},async send(d){await r;let c=await a.send(d);return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}}}}};b();C();y();import{populateAppCallResources as $s}from"@algorandfoundation/algokit-utils";import qs,{AtomicTransactionComposer as ed,makeBasicAccountTransactionSigner as td}from"algosdk";function Zt(o){return(o*1e3).microAlgos()}async function Ua(o,i,a){let r=new ed,s=td({addr:i,sk:new Uint8Array(64)});o.forEach(u=>{r.addTransaction({txn:u,signer:s})});let c=(await $s(r,a)).buildGroup().map(u=>u.txn);return Gt(...c)}function Gt(...o){return o.map(a=>qs.encodeUnsignedTransaction(a)).map(a=>Y.from(a).toString("hex"))}async function Ii(o,i,a){typeof o=="string"&&(o=BigInt(o));let s=(await a.account.getInformation(i)).assets;return s?s.find(({assetId:c})=>c===o)!==void 0:!1}async function hi(o,i,a){typeof o=="string"&&(o=BigInt(o));let s=(await a.account.getInformation(i)).appsLocalState;return s?s.find(({id:c})=>c===o)!==void 0:!1}b();C();y();b();C();y();var Se=class{};b();C();y();import{PublicKey as nd}from"@solana/web3.js";import{createAddress as oo,parseContractId as id}from"@stacks/transactions";import{Address as ad}from"@stellar/stellar-sdk";import rd,{Address as od}from"algosdk";import{Big as Fe}from"big.js";import Ao from"randombytes";import{utils as so}from"tronweb";import{Web3 as sd}from"web3";b();C();y();import{Big as j}from"big.js";import Da from"bn.js";b();C();y();function Ea(o,i){return j(100).minus(j(100).times(i).div(o)).toNumber()}function Rt(o,i){return Oe(o,i,3).round(0,j.roundDown)}function xe(o,i){return Oe(o,3,i)}function Oe(o,i,a){let r=j(a).minus(i).toNumber();return j(o).times(Gn(r))}function Gn(o){return j(10).pow(o)}function O(o,i){return j(o).times(Gn(i))}function z(o,i){let a=j(o);return a.eq(0)?j(0):j(a).div(Gn(i))}function Te(o){return z(j(o.tokenBalance).minus(o.vUsdBalance).toFixed(),3).div(2).toFixed()}function lt(o,{feeShare:i,decimals:a},r){let s=j(o);if(s.lte(0))return"0";let d=s.times(i),c=s.minus(d),u=Rt(c,a),p=j(r.tokenBalance).plus(u),I=ut(p,r.aValue,r.dValue);return j(r.vUsdBalance).minus(I).round(0,j.roundDown).toFixed()}function Xn(o,{feeShare:i,decimals:a},r){let s=j(o);if(s.lte(0))return j(0).toFixed();let d=s.plus(r.vUsdBalance),c=ut(d,r.aValue,r.dValue),u=xe(j(r.tokenBalance).minus(c),a),p=j(u).times(i);return j(u).minus(p).round(0,j.roundDown).toFixed()}function eo(o,i){let a=j(o);if(a.lte(0))return i;let r=a.plus(i.vUsdBalance),s=ut(r,i.aValue,i.dValue);return{aValue:i.aValue,dValue:i.dValue,tokenBalance:s.toFixed(0),vUsdBalance:r.toFixed(0)}}function to(o,{feeShare:i,decimals:a},r){if(j(o).lte(0))return j(0);let s=j(r.vUsdBalance).minus(o);if(s.lte(0))throw new vt;let d=ut(s,r.aValue,r.dValue),c=j(d).minus(r.tokenBalance),u=xe(c,a),p=j(i).div(j(1).minus(i)),I=j(u).times(p).round(0,j.roundUp);return j(u).plus(I).round(0,j.roundDown)}function no(o,{feeShare:i,decimals:a},r){if(j(o).lte(0))return j(0);let s=j(i).div(j(1).minus(i)),d=j(o).times(s).round(0,j.roundUp),c=j(o).plus(d),u=Rt(c,a),p=j(r.tokenBalance).minus(u);if(p.lte(0))throw new vt;let I=ut(p,r.aValue,r.dValue);return j(I).minus(r.vUsdBalance).round(0,j.roundDown)}function ut(o,i,a){let r=j(4).times(i).times(j(a).minus(o)).minus(a),s=j(a).pow(3),d=r.pow(2),c=j(o).times(j(o).times(d).plus(j(4).times(i).times(s))).sqrt().round(0,j.roundDown),u=j(8).times(i).times(o),p=r.times(o).plus(c).div(u).round(0,j.roundDown);return p.eq(0)?j(0):p.plus(1)}function io(o,i,a,r){let s=new Da(o),d=new Da(a),c=new Da(i);return s.mul(d).shrn(r).sub(c).toString()}function ao(o){return j(o).gt(0)?`${Number(j(o).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function ro(o,i,a){let r=j(i).times(a),s=j(i).plus(a),d=j(8).times(o).times(r).times(s),c=r.times(j(16).times(o).minus(4)).div(3),u=d.times(d),p=c.times(c).times(c),I=u.plus(p),h=j(I).sqrt(),R=j(Math.cbrt(+d.plus(h).toFixed())),B=j(Math.cbrt(+d.minus(h).toFixed()));return R.plus(B).toFixed()}function Yt(o,i,a){let r;switch(i){case"EVM":{r=co(o);break}case"SOLANA":{r=new nd(o).toBuffer();break}case"TRX":{r=Ad(o);break}case"SRB":{r=new ad(o).toBuffer();break}case"SUI":{r=co(o);break}case"ALG":{r=dd(o);break}case"STX":{r=cd(o);break}}switch(a){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function rt(o){return o.replace(/^0x/i,"")}function _a(o){return Y.from(o.replace(/^0x/i,""),"hex")}function co(o){let a=_a(o);return Y.concat([Y.alloc(32-a.length,0),a],32)}function dd(o){if(rd.isValidAddress(o))return Y.from(od.fromString(o).publicKey);if(/^\d+$/.test(o)){let i=BigInt(o).toString(16);return i=i.padStart(64,"0"),Y.from(i,"hex")}throw new G(`Unexpected Alg address: ${o}`)}function cd(o){if(o.includes(".")){let[a,r]=id(o);if(!a||!r)throw new G(`Unexpected Alg address: ${o}`);let s=Y.from(oo(a).hash160,"hex"),d=sd.utils.keccak256(Y.concat([s,Y.from(r)]));return _a(d)}let i=Y.from(oo(o).hash160,"hex");return go(i,32)}function Ad(o){let i=Vn(o),a=_a(i);return go(a,32)}function Vn(o){let i=so.crypto.decodeBase58Address(o);return i?so.bytes.byteArray2hexStr(i).replace(/^41/,"0x"):""}function go(o,i){if(o.length>=i)return o;let a=Y.alloc(i,0);return o.copy(a,i-o.length),a}function pt(){return Ao(32)}function mt(){let o=Ao(32).readBigInt64BE();return o<0?o*-1n:o}function Ee(o,i){let a={},r=i.sourceToken;switch(a.amount=O(i.amount,r.decimals).toFixed(),a.contractAddress=r.bridgeAddress,a.fromAccountAddress=i.fromAccountAddress,o){case"SUI":{if(!r.originTokenAddress)throw new G("SUI sourceToken must contain 'originTokenAddress'");a.fromTokenAddress=r.originTokenAddress;break}case"ALG":{a.fromTokenAddress=r.tokenAddress;break}default:a.fromTokenAddress=Yt(r.tokenAddress,o,o)}switch(a.toAccountAddress=i.toAccountAddress,o){case"SUI":{if(!i.destinationToken.originTokenAddress)throw new G("SUI destinationToken must contain 'originTokenAddress'");a.toTokenAddress=i.destinationToken.originTokenAddress;break}case"ALG":{a.toTokenAddress=i.destinationToken.tokenAddress;break}default:a.toTokenAddress=Yt(i.destinationToken.tokenAddress,o,o)}return a.minimumReceiveAmount=i.minimumReceiveAmount?O(i.minimumReceiveAmount,i.destinationToken.decimals).toFixed():"0",a}async function Qe(o,i,a){let r={};r.fromChainId=i.sourceToken.allbridgeChainId,r.fromChainSymbol=i.sourceToken.chainSymbol;let s=U.getChainProperty(i.destinationToken.chainSymbol).chainType;if(o==="SUI"){if(!i.sourceToken.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=i.sourceToken.originTokenAddress}else r.fromTokenAddress=i.sourceToken.tokenAddress;if(r.toChainId=i.destinationToken.allbridgeChainId,r.toTokenAddress=i.destinationToken.tokenAddress,r.gasFeePaymentMethod=i.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!i.sourceToken.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");let d=i.sourceToken;switch(i.messenger){case 3:if(!d.cctpAddress||!i.destinationToken.cctpAddress)throw new Ve("Such route does not support CCTP protocol");r.contractAddress=d.cctpAddress;break;case 4:if(!d.cctpV2Address||!i.destinationToken.cctpV2Address)throw new Ve("Such route does not support CCTP V2 protocol");r.contractAddress=d.cctpV2Address;break;case 5:if(!d.oftBridgeAddress||!i.destinationToken.oftBridgeAddress||d.oftId!==i.destinationToken.oftId)throw new Pe("Such route does not support OFT protocol");r.contractAddress=d.oftBridgeAddress;break;case 1:case 2:r.contractAddress=d.bridgeAddress;break}r.messenger=i.messenger,r.fromAccountAddress=i.fromAccountAddress,r.amount=O(i.amount,d.decimals).toFixed();let{fee:c,feeFormat:u}=i;if(!c){let R=(await $a(i.sourceToken,r.toChainId,r.messenger,a))[r.gasFeePaymentMethod];if(!R)throw new Nt;c=R.int,u="int"}if(u=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=O(c,U.getChainDecimalsByType(d.chainType)).toFixed(0);break;case"stablecoin":r.fee=O(c,d.decimals).toFixed(0);break;case"abr":if(!d.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");r.fee=O(c,d.abrPayer.abrToken.decimals).toFixed(0);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=c;let{extraGas:p,extraGasFormat:I}=i;if(p&&+p>0){let h=await qa(d,i.destinationToken,r.messenger,a),R,B;switch(r.gasFeePaymentMethod){case"native":R=U.getChainDecimalsByType(d.chainType),B=Fe(h.exchangeRate);break;case"stablecoin":R=d.decimals,B=Fe(h.exchangeRate).div(h.sourceNativeTokenPrice);break;case"abr":if(!d.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");if(!h.abrExchangeRate)throw new G("Cannot transfer WITH_ABR option");R=d.abrPayer.abrToken.decimals,B=Fe(h.exchangeRate).div(h.abrExchangeRate);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(I??"int"){case"float":{r.extraGas=O(p,R).toFixed(0);let W=B.mul(p);r.extraGasDest=O(W,U.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,Fe.roundDown);break}case"int":{r.extraGas=p;let W=z(r.extraGas,U.getChainDecimalsByType(d.chainType)),N=B.mul(W);r.extraGasDest=O(N,U.getChainDecimalsByType(i.destinationToken.chainType)).toFixed(0,Fe.roundDown);break}}ld(r.extraGas,r.gasFeePaymentMethod,h)}switch(["SUI","ALG"].includes(o)||(r.fromTokenAddress=Yt(r.fromTokenAddress,o,o)),r.toAccountAddress=Yt(i.toAccountAddress,s,o),r.toTokenAddress=Yt(r.toTokenAddress,s,o),r.gasFeePaymentMethod){case"native":break;case"stablecoin":gd(r.amount,d.decimals,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:h}=await a.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:i.sourceToken.tokenAddress});r.abrExchangeRate=h;break}default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function gd(o,i,a,r){let s=Fe(o).minus(a).minus(r??0);if(s.lte(0))throw new ht(`Amount not enough to pay fee, ${z(Fe(s).minus(1).neg(),i).toFixed()} stables is missing`)}async function $a(o,i,a,r){let s=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:i,messenger:a,sourceToken:o.tokenAddress}),d={native:{int:s.fee,float:z(s.fee,U.getChainDecimalsByType(o.chainType)).toFixed()},adminFeeShareWithExtras:s.adminFeeShareWithExtras};if(s.sourceNativeTokenPrice){let c=Oe(new Fe(s.fee).mul(s.sourceNativeTokenPrice),U.getChainDecimalsByType(o.chainType),o.decimals).toFixed(0,Fe.roundUp);d.stablecoin={int:c,float:z(c,o.decimals).toFixed()}}if(s.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[a]){let c=Oe(new Fe(s.fee).mul(s.abrExchangeRate),U.getChainDecimalsByType(o.chainType),o.abrPayer.abrToken.decimals).toFixed(0,Fe.roundUp);d.abr={int:c,float:z(c,o.abrPayer.abrToken.decimals).toFixed()}}return d}function ld(o,i,a){let r=a.extraGasMax[i];if(!r)throw new Nt(`Impossible to pay extra gas by '${i}' payment method`);let s=r.int;if(Fe(o).gt(s))throw new si(`Extra gas ${o} in int format, exceeded limit ${s} for '${i}' payment method`)}async function qa(o,i,a,r){let s={},d=await r.getReceiveTransactionCost({sourceChainId:o.allbridgeChainId,destinationChainId:i.allbridgeChainId,messenger:a,sourceToken:o.tokenAddress}),c=i.txCostAmount.maxAmount,u=z(c,U.getChainDecimalsByType(i.chainType)).toFixed(),p=Fe(u).div(d.exchangeRate).toFixed(U.getChainDecimalsByType(o.chainType),Fe.roundDown),I=O(p,U.getChainDecimalsByType(o.chainType)).toFixed(0);if(s.native={int:I,float:p},d.sourceNativeTokenPrice){let R=Fe(p).mul(d.sourceNativeTokenPrice).toFixed(o.decimals,Fe.roundDown);s.stablecoin={int:O(R,o.decimals).toFixed(0),float:R}}let h;if(d.abrExchangeRate&&o.abrPayer&&o.abrPayer.payerAvailability[a]){h=!0;let R=Fe(p).mul(d.abrExchangeRate).toFixed(o.abrPayer.abrToken.decimals,Fe.roundDown);s.abr={int:O(R,o.abrPayer.abrToken.decimals).toFixed(0),float:R}}return{extraGasMax:s,destinationChain:{gasAmountMax:{int:c,float:u},swap:{int:i.txCostAmount.swap,float:z(i.txCostAmount.swap,U.getChainDecimalsByType(i.chainType)).toFixed()},transfer:{int:i.txCostAmount.transfer,float:z(i.txCostAmount.transfer,U.getChainDecimalsByType(i.chainType)).toFixed()}},exchangeRate:d.exchangeRate,abrExchangeRate:h?d.abrExchangeRate:void 0,sourceNativeTokenPrice:d.sourceNativeTokenPrice}}function lo(o){return o.sourceToken.chainSymbol!==o.destinationToken.chainSymbol}var Pn=class extends Se{constructor(a,r){super();this.algorand=a;this.api=r;let s=md.generateAccount(),d=new ud(s,s.addr);a.setDefaultSigner(d),a.setDefaultValidityWindow(100)}chainType="ALG";send(a){throw new E}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api);if(!a.sourceToken.bridgeId)throw new G("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new G("ALG sourceToken must contain 'paddingUtilId'");let s=BigInt(a.sourceToken.bridgeId),d=this.getBridge(s),c=BigInt(a.sourceToken.paddingUtilId),u=this.getPaddingUtil(c),p=uo.fromString(a.fromAccountAddress),I=BigInt(a.sourceToken.tokenAddress),h=r.toChainId,R=r.toAccountAddress,B=r.toTokenAddress,W=pt(),N=BigInt(r.amount),Z=BigInt(r.fee);r.extraGas&&(Z=Z+BigInt(r.extraGas));let V=this.algorand.newGroup(),S=await this.algorand.createTransaction.assetTransfer({amount:N,assetId:I,receiver:d.appAddress,sender:p});switch(r.gasFeePaymentMethod){case"native":{let H=await this.algorand.createTransaction.payment({amount:pd.MicroAlgo(Z),receiver:d.appAddress,sender:p});V.addAppCallMethodCall(await d.params.swapAndBridge({args:{paymentRef:H,assetTransferRef:S,recipient:R,destinationChainId:h,receiveToken:B,nonce:W},sender:p,extraFee:Zt(8)}));break}case"stablecoin":{V.addAppCallMethodCall(await d.params.swapAndBridgeWithStable({args:{assetTransferRef:S,recipient:R,destinationChainId:h,receiveToken:B,nonce:W,feeTokenAmount:Z},sender:p,extraFee:Zt(9)}));break}case"abr":throw new G("ALG bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let T=await this.algorand.createTransaction.appCall({appId:u.appId,sender:p,note:"padding1"});V.addTransaction(T);let k=await this.algorand.createTransaction.appCall({appId:u.appId,sender:p,note:"padding2"});V.addTransaction(k);let{transactions:L}=await V.buildTransactions();return Ua(L,p,this.algorand.client.algod)}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a),s=uo.fromString(a.fromAccountAddress),d=a.toAccountAddress,c=BigInt(a.sourceToken.tokenAddress),u=BigInt(a.destinationToken.tokenAddress),p=BigInt(r.minimumReceiveAmount),I=BigInt(r.amount);if(!a.sourceToken.bridgeId)throw new G("ALG sourceToken must contain 'bridgeId'");if(!a.sourceToken.paddingUtilId)throw new G("ALG sourceToken must contain 'paddingUtilId'");let h=BigInt(a.sourceToken.bridgeId),R=this.getBridge(h),B=BigInt(a.sourceToken.paddingUtilId),W=this.getPaddingUtil(B),N=this.algorand.newGroup();a.fromAccountAddress===d&&(await Ii(u,d,this.algorand)||N.addAssetOptIn({sender:s,assetId:u}));let Z=this.algorand.createTransaction.assetTransfer({assetId:c,amount:I,sender:s,receiver:R.appAddress});N.addAppCallMethodCall(await R.params.swap({args:{assetTransferRef:Z,recipient:d,receiveAsset:u,receiveAmountMin:p},sender:s,extraFee:Zt(4)}));let V=await this.algorand.createTransaction.appCall({appId:W.appId,sender:s});N.addTransaction(V);let{transactions:S}=await N.buildTransactions();return Ua(S,s,this.algorand.client.algod)}getBridge(a){return this.algorand.client.getTypedAppClientById(mi,{appId:a})}getPaddingUtil(a){return this.algorand.client.getTypedAppClientById(Ci,{appId:a})}};b();C();y();import{Big as vo}from"big.js";b();C();y();var bd={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},po=bd;b();C();y();var yd={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},mo=yd;b();C();y();var Cd={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},bo=Cd;b();C();y();var Id={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},yo=Id;b();C();y();import*as ho from"@coral-xyz/anchor";import{getAccount as Yd}from"@solana/spl-token";import{PublicKey as Io}from"@solana/web3.js";b();C();y();import*as je from"@coral-xyz/anchor";import{PublicKey as Ke}from"@solana/web3.js";function _e(o,i){return je.utils.token.associatedAddress({mint:i,owner:o})}async function tt(o){let[i]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("config")],o);return i}async function Ri(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("lock"),Uint8Array.from(o)],i);return a}async function Xt(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([o])],i);return a}async function Vt(o){let i=await tt(o),[a]=await Ke.findProgramAddress([i.toBuffer()],o);return a}async function Yi(o,i){let[a]=await Ke.findProgramAddress([o.toBuffer()],i);return a}async function Bt(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("token"),o.toBytes()],i);return a}async function Bi(o,i,a){let[r]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("other_bridge_token"),Y.from([o]),i],a);return r}async function sn(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([o])],i);return a}async function dn(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([o])],i);return a}async function Wi(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("sent_message"),o],i);return a}async function er(o,i,a){let[r]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("user_deposit"),i.toBytes(),o.toBytes()],a);return r}async function fi(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("cctp_bridge"),o.toBytes()],i);return a}async function Co(o,i){let[a]=await Ke.findProgramAddress([je.utils.bytes.utf8.encode("token"),o.toBytes()],i);return a}function Ti(o,i){let[a]=Ke.findProgramAddressSync([je.utils.bytes.utf8.encode("lock"),i.toBuffer()],o);return a}function wi(o,i,a,r){let s=Kt("message_transmitter",a),d=Kt("token_messenger",r),c=Kt("__event_authority",r),u=Kt("token_minter",r),p=Kt("local_token",r,[i]),I=Kt("remote_token_messenger",r,[o.toString()]),h=Kt("sender_authority",r);return{messageTransmitterAccount:s,tokenMessenger:d,tokenMessengerEventAuthority:c,tokenMinter:u,localToken:p,remoteTokenMessengerKey:I,authorityPda:h}}function Kt(o,i,a=[]){let r=[Y.from(je.utils.bytes.utf8.encode(o))];for(let d of a)typeof d=="string"?r.push(Y.from(je.utils.bytes.utf8.encode(d))):Array.isArray(d)?r.push(Y.from(Uint8Array.from(d))):Y.isBuffer(d)?r.push(Y.from(Uint8Array.from(d))):r.push(Y.from(Uint8Array.from(d.toBuffer())));return Ke.findProgramAddressSync(r,i)[0]}b();C();y();import{AnchorProvider as hd}from"@coral-xyz/anchor";import{Connection as vd,PublicKey as Rd}from"@solana/web3.js";function bt(o,i){let a=new vd(o,"confirmed"),r=new Rd(i);return new hd(a,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function Fi(o,i,a,r){let s,d=new Io(i),c=new Io(a),u=_e(d,c),p=bt(r,i);ho.setProvider(p);let I=await Yd(p.connection,u);if(I?.owner.equals(d))s=Yt(u.toBase58(),"SOLANA",o);else{let h=await p.connection.getTokenAccountsByOwner(d,{mint:c});if(h.value.length===0&&!I)s=Yt(u.toBase58(),"SOLANA",o);else if(h.value.length>0){let R=h.value[0];if(!R?.pubkey)throw new G("First token account or its public key is undefined");s=Yt(R.pubkey.toBase58(),"SOLANA",o)}else throw new G("Associated account has wrong owner")}return s}var Sn=class extends Se{constructor(a,r,s){super();this.web3=a;this.api=r;this.nodeRpcUrlsConfig=s}chainType="EVM";async send(a){let r=await this.buildRawTransactionSend(a);return this.sendRawTransaction(r)}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toAccountAddress:u,toTokenAddress:p,minimumReceiveAmount:I}=a,R=this.getBridgeContract(s).methods.swap(r,c,p,u,I);return Promise.resolve({from:d,to:s,data:R.encodeABI()})}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api),{amount:s,contractAddress:d,fromAccountAddress:c,fromTokenAddress:u,toChainId:p,toAccountAddress:I,toTokenAddress:h,messenger:R,fee:B,gasFeePaymentMethod:W,extraGas:N,extraGasDest:Z,abrExchangeRate:V}=r,S="0x"+pt().toString("hex"),T,k,L=B;N&&(L=vo(L).plus(N).toFixed());let H;if(W==="abr"){if(!V)throw new G("Cannot find 'abrExchangeRate' for ABR payment method");if(!a.sourceToken.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");H=L;let J=vo(L).div(V);L=Oe(J,a.sourceToken.abrPayer.abrToken.decimals,U.getChainDecimalsByType(a.sourceToken.chainType)).toFixed()}switch(R){case 3:case 4:{let J=await this.buildRawTransactionCctpSend(a,r,L);T=J.sendMethod,k=J.value;break}case 5:{let J=this.buildRawTransactionOftSend(a,r,L,Z);T=J.sendMethod,k=J.value;break}case 1:case 2:{let J=this.getBridgeContract(d);switch(W){case"abr":case"native":{T=J.methods.swapAndBridge(u,s,I,p,h,S,R,0),k=L;break}case"stablecoin":{T=J.methods.swapAndBridge(u,s,I,p,h,S,R,L),k="0";break}default:return se(W,"Unhandled FeePaymentMethod")}}break}if(W==="abr"){if(!a.sourceToken.abrPayer)throw new G("Source token must contain 'abrPayer' for ABR payment method");let J=a.sourceToken.abrPayer.payerAddress;if(!H)throw new G("Failed to calculate totalFeeInAbr");let ie=this.getAbrPayerContract(J),le="0x"+T.encodeABI().slice(10),ce=R;return a.destinationToken.chainType==="SOLANA"&&(R===3&&(ce=6),R===4&&(ce=7)),T=ie.methods.transferTokensAndCallTarget(a.sourceToken.tokenAddress,s,H,ce,le),Promise.resolve({from:c,to:J,value:"0",data:T.encodeABI()})}return Promise.resolve({from:c,to:d,value:k,data:T.encodeABI()})}async buildRawTransactionCctpSend(a,r,s){let{amount:d,contractAddress:c,toChainId:u,toAccountAddress:p,gasFeePaymentMethod:I}=r,h=this.getCctpBridgeContract(c),R,B;if(a.destinationToken.chainType==="SOLANA"){let W=await Fi(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(I){case"abr":case"native":{R=h.methods.bridgeWithWalletAddress(d,W,p,u,0),B=s;break}case"stablecoin":{R=h.methods.bridgeWithWalletAddress(d,W,p,u,s),B="0";break}default:return se(I,"Unhandled FeePaymentMethod")}}else switch(I){case"abr":case"native":{R=h.methods.bridge(d,p,u,0),B=s;break}case"stablecoin":{R=h.methods.bridge(d,p,u,s),B="0";break}default:return se(I,"Unhandled FeePaymentMethod")}return{sendMethod:R,value:B}}buildRawTransactionOftSend(a,r,s,d){let{amount:c,contractAddress:u,toChainId:p,toAccountAddress:I,gasFeePaymentMethod:h}=r,R=this.getOftBridgeContract(u),B,W;switch(h){case"abr":case"native":{B=R.methods.bridge(a.sourceToken.tokenAddress,c,I,p,0,d??"0","10"),W=s;break}case"stablecoin":{B=R.methods.bridge(a.sourceToken.tokenAddress,c,I,p,s,d??"0","10"),W="0";break}default:return se(h,"Unhandled FeePaymentMethod")}return{sendMethod:B,value:W}}async sendRawTransaction(a){let r=await this.web3.eth.estimateGas(a),s={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:d}=await this.web3.eth.sendTransaction({...a,gas:r,...s});return{txId:d.toString()}}getBridgeContract(a){return new this.web3.eth.Contract(po.abi,a)}getCctpBridgeContract(a){return new this.web3.eth.Contract(mo.abi,a)}getOftBridgeContract(a){return new this.web3.eth.Contract(bo.abi,a)}getAbrPayerContract(a){return new this.web3.eth.Contract(yo.abi,a)}};b();C();y();var Ni=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s}async approve(i,a){let r,s;a?(r=i,s=a):s=i;let d=Ln(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...s,spender:d},r)}async send(i,a){return ae(i.amount),te("amount",i.amount,i.sourceToken.decimals),lo(i)?Zi(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSend(i):Zi(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionSwap(i)}};b();C();y();import{Connection as cc}from"@solana/web3.js";b();C();y();import{ComputeBudgetInstruction as Yo,ComputeBudgetProgram as Gi,Connection as Bo,TransactionMessage as Bd}from"@solana/web3.js";import{Big as Wd}from"big.js";b();C();y();import{AddressLookupTableAccount as Ro}from"@solana/web3.js";async function Ut(o,i){return await Promise.all(o.message.addressTableLookups.map(async a=>new Ro({key:a.accountKey,state:Ro.deserialize(await i.getAccountInfo(a.accountKey).then(r=>{if(!r)throw new G("Cannot get AccountInfo");return r.data}))})))}b();C();y();b();C();y();var tr="AUTO";async function cn(o,i,a){let r=new Bo(a,"confirmed"),s=(await r.simulateTransaction(o)).value.unitsConsumed;await fo(o.instructions,s,i,r)}async function Wo(o,i,a){let r=new Bo(a,"confirmed"),s=await Ut(o,r),d=Bd.decompile(o.message,{addressLookupTableAccounts:s});if(o.serialize().length>1232)throw new gi;await fo(d.instructions,769230,i,r),o.message=d.compileToV0Message(s)}async function fo(o,i,a,r){if(i<=0)return;let s=fd(i,o),c=ir(a?.solana)?.fee;if(!c||c===tr){await nr(o,r);return}if("pricePerUnitInMicroLamports"in c){await nr(o,r,c.pricePerUnitInMicroLamports);return}let u=Wd(c.extraFeeInLamports).div(s).mul(Gn(6)).toFixed(0);await nr(o,r,u)}function ir(o){return o?typeof o!="object"?{fee:o}:"pricePerUnitInMicroLamports"in o||"extraFeeInLamports"in o?{fee:o}:"fee"in o||"payTxFeeWithStablecoinSwap"in o?o:{}:{}}function fd(o,i){let a=i.findIndex(d=>d.programId.equals(Gi.programId)&&Yo.decodeInstructionType(d)==="SetComputeUnitLimit"),r=Number((o*1.3).toFixed(0)),s=Gi.setComputeUnitLimit({units:r});return a>=0?i[a]=s:i.push(s),r.toString()}async function nr(o,i,a){let r=o.findIndex(c=>c.programId.equals(Gi.programId)&&Yo.decodeInstructionType(c)==="SetComputeUnitPrice"),s=BigInt(a||await Td(i)),d=Gi.setComputeUnitPrice({microLamports:s});return r>=0?o[r]=d:o.push(d),s.toString()}async function Td(o){let i=await o.getRecentPrioritizationFees(),a=0;for(let r of i)a+=r.prioritizationFee;return(a/i.length).toFixed(0)}b();C();y();import{BN as gn,Program as ar,web3 as ln}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as Od,getAssociatedTokenAddressSync as Qd}from"@solana/spl-token";import{Keypair as No,PublicKey as be,SystemProgram as Kd}from"@solana/web3.js";var Pt={};Ma(Pt,{accounts:()=>Zd,address:()=>wd,default:()=>Vd,errors:()=>Gd,instructions:()=>Nd,metadata:()=>Fd,types:()=>Xd});var wd="EmLt85sXNvqjzZo3C6BCq55ZzSuvSNFomVnf6b1PgY8R",Fd={name:"bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Nd=[{name:"add_other_bridge_token",discriminator:[103,180,1,186,219,156,185,114],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"adjust_total_lp_amount",discriminator:[8,190,6,31,121,124,62,241],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"admin"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"claim_rewards",discriminator:[4,144,132,71,116,23,151,80],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"deposit",discriminator:[242,35,198,137,82,225,242,182],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"init_deposit_account",discriminator:[136,79,202,206,211,146,182,158],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"initialize_pool",discriminator:[95,180,10,172,84,174,232,40],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"mint"},{name:"token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializePoolArgs"}}}]},{name:"receive_and_swap",discriminator:[49,243,231,17,38,214,140,225],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"receive_and_swap_wormhole",discriminator:[53,141,209,156,114,7,54,229],accounts:[{name:"user",writable:!0},{name:"payer",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"received_message_account"},{name:"unlock",writable:!0,pda:{seeds:[{kind:"const",value:[117,110,108,111,99,107]},{kind:"arg",path:"args.hash"}]}},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"},{name:"messenger_program"}],args:[{name:"args",type:{defined:{name:"UnlockArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"remove_other_bridge_token",discriminator:[149,232,199,145,241,219,24,154],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"_chain_id",type:"u8"},{name:"_token_address",type:{array:["u8",32]}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_allbridge_messenger_program_id",discriminator:[168,21,145,139,97,252,84,77],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_balance_ratio_min",discriminator:[210,171,132,168,93,237,9,201],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"balance_ratio_min_bp",type:"u16"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_pool_admin_fee_share",discriminator:[235,219,45,195,124,82,164,230],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_pool_fee_share",discriminator:[151,35,220,215,38,227,226,9],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_rebalancer",discriminator:[28,161,168,250,215,4,144,154],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"rebalancer"}],args:[]},{name:"set_stop_authority",discriminator:[238,229,235,32,221,191,227,43],accounts:[{name:"admin",signer:!0},{name:"new_authority"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_wormhole_messenger_program_id",discriminator:[215,127,198,117,43,17,36,24],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"start_bridge",discriminator:[213,146,40,152,47,121,85,18],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"stop_bridge",discriminator:[187,52,235,53,245,59,218,1],accounts:[{name:"stop_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"action_type",type:{defined:{name:"ActionType"}}}]},{name:"swap",discriminator:[248,198,158,145,225,117,135,200],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"send_mint"},{name:"receive_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"send_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"send_mint"}]}},{name:"receive_pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"receive_mint"}]}},{name:"send_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"send_mint"}]}},{name:"receive_bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"receive_mint"}]}},{name:"send_user_token",writable:!0},{name:"receive_user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[{name:"amount",type:"u64"},{name:"receive_amount_min",type:"u64"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"arg",path:"args.nonce"}]}},{name:"mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw",discriminator:[183,18,70,156,148,109,161,34],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"user_token",writable:!0},{name:"user_deposit",writable:!0,pda:{seeds:[{kind:"const",value:[117,115,101,114,95,100,101,112,111,115,105,116]},{kind:"account",path:"mint"},{kind:"account",path:"user"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount_lp",type:"u64"}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"pool",writable:!0,pda:{seeds:[{kind:"const",value:[112,111,111,108]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"config"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"amount",type:"u64"}]}],Zd=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"OtherBridgeToken",discriminator:[27,112,167,155,2,141,52,167]},{name:"Pool",discriminator:[241,154,109,4,17,177,109,188]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]},{name:"Unlock",discriminator:[187,122,21,254,7,157,241,10]},{name:"UserDeposit",discriminator:[69,238,23,217,255,137,185,35]}],Gd=[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"Pool overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"},{code:6013,name:"EmptyRecipient",msg:"Empty recipient"}],Xd=[{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"rebalancer",type:"pubkey"},{name:"stop_authority",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"can_swap",type:"bool"},{name:"can_deposit",type:"bool"},{name:"can_withdraw",type:"bool"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridge_messenger_program_id",type:"pubkey"},{name:"wormhole_messenger_program_id",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"sent_token_address",type:"pubkey"},{name:"amount",type:"u64"},{name:"vusd_amount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"OtherBridgeToken",type:{kind:"struct",fields:[]}},{name:"Pool",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"token_balance",type:"u64"},{name:"v_usd_balance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"total_lp_amount",type:"u64"},{name:"fee_share_bp",type:"u64"},{name:"admin_fee_share_bp",type:"u64"},{name:"acc_reward_per_share_p",type:"u128"},{name:"admin_fee_amount",type:"u64"},{name:"balance_ratio_min_bp",type:"u16"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"v_usd_amount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"},{name:"source_chain_id",type:"u8"},{name:"receive_token",type:"pubkey"},{name:"messenger",type:{defined:{name:"Messenger"}}},{name:"hash",type:{array:["u8",32]}},{name:"receive_amount_min",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_bridge_address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"UserDeposit",type:{kind:"struct",fields:[{name:"user_address",type:"pubkey"},{name:"mint",type:"pubkey"},{name:"lp_amount",type:"u64"},{name:"reward_debt",type:"u64"}]}}],Vd={address:wd,metadata:Fd,instructions:Nd,accounts:Zd,errors:Gd,types:Xd};var kn={};Ma(kn,{accounts:()=>kd,address:()=>Pd,default:()=>jd,errors:()=>Hd,instructions:()=>Ld,metadata:()=>Sd,types:()=>Md});var Pd="XHXBA5WK4PTaLjjVfhPLttXwjeiq18yLdPsBL42YKaY",Sd={name:"cctp_bridge",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},Ld=[{name:"bridge",discriminator:[174,41,120,146,98,218,169,25],accounts:[{name:"user",writable:!0,signer:!0},{name:"payer",writable:!0,signer:!0},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0,pda:{seeds:[{kind:"const",value:[108,111,99,107]},{kind:"account",path:"message_sent_event_data"}]}},{name:"mint",writable:!0},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"BridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"payer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"register_chain_bridge",discriminator:[239,66,180,165,175,10,49,233],accounts:[{name:"admin",signer:!0},{name:"payer",writable:!0,signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"RegisterChainBridgeArgs"}}}]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"new_admin"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[]},{name:"set_admin_fee_share",discriminator:[34,2,1,74,101,120,39,19],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"fee_share_bp",type:"u64"}]},{name:"set_cctp_token_messenger_minter",discriminator:[7,23,157,231,197,83,45,203],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_gas_oracle_program_id",discriminator:[172,152,29,206,112,239,205,83],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"update_chain_bridge",discriminator:[227,4,133,105,230,88,226,173],accounts:[{name:"admin",signer:!0},{name:"cctp_bridge",pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"arg",path:"args.mint"}]}},{name:"chain_bridge",writable:!0}],args:[{name:"args",type:{defined:{name:"UpdateChainBridgeArgs"}}}]},{name:"withdraw_admin_fee",discriminator:[176,135,230,197,163,130,60,252],accounts:[{name:"admin",signer:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}},{name:"bridge_token",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"mint"}]}},{name:"admin_token",writable:!0},{name:"bridge_authority",pda:{seeds:[{kind:"account",path:"cctp_bridge"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"mint"},{name:"cctp_bridge",writable:!0,pda:{seeds:[{kind:"const",value:[99,99,116,112,95,98,114,105,100,103,101]},{kind:"account",path:"mint"}]}}],args:[{name:"amount",type:"u64"}]}],kd=[{name:"CctpBridge",discriminator:[164,2,216,77,99,83,161,159]},{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Lock",discriminator:[8,255,36,202,210,22,57,137]},{name:"Price",discriminator:[50,107,127,61,83,36,39,75]}],Hd=[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}],Md=[{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"CctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"admin",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"gas_oracle_program_id",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"admin_fee_share_bp",type:"u64"},{name:"admin_fee_amount",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gas_oracle_program_id",type:"pubkey"},{name:"cctp_token_messenger_minter",type:"pubkey"},{name:"admin_fee_share_bp",type:"u64"}]}},{name:"Lock",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"amount",type:"u64"},{name:"admin_fee",type:"u64"},{name:"relayer_fee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"slot",type:"u64"}]}},{name:"Price",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"price",type:"u64"},{name:"gas_price",type:"u64"}]}},{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"pubkey"}]}}],jd={address:Pd,metadata:Sd,instructions:Ld,accounts:kd,errors:Hd,types:Md};b();C();y();import{getAccount as Jd}from"@solana/spl-token";import zd from"big.js";import{Web3 as Xi}from"web3";async function An(o,i){return await Jd(i.connection,o)}async function Vi(o,i,a){let r=await i.account.pool.fetch(a),s=r.decimals,d=zd(r.feeShareBp.toString()).div(1e4).toFixed(),c={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};if(Rt(o,s).lte(0))throw new ht(`Swap amount ${z(o,s).toFixed()} is too small for the liquidity pool. Minimum required amount is 0.001.`);return lt(o,{decimals:s,feeShare:d},c)}function Pi(o){let i=o.amount,a="0x"+o.recipient.toString("hex"),r=o.sourceChainId,s=o.destinationChainId,d="0x"+o.receiveToken.toString("hex"),c="0x"+o.nonce.toString("hex"),u=1,p="0x"+o.chainBridge.toString("hex"),I=Xi.utils.encodePacked({t:"uint256",v:i},{t:"bytes32",v:a},{t:"uint256",v:r},{t:"bytes32",v:d},{t:"uint256",v:c},{t:"uint8",v:u});if(!I)throw new G("message cannot be undefined");let h=Xi.utils.keccak256(Y.from(I.replace("0x",""),"hex")),R=Y.from(h.replace("0x",""),"hex");R[0]=r,R[1]=s;let B=Xi.utils.encodePacked({t:"bytes32",v:"0x"+R.toString("hex")},{t:"bytes32",v:p});if(!B)throw new on("messageWithSigner cannot be undefined");let W=Xi.utils.keccak256(Y.from(B.replace("0x",""),"hex")),N=Y.from(W.replace("0x",""),"hex");return N[0]=R[0],N[1]=R[1],N}b();C();y();import{web3 as To}from"@coral-xyz/anchor";import{PublicKey as xd,TransactionMessage as wo}from"@solana/web3.js";async function Fo(o,i,a){try{let r=await Ut(i,o),s=await Ut(a,o),d=wo.decompile(i.message,{addressLookupTableAccounts:r}),c=wo.decompile(a.message,{addressLookupTableAccounts:s});if(c.instructions.shift(),d.instructions.push(...c.instructions),r.push(...s),i.message=d.compileToV0Message(r),a.message.header.numRequiredSignatures===2&&i.signatures.length===1){let u=a.signatures[0];if(!u)throw new G("Signature is undefined");i.signatures.push(u)}return i}catch(r){throw r instanceof Error&&r.message?new Xe(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new Xe("Some error occurred during creation final swap and bridge transaction")}}async function _t(o,i,a){let r=await i.getAddressLookupTable(new xd(a)).then(d=>d.value);if(!r)throw new G("Cannot find allbridgeLookupTableAccount");let s=new To.TransactionMessage({payerKey:o.feePayer,recentBlockhash:o.recentBlockhash,instructions:o.instructions}).compileToV0Message([r]);return new To.VersionedTransaction(s)}var rr=1e6,Si=class{constructor(i,a,r){this.solanaRpcUrl=i;this.params=a;this.api=r}chainType="SOLANA";async buildRawTransactionSwap(i){let a=Ee(this.chainType,i);return await this.buildSwapTransaction(a,i.sourceToken.poolAddress,i.destinationToken.poolAddress,i.txFeeParams)}async buildSwapTransaction(i,a,r,s){let{fromAccountAddress:d,amount:c,contractAddress:u,fromTokenAddress:p,toTokenAddress:I,toAccountAddress:h,minimumReceiveAmount:R}=i,B=d,W=u,N=p,Z=I,V=r,S=h,T=new be(B),k=bt(this.solanaRpcUrl,T.toString()),L=new ar({...Pt,address:W},k),H=await Vt(L.programId),J=await tt(L.programId),ie=new be(N),ge=await Bt(ie,L.programId),le=new be(a),ce=_e(T,ie),ue=new be(S),oe=new be(Z),me=await Bt(oe,L.programId),We=new be(V),Ze=_e(ue,oe),fe=[ln.ComputeBudgetProgram.setComputeUnitLimit({units:rr})];try{await An(Ze,k)}catch{let Ye=Qd(oe,ue),Me=Od(T,Ye,ue,oe);fe.push(Me)}let Ge=await L.methods.swap(new gn(c),new gn(R||0)).accountsPartial({payer:T,config:J,bridgeAuthority:H,user:T,sendBridgeToken:ge,sendMint:ie,sendPool:le,sendUserToken:ce,receiveBridgeToken:me,receiveMint:oe,receivePool:We,receiveUserToken:Ze}).preInstructions(fe).transaction(),Ue=k.connection;return Ge.recentBlockhash=(await Ue.getLatestBlockhash()).blockhash,Ge.feePayer=T,await cn(Ge,s,this.solanaRpcUrl),await _t(Ge,Ue,this.params.solanaLookUpTable)}async buildRawTransactionSend(i,a){let r,s;switch(i.messenger){case 1:{let d=await this.prepareSwapAndBridgeData(a);r=await this.buildSwapAndBridgeAllbridgeTransaction(d);break}case 2:{let d=await this.prepareSwapAndBridgeData(a),{transaction:c,messageAccount:u}=await this.buildSwapAndBridgeWormholeTransaction(d);r=c,s=u;break}case 3:case 4:{let d=await this.prepareSwapAndBridgeCctpData(a),{transaction:c,messageSentEventDataKeypair:u}=await this.buildSwapAndBridgeCctpTransaction(i.destinationToken.chainSymbol,d);r=c,s=u;break}case 5:throw new Pe("Messenger OFT is not supported yet.");default:return se(i.messenger,"Unhandled Messenger type")}return{tx:r,requiredMessageSigner:s}}getExtraGasInstruction(i,a,r){return ln.SystemProgram.transfer({fromPubkey:a,toPubkey:r,lamports:+i})}async prepareSwapAndBridgeData(i){let{amount:a,contractAddress:r,fromChainId:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:u,toAccountAddress:p,toTokenAddress:I,poolAddress:h,extraGas:R}=i,B=c,W=d,N=u,Z=I,V=p,S=r,T=s,k=bt(this.solanaRpcUrl,W),L=new ar({...Pt,address:S},k),H=Array.from(pt()),J=new be(h),ie=await Vi(a,L,J),ge=await Ri(H,L.programId),le=await Vt(L.programId),ce=_e(new be(W),new be(B)),ue=await Bt(new be(B),L.programId),oe=await sn(N,L.programId),me=await Bi(N,Y.from(Z),L.programId),We=await tt(L.programId),Ze=await L.account.config.fetch(We),fe=await Xt(N,Ze.gasOracleProgramId),Ge=await Xt(T,Ze.gasOracleProgramId),Ue=Pi({amount:ie,recipient:Y.from(V),nonce:Y.from(H),receiveToken:Y.from(Z),destinationChainId:N,sourceChainId:T,chainBridge:(await Vt(L.programId)).toBuffer()}),_={};return _.bridge=L,_.amount=new gn(a),_.vusdAmount=new gn(ie),_.nonce=H,_.recipient=Array.from(V),_.receiveToken=Array.from(Z),_.poolAccount=J,_.lockAccount=ge,_.bridgeAuthority=le,_.userToken=ce,_.bridgeTokenAccount=ue,_.chainBridgeAccount=oe,_.otherBridgeTokenAccount=me,_.userAccount=new be(W),_.destinationChainId=N,_.mint=new be(B),_.config=We,_.configAccountInfo=Ze,_.gasPrice=fe,_.thisGasPrice=Ge,_.message=Ue,R&&(_.extraGasInstruction=this.getExtraGasInstruction(R,_.userAccount,We)),_}async buildSwapAndBridgeAllbridgeTransaction(i){let{bridge:a,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:u,lockAccount:p,bridgeAuthority:I,userToken:h,bridgeTokenAccount:R,chainBridgeAccount:B,otherBridgeTokenAccount:W,userAccount:N,destinationChainId:Z,mint:V,config:S,configAccountInfo:T,gasPrice:k,thisGasPrice:L,message:H,extraGasInstruction:J}=i,ie=T.allbridgeMessengerProgramId,ge=await dn(Z,ie),le=await tt(ie),ce=await Wi(H,ie),ue=[];J&&ue.push(J);let oe=await a.methods.swapAndBridge({vusdAmount:r,nonce:s,destinationChainId:Z,recipient:d,receiveToken:c}).accountsPartial({payer:N,mint:V,user:N,config:S,lock:p,pool:u,gasPrice:k,thisGasPrice:L,bridgeAuthority:I,userToken:h,bridgeToken:R,chainBridge:B,messenger:ie,messengerGasUsage:ge,messengerConfig:le,sentMessageAccount:ce,otherBridgeToken:W}).preInstructions([ln.ComputeBudgetProgram.setComputeUnitLimit({units:rr})]).postInstructions(ue).transaction(),me=bt(this.solanaRpcUrl,N.toString()).connection;return oe.recentBlockhash=(await me.getLatestBlockhash()).blockhash,oe.feePayer=N,await _t(oe,me,this.params.solanaLookUpTable)}async buildSwapAndBridgeWormholeTransaction(i){let{bridge:a,vusdAmount:r,nonce:s,recipient:d,receiveToken:c,poolAccount:u,lockAccount:p,bridgeAuthority:I,userToken:h,bridgeTokenAccount:R,chainBridgeAccount:B,otherBridgeTokenAccount:W,userAccount:N,destinationChainId:Z,mint:V,config:S,configAccountInfo:T,gasPrice:k,thisGasPrice:L,extraGasInstruction:H}=i,J=this.params.wormholeMessengerProgramId,[ie]=be.findProgramAddressSync([Y.from("Bridge")],new be(J)),[ge]=be.findProgramAddressSync([Y.from("fee_collector")],new be(J)),[le]=be.findProgramAddressSync([Y.from("Sequence"),I.toBuffer()],new be(J)),ce=await dn(Z,T.wormholeMessengerProgramId),ue=await tt(T.wormholeMessengerProgramId),oe=No.generate(),me=bt(this.solanaRpcUrl,N.toString()),We=await me.connection.getAccountInfo(ie);if(We==null)throw new G("Cannot fetch wormhole bridge account info");let Ze=new gn(We.data.slice(16,24),"le").toString(),fe=Kd.transfer({fromPubkey:N,toPubkey:ge,lamports:+Ze}),Ge=[];H&&Ge.push(H);let Ue={payer:N,mint:V,user:N,config:S,lock:p,pool:u,gasPrice:k,thisGasPrice:L,bridgeAuthority:I,userToken:h,bridgeToken:R,chainBridge:B,otherBridgeToken:W,messengerGasUsage:ce,wormholeProgram:J,bridge:ie,message:oe.publicKey,wormholeMessenger:T.wormholeMessengerProgramId,sequence:le,feeCollector:ge,wormholeMessengerConfig:ue,clock:ln.SYSVAR_CLOCK_PUBKEY},_=await a.methods.swapAndBridgeWormhole({vusdAmount:r,nonce:s,destinationChainId:Z,recipient:d,receiveToken:c}).accounts(Ue).preInstructions([ln.ComputeBudgetProgram.setComputeUnitLimit({units:rr}),fe]).postInstructions(Ge).signers([oe]).transaction();return _.recentBlockhash=(await me.connection.getLatestBlockhash()).blockhash,_.feePayer=N,{transaction:await _t(_,me.connection,this.params.solanaLookUpTable),messageAccount:oe}}async prepareSwapAndBridgeCctpData(i){let{contractAddress:a,amount:r,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:u,toTokenAddress:p,extraGas:I}=i,h=a;if(!h)throw new Ve("Such route does not support CCTP protocol");let R=4,B=s,W=p,N=u,Z=bt(this.solanaRpcUrl,B),V=new ar({...kn,address:h},Z),S=new be(d),T=await fi(S,V.programId),k=new be(B),L=await V.account.cctpBridge.fetch(T),H={};return H.cctpBridge=V,H.cctpBridgeAccount=T,H.cctpAddressAccount=new be(h),H.amount=new gn(r),H.recipient=Array.from(N),H.receiveToken=Array.from(W),H.userToken=_e(k,S),H.bridgeAuthority=await Yi(T,V.programId),H.bridgeTokenAccount=await Co(S,V.programId),H.chainBridgeAccount=await sn(c,V.programId),H.userAccount=k,H.destinationChainId=c,H.mint=S,H.gasPrice=await Xt(c,L.gasOracleProgramId),H.thisGasPrice=await Xt(R,L.gasOracleProgramId),H.provider=Z,I&&(H.extraGasInstruction=this.getExtraGasInstruction(I,H.userAccount,T)),H}async buildSwapAndBridgeCctpTransaction(i,a){let{cctpBridge:r,cctpBridgeAccount:s,amount:d,recipient:c,receiveToken:u,bridgeAuthority:p,userToken:I,bridgeTokenAccount:h,chainBridgeAccount:R,userAccount:B,destinationChainId:W,mint:N,gasPrice:Z,thisGasPrice:V,extraGasInstruction:S,provider:T}=a,k=this.params.cctpParams.cctpDomains[i],L=this.params.cctpParams.cctpTransmitterProgramId,H=this.params.cctpParams.cctpTokenMessengerMinter;if(k==null||!L||!H)throw new G("CCTP is not configured");let J=new be(L),ie=new be(H),{messageTransmitterAccount:ge,tokenMessenger:le,tokenMessengerEventAuthority:ce,tokenMinter:ue,localToken:oe,remoteTokenMessengerKey:me,authorityPda:We}=wi(k,N,J,ie),Ze=[];S&&Ze.push(S);let fe=No.generate(),Ge=Ti(r.programId,fe.publicKey),Ue=await r.methods.bridge({amount:d,destinationChainId:W,recipient:c,receiveToken:u}).accountsPartial({mint:N,user:B,cctpBridge:s,payer:B,messageSentEventData:fe.publicKey,lock:Ge,cctpMessenger:ie,messageTransmitterProgram:J,messageTransmitterAccount:ge,tokenMessenger:le,tokenMinter:ue,localToken:oe,remoteTokenMessengerKey:me,authorityPda:We,eventAuthority:ce,bridgeToken:h,gasPrice:Z,thisGasPrice:V,chainBridge:R,userToken:I,bridgeAuthority:p}).preInstructions([ln.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Ze).transaction(),_=T.connection;return Ue.recentBlockhash=(await _.getLatestBlockhash()).blockhash,Ue.feePayer=B,{transaction:await _t(Ue,_,this.params.solanaLookUpTable),messageSentEventDataKeypair:fe}}};b();C();y();import{NATIVE_MINT as Ud}from"@solana/spl-token";import{VersionedTransaction as Dd}from"@solana/web3.js";import Zo,{AxiosError as Go}from"axios";import{Big as $e}from"big.js";var Ed=1.1,_d=1.01,Li=class{constructor(i,a){this.api=i;this.jupiterUrl=a.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=a.jupiterApiKeyHeader,this.maxAccounts=a.jupiterMaxAccounts}jupiterUrl;apiKeyHeader;maxAccounts;async buildJupAndUpdateTxSendParams(i,a){let r=ir(i.txFeeParams?.solana);try{let{tx:s,solTxSendUpdatedParams:d}=await this.processJup(a,i,r,!0);return{jupTx:s,solTxSendParams:{...a,...d}}}catch(s){if(s instanceof ht)throw s;try{let{tx:d,solTxSendUpdatedParams:c}=await this.processJup(a,i,r,!1);return{jupTx:d,solTxSendParams:{...a,...c}}}catch(d){throw d instanceof Ie?d:d instanceof Error&&d.message?new Xe(`Some error occurred during creation Jupiter swap transaction. ${d.message}`):new Xe("Some error occurred during creation Jupiter swap transaction")}}}async processJup(i,a,r,s){let{fee:d,extraGas:c,gasFeePaymentMethod:u,sourceNativeTokenPrice:p}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(a.sourceToken,i),I=s?$e(d):$e(i.fee);if(c&&(s?I=I.plus(c):i.extraGas&&(I=I.plus(i.extraGas))),r?.payTxFeeWithStablecoinSwap)if(s)I=I.plus(3526760);else{if(!p)throw new G("sourceNativeTokenPrice is undefined.");let V=$e(3526760).mul(p).div($e(10).pow(U.getChainDecimalsByType("SOLANA")-a.sourceToken.decimals)).toFixed(0);I=I.plus(V)}s||(I=I.mul(Ed));let{tx:h,amountIn:R}=await this.getJupiterSwapTx(a.fromAccountAddress,a.sourceToken.tokenAddress,I.toFixed(0),s),B;if(s){if(!R)throw new Xe("Cannot get inAmount");B=$e(i.amount).minus($e(R).mul(_d).toFixed(0,$e.roundUp)).toFixed(0)}else B=$e(i.amount).minus(I).toFixed(0);if($e(B).lte(0))throw new ht(`Amount not enough to pay fee, ${z($e(B).minus(1).neg(),a.sourceToken.decimals).toFixed()} stables is missing`);return{tx:h,solTxSendUpdatedParams:{amount:B,fee:d,extraGas:c,gasFeePaymentMethod:u}}}async convertStableCoinFeeAndExtraGasToNativeCurrency(i,a){if(a.gasFeePaymentMethod=="stablecoin"){let r=(await this.api.getReceiveTransactionCost({sourceChainId:a.fromChainId,destinationChainId:a.toChainId,messenger:a.messenger,sourceToken:i.tokenAddress})).sourceNativeTokenPrice,s=$e(a.fee).div(r).mul($e(10).pow(U.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0),d;return a.extraGas&&(d=$e(a.extraGas).div(r).mul($e(10).pow(U.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native",sourceNativeTokenPrice:r}}return{fee:a.fee,extraGas:a.extraGas,gasFeePaymentMethod:"native"}}async getJupiterSwapTx(i,a,r,s){let d;try{let R=s?"ExactOut":"ExactIn",B=`${this.jupiterUrl}/quote?inputMint=${a}&outputMint=${Ud.toString()}&amount=${r}&swapMode=${R}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(B+=`&maxAccounts=${this.maxAccounts}`),d=await Zo.get(B,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(R){throw R instanceof Go&&R.response&&R.response.data&&R.response.data.error?new Xe(R.response.data.error):new Xe("Cannot get route")}let c;if(s&&d?.data?.inAmount)c=d.data.inAmount;else if(s)throw new Xe("Cannot get inAmount");let u;try{u=await Zo.post(`${this.jupiterUrl}/swap`,{quoteResponse:d.data,userPublicKey:i,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(R){throw R instanceof Go&&R.response&&R.response.data&&R.response.data.error?new Xe(R.response.data.error):new Xe("Cannot get swap transaction")}let p;if(u?.data?.swapTransaction)p=u.data.swapTransaction;else throw new Xe("Cannot get swap transaction");let I=Y.from(p,"base64"),h=Dd.deserialize(I);return s?{tx:h,amountIn:c}:{tx:h}}};b();C();y();import{BN as Hn,Program as sr,web3 as oc}from"@coral-xyz/anchor";import{Keypair as Xo,PublicKey as yt,SystemProgram as sc}from"@solana/web3.js";var or={};Ma(or,{accounts:()=>tc,address:()=>$d,default:()=>rc,errors:()=>ic,events:()=>nc,instructions:()=>ec,metadata:()=>qd,types:()=>ac});var $d="DfB5pJSykRUuUT2ViG8V382R6RB5CQ3GTMVFajoyxXn1",qd={name:"payer_with_token",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},ec=[{name:"add_fee_token",discriminator:[171,6,150,97,69,55,13,136],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"AddFeeTokenArgs"}}}]},{name:"bridge_cctp",discriminator:[35,114,66,117,122,78,225,186],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint",writable:!0},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"cctp_bridge"},{name:"bridge_token",writable:!0},{name:"cctp_messenger"},{name:"message_transmitter_program"},{name:"message_transmitter_account",writable:!0},{name:"token_messenger"},{name:"token_minter"},{name:"local_token",writable:!0},{name:"remote_token_messenger_key"},{name:"authority_pda"},{name:"event_authority"},{name:"message_sent_event_data",writable:!0,signer:!0},{name:"lock",writable:!0},{name:"cctp_bridge_config",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerCctpBridgeArgs"}}}]},{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"initializer",writable:!0,signer:!0},{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"system_program",address:"11111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"InitializeArgs"}}}]},{name:"remove_fee_token",discriminator:[46,96,240,63,28,173,62,131],accounts:[{name:"admin",writable:!0,signer:!0},{name:"fee_token_mint"},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}],args:[]},{name:"set_admin",discriminator:[251,163,0,52,91,194,187,92],accounts:[{name:"admin",writable:!0,signer:!0},{name:"new_admin"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[]},{name:"set_bridge_program_id",discriminator:[59,191,249,155,146,73,202,139],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_cctp_bridge_program_id",discriminator:[164,36,75,241,35,30,47,159],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_program_id",type:"pubkey"}]},{name:"set_fee_token_price",discriminator:[116,201,189,21,190,10,242,241],accounts:[{name:"price_authority",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}}],args:[{name:"new_price",type:"u64"}]},{name:"set_price_authority",discriminator:[51,241,68,137,206,207,244,107],accounts:[{name:"admin",writable:!0,signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}}],args:[{name:"new_address",type:"pubkey"}]},{name:"swap_and_bridge",discriminator:[204,63,169,171,186,125,86,159],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"messenger"},{name:"messenger_config",writable:!0},{name:"sent_message_account",writable:!0},{name:"messenger_gas_usage"},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"bridge_authority"},{name:"user_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"swap_and_bridge_wormhole",discriminator:[41,91,201,180,150,117,154,65],accounts:[{name:"user",writable:!0,signer:!0},{name:"mint"},{name:"fee_token_mint"},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"user_fee_token_account",writable:!0},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"bridge"},{name:"bridge_token",writable:!0},{name:"lock",writable:!0},{name:"bridge_config",writable:!0},{name:"other_bridge_token",writable:!0},{name:"pool",writable:!0},{name:"gas_price"},{name:"this_gas_price"},{name:"chain_bridge"},{name:"user_token_account",writable:!0},{name:"bridge_authority"},{name:"wormhole_messenger"},{name:"wormhole_messenger_config",writable:!0},{name:"wormhole_program"},{name:"wormhole_bridge",writable:!0},{name:"message",writable:!0,signer:!0},{name:"sequence",writable:!0},{name:"fee_collector",writable:!0},{name:"messenger_gas_usage"},{name:"clock",address:"SysvarC1ock11111111111111111111111111111111"},{name:"rent",address:"SysvarRent111111111111111111111111111111111"},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"args",type:{defined:{name:"PayerSwapAndBridgeArgs"}}}]},{name:"withdraw_fee_token",discriminator:[131,103,89,216,53,78,255,118],accounts:[{name:"admin",signer:!0},{name:"config",writable:!0,pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"fee_token_mint"},{name:"fee_token_config",writable:!0,pda:{seeds:[{kind:"const",value:[102,101,101,95,116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"contract_fee_token_account",writable:!0,pda:{seeds:[{kind:"const",value:[116,111,107,101,110]},{kind:"account",path:"fee_token_mint"}]}},{name:"admin_fee_token_account",writable:!0},{name:"token_program",address:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]},{name:"withdraw_gas_token",discriminator:[109,117,140,223,117,175,2,139],accounts:[{name:"admin",signer:!0},{name:"recipient",writable:!0},{name:"payer_authority",writable:!0,pda:{seeds:[{kind:"account",path:"config"}]}},{name:"config",pda:{seeds:[{kind:"const",value:[99,111,110,102,105,103]}]}},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],tc=[{name:"ChainBridge",discriminator:[25,216,147,218,140,42,98,49]},{name:"Config",discriminator:[155,12,170,224,30,250,204,130]},{name:"FeeTokenConfig",discriminator:[226,113,31,124,53,31,222,222]}],nc=[{name:"ExtraGasSentEvent",discriminator:[111,21,139,73,113,95,104,52]}],ic=[{code:6e3,name:"PayerFeeSlippage",msg:"Payer fee slippage"}],ac=[{name:"AddFeeTokenArgs",type:{kind:"struct",fields:[{name:"price",type:"u64"}]}},{name:"ChainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chain_id",type:"u8"},{name:"gas_usage",type:"u64"}]}},{name:"Config",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"authority_bump_seed",type:"u8"},{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"},{name:"price_authority",type:"pubkey"}]}},{name:"ExtraGasSentEvent",type:{kind:"struct",fields:[{name:"fee_token_mint",type:"pubkey"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"extra_gas_amount_in_sol",type:"u64"},{name:"extra_gas_amount_in_usd",type:"u64"}]}},{name:"FeeTokenConfig",type:{kind:"struct",fields:[{name:"mint",type:"pubkey"},{name:"decimals",type:"u8"},{name:"price",type:"u64"},{name:"bump",type:"u8"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"bridge_program_id",type:"pubkey"},{name:"cctp_bridge_program_id",type:"pubkey"}]}},{name:"PayerCctpBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destination_chain_id",type:"u8"},{name:"receive_token",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"PayerSwapAndBridgeArgs",type:{kind:"struct",fields:[{name:"max_fee_amount",type:"u64"},{name:"extra_gas_amount_in_fee_token",type:"u64"},{name:"destination_chain_id",type:"u8"},{name:"recipient",type:{array:["u8",32]}},{name:"recipient_token",type:{array:["u8",32]}},{name:"vusd_amount",type:"u64"},{name:"nonce",type:{array:["u8",32]}}]}}],rc={address:$d,metadata:qd,instructions:ec,accounts:tc,events:nc,errors:ic,types:ac};var dc=1e6,ki=class{constructor(i,a,r){this.solanaRpcUrl=i;this.params=a;this.api=r}chainType="SOLANA";async buildRawTransactionSend(i,a){switch(i.messenger){case 1:{let r=await this.prepareSwapAndBridgeAllbridgeData(i,a);return{tx:await this.buildSwapAndBridgeTx(r)}}case 2:{let r=await this.prepareSwapAndBridgeWormholeData(i,a);return await this.buildSwapAndBridgeWormholeTx(r)}case 3:case 4:{let r=await this.prepareBridgeCctpData(i,a);return this.buildBridgeCctpTx(r)}case 5:throw new Pe("Messenger OFT is not supported yet.");default:return se(i.messenger,"Unhandled Messenger type")}}async prepareSwapAndBridgeBaseData(i,a){let{fromChainId:r,fromAccountAddress:s,fromTokenAddress:d,poolAddress:c,toAccountAddress:u,toTokenAddress:p,toChainId:I,fee:h,extraGas:R="0"}=a,B=new yt(s),W=Array.from(u),N=Array.from(p),Z=new Hn(h),V=new Hn(R),S=bt(this.solanaRpcUrl,s),T=this.getPayerProgram(i,S),k=new sr({...Pt,address:i.sourceToken.bridgeAddress},S),L=new yt(c),H=await tt(k.programId),J=await k.account.config.fetch(H),ie=new yt(d),ge=new yt(this.getAbrFeeTokenMintAddress(i)),le=_e(B,ie),ce=_e(B,ge),ue=await Xt(I,J.gasOracleProgramId),oe=await Xt(r,J.gasOracleProgramId);return{provider:S,payerProgram:T,bridgeProgram:k,userAccount:B,recipient:W,recipientToken:N,recipientChain:I,maxFeeAmount:Z,extraGasAmountInFeeToken:V,mintAccount:ie,feeTokenMintAccount:ge,userTokenAccount:le,userFeeTokenAccount:ce,gasPriceAccount:ue,thisGasPriceAccount:oe,poolAccount:L,bridgeConfigAccount:H,bridgeConfigInfo:J}}getComputeUnitLimitInstruction(){return oc.ComputeBudgetProgram.setComputeUnitLimit({units:dc})}getPayerProgram(i,a){let r=i.sourceToken.abrPayer?.payerAddress;if(!r)throw new Nt("Payer with token not supported yet for ABR tokens");return new sr({...or,address:r},a)}getAbrFeeTokenMintAddress(i){let a=i.sourceToken.abrPayer?.abrToken.tokenAddress;if(!a)throw new Nt("Payer with token not supported yet for ABR tokens");return a}async prepareSwapAndBridgeCommonData(i,a){let{amount:r,toChainId:s,toTokenAddress:d}=a,{bridgeProgram:c,poolAccount:u,mintAccount:p}=i,I=await Vi(r,c,u),h=Array.from(pt()),R=await Ri(h,c.programId),B=c.programId,W=await sn(s,B),N=await Vt(B),Z=await Bt(p,B),V=await Bi(s,Y.from(d),B);return{...i,vusdAmount:new Hn(I),nonce:h,lockAccount:R,chainBridgeAccount:W,bridgeProgramId:B,bridgeAuthorityAccount:N,bridgeTokenAccount:Z,otherBridgeTokenAccount:V}}getWormholeProgramAddresses(i,a){let r=new yt(i),[s]=yt.findProgramAddressSync([Y.from("Bridge")],r),[d]=yt.findProgramAddressSync([Y.from("Sequence"),a.toBuffer()],r),[c]=yt.findProgramAddressSync([Y.from("fee_collector")],r);return{wormholeBridgeAccount:s,wormholeSequenceAccount:d,wormholeFeeCollectorAccount:c}}async getWormholeFeeInstruction(i,a,r,s){let d=await i.connection.getAccountInfo(a);if(d==null)throw new G("Cannot fetch wormhole bridge account info");let c=new Hn(d.data.slice(16,24),"le").toString();return sc.transfer({fromPubkey:r,toPubkey:s,lamports:+c})}async prepareSwapAndBridgeAllbridgeData(i,a){let r=await this.prepareSwapAndBridgeBaseData(i,a),s=await this.prepareSwapAndBridgeCommonData(r,a),{recipient:d,recipientToken:c,recipientChain:u,bridgeConfigInfo:p}=r,{vusdAmount:I,nonce:h,bridgeAuthorityAccount:R}=s,{fromChainId:B,toChainId:W}=a,N=Pi({amount:I.toString(),recipient:Y.from(d),nonce:Y.from(h),receiveToken:Y.from(c),destinationChainId:u,sourceChainId:B,chainBridge:R.toBuffer()}),Z=p.allbridgeMessengerProgramId,V=await Wi(N,Z),S=await tt(Z),T=await dn(W,Z);return{...s,sentMessageAccount:V,messengerProgramId:Z,messengerConfigAccount:S,messengerGasUsageAccount:T}}async prepareSwapAndBridgeWormholeData(i,a){let r=await this.prepareSwapAndBridgeBaseData(i,a),s=await this.prepareSwapAndBridgeCommonData(r,a),{provider:d,userAccount:c,bridgeConfigInfo:u}=r,{bridgeAuthorityAccount:p}=s,{toChainId:I}=a,h=u.wormholeMessengerProgramId,R=await tt(h),B=await dn(I,h),W=this.params.wormholeMessengerProgramId,{wormholeBridgeAccount:N,wormholeSequenceAccount:Z,wormholeFeeCollectorAccount:V}=this.getWormholeProgramAddresses(W,p),S=Xo.generate(),T=await this.getWormholeFeeInstruction(d,N,c,V);return{...s,wormholeMessengerAccount:h,wormholeMessengerConfigAccount:R,wormholeProgramId:W,sequenceAccount:Z,feeCollectorAccount:V,messengerGasUsageAccount:B,messageAccount:S,wormholeBridgeAccount:N,feeInstruction:T}}async prepareBridgeCctpData(i,a){let r=await this.prepareSwapAndBridgeBaseData(i,a),{mintAccount:s,provider:d}=r,{amount:c,toChainId:u}=a,p=i.sourceToken.cctpAddress;if(!p)throw new Ve("Such route does not support CCTP protocol");let I=new sr({...kn,address:p},d),h=await sn(u,I.programId),R=I.programId,B=await fi(s,I.programId),W=await Yi(B,I.programId),N=await Bt(s,I.programId),Z=i.destinationToken.chainSymbol,V=this.params.cctpParams.cctpDomains[Z],S=this.params.cctpParams.cctpTransmitterProgramId,T=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!S||!T)throw new G("CCTP is not configured");let k=new yt(S),L=new yt(T),{messageTransmitterAccount:H,tokenMessenger:J,tokenMessengerEventAuthority:ie,tokenMinter:ge,localToken:le,remoteTokenMessengerKey:ce,authorityPda:ue}=wi(V,s,k,L),oe=Xo.generate(),me=Ti(I.programId,oe.publicKey);return{...r,lockAccount:me,messageSentEventDataKeypair:oe,amount:new Hn(c),chainBridgeAccount:h,cctpBridgeProgramId:R,cctpBridgeAuthorityAccount:W,cctpBridgeConfigAccount:B,cctpBridgeTokenAccount:N,cctpTokenMessengerMinter:L,cctpTransmitterProgramId:k,messageTransmitterAccount:H,tokenMessenger:J,tokenMessengerEventAuthority:ie,tokenMinter:ge,localToken:le,remoteTokenMessengerKey:ce,authorityPda:ue}}async buildSwapAndBridgeTx(i){let{provider:a,payerProgram:r,userAccount:s,vusdAmount:d,recipient:c,recipientChain:u,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,lockAccount:B,chainBridgeAccount:W,bridgeProgramId:N,bridgeAuthorityAccount:Z,bridgeTokenAccount:V,mintAccount:S,feeTokenMintAccount:T,userTokenAccount:k,userFeeTokenAccount:L,gasPriceAccount:H,thisGasPriceAccount:J,sentMessageAccount:ie,messengerProgramId:ge,messengerConfigAccount:le,messengerGasUsageAccount:ce,bridgeConfigAccount:ue,otherBridgeTokenAccount:oe,poolAccount:me}=i,We=await r.methods.swapAndBridge({vusdAmount:d,recipient:c,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,destinationChainId:u}).accountsPartial({lock:B,chainBridge:W,bridge:N,bridgeAuthority:Z,bridgeToken:V,mint:S,feeTokenMint:T,userTokenAccount:k,userFeeTokenAccount:L,gasPrice:H,thisGasPrice:J,sentMessageAccount:ie,messenger:ge,messengerConfig:le,messengerGasUsage:ce,bridgeConfig:ue,otherBridgeToken:oe,pool:me}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return await this.finalizeTransaction(We,a,s)}async buildSwapAndBridgeWormholeTx(i){let{provider:a,payerProgram:r,userAccount:s,vusdAmount:d,recipient:c,recipientChain:u,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,lockAccount:B,chainBridgeAccount:W,bridgeProgramId:N,bridgeAuthorityAccount:Z,bridgeTokenAccount:V,mintAccount:S,feeTokenMintAccount:T,userTokenAccount:k,userFeeTokenAccount:L,gasPriceAccount:H,thisGasPriceAccount:J,messengerGasUsageAccount:ie,bridgeConfigAccount:ge,otherBridgeTokenAccount:le,poolAccount:ce,wormholeMessengerAccount:ue,wormholeMessengerConfigAccount:oe,wormholeProgramId:me,sequenceAccount:We,feeCollectorAccount:Ze,messageAccount:fe,wormholeBridgeAccount:Ge,feeInstruction:Ue}=i,_=await r.methods.swapAndBridgeWormhole({vusdAmount:d,recipient:c,recipientToken:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,nonce:R,destinationChainId:u}).accounts({lock:B,chainBridge:W,bridge:N,bridgeAuthority:Z,bridgeToken:V,mint:S,feeTokenMint:T,userTokenAccount:k,userFeeTokenAccount:L,gasPrice:H,thisGasPrice:J,messengerGasUsage:ie,bridgeConfig:ge,otherBridgeToken:le,pool:ce,wormholeMessenger:ue,wormholeMessengerConfig:oe,wormholeProgram:me,sequence:We,feeCollector:Ze,message:fe.publicKey,wormholeBridge:Ge}).preInstructions([this.getComputeUnitLimitInstruction(),Ue]).signers([fe]).transaction();return{tx:await this.finalizeTransaction(_,a,s),requiredMessageSigner:fe}}async buildBridgeCctpTx(i){let{provider:a,payerProgram:r,amount:s,recipient:d,recipientToken:c,userAccount:u,recipientChain:p,maxFeeAmount:I,extraGasAmountInFeeToken:h,lockAccount:R,mintAccount:B,feeTokenMintAccount:W,userTokenAccount:N,userFeeTokenAccount:Z,gasPriceAccount:V,thisGasPriceAccount:S,chainBridgeAccount:T,cctpBridgeProgramId:k,cctpBridgeAuthorityAccount:L,cctpBridgeConfigAccount:H,cctpBridgeTokenAccount:J,cctpTokenMessengerMinter:ie,cctpTransmitterProgramId:ge,messageTransmitterAccount:le,tokenMessenger:ce,tokenMessengerEventAuthority:ue,tokenMinter:oe,localToken:me,remoteTokenMessengerKey:We,authorityPda:Ze,messageSentEventDataKeypair:fe}=i,Ge=await r.methods.bridgeCctp({amount:s,recipient:d,receiveToken:c,destinationChainId:p,maxFeeAmount:I,extraGasAmountInFeeToken:h}).accounts({lock:R,messageSentEventData:fe.publicKey,mint:B,feeTokenMint:W,userFeeTokenAccount:Z,bridgeToken:J,cctpBridge:k,cctpBridgeConfig:H,cctpMessenger:ie,messageTransmitterProgram:ge,messageTransmitterAccount:le,tokenMessenger:ce,tokenMinter:oe,localToken:me,remoteTokenMessengerKey:We,authorityPda:Ze,eventAuthority:ue,gasPrice:V,thisGasPrice:S,chainBridge:T,bridgeAuthority:L,userTokenAccount:N}).preInstructions([this.getComputeUnitLimitInstruction()]).transaction();return{tx:await this.finalizeTransaction(Ge,a,u),requiredMessageSigner:fe}}async finalizeTransaction(i,a,r){let s=a.connection;return i.recentBlockhash=(await s.getLatestBlockhash()).blockhash,i.feePayer=r,await _t(i,s,this.params.solanaLookUpTable)}};var Hi=class extends Se{constructor(a,r,s){super();this.solanaRpcUrl=a;this.params=r;this.api=s;this.connection=new cc(a),this.jupiterService=new Li(s,r.jupiterParams),this.bridgeTxService=new Si(a,r,s),this.payerWithTokenService=new ki(a,r,s)}chainType="SOLANA";connection;jupiterService;bridgeTxService;payerWithTokenService;async buildRawTransactionSwap(a){return this.bridgeTxService.buildRawTransactionSwap(a)}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api),s=this.addPoolAddress(a,r),d=a.gasFeePaymentMethod??"native",c,u;switch(d){case"native":{let p=await this.buildTxWithNativePayment(a,s);c=p.tx,u=p.requiredMessageSigner;break}case"stablecoin":{let p=await this.buildTxWithStablePayment(a,s);c=p.tx,u=p.requiredMessageSigner;break}case"abr":{let p=await this.buildTxWithAbrPayment(a,s);c=p.tx,u=p.requiredMessageSigner;break}default:return se(d,"Unhandled FeePaymentMethod")}return await Wo(c,a.txFeeParams,this.solanaRpcUrl),u&&c.sign([u]),c}async buildTxWithNativePayment(a,r){return await this.bridgeTxService.buildRawTransactionSend(a,r)}async buildTxWithStablePayment(a,r){let{jupTx:s,solTxSendParams:d}=await this.jupiterService.buildJupAndUpdateTxSendParams(a,r),{tx:c,requiredMessageSigner:u}=await this.bridgeTxService.buildRawTransactionSend(a,d);if(!s)throw new Xe("Swap tx is absent");return{tx:await Fo(this.connection,s,c),requiredMessageSigner:u}}async buildTxWithAbrPayment(a,r){return this.payerWithTokenService.buildRawTransactionSend(a,r)}send(a){throw new E}addPoolAddress(a,r){return{...r,poolAddress:a.sourceToken.poolAddress}}};b();C();y();import{Address as dr,contract as jP}from"@stellar/stellar-sdk";import{Big as lc}from"big.js";b();C();y();import{contract as n}from"@stellar/stellar-sdk";var Ac=n.Spec,gc=n.Client;var Mn=class extends gc{constructor(a){super(new Ac(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Mi=class extends Se{constructor(a,r,s){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=s}chainType="SRB";async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api);return await this.buildRawTransactionSendFromParams(r)}async buildRawTransactionSendFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:u,toAccountAddress:p,toTokenAddress:I,fee:h,gasFeePaymentMethod:R,extraGas:B}=a,W=h;B&&(W=lc(W).plus(B).toFixed());let N=this.getContract(Mn,s,d),Z;switch(R){case"native":Z=await N.swap_and_bridge({sender:d,token:dr.contract(Y.from(c)).toString(),amount:BigInt(r),recipient:Y.from(p),destination_chain_id:+u,receive_token:Y.from(I),nonce:mt(),gas_amount:BigInt(W),fee_token_amount:BigInt(0)});break;case"stablecoin":Z=await N.swap_and_bridge({sender:d,token:dr.contract(Y.from(c)).toString(),amount:BigInt(r),recipient:Y.from(p),destination_chain_id:+u,receive_token:Y.from(I),nonce:mt(),gas_amount:BigInt(0),fee_token_amount:BigInt(W)});break;case"abr":throw new G("SRB bridge does not support ABR payment method");default:return se(R,"Unhandled FeePaymentMethod")}return Z.toXDR()}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toAccountAddress:u,toTokenAddress:p,minimumReceiveAmount:I}=a;return(await this.getContract(Mn,s,d).swap({sender:d,amount:BigInt(r),token:dr.contract(Y.from(c)).toBuffer(),receive_token:Y.from(p),recipient:u,receive_amount_min:BigInt(I)})).toXDR()}send(a){throw new E}getContract(a,r,s){let d={publicKey:s,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new a(d)}};b();C();y();import{ClarigenClient as pc,contractFactory as Vo}from"@clarigen/core";import{createNetwork as mc}from"@stacks/network";import{makeRandomPrivKey as Po,makeUnsignedContractCall as So,parseContractId as bc,PostConditionMode as Lo,privateKeyToPublic as ko}from"@stacks/transactions";b();C();y();var st={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"}};b();C();y();function Wt(o){if(!o.originTokenAddress)throw new G("STX token must contain 'originTokenAddress'");let[i,a]=o.originTokenAddress.split("::");if(!a)throw new G("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return a}b();C();y();import{parseContractId as uc}from"@stacks/transactions";function ft(o,i,a,r,s){let[d,c]=uc(r);if(!d||!c)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:a,condition:i,asset:`${d}.${c}::${s}`,amount:o}}function cr(o,i,a){return{type:"stx-postcondition",address:a,condition:i,amount:o}}var ji=class extends Se{constructor(a,r,s){super();this.nodeRpcUrl=a;this.params=r;this.api=s;let d=mc({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new pc(d,this.params.stxHeroApiKey)}chainType="STX";client;send(a){throw new E}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api),{contractAddress:s,messenger:d,toChainId:c,toAccountAddress:u,toTokenAddress:p}=r,I=BigInt(r.amount),h=ft(I,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,Wt(a.sourceToken)),R=cr(0,"gte",a.sourceToken.bridgeAddress),B=[h,R],W=BigInt(r.fee);r.extraGas&&(W=W+BigInt(r.extraGas));let N,Z;switch(r.gasFeePaymentMethod){case"native":{N=0n,Z=W;let ce=cr(W,"lte",a.fromAccountAddress);B.push(ce);break}case"stablecoin":{N=W,Z=0n;break}case"abr":throw new G("STX bridge does not support ABR payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[V]=bc(s),S=Vo(st.bridge,s),{contractAddress:T,contractName:k,functionName:L,functionArgs:H}=S.swapAndBridge({ftRef:a.sourceToken.tokenAddress,poolRef:a.sourceToken.poolAddress,messengerRef:`${V}.messenger`,gasOracleRef:`${V}.gas-oracle`,amount:I,recipient:Uint8Array.from(u),destinationChainId:c,receiveToken:Uint8Array.from(p),nonce:Uint8Array.from(pt()),messengerId:d,feeNativeAmount:Z,feeTokenAmount:N}),J=Po(),ie=ko(J),ge={contractAddress:T,contractName:k,functionName:L,functionArgs:H,publicKey:ie,validateWithAbi:!0,network:this.client.network,postConditions:B,postConditionMode:Lo.Deny};return(await So(ge)).serialize()}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a),s=BigInt(r.amount),d=BigInt(r.minimumReceiveAmount),c=a.sourceToken.bridgeAddress,u=Vo(st.bridge,c),{contractAddress:p,contractName:I,functionName:h,functionArgs:R}=u.swap({amount:s,sendPoolRef:a.sourceToken.poolAddress,sendFtRef:a.sourceToken.tokenAddress,receivePoolRef:a.destinationToken.poolAddress,receiveFtRef:a.destinationToken.tokenAddress,recipient:a.toAccountAddress,receiveAmountMin:d}),B=Po(),W=ko(B),N=ft(s,"lte",a.fromAccountAddress,a.sourceToken.tokenAddress,Wt(a.sourceToken)),Z=ft(d,"gte",a.destinationToken.poolAddress,a.destinationToken.tokenAddress,Wt(a.destinationToken)),V={contractAddress:p,contractName:I,functionName:h,functionArgs:R,publicKey:W,validateWithAbi:!0,network:this.client.network,postConditions:[N,Z],postConditionMode:Lo.Deny};return(await So(V)).serialize()}};b();C();y();import{SuiClient as Fc}from"@mysten/sui/client";import{coinWithBalance as ve,Transaction as vr}from"@mysten/sui/transactions";import{SUI_CLOCK_OBJECT_ID as qo}from"@mysten/sui/utils";import{Big as Rr}from"big.js";var Yr=at(Lt());b();C();y();var Tt=at(Lt());Le();function jo(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:i,arguments:[Q(o,a.bridge),Q(o,a.coin),nt(o,a.receiveAmountMin,"u64")]})}function Jo(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.userDeposit),Q(o,a.coin)]})}function zo(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.userDeposit),nt(o,a.amountLp,"u64")]})}function xo(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.userDeposit)]})}function Oo(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[i],arguments:[Q(o,a)]})}function gr(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.messenger),Q(o,a.wormholeState),Q(o,a.theClock),Q(o,a.gasOracle),Q(o,a.amount),Q(o,a.recipient),nt(o,a.destinationChainId,"u8"),Q(o,a.receiveToken),nt(o,a.nonce,"u256"),Q(o,a.feeSuiCoin),Q(o,a.feeTokenCoin)]})}function Qo(o,i){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[i],arguments:[]})}function lr(o,i,a){return o.moveCall({target:`${Tt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[i],arguments:[Q(o,a.bridge),Q(o,a.messenger),Q(o,a.gasOracle),Q(o,a.amount),Q(o,a.recipient),nt(o,a.destinationChainId,"u8"),Q(o,a.receiveToken),nt(o,a.nonce,"u256"),Q(o,a.feeSuiCoin),Q(o,a.feeTokenCoin)]})}var es=at(pr());b();C();y();var Uo=at(pr());Le();function mr(o,i,a){return o.moveCall({target:`${Uo.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[i],arguments:[Q(o,a.cctpBridge),Q(o,a.gasOracle),Q(o,a.tokenMessengerMinterState),Q(o,a.messageTransmitterState),Q(o,a.treasury),Q(o,a.denyList),Q(o,a.amount),Q(o,a.feeSuiCoin),Q(o,a.feeTokenCoin),nt(o,a.destinationChainId,"u8"),Q(o,a.recipient),Q(o,a.recipientWalletAddress)]})}var ts=at(yr());b();C();y();var $o=at(yr());b();C();y();b();C();y();Le();import{bcs as kt}from"@mysten/sui/bcs";import{fromHEX as Yc,toHEX as Bc}from"@mysten/sui/utils";b();C();y();import{bcs as Rc}from"@mysten/sui/bcs";Le();var Cr=class o{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(i,a){this.$fullTypeName=re(this.$typeName,...i),this.$typeArgs=i,this.elements=a}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs(jn(i)),fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),new:a=>new o([K(i)],a),kind:"VectorClassReified"}}static get r(){return o.reified}static get bcs(){return Rc.vector}static fromFields(i,a){return o.reified(i).new(a.map(r=>ne(i,r)))}static fromFieldsWithTypes(i,a){return o.reified(i).new(a.map(r=>$(i,r)))}static fromBcs(i,a){return o.fromFields(i,o.bcs(jn(i)).parse(a))}toJSONField(){return this.elements.map(i=>$t(this.$typeArgs[0],i))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new(a.map(r=>q(i,r)))}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a vector json object");return o.fromJSONField(i,a.elements)}};function un(o){return Cr.r(o)}function he(o){return typeof o=="string"?{phantomType:o,kind:"PhantomReified"}:{phantomType:o.fullTypeName,kind:"PhantomReified"}}var Wc=kt.bytes(32).transform({input:o=>Yc(o),output:o=>Bc(o)});function jn(o){switch(o){case"bool":return kt.bool();case"u8":return kt.u8();case"u16":return kt.u16();case"u32":return kt.u32();case"u64":return kt.u64();case"u128":return kt.u128();case"u256":return kt.u256();case"address":return Wc;default:return o.bcs}}function K(o){switch(o){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return o}switch(o.kind){case"PhantomReified":return o.phantomType;case"StructClassReified":return o.fullTypeName;case"VectorClassReified":return o.fullTypeName}throw new Error("unreachable")}function ne(o,i){switch(o){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return`0x${i}`}if(o.kind==="VectorClassReified")return o.fromFields(i).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(i.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(i.url.bytes)).toString();case"0x2::object::ID":return`0x${i.bytes}`;case"0x2::object::UID":return`0x${i.id.bytes}`;case"0x1::option::Option":return i.vec.length===0?null:o.fromFields(i).vec[0];default:return o.fromFields(i)}}function $(o,i){switch(o){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(o.kind==="VectorClassReified")return o.fromFieldsWithTypes(i).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return i;case"0x2::object::UID":return i.id;case"0x2::balance::Balance":return o.fromFields({value:BigInt(i)});case"0x1::option::Option":return i===null?null:$(o.reifiedTypeArgs[0],i);default:return o.fromFieldsWithTypes(i)}}function dt(o,i,a){if(a.length!==i.length)throw new Error(`provided item has mismatching number of type argments ${o} (expected ${a.length}, got ${i.length}))`);for(let r=0;r<i.length;r++)if(x(i[r])!==x(K(a[r])))throw new Error(`provided item has mismatching type argments ${o} (expected ${K(a[r])}, got ${i[r]}))`)}function Ct(o,i){let{typeArgs:a}=Je(o.type);dt(o.type,a,i)}function $t(o,i){let{typeName:a,typeArgs:r}=Je(o);switch(a){case"bool":return i;case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return i.toString();case"address":case"signer":return i;case"vector":return i.map(s=>$t(r[0],s));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:$t(r[0],i);default:return i.toJSONField()}}function q(o,i){switch(o){case"bool":case"u8":case"u16":case"u32":return i;case"u64":case"u128":case"u256":return BigInt(i);case"address":return i}if(o.kind==="VectorClassReified")return o.fromJSONField(i).elements;switch(o.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return i;case"0x1::option::Option":return i===null?null:q(o.reifiedTypeArgs[0],i);default:return o.fromJSONField(i)}}Le();b();C();y();var Ji="0x1";import{bcs as xh}from"@mysten/sui/bcs";import{fromB64 as Qh}from"@mysten/sui/utils";b();C();y();Le();import{bcs as Ir}from"@mysten/sui/bcs";import{fromB64 as fc}from"@mysten/sui/utils";function zi(o){return o=x(o),o===`${Ji}::string::String`}var xi=class o{__StructClass=!0;static get $typeName(){return`${Ji}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.bytes=a.bytes}static reified(){return{typeName:o.$typeName,fullTypeName:re(o.$typeName),typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromBcs(i),bcs:o.bcs,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,a)=>o.fetch(i,a),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return he(o.reified())}static get p(){return o.phantom()}static get bcs(){return Ir.struct("String",{bytes:Ir.vector(Ir.u8())})}static fromFields(i){return o.reified().new({bytes:ne(un("u8"),i.bytes)})}static fromFieldsWithTypes(i){if(!zi(i.type))throw new Error("not a String type");return o.reified().new({bytes:$(un("u8"),i.fields.bytes)})}static fromBcs(i){return o.fromFields(o.bcs.parse(i))}toJSONField(){return{bytes:$t("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return o.reified().new({bytes:q(un("u8"),i.bytes)})}static fromJSON(i){if(i.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return o.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!zi(i.type))throw new Error(`object at ${i.fields.id} is not a String object`);return o.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!zi(i.bcs.type))throw new Error("object at is not a String object");return o.fromBcs(fc(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a){let r=await i.getObject({id:a,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching String object at id ${a}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!zi(r.data.bcs.type))throw new Error(`object at id ${a} is not a String object`);return o.fromSuiObjectData(r.data)}};Le();b();C();y();Le();b();C();y();var Ht="0x2";import{bcs as hr}from"@mysten/sui/bcs";import{fromB64 as _o,fromHEX as Tc,toHEX as wc}from"@mysten/sui/utils";function Oi(o){return o=x(o),o===`${Ht}::object::ID`}var qt=class o{__StructClass=!0;static get $typeName(){return`${Ht}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;bytes;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.bytes=a.bytes}static reified(){return{typeName:o.$typeName,fullTypeName:re(o.$typeName),typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromBcs(i),bcs:o.bcs,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,a)=>o.fetch(i,a),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return he(o.reified())}static get p(){return o.phantom()}static get bcs(){return hr.struct("ID",{bytes:hr.bytes(32).transform({input:i=>Tc(i),output:i=>wc(i)})})}static fromFields(i){return o.reified().new({bytes:ne("address",i.bytes)})}static fromFieldsWithTypes(i){if(!Oi(i.type))throw new Error("not a ID type");return o.reified().new({bytes:$("address",i.fields.bytes)})}static fromBcs(i){return o.fromFields(o.bcs.parse(i))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return o.reified().new({bytes:q("address",i.bytes)})}static fromJSON(i){if(i.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return o.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Oi(i.type))throw new Error(`object at ${i.fields.id} is not a ID object`);return o.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Oi(i.bcs.type))throw new Error("object at is not a ID object");return o.fromBcs(_o(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a){let r=await i.getObject({id:a,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching ID object at id ${a}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Oi(r.data.bcs.type))throw new Error(`object at id ${a} is not a ID object`);return o.fromSuiObjectData(r.data)}};function Qi(o){return o=x(o),o===`${Ht}::object::UID`}var it=class o{__StructClass=!0;static get $typeName(){return`${Ht}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.id=a.id}static reified(){return{typeName:o.$typeName,fullTypeName:re(o.$typeName),typeArgs:[],isPhantom:o.$isPhantom,reifiedTypeArgs:[],fromFields:i=>o.fromFields(i),fromFieldsWithTypes:i=>o.fromFieldsWithTypes(i),fromBcs:i=>o.fromBcs(i),bcs:o.bcs,fromJSONField:i=>o.fromJSONField(i),fromJSON:i=>o.fromJSON(i),fromSuiParsedData:i=>o.fromSuiParsedData(i),fromSuiObjectData:i=>o.fromSuiObjectData(i),fetch:async(i,a)=>o.fetch(i,a),new:i=>new o([],i),kind:"StructClassReified"}}static get r(){return o.reified()}static phantom(){return he(o.reified())}static get p(){return o.phantom()}static get bcs(){return hr.struct("UID",{id:qt.bcs})}static fromFields(i){return o.reified().new({id:ne(qt.reified(),i.id)})}static fromFieldsWithTypes(i){if(!Qi(i.type))throw new Error("not a UID type");return o.reified().new({id:$(qt.reified(),i.fields.id)})}static fromBcs(i){return o.fromFields(o.bcs.parse(i))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i){return o.reified().new({id:q(qt.reified(),i.id)})}static fromJSON(i){if(i.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return o.fromJSONField(i)}static fromSuiParsedData(i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!Qi(i.type))throw new Error(`object at ${i.fields.id} is not a UID object`);return o.fromFieldsWithTypes(i)}static fromSuiObjectData(i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!Qi(i.bcs.type))throw new Error("object at is not a UID object");return o.fromBcs(_o(i.bcs.bcsBytes))}if(i.content)return o.fromSuiParsedData(i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a){let r=await i.getObject({id:a,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching UID object at id ${a}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Qi(r.data.bcs.type))throw new Error(`object at id ${a} is not a UID object`);return o.fromSuiObjectData(r.data)}};function ct(o,i){return o.moveCall({target:`${$o.PUBLISHED_AT}::bytes32::from_hex`,arguments:[nt(o,i,`${xi.$typeName}`)]})}b();C();y();async function It(o,i,a=[]){let r=await o(i),s=a.concat(r.data);return r.hasNextPage&&r.nextCursor?It(o,r.nextCursor,s):s}var pn=class extends Se{constructor(a,r){super();this.nodeRpcUrlsConfig=a;this.api=r;this.client=new Fc({url:a.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new G("Method send not implemented.")}async buildRawTransactionSwap(a){let r=a.sourceToken.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");(0,Yr.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin);let s=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(s,r)}async buildRawTransactionSwapFromParams(a,r){let{amount:s,fromAccountAddress:d,fromTokenAddress:c,toTokenAddress:u,minimumReceiveAmount:p}=a,I=new vr;I.setSender(d);let h={bridge:r.bridgeObjectAddress,coin:ve({balance:BigInt(s),type:c}),receiveAmountMin:BigInt(p)},R=jo(I,[c,u],h),B=await It(W=>this.client.getCoins({owner:a.toAccountAddress,coinType:u,cursor:W}));return B.length===0||!B[0]?I.transferObjects([R],a.toAccountAddress):I.mergeCoins(B[0].coinObjectId,[R]),await I.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(a,r,s){let d=vr.from(a);return this.buildRawTransactionSendFromTx(s,d,r)}async buildRawTransactionSend(a){return this.buildRawTransactionSendFromTx(a,new vr)}async buildRawTransactionSendFromTx(a,r,s){let d=await Qe(this.chainType,a,this.api),{messenger:c}=d,u=a.sourceToken.suiAddresses;if(!u)throw new G("SUI token must contain 'suiAddresses'");switch((0,Yr.setAddress)(u.bridgeAddress,u.bridgeAddressOrigin),(0,ts.setAddress)(u.utilsAddress),c){case 1:return this.buildRawTransactionAllbridgeSend(d,u,r,s);case 2:return this.buildRawTransactionWormholeSend(d,u,r,s);case 3:case 4:return this.buildRawTransactionCctpSend(a,d,u,r,s);case 5:throw new Pe("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(a,r,s,d){let{amount:c,fromAccountAddress:u,fromTokenAddress:p,toChainId:I,toAccountAddress:h,toTokenAddress:R,fee:B,gasFeePaymentMethod:W,extraGas:N}=a,Z=B;switch(N&&(Z=Rr(Z).plus(N).toFixed()),s.setSender(u),W){case"native":{let V=Z==="0"?ve({balance:BigInt(Z),useGasCoin:!1}):ve({balance:BigInt(Z)}),S={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:d??ve({balance:BigInt(c),type:p}),destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:ve({balance:BigInt(0),type:p}),feeSuiCoin:V};lr(s,p,S);break}case"stablecoin":{let V=BigInt(c)-BigInt(Z),S,T;if(d){let[L]=s.splitCoins(d,[Z]);S=d,T=L}else S=ve({balance:V,type:p}),T=ve({balance:BigInt(Z),type:p});let k={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:S,destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:T,feeSuiCoin:ve({balance:BigInt(0),useGasCoin:!1})};lr(s,p,k);break}case"abr":throw new G("SUI bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionWormholeSend(a,r,s,d){let{amount:c,fromAccountAddress:u,fromTokenAddress:p,toChainId:I,toAccountAddress:h,toTokenAddress:R,fee:B,gasFeePaymentMethod:W,extraGas:N}=a,Z=B;switch(N&&(Z=Rr(Z).plus(N).toFixed()),s.setSender(u),W){case"native":{let V=Z==="0"?ve({balance:BigInt(Z),useGasCoin:!1}):ve({balance:BigInt(Z)}),S={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:qo,amount:d??ve({balance:BigInt(c),type:p}),destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:ve({balance:BigInt(0),type:p}),feeSuiCoin:V};gr(s,p,S);break}case"stablecoin":{let V=BigInt(c)-BigInt(Z),S,T;if(d){let[L]=s.splitCoins(d,[Z]);S=d,T=L}else S=ve({balance:V,type:p}),T=ve({balance:BigInt(Z),type:p});let k={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:qo,amount:S,destinationChainId:I,nonce:mt(),recipient:ct(s,rt(h)),receiveToken:ct(s,rt(R)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:T,feeSuiCoin:ve({balance:BigInt(0),useGasCoin:!1})};gr(s,p,k);break}case"abr":throw new G("SUI bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}async buildRawTransactionCctpSend(a,r,s,d,c){let{amount:u,fromAccountAddress:p,fromTokenAddress:I,toChainId:h,toAccountAddress:R,fee:B,gasFeePaymentMethod:W,extraGas:N}=r;(0,es.setAddress)(s.cctpAddress,s.cctpAddressOrigin);let Z=B;N&&(Z=Rr(Z).plus(N).toFixed()),d.setSender(p);let V=ct(d,rt(R)),S;if(a.destinationToken.chainType==="SOLANA"){let T=await Fi(this.chainType,a.toAccountAddress,a.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));S=ct(d,rt(T))}else S=V;switch(W){case"native":{let T=Z==="0"?ve({balance:BigInt(Z),useGasCoin:!1}):ve({balance:BigInt(Z)}),k={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:c??ve({balance:BigInt(u),type:I}),destinationChainId:h,recipient:S,recipientWalletAddress:V,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:ve({balance:BigInt(0),type:I}),feeSuiCoin:T};mr(d,I,k);break}case"stablecoin":{let T=BigInt(u)-BigInt(Z),k,L;if(c){let[J]=d.splitCoins(c,[Z]);k=c,L=J}else k=ve({balance:T,type:I}),L=ve({balance:BigInt(Z),type:I});let H={cctpBridge:s.cctpObjectAddress,tokenMessengerMinterState:s.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:s.cctpMessageTransmitterStateObjectAddress,treasury:s.cctpTreasuryObjectAddress,denyList:s.cctpDenyListObjectAddress,amount:k,destinationChainId:h,recipient:S,recipientWalletAddress:V,gasOracle:s.gasOracleObjectAddress,feeTokenCoin:L,feeSuiCoin:ve({balance:BigInt(0),useGasCoin:!1})};mr(d,I,H);break}case"abr":throw new G("SUI bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}return await d.toJSON({client:this.client})}};b();C();y();import{Big as Gc}from"big.js";b();C();y();b();C();y();import Nc from"bn.js";function Ki(o){return"0x"+new Nc(o).toString("hex")}function ns(o){return new Promise(i=>setTimeout(()=>i(),o))}async function Ui(o,i){let a=await o.trx.sign(i);if(!a.signature)throw new on("Transaction was not signed properly");let s=(await o.trx.sendRawTransaction(a)).transaction.txID;return await Zc(o,s),{txId:s}}async function Zc(o,i,a=1e4){let r=Date.now();for(;;){if(Date.now()-r>a)throw new Nn("Transaction not found");let s=await o.trx.getUnconfirmedTransactionInfo(i);if(!s?.receipt){await ns(2e3);continue}if(s.receipt.result==="SUCCESS")return s;throw new Nn(`Transaction status is ${s.receipt.result}`)}}var Jn=class extends Se{constructor(a,r){super();this.tronWeb=a;this.api=r}chainType="TRX";async send(a){let r=await Qe(this.chainType,a,this.api),s=await this.buildRawTransactionSendFromParams(a,r);return await Ui(this.tronWeb,s)}async buildRawTransactionSwap(a){let r=Ee(this.chainType,a);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(a){let{amount:r,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toAccountAddress:u,toTokenAddress:p,minimumReceiveAmount:I}=a,h=[{type:"uint256",value:r},{type:"bytes32",value:c},{type:"bytes32",value:p},{type:"address",value:u},{type:"uint256",value:I}];return this.buildRawTransaction(s,"swap(uint256,bytes32,bytes32,address,uint256)",h,"0",d)}async buildRawTransactionSend(a){let r=await Qe(this.chainType,a,this.api);return this.buildRawTransactionSendFromParams(a,r)}async buildRawTransactionSendFromParams(a,r){let{amount:s,contractAddress:d,fromAccountAddress:c,fromTokenAddress:u,toChainId:p,toAccountAddress:I,toTokenAddress:h,messenger:R,fee:B,gasFeePaymentMethod:W,extraGas:N,extraGasDest:Z}=r,V=B;N&&(V=Gc(V).plus(N).toFixed());let S=mt().toString(),T,k,L;switch(R){case 3:case 4:switch(W){case"native":{T=[{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:0}],k=V;break}case"stablecoin":{T=[{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:V}],k="0";break}case"abr":throw new G("TRX bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}L="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(W){case"native":{T=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:0},{type:"uint256",value:Z??"0"},{type:"uint256",value:"10"}],k=V;break}case"stablecoin":{T=[{type:"address",value:a.sourceToken.tokenAddress},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"uint256",value:V},{type:"uint256",value:Z??"0"},{type:"uint256",value:"10"}],k="0";break}case"abr":throw new G("TRX bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}L="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:switch(W){case"native":{T=[{type:"bytes32",value:u},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"bytes32",value:h},{type:"uint256",value:S},{type:"uint8",value:R},{type:"uint256",value:0}],k=V;break}case"stablecoin":{T=[{type:"bytes32",value:u},{type:"uint256",value:s},{type:"bytes32",value:I},{type:"uint256",value:p},{type:"bytes32",value:h},{type:"uint256",value:S},{type:"uint8",value:R},{type:"uint256",value:V}],k="0";break}case"abr":throw new G("TRX bridge does not support ABR payment method");default:return se(W,"Unhandled FeePaymentMethod")}L="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(d,L,T,k,c)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}};var Di=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s;this.rawTxBuilder=new Ni(i,a,r,s)}rawTxBuilder;async getAllowance(i,a){let r,s;a?(r=i,s=a):s=i;let d=Ln(s.token,s.messenger,s.gasFeePaymentMethod);return await this.tokenService.getAllowance({...s,spender:d},r)}async checkAllowance(i,a){let r,s;a?(r=i,s=a):s=i;let d=Ln(s.token,s.messenger,s.gasFeePaymentMethod);return this.tokenService.checkAllowance({...s,spender:d},r)}async approve(i,a){let r=Ln(a.token,a.messenger,a.gasFeePaymentMethod);return this.tokenService.approve(i,{...a,spender:r})}async send(i,a){return ae(a.amount),te("amount",a.amount,a.sourceToken.decimals),Zi(a.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).send(a)}};function Ln(o,i=1,a="native"){if(a==="abr"){if(o.abrPayer)return o.abrPayer.payerAddress;throw new G("Token must contain 'abrPayer' for ABR payment method")}switch(i){case 3:if(o.cctpAddress)return o.cctpAddress;throw new Ve("Such route does not support CCTP protocol");case 4:if(o.cctpV2Address)return o.cctpV2Address;throw new Ve("Such route does not support CCTP V2 protocol");case 5:if(o.oftBridgeAddress)return o.oftBridgeAddress;throw new Pe("Such route does not support OFT protocol");case 1:case 2:return o.bridgeAddress}}function Zi(o,i,a,r,s){switch(U.getChainProperty(o).chainType){case"EVM":{if(s)return new Sn(s,i,a);{let d=a.getNodeRpcUrl(o);return new Sn(new Vc(d),i,a)}}case"TRX":{if(s)return new Jn(s,i);{let d=a.getNodeRpcUrl(o);return new Jn(new Xc({fullHost:d,solidityNode:d,eventServer:d}),i)}}case"SOLANA":return new Hi(a.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},i);case"SRB":return new Mi(a,r,i);case"SUI":return new pn(a,i);case"ALG":if(s){let d=s,c=is.fromClients({algod:d});return new Pn(c,i)}else{let d=a.getNodeRpcUrl(o),c=is.fromConfig({algodConfig:{server:d}});return new Pn(c,i)}case"STX":{let d=a.getNodeRpcUrl(o);return new ji(d,r,i)}}}b();C();y();import{AlgorandClient as us}from"@algorandfoundation/algokit-utils";import{Big as aA}from"big.js";import rA from"timed-cache";import{TronWeb as oA}from"tronweb";import{FMT_BYTES as sA,FMT_NUMBER as dA,Web3 as cA}from"web3";b();C();y();import{Big as wt}from"big.js";function as(o,i,a,r,s){let d=O(o,3),c=wt(d),u=wt(a),p=wt(r).plus(s),I,h;if(u.eq(0)||p.eq(0)){let B=c.div(2);I=wt(r).plus(B),h=wt(s).plus(B)}else I=wt(r).plus(c.mul(r).div(p)),h=wt(s).plus(c.mul(s).div(p));return wt(ro(i,I.toFixed(),h.toFixed())).minus(u).toFixed()}function rs(o){let i=O(o,3);return wt(i).round().toFixed()}b();C();y();import{assignGroupID as Br,bytesToBigInt as Lc,OnApplicationComplete as os}from"algosdk";b();C();y();import{getArc56ReturnValue as Pc}from"@algorandfoundation/algokit-utils/types/app-arc56";import{AppClient as Ei}from"@algorandfoundation/algokit-utils/types/app-client";import{AppFactory as FR}from"@algorandfoundation/algokit-utils/types/app-factory";import{encodeAddress as Sc}from"algosdk";var _i={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
2
2
|
accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"swapFromVUsd",args:[{type:"address",name:"user",desc:"The address of the recipient."},{type:"uint64",name:"amount",desc:"The amount of vUSD to swap."},{type:"uint64",name:"receiveAmountMin",desc:`The minimum amount of tokens required to be received during the swap, otherwise the
|
|
3
3
|
transaction reverts.`},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
|
|
4
4
|
accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"setFeeShare",args:[{type:"uint64",name:"feeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"adjustTotalLpAmount",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"setBalanceRatioMinBP",args:[{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRouter",args:[{type:"address",name:"router"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimRewards",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]}],recommendations:{}},{name:"setAdminFeeShare",args:[{type:"uint64",name:"adminFeeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimAdminFee",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"pendingReward",args:[{type:"address",name:"user"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],desc:`4AD - D = 4A(x + y) - (D\xB3 / 4xy)
|
|
5
5
|
X - is value of real stable token
|
|
6
|
-
Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},$i=class{constructor(i){this.value=i}asByteArray(){return this.value}asString(){return this.value!==void 0?Y.from(this.value).toString("utf-8"):void 0}},M=class o{static get create(){return{_resolveByMethod(i){switch(i.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return o.create.createApplication(i)}throw new Error("Unknown ' + verb + ' method")},createApplication(i){return{...i,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.owner,i.args.router,i.args.a,i.args.asset,i.args.feeShareBp,i.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(i){return{...i,method:"optInToApplication()void",args:Array.isArray(i.args)?i.args:[]}},deposit(i){return{...i,method:"deposit(axfer,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(i){return{...i,method:"closeOutOfApplication(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.budget]}}}}static optInAsset(i){return{...i,method:"optInAsset()void",args:Array.isArray(i.args)?i.args:[]}}static deposit(i){return{...i,method:"deposit(axfer,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.budget]}}static withdraw(i){return{...i,method:"withdraw(uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amountLp,i.args.budget]}}static swapToVUsd(i){return{...i,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(i.args)?i.args:[i.args.user,i.args.amount,i.args.zeroFee]}}static swapFromVUsd(i){return{...i,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(i.args)?i.args:[i.args.user,i.args.amount,i.args.receiveAmountMin,i.args.zeroFee]}}static setFeeShare(i){return{...i,method:"setFeeShare(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.feeShareBp]}}static adjustTotalLpAmount(i){return{...i,method:"adjustTotalLpAmount()void",args:Array.isArray(i.args)?i.args:[]}}static setBalanceRatioMinBp(i){return{...i,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.balanceRatioMinBp]}}static stopDeposit(i){return{...i,method:"stopDeposit()void",args:Array.isArray(i.args)?i.args:[]}}static startDeposit(i){return{...i,method:"startDeposit()void",args:Array.isArray(i.args)?i.args:[]}}static stopWithdraw(i){return{...i,method:"stopWithdraw()void",args:Array.isArray(i.args)?i.args:[]}}static startWithdraw(i){return{...i,method:"startWithdraw()void",args:Array.isArray(i.args)?i.args:[]}}static setStopAuthority(i){return{...i,method:"setStopAuthority(address)void",args:Array.isArray(i.args)?i.args:[i.args.stopAuthority]}}static setRouter(i){return{...i,method:"setRouter(address)void",args:Array.isArray(i.args)?i.args:[i.args.router]}}static claimRewards(i){return{...i,method:"claimRewards()void",args:Array.isArray(i.args)?i.args:[]}}static setAdminFeeShare(i){return{...i,method:"setAdminFeeShare(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.adminFeeShareBp]}}static claimAdminFee(i){return{...i,method:"claimAdminFee()void",args:Array.isArray(i.args)?i.args:[]}}static pendingReward(i){return{...i,method:"pendingReward(address)uint64",args:Array.isArray(i.args)?i.args:[i.args.user]}}static transferOwnership(i){return{...i,method:"transferOwnership(address)void",args:Array.isArray(i.args)?i.args:[i.args.newOwner]}}};var qi=class o{appClient;constructor(i){this.appClient=i instanceof Ei?i:new Ei({...i,appSpec:_i})}decodeReturnValue(i,a){return a!==void 0?Vc(a,this.appClient.getABIMethod(i),_i.structs):void 0}static async fromCreatorAndName(i){return new o(await Ei.fromCreatorAndName({...i,appSpec:_i}))}static async fromNetwork(i){return new o(await Ei.fromNetwork({...i,appSpec:_i}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(i={args:[]})=>this.appClient.params.optIn(M.optIn.optInToApplication(i)),deposit:i=>this.appClient.params.optIn(M.optIn.deposit(i))},closeOut:{closeOutOfApplication:(i={args:[void 0]})=>this.appClient.params.closeOut(M.closeOut.closeOutOfApplication(i))},clearState:i=>this.appClient.params.bare.clearState(i),optInAsset:(i={args:[]})=>this.appClient.params.call(M.optInAsset(i)),deposit:i=>this.appClient.params.call(M.deposit(i)),withdraw:i=>this.appClient.params.call(M.withdraw(i)),swapToVUsd:i=>this.appClient.params.call(M.swapToVUsd(i)),swapFromVUsd:i=>this.appClient.params.call(M.swapFromVUsd(i)),setFeeShare:i=>this.appClient.params.call(M.setFeeShare(i)),adjustTotalLpAmount:(i={args:[]})=>this.appClient.params.call(M.adjustTotalLpAmount(i)),setBalanceRatioMinBp:i=>this.appClient.params.call(M.setBalanceRatioMinBp(i)),stopDeposit:(i={args:[]})=>this.appClient.params.call(M.stopDeposit(i)),startDeposit:(i={args:[]})=>this.appClient.params.call(M.startDeposit(i)),stopWithdraw:(i={args:[]})=>this.appClient.params.call(M.stopWithdraw(i)),startWithdraw:(i={args:[]})=>this.appClient.params.call(M.startWithdraw(i)),setStopAuthority:i=>this.appClient.params.call(M.setStopAuthority(i)),setRouter:i=>this.appClient.params.call(M.setRouter(i)),claimRewards:(i={args:[]})=>this.appClient.params.call(M.claimRewards(i)),setAdminFeeShare:i=>this.appClient.params.call(M.setAdminFeeShare(i)),claimAdminFee:(i={args:[]})=>this.appClient.params.call(M.claimAdminFee(i)),pendingReward:i=>this.appClient.params.call(M.pendingReward(i)),transferOwnership:i=>this.appClient.params.call(M.transferOwnership(i))};createTransaction={optIn:{optInToApplication:(i={args:[]})=>this.appClient.createTransaction.optIn(M.optIn.optInToApplication(i)),deposit:i=>this.appClient.createTransaction.optIn(M.optIn.deposit(i))},closeOut:{closeOutOfApplication:(i={args:[void 0]})=>this.appClient.createTransaction.closeOut(M.closeOut.closeOutOfApplication(i))},clearState:i=>this.appClient.createTransaction.bare.clearState(i),optInAsset:(i={args:[]})=>this.appClient.createTransaction.call(M.optInAsset(i)),deposit:i=>this.appClient.createTransaction.call(M.deposit(i)),withdraw:i=>this.appClient.createTransaction.call(M.withdraw(i)),swapToVUsd:i=>this.appClient.createTransaction.call(M.swapToVUsd(i)),swapFromVUsd:i=>this.appClient.createTransaction.call(M.swapFromVUsd(i)),setFeeShare:i=>this.appClient.createTransaction.call(M.setFeeShare(i)),adjustTotalLpAmount:(i={args:[]})=>this.appClient.createTransaction.call(M.adjustTotalLpAmount(i)),setBalanceRatioMinBp:i=>this.appClient.createTransaction.call(M.setBalanceRatioMinBp(i)),stopDeposit:(i={args:[]})=>this.appClient.createTransaction.call(M.stopDeposit(i)),startDeposit:(i={args:[]})=>this.appClient.createTransaction.call(M.startDeposit(i)),stopWithdraw:(i={args:[]})=>this.appClient.createTransaction.call(M.stopWithdraw(i)),startWithdraw:(i={args:[]})=>this.appClient.createTransaction.call(M.startWithdraw(i)),setStopAuthority:i=>this.appClient.createTransaction.call(M.setStopAuthority(i)),setRouter:i=>this.appClient.createTransaction.call(M.setRouter(i)),claimRewards:(i={args:[]})=>this.appClient.createTransaction.call(M.claimRewards(i)),setAdminFeeShare:i=>this.appClient.createTransaction.call(M.setAdminFeeShare(i)),claimAdminFee:(i={args:[]})=>this.appClient.createTransaction.call(M.claimAdminFee(i)),pendingReward:i=>this.appClient.createTransaction.call(M.pendingReward(i)),transferOwnership:i=>this.appClient.createTransaction.call(M.transferOwnership(i))};send={optIn:{optInToApplication:async(i={args:[]})=>{let a=await this.appClient.send.optIn(M.optIn.optInToApplication(i));return{...a,return:a.return}},deposit:async i=>{let a=await this.appClient.send.optIn(M.optIn.deposit(i));return{...a,return:a.return}}},closeOut:{closeOutOfApplication:async(i={args:[void 0]})=>{let a=await this.appClient.send.closeOut(M.closeOut.closeOutOfApplication(i));return{...a,return:a.return}}},clearState:i=>this.appClient.send.bare.clearState(i),optInAsset:async(i={args:[]})=>{let a=await this.appClient.send.call(M.optInAsset(i));return{...a,return:a.return}},deposit:async i=>{let a=await this.appClient.send.call(M.deposit(i));return{...a,return:a.return}},withdraw:async i=>{let a=await this.appClient.send.call(M.withdraw(i));return{...a,return:a.return}},swapToVUsd:async i=>{let a=await this.appClient.send.call(M.swapToVUsd(i));return{...a,return:a.return}},swapFromVUsd:async i=>{let a=await this.appClient.send.call(M.swapFromVUsd(i));return{...a,return:a.return}},setFeeShare:async i=>{let a=await this.appClient.send.call(M.setFeeShare(i));return{...a,return:a.return}},adjustTotalLpAmount:async(i={args:[]})=>{let a=await this.appClient.send.call(M.adjustTotalLpAmount(i));return{...a,return:a.return}},setBalanceRatioMinBp:async i=>{let a=await this.appClient.send.call(M.setBalanceRatioMinBp(i));return{...a,return:a.return}},stopDeposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.stopDeposit(i));return{...a,return:a.return}},startDeposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.startDeposit(i));return{...a,return:a.return}},stopWithdraw:async(i={args:[]})=>{let a=await this.appClient.send.call(M.stopWithdraw(i));return{...a,return:a.return}},startWithdraw:async(i={args:[]})=>{let a=await this.appClient.send.call(M.startWithdraw(i));return{...a,return:a.return}},setStopAuthority:async i=>{let a=await this.appClient.send.call(M.setStopAuthority(i));return{...a,return:a.return}},setRouter:async i=>{let a=await this.appClient.send.call(M.setRouter(i));return{...a,return:a.return}},claimRewards:async(i={args:[]})=>{let a=await this.appClient.send.call(M.claimRewards(i));return{...a,return:a.return}},setAdminFeeShare:async i=>{let a=await this.appClient.send.call(M.setAdminFeeShare(i));return{...a,return:a.return}},claimAdminFee:async(i={args:[]})=>{let a=await this.appClient.send.call(M.claimAdminFee(i));return{...a,return:a.return}},pendingReward:async i=>{let a=await this.appClient.send.call(M.pendingReward(i));return{...a,return:a.return}},transferOwnership:async i=>{let a=await this.appClient.send.call(M.transferOwnership(i));return{...a,return:a.return}}};clone(i){return new o(this.appClient.clone(i))}async pendingReward(i){return(await this.appClient.send.call(M.pendingReward(i))).return}state={global:{getAll:async()=>{let i=await this.appClient.state.global.getAll();return{feeShareBp:i.feeShareBP,router:i.router,tokenBalance:i.tokenBalance,vUsdBalance:i.vUsdBalance,balanceRatioMinBp:i.balanceRatioMinBP,reserves:i.reserves,a:i.a,d:i.d,tokenAmountReduce:i.tokenAmountReduce,tokenAmountIncrease:i.tokenAmountIncrease,stopAuthority:i.stopAuthority,canDeposit:i.canDeposit,canWithdraw:i.canWithdraw,asset:i.asset,adminFeeShareBp:i.adminFeeShareBP,totalSupply:i.totalSupply,accRewardPerShareP:new $i(i.accRewardPerShareP),adminFeeAmount:i.adminFeeAmount,owner:i.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new $i(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:i=>{let a=typeof i=="string"?i:Pc(i.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(a).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(a).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(a).getValue("userRewardDebt")}}};newGroup(){let i=this,a=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.optInAsset(d))),s.push(void 0),this},deposit(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.deposit(d))),s.push(void 0),this},withdraw(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.withdraw(d))),s.push(void 0),this},swapToVUsd(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapToVUsd(d))),s.push(c=>i.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",c)),this},swapFromVUsd(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapFromVUsd(d))),s.push(c=>i.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",c)),this},setFeeShare(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setFeeShare(d))),s.push(void 0),this},adjustTotalLpAmount(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.adjustTotalLpAmount(d))),s.push(void 0),this},setBalanceRatioMinBp(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setBalanceRatioMinBp(d))),s.push(void 0),this},stopDeposit(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.stopDeposit(d))),s.push(void 0),this},startDeposit(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.startDeposit(d))),s.push(void 0),this},stopWithdraw(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.stopWithdraw(d))),s.push(void 0),this},startWithdraw(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.startWithdraw(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setStopAuthority(d))),s.push(void 0),this},setRouter(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setRouter(d))),s.push(void 0),this},claimRewards(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.claimRewards(d))),s.push(void 0),this},setAdminFeeShare(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setAdminFeeShare(d))),s.push(void 0),this},claimAdminFee(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.claimAdminFee(d))),s.push(void 0),this},pendingReward(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.pendingReward(d))),s.push(c=>i.decodeReturnValue("pendingReward(address)uint64",c)),this},transferOwnership(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.transferOwnership(d))),s.push(void 0),this},get optIn(){return{optInToApplication:d=>(r=r.then(async()=>a.addAppCallMethodCall(await i.params.optIn.optInToApplication(d))),s.push(void 0),this),deposit:d=>(r=r.then(async()=>a.addAppCallMethodCall(await i.params.optIn.deposit(d))),s.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:d=>(r=r.then(async()=>a.addAppCallMethodCall(await i.params.closeOut.closeOutOfApplication(d))),s.push(void 0),this)}},clearState(d){return r=r.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,c){return r=r.then(()=>a.addTransaction(d,c)),this},async composer(){return await r,a},async simulate(d){await r;let c=await(d?a.simulate(d):a.simulate());return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}},async send(d){await r;let c=await a.send(d);return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}}}}};b();C();y();b();C();y();var Be=class{lpAmount;rewardDebt;constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return z(this.lpAmount,3).toFixed()}earned(i,a){let r=io(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?z(r,a).toFixed():r}};b();C();y();var ke=class{};var zn=class extends ke{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}chainType="ALG";P=48;async buildRawTransactionClaimRewards(a){let r=a.accountAddress,s=BigInt(a.token.tokenAddress),d=BigInt(a.token.poolAddress),c=this.getPool(d),u=this.algorand.newGroup();u.addAppCallMethodCall(await c.params.claimRewards({args:[],sender:r,extraFee:Zt(1),assetReferences:[s]}));let{transactions:p}=await u.buildTransactions();return p=Br(p),Gt(...p)}async buildRawTransactionDeposit(a){let r=a.accountAddress,s=BigInt(a.amount),d=BigInt(a.token.tokenAddress),c=BigInt(a.token.poolAddress),u=this.getPool(c),I=await hi(c,r,this.algorand)?ss.NoOpOC:ss.OptInOC,h=this.algorand.newGroup(),R=await this.algorand.createTransaction.assetTransfer({assetId:d,amount:s,sender:r,receiver:u.appAddress});h.addAppCallMethodCall(await u.params.deposit({args:{assetTransferRef:R},sender:r,onComplete:I,extraFee:Zt(5)}));let{transactions:B}=await h.buildTransactions();return B=Br(B),Gt(...B)}async buildRawTransactionWithdraw(a){let r=a.accountAddress,s=BigInt(a.amount),d=BigInt(a.token.tokenAddress),c=BigInt(a.token.poolAddress),u=this.getPool(c),p=this.algorand.newGroup();p.addAppCallMethodCall(await u.params.withdraw({args:{amountLp:s},sender:r,assetReferences:[d],extraFee:Zt(7)}));let{transactions:I}=await p.buildTransactions();return I=Br(I),Gt(...I)}async getPoolInfoFromChain(a){let s=await this.getPool(BigInt(a.poolAddress)).state.global.getAll(),d=s.a?.toString(),c=s.d?.toString(),u=s.tokenBalance?.toString(),p=s.vUsdBalance?.toString(),I=s.totalSupply?.toString(),h=Sc(s.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(d&&c&&u&&p&&I&&h){let R=Te({tokenBalance:u,vUsdBalance:p});return{aValue:d,dValue:c,tokenBalance:u,vUsdBalance:p,totalLpAmount:I,accRewardPerShareP:h,p:this.P,imbalance:R}}throw new G("Unable to pool info from chain")}async getUserBalanceInfo(a,r){let s=BigInt(r.poolAddress),d=this.getPool(s);try{let{balance:c,userRewardDebt:u}=await d.state.local(a).getAll();if(c!==void 0&&u!==void 0)return new Be({lpAmount:c.toString(),rewardDebt:u.toString()})}catch{let p=(await this.algorand.account.getInformation(a)).appsLocalState;if(p&&!p.find(({id:h})=>h===s))return new Be({lpAmount:"0",rewardDebt:"0"})}throw new G("Unable to get user balance")}getPool(a){return this.algorand.client.getTypedAppClientById(qi,{appId:a})}};b();C();y();import{Web3 as Mt}from"web3";b();C();y();var Lc={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},xn=Lc;var On=class extends ke{constructor(a,r){super();this.web3=a;this.api=r}chainType="EVM";P=52;async getUserBalanceInfo(a,r){let s;try{s=await li(this.getUserBalanceInfoByBatch(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{s=await Ka(()=>this.getUserBalanceInfoPerProperty(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return s}async getPoolInfoFromChain(a){let r;try{r=await li(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{r=await Ka(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(a,r){let s=new this.web3.eth.BatchRequest,d=this.getPoolContract(r.poolAddress),c=d.methods.userRewardDebt(a).encodeABI(),u=d.methods.balanceOf(a).encodeABI();s.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),s.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]});let[p,I]=await s.execute();if(p&&I&&!p.error&&!I.error)return new Be({lpAmount:Mt.utils.toBigInt(I.result).toString(),rewardDebt:Mt.utils.toBigInt(p.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,r){let s=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(a).call()).toString(),d=(await this.getPoolContract(r.poolAddress).methods.balanceOf(a).call()).toString();return new Be({lpAmount:d,rewardDebt:s})}async getPoolInfoByBatch(a){let r=new this.web3.eth.BatchRequest,s=this.getPoolContract(a.poolAddress),d=s.methods.a().encodeABI(),c=s.methods.d().encodeABI(),u=s.methods.tokenBalance().encodeABI(),p=s.methods.vUsdBalance().encodeABI(),I=s.methods.totalSupply().encodeABI(),h=s.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:a.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:u},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:p},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:I},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:h},"latest"]});let[R,B,W,N,Z,V]=await r.execute();if(R&&B&&W&&N&&Z&&V&&!R.error&&!B.error&&!W.error&&!N.error&&!Z.error&&!V.error){let S=Mt.utils.toBigInt(W.result).toString(),T=Mt.utils.toBigInt(N.result).toString(),k=Te({tokenBalance:S,vUsdBalance:T});return{aValue:Mt.utils.toBigInt(R.result).toString(),dValue:Mt.utils.toBigInt(B.result).toString(),tokenBalance:S,vUsdBalance:T,totalLpAmount:Mt.utils.toBigInt(Z.result).toString(),accRewardPerShareP:Mt.utils.toBigInt(V.result).toString(),p:this.P,imbalance:k}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let r=this.getPoolContract(a.poolAddress),s=(await r.methods.a().call()).toString(),d=(await r.methods.d().call()).toString(),c=(await r.methods.tokenBalance().call()).toString(),u=(await r.methods.vUsdBalance().call()).toString(),p=(await r.methods.totalSupply().call()).toString(),I=(await r.methods.accRewardPerShareP().call()).toString(),h=Te({tokenBalance:c,vUsdBalance:u});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:u,totalLpAmount:p,accRewardPerShareP:I,p:this.P,imbalance:h}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(xn.abi,a)}};b();C();y();var ea=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s}async approve(i,a){if(a){let r=i,s=a;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress},r)}else{let r=i;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),i.amount=O(i.amount,i.token.decimals).toFixed(),mn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),i.amount=O(i.amount,3).toFixed(),mn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return mn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};b();C();y();import{AnchorProvider as kc,BN as ds,Program as Hc,web3 as Mc}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as jc}from"@solana/spl-token";import{Connection as Jc,PublicKey as jt}from"@solana/web3.js";var ta=class extends ke{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}chainType="SOLANA";P=48;async getUserBalanceInfo(a,r){let s=this.buildAnchorProvider(a),d=this.getBridge(r.bridgeAddress,s),c=new jt(r.poolAddress),u=await d.account.pool.fetch(c);try{let p=await er(new jt(a),u.mint,d.programId),{lpAmount:I,rewardDebt:h}=await d.account.userDeposit.fetch(p);return new Be({lpAmount:I.toString(),rewardDebt:h.toString()})}catch{return new Be({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let r=this.buildAnchorProvider(a.bridgeAddress),s=await this.getBridge(a.bridgeAddress,r).account.pool.fetch(a.poolAddress),d=s.vUsdBalance.toString(),c=s.tokenBalance.toString(),u=Te({tokenBalance:c,vUsdBalance:d});return{dValue:s.d.toString(),aValue:s.a.toString(),totalLpAmount:s.totalLpAmount.toString(),vUsdBalance:d,tokenBalance:c,accRewardPerShareP:s.accRewardPerShareP.toString(),p:this.P,imbalance:u}}async buildRawTransactionDeposit(a){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),c=await r.methods.deposit(new ds(a.amount)).accounts(s).preInstructions(d).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new jt(a.accountAddress),await cn(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),c=await r.methods.withdraw(new ds(a.amount)).accounts(s).preInstructions(d).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new jt(a.accountAddress),await cn(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),c=await r.methods.claimRewards().accounts(s).preInstructions(d).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new jt(a.accountAddress),await cn(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let r=this.buildAnchorProvider(a.accountAddress),s=this.getBridge(a.token.bridgeAddress,r),{accounts:d,preInstructions:c}=await this._getLPTransactionData(s,a.token.poolAddress,a.accountAddress,r);return{bridge:s,accounts:d,preInstructions:c}}getBridge(a,r){return new Hc({...Pt,address:a},r)}buildAnchorProvider(a){let r=new Jc(this.solanaRpcUrl,"confirmed"),s=new jt(a);return new kc(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,r,s,d){let c=new jt(s),u=await tt(a.programId),p=await Vt(a.programId),I=new jt(r),R=(await a.account.pool.fetch(I)).mint,B=_e(c,R),W=await Yt(R,a.programId),N=await er(c,R,a.programId),Z=[Mc.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await An(B,d)}catch{let T=jc(c,B,c,R);Z.push(T)}try{await a.account.userDeposit.fetch(N)}catch{let T=await a.methods.initDepositAccount().accountsPartial({mint:R,user:c,userDeposit:N}).instruction();Z.push(T)}return{accounts:{mint:R,user:c,config:u,pool:I,bridgeAuthority:p,userDeposit:N,userToken:B,bridgeToken:W},preInstructions:Z}}};b();C();y();import{contract as jP}from"@stellar/stellar-sdk";b();C();y();import{contract as t}from"@stellar/stellar-sdk";var zc=t.Spec,xc=t.Client;var na=class extends xc{constructor(a){super(new zc(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};b();C();y();import{contract as yB,rpc as Oc}from"@stellar/stellar-sdk";var cs=Oc.Api;function bn(o){let{simulation:i,options:a}=o;if(!i)throw new Error("Soroban assembled transaction does not have simulation");if(cs.isSimulationSuccess(i))return i.result==null?void 0:a.parseResultXdr(i.result.retval);throw new Error(i.error)}function yn(o){let{simulation:i}=o;if(!i)throw new Error("Soroban assembled transaction does not have simulation");return cs.isSimulationError(i)}var ia=class extends ke{constructor(a,r,s){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=s}chainType="SRB";P=48;async getUserBalanceInfo(a,r){let d=await this.getContract(r.poolAddress).get_user_deposit({user:a});if(yn(d))throw new G;let c=bn(d);if(!c)throw new G;let u=c.unwrap();return new Be({lpAmount:u.lp_amount.toString(),rewardDebt:u.reward_debt.toString()})}async getPoolInfoFromChain(a){let s=await this.getContract(a.poolAddress).get_pool();if(yn(s))throw new G;let d=bn(s);if(!d)throw new G;let c=d.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:Te({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,r){let s={publicKey:r,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new na(s)}};b();C();y();import{ClarigenClient as Qc,contractFactory as Qn}from"@clarigen/core";import{createNetwork as Kc}from"@stacks/network";import{makeRandomPrivKey as Wr,makeUnsignedContractCall as fr,PostConditionMode as Tr,privateKeyToPublic as wr}from"@stacks/transactions";import{Big as Uc}from"big.js";var aa=class extends ke{constructor(a,r,s){super();this.nodeRpcUrl=a;this.params=r;this.api=s;let d=Kc({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Qc(d,this.params.stxHeroApiKey)}chainType="STX";P=48;A="20";client;async getUserBalanceInfo(a,r){let s=Qn(st.pool,r.poolAddress),d=await this.client.ro(s.getLpBalance({user:a})),c=await this.client.ro(s.getUserRewardDebt({user:a}));return new Be({lpAmount:d.toString(),rewardDebt:c.toString()})}async getPoolInfoFromChain(a){let r=Qn(st.pool,a.poolAddress),[s,d,c,u,p]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),I=s.toString(),h=d.toString(),R=c.toString(),B=u.toString(),W=p.toString();if(I&&h&&R&&B&&W){let N=Te({tokenBalance:h,vUsdBalance:R});return{aValue:this.A,dValue:I,tokenBalance:h,vUsdBalance:R,totalLpAmount:B,accRewardPerShareP:W,p:this.P,imbalance:N}}throw new G("Unable to pool info from chain")}async buildRawTransactionDeposit(a){let r=Qn(st.pool,a.token.poolAddress),{contractAddress:s,contractName:d,functionName:c,functionArgs:u}=r.deposit({amount:BigInt(a.amount),ftRef:a.token.tokenAddress}),p=Wr(),I=wr(p),h=Wt(a.amount,"lte",a.accountAddress,a.token.tokenAddress,Bt(a.token)),R=Wt(0,"gte",a.token.poolAddress,a.token.tokenAddress,Bt(a.token)),B={contractAddress:s,contractName:d,functionName:c,functionArgs:u,publicKey:I,validateWithAbi:!0,network:this.client.network,postConditions:[h,R],postConditionMode:Tr.Deny};return(await fr(B)).serialize()}async buildRawTransactionWithdraw(a){let r=Qn(st.pool,a.token.poolAddress),{contractAddress:s,contractName:d,functionName:c,functionArgs:u}=r.withdraw({amountLp:BigInt(a.amount),ftRef:a.token.tokenAddress}),p=Wr(),I=wr(p),h=Wt(xe(a.amount,a.token.decimals).toFixed(0,Uc.roundDown),"gte",a.token.poolAddress,a.token.tokenAddress,Bt(a.token)),R={contractAddress:s,contractName:d,functionName:c,functionArgs:u,publicKey:I,validateWithAbi:!0,network:this.client.network,postConditions:[h],postConditionMode:Tr.Deny};return(await fr(R)).serialize()}async buildRawTransactionClaimRewards(a){let r=Qn(st.pool,a.token.poolAddress),{contractAddress:s,contractName:d,functionName:c,functionArgs:u}=r.claimRewards({ftRef:a.token.tokenAddress}),p=Wr(),I=wr(p),h=Wt(0,"gte",a.token.poolAddress,a.token.tokenAddress,Bt(a.token)),R={contractAddress:s,contractName:d,functionName:c,functionArgs:u,publicKey:I,validateWithAbi:!0,network:this.client.network,postConditions:[h],postConditionMode:Tr.Deny};return(await fr(R)).serialize()}};b();C();y();import{SuiClient as tA}from"@mysten/sui/client";import{Transaction as ua}from"@mysten/sui/transactions";var In=at(Lt());b();C();y();Le();b();C();y();Le();import{bcs as As}from"@mysten/sui/bcs";import{fromB64 as Dc}from"@mysten/sui/utils";function ra(o){return o=x(o),o.startsWith(`${Ht}::balance::Balance<`)}var ze=class o{__StructClass=!0;static get $typeName(){return`${Ht}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;value;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.value=a.value}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return As.struct("Balance",{value:As.u64()})}static fromFields(i,a){return o.reified(i).new({value:ne("u64",a.value)})}static fromFieldsWithTypes(i,a){if(!ra(a.type))throw new Error("not a Balance type");return Ct(a,[i]),o.reified(i).new({value:$("u64",a.fields.value)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({value:q("u64",a.value)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ra(a.type))throw new Error(`object at ${a.fields.id} is not a Balance object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ra(a.bcs.type))throw new Error("object at is not a Balance object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,Dc(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching Balance object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!ra(s.data.bcs.type))throw new Error(`object at id ${r} is not a Balance object`);return o.fromSuiObjectData(a,s.data)}};var Zr=at(Lt());b();C();y();Le();var Fr=at(Lt());import{bcs as oa}from"@mysten/sui/bcs";import{fromB64 as Ec}from"@mysten/sui/utils";function sa(o){return o=x(o),o.startsWith(`${Fr.PKG_V1}::pool_rewards::PoolRewards<`)}var en=class o{__StructClass=!0;static get $typeName(){return`${Fr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.accRewardPerShareP=a.accRewardPerShareP,this.adminFeeShareBp=a.adminFeeShareBp,this.adminFee=a.adminFee,this.rewards=a.rewards,this.lpSupply=a.lpSupply}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return oa.struct("PoolRewards",{acc_reward_per_share_p:oa.u128(),admin_fee_share_bp:oa.u64(),admin_fee:ze.bcs,rewards:ze.bcs,lp_supply:oa.u64()})}static fromFields(i,a){return o.reified(i).new({accRewardPerShareP:ne("u128",a.acc_reward_per_share_p),adminFeeShareBp:ne("u64",a.admin_fee_share_bp),adminFee:ne(ze.reified(i),a.admin_fee),rewards:ne(ze.reified(i),a.rewards),lpSupply:ne("u64",a.lp_supply)})}static fromFieldsWithTypes(i,a){if(!sa(a.type))throw new Error("not a PoolRewards type");return Ct(a,[i]),o.reified(i).new({accRewardPerShareP:$("u128",a.fields.acc_reward_per_share_p),adminFeeShareBp:$("u64",a.fields.admin_fee_share_bp),adminFee:$(ze.reified(i),a.fields.admin_fee),rewards:$(ze.reified(i),a.fields.rewards),lpSupply:$("u64",a.fields.lp_supply)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({accRewardPerShareP:q("u128",a.accRewardPerShareP),adminFeeShareBp:q("u64",a.adminFeeShareBp),adminFee:q(ze.reified(i),a.adminFee),rewards:q(ze.reified(i),a.rewards),lpSupply:q("u64",a.lpSupply)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!sa(a.type))throw new Error(`object at ${a.fields.id} is not a PoolRewards object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!sa(a.bcs.type))throw new Error("object at is not a PoolRewards object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,Ec(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching PoolRewards object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!sa(s.data.bcs.type))throw new Error(`object at id ${r} is not a PoolRewards object`);return o.fromSuiObjectData(a,s.data)}};b();C();y();Le();var Nr=at(Lt());import{bcs as Cn}from"@mysten/sui/bcs";import{fromB64 as _c}from"@mysten/sui/utils";function da(o){return o=x(o),o.startsWith(`${Nr.PKG_V1}::pool_state::PoolState<`)}var tn=class o{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.tokenBalance=a.tokenBalance,this.vusdBalance=a.vusdBalance,this.d=a.d,this.a=a.a,this.balanceRatioMinBp=a.balanceRatioMinBp}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return Cn.struct("PoolState",{token_balance:Cn.u64(),vusd_balance:Cn.u64(),d:Cn.u64(),a:Cn.u64(),balance_ratio_min_bp:Cn.u64()})}static fromFields(i,a){return o.reified(i).new({tokenBalance:ne("u64",a.token_balance),vusdBalance:ne("u64",a.vusd_balance),d:ne("u64",a.d),a:ne("u64",a.a),balanceRatioMinBp:ne("u64",a.balance_ratio_min_bp)})}static fromFieldsWithTypes(i,a){if(!da(a.type))throw new Error("not a PoolState type");return Ct(a,[i]),o.reified(i).new({tokenBalance:$("u64",a.fields.token_balance),vusdBalance:$("u64",a.fields.vusd_balance),d:$("u64",a.fields.d),a:$("u64",a.fields.a),balanceRatioMinBp:$("u64",a.fields.balance_ratio_min_bp)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({tokenBalance:q("u64",a.tokenBalance),vusdBalance:q("u64",a.vusdBalance),d:q("u64",a.d),a:q("u64",a.a),balanceRatioMinBp:q("u64",a.balanceRatioMinBp)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!da(a.type))throw new Error(`object at ${a.fields.id} is not a PoolState object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!da(a.bcs.type))throw new Error("object at is not a PoolState object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,_c(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching PoolState object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!da(s.data.bcs.type))throw new Error(`object at id ${r} is not a PoolState object`);return o.fromSuiObjectData(a,s.data)}};import{bcs as Kn}from"@mysten/sui/bcs";import{fromB64 as $c}from"@mysten/sui/utils";function ca(o){return o=x(o),o.startsWith(`${Zr.PKG_V1}::pool::Pool<`)}var Aa=class o{__StructClass=!0;static get $typeName(){return`${Zr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.id=a.id,this.state=a.state,this.rewards=a.rewards,this.feeShareBp=a.feeShareBp,this.canDeposit=a.canDeposit,this.canWithdraw=a.canWithdraw,this.decimals=a.decimals,this.balance=a.balance}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return Kn.struct("Pool",{id:it.bcs,state:tn.bcs,rewards:en.bcs,fee_share_bp:Kn.u64(),can_deposit:Kn.bool(),can_withdraw:Kn.bool(),decimals:Kn.u8(),balance:ze.bcs})}static fromFields(i,a){return o.reified(i).new({id:ne(it.reified(),a.id),state:ne(tn.reified(i),a.state),rewards:ne(en.reified(i),a.rewards),feeShareBp:ne("u64",a.fee_share_bp),canDeposit:ne("bool",a.can_deposit),canWithdraw:ne("bool",a.can_withdraw),decimals:ne("u8",a.decimals),balance:ne(ze.reified(i),a.balance)})}static fromFieldsWithTypes(i,a){if(!ca(a.type))throw new Error("not a Pool type");return Ct(a,[i]),o.reified(i).new({id:$(it.reified(),a.fields.id),state:$(tn.reified(i),a.fields.state),rewards:$(en.reified(i),a.fields.rewards),feeShareBp:$("u64",a.fields.fee_share_bp),canDeposit:$("bool",a.fields.can_deposit),canWithdraw:$("bool",a.fields.can_withdraw),decimals:$("u8",a.fields.decimals),balance:$(ze.reified(i),a.fields.balance)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({id:q(it.reified(),a.id),state:q(tn.reified(i),a.state),rewards:q(en.reified(i),a.rewards),feeShareBp:q("u64",a.feeShareBp),canDeposit:q("bool",a.canDeposit),canWithdraw:q("bool",a.canWithdraw),decimals:q("u8",a.decimals),balance:q(ze.reified(i),a.balance)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ca(a.type))throw new Error(`object at ${a.fields.id} is not a Pool object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ca(a.bcs.type))throw new Error("object at is not a Pool object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,$c(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching Pool object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!ca(s.data.bcs.type))throw new Error(`object at id ${r} is not a Pool object`);return o.fromSuiObjectData(a,s.data)}};b();C();y();Le();var Xr=at(Lt());import{bcs as Gr}from"@mysten/sui/bcs";import{fromB64 as qc}from"@mysten/sui/utils";function ga(o){return o=x(o),o.startsWith(`${Xr.PKG_V1}::user_deposit::UserDeposit<`)}var la=class o{__StructClass=!0;static get $typeName(){return`${Xr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;lpAmount;rewardDebt;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.id=a.id,this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return Gr.struct("UserDeposit",{id:it.bcs,lp_amount:Gr.u64(),reward_debt:Gr.u64()})}static fromFields(i,a){return o.reified(i).new({id:ne(it.reified(),a.id),lpAmount:ne("u64",a.lp_amount),rewardDebt:ne("u64",a.reward_debt)})}static fromFieldsWithTypes(i,a){if(!ga(a.type))throw new Error("not a UserDeposit type");return Ct(a,[i]),o.reified(i).new({id:$(it.reified(),a.fields.id),lpAmount:$("u64",a.fields.lp_amount),rewardDebt:$("u64",a.fields.reward_debt)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({id:q(it.reified(),a.id),lpAmount:q("u64",a.lpAmount),rewardDebt:q("u64",a.rewardDebt)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ga(a.type))throw new Error(`object at ${a.fields.id} is not a UserDeposit object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ga(a.bcs.type))throw new Error("object at is not a UserDeposit object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,qc(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching UserDeposit object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!ga(s.data.bcs.type))throw new Error(`object at id ${r} is not a UserDeposit object`);return o.fromSuiObjectData(a,s.data)}};b();C();y();function ls(o,i,a){if(i.length===0||!i[0])return[];let r=i[0],s=o.reduce((u,p)=>u+BigInt(p),BigInt(0)),d=BigInt(r.balance),c=[];for(let u of i.slice(1)){if(d>s)return gs(a,r,c,o);d+=BigInt(u.balance),c.push(u)}return d>=s?gs(a,r,c,o):[]}function gs(o,i,a,r){let s=r.map(d=>o.pure.u64(d));return a.length>0&&o.mergeCoins(i.coinObjectId,a.map(d=>d.coinObjectId)),o.splitCoins(i.coinObjectId,s)}b();C();y();var eA="0x0000000000000000000000000000000000000000000000000000000000000000";async function us(o,i,a){let r=await o.devInspectTransactionBlock({sender:eA,transactionBlock:i});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let s=r.results?.pop()?.returnValues?.pop();if(!s)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[d,c]=s;return typeof a=="object"?a.fromBcs(Uint8Array.from(d)).toJSONField():jn(a).parse(Uint8Array.from(d))}var pa=class extends ke{constructor(a,r){super();this.suiRpcUrl=a;this.api=r;this.client=new tA({url:a})}chainType="SUI";client;async getUserBalanceInfo(a,r){if(!r.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=r.suiAddresses;if(!s)throw new G("SUI token must contain 'suiAddresses'");(0,In.setAddress)(s.bridgeAddress,s.bridgeAddressOrigin);let c=(await this.fetchDeposits(a,r.originTokenAddress)).reduce((u,p)=>{if(p.data)return u.lpAmount+=BigInt(p.data.content.fields.lp_amount),u.rewardDebt+=BigInt(p.data.content.fields.reward_debt),u;throw new G("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new Be({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(a,r){return await It(s=>this.client.getOwnedObjects({owner:a,filter:{StructType:la.phantom(he(r)).phantomType},options:{showContent:!0},cursor:s}))}async getPoolInfoFromChain(a){let r=a.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=48,d=new ua;Qo(d,a.originTokenAddress,r.bridgeObjectAddress);let c=await us(this.client,d,Aa.reified(he(a.originTokenAddress))),u=c.state.tokenBalance,p=c.state.vusdBalance,I=Te({tokenBalance:u,vUsdBalance:p});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:p,tokenBalance:u,accRewardPerShareP:c.rewards.accRewardPerShareP,p:s,imbalance:I}}async buildRawTransactionDeposit(a){let r=a.token.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=await It(R=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:R}));if(s.length===0||!s[0])throw new gt("No coins to deposit");let d=s[0],c=new ua;c.setSender(a.accountAddress);let{depositObj:u,isNewDeposit:p}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,c),[I]=ls([a.amount],s,c);if(!I)throw new gt("No coins to deposit");if(!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let h=zo(c,a.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:u,coin:I});return c.mergeCoins(d.coinObjectId,[h]),p&&c.transferObjects([u],a.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(a,r,s){let d=await this.fetchDeposits(a,r);if(d.length===0||!d[0]){let c=he(r).phantomType;return{depositObj:Ko(s,c),isNewDeposit:!0}}else{if(d[0].data?.objectId)return{depositObj:d[0].data.objectId,isNewDeposit:!1};throw new G("Something went wrong while deposit")}}async buildRawTransactionWithdraw(a){let r=a.token.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=he(a.token.originTokenAddress).phantomType,d=new ua;d.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:u}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d);if(u)throw new gt("No deposit found");let p=xo(d,s,{bridge:r.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(a.amount)}),I=await It(h=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:h}));if(!p[0]||!p[1])throw new G("No rewards found");return I[0]?d.mergeCoins(I[0].coinObjectId,[p[0],p[1]]):(d.mergeCoins(p[0],[p[1]]),d.transferObjects([p[0]],a.accountAddress)),await d.toJSON({client:this.client})}async buildRawTransactionClaimRewards(a){let r=a.token.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=he(a.token.originTokenAddress).phantomType,d=new ua;d.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:u}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d);if(u)throw new gt("No deposit found");let p=Oo(d,s,{bridge:r.bridgeObjectAddress,userDeposit:c}),I=await It(h=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:h}));return I[0]?d.mergeCoins(I[0].coinObjectId,[p]):d.transferObjects([p],a.accountAddress),await d.toJSON({client:this.client})}};b();C();y();import{Web3 as ma}from"web3";import{encodeFunctionCall as nA}from"web3-eth-abi";var Un=class extends ke{constructor(a,r,s){super();this.tronWeb=a;this.api=r;this.tronJsonRpc=s}chainType="TRX";P=52;async getUserBalanceInfo(a,r){let s;if(this.tronJsonRpc)try{s=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,a,r)}catch{s=await this.getUserBalanceInfoPerProperty(a,r)}else s=await this.getUserBalanceInfoPerProperty(a,r);return s}async getUserBalanceInfoByBatch(a,r,s){let d=Vn(s.poolAddress),c=Vn(r),u=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],I=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();if(Array.isArray(I)&&I.length===2){let h=R=>{let B=I.find(W=>W.id===R);if(!B||!B.result)throw new Error(`Missing or invalid result for id ${R}`);return ma.utils.toBigInt(B.result).toString()};return new Be({lpAmount:ma.utils.toBigInt(h(2)).toString(),rewardDebt:ma.utils.toBigInt(h(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(a,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let s=this.getContract(r.poolAddress),d=(await s.methods.userRewardDebt(a).call()).toString(),c=(await s.methods.balanceOf(a).call()).toString();return new Be({lpAmount:c,rewardDebt:d})}async getPoolInfoFromChain(a){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,a)}catch{r=await this.getPoolInfoPerProperty(a)}else r=await this.getPoolInfoPerProperty(a);return r}async getPoolInfoByBatch(a,r){let s=Vn(r.poolAddress),d=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],u=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json();if(Array.isArray(u)&&u.length===6){let p=B=>{let W=u.find(N=>N.id===B);if(!W||!W.result)throw new Error(`Missing or invalid result for id ${B}`);return ma.utils.toBigInt(W.result).toString()},I=p(3),h=p(4),R=Te({tokenBalance:I,vUsdBalance:h});return{aValue:p(1),dValue:p(2),tokenBalance:I,vUsdBalance:h,totalLpAmount:p(5),accRewardPerShareP:p(6),p:this.P,imbalance:R}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let r=this.getContract(a.poolAddress),[s,d,c,u,p,I]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),h=c.toString(),R=u.toString(),B=Te({tokenBalance:h,vUsdBalance:R});return{aValue:s.toString(),dValue:d.toString(),tokenBalance:h,vUsdBalance:R,totalLpAmount:p.toString(),accRewardPerShareP:I.toString(),p:this.P,imbalance:B}}buildRawTransactionDeposit(a){let{amount:r,accountAddress:s}=a,d=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",d,"0",s)}buildRawTransactionWithdraw(a){let{amount:r,accountAddress:s}=a,d=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",d,"0",s)}buildRawTransactionClaimRewards(a){let{accountAddress:r}=a,s=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",s,"0",r)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}getContract(a){return this.tronWeb.contract(xn.abi,a)}getFunctionAbi(a,...r){let s=xn.abi.find(d=>d.type==="function"&&"name"in d&&d.name===a);if(!s)throw new Error(`${a} method not found in Pool ABI`);return nA(s,r)}};var ba=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s;this.rawTxBuilder=new ea(i,a,this.params,s);let d=r.cachePoolInfoChainSec>0?r.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new aA({defaultTtl:d})}rawTxBuilder;cache;async getAllowance(i,a){if(a){let r=i,s=a;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress},r)}else{let r=i;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(i,a){if(a){let r=i,s=a;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress},r)}else{let r=i;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,r){ae(i),te("amount",i,a.decimals);let s=await this.getPoolInfoFromChain(a,r),{vUsdBalance:d,tokenBalance:c,aValue:u,dValue:p}=s,I=rs(i,u,p,c,d);return z(I,3).toFixed()}async getAmountToBeWithdrawn(i,a,r,s){ae(i),te("amount",i,r.decimals);let d=await this.getPoolInfoFromChain(r,s),c=os(i),u=xe(c,r.decimals),I=(await this.getUserBalanceInfo(a,r,s)).earned(d)||"0",h=iA(u).plus(I).toFixed();return z(h,r.decimals).toFixed()}async getUserBalanceInfo(i,a,r){return mn(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let r={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},s=this.cache.get(r);if(s)return s;{let d=await mn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(r,d),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},d),d}}};function mn(o,i,a,r,s){switch(U.getChainProperty(o).chainType){case"EVM":{if(s)return new On(s,i);{let d=a.getNodeRpcUrl(o),c=new dA(d);return c.defaultReturnFormat={number:sA.STR,bytes:oA.HEX},new On(c,i)}}case"TRX":{let d=a.getNodeRpcUrl(o),c=r.tronJsonRpc;if(s)return new Un(s,i,c);{let u=new rA({fullHost:d});return new Un(u,i,c)}}case"SOLANA":{let d=a.getNodeRpcUrl(o);return new ta(d,i)}case"SRB":return new ia(a,r,i);case"SUI":return new pa(a.getNodeRpcUrl(o),i);case"ALG":if(s){let d=s,c=ps.fromClients({algod:d});return new zn(c,i)}else{let d=a.getNodeRpcUrl(o),c=ps.fromConfig({algodConfig:{server:d}});return new zn(c,i)}case"STX":{let d=a.getNodeRpcUrl(o);return new aa(d,r,i)}}}b();C();y();import{TronWeb as gA}from"tronweb";import{FMT_BYTES as lA,FMT_NUMBER as uA,Web3 as pA}from"web3";b();C();y();b();C();y();var cA={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ya=cA;b();C();y();b();C();y();b();C();y();var nn=class{};var Dn=class extends nn{constructor(a,r){super();this.web3=a;this.api=r}chainType="EVM";async balanceOf(a){let r=(await this.getYieldContract(a.token.yieldAddress).methods.balanceOf(a.owner).call()).toString();return z(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=O(a.amount,a.token.decimals).toFixed(),s=(await this.getYieldContract(a.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return z(s,3).toFixed()}async getWithdrawProportionAmount(a){let r=O(a.amount,3).toFixed();return await this.getYieldContract(a.cydToken.yieldAddress).methods.getWithdrawProportionAmount(a.owner,r).call()}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.deposit(a.amount,a.token.yieldId,a.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.withdraw(a.amount).encodeABI()})}buildTxParams(a){return{from:a.owner,to:a.yieldAddress,value:"0"}}getYieldContract(a){return new this.web3.eth.Contract(ya.abi,a)}};b();C();y();var Ca=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s}async approve(i,a){return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.yieldAddress},a)}async deposit(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),ae(i.minVirtualAmount),te("minVirtualAmount",i.minVirtualAmount,3),i.amount=O(i.amount,i.token.decimals).toFixed(),i.minVirtualAmount=O(i.minVirtualAmount,3).toFixed(),hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return ae(i.amount),te("amount",i.amount,3),i.amount=O(i.amount,3).toFixed(),hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).buildRawTransactionWithdraw(i)}};b();C();y();var En=class extends nn{constructor(a,r){super();this.tronWeb=a;this.api=r}chainType="TRX";async balanceOf(a){let r=(await(await this.getContract(a.token.yieldAddress)).methods.balanceOf(a.owner).call()).toString();return z(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=O(a.amount,a.token.decimals).toFixed(),s=(await(await this.getContract(a.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return z(s,3).toFixed()}async getWithdrawProportionAmount(a){let r=O(a.amount,3).toFixed();return(await(await this.getContract(a.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(a.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(a){let{amount:r,owner:s,token:d,minVirtualAmount:c}=a,u=[{type:"uint256",value:r},{type:"uint256",value:d.yieldId},{type:"uint256",value:c}];return this.buildRawTransaction(a.token.yieldAddress,"deposit(uint256,uint256,uint256)",u,"0",s)}async buildRawTransactionWithdraw(a){let{amount:r,owner:s}=a,d=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.yieldAddress,"withdraw(uint256)",d,"0",s)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}getContract(a){return this.tronWeb.contract(ya.abi,a)}};b();C();y();function AA(o){if(!Ia(o))throw new Ai("Token does not support Yield")}function Ia(o){return!!o.yieldAddress&&o.yieldId!==void 0}var ha=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s;this.rawTxBuilder=new Ca(i,a,r,s)}rawTxBuilder;async getCYDTokens(){let i=[],a=await this.api.getChainDetailsMap("pool");return Object.values(a).forEach(r=>{if(r.yieldAddress){let s=r.tokens.find(c=>c.tokenAddress===r.yieldAddress),d=r.tokens.filter(Ia);if(d.length>0){let c=s??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};i.push({...c,yieldAddress:r.yieldAddress,tokens:d})}}}),i}async getAllowance(i,a){return await this.tokenService.getAllowance({...i,spender:i.token.yieldAddress},a)}async checkAllowance(i,a){return this.tokenService.checkAllowance({...i,spender:i.token.yieldAddress},a)}async balanceOf(i,a){return hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).balanceOf(i)}async getEstimatedAmountOnDeposit(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.token.yieldAddress,a).getEstimatedAmountOnDeposit(i)}async getWithdrawAmounts(i,a){ae(i.amount),te("amount",i.amount,3);let r=await hn(i.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).getWithdrawProportionAmount(i);return i.cydToken.tokens.filter(s=>r[s.yieldId]!==void 0).map(s=>({amount:z(r[s.yieldId],s.decimals).toFixed(),token:s}))}};function hn(o,i,a,r,s){switch(U.getChainProperty(o).chainType){case"EVM":{if(s)return new Dn(s,i);{let d=a.getNodeRpcUrl(o),c=new pA(d);return c.defaultReturnFormat={number:uA.STR,bytes:lA.HEX},new Dn(c,i)}}case"TRX":{if(s)return new En(s,i);{let d=a.getNodeRpcUrl(o),c=new gA({fullHost:d});return c.setAddress(r),new En(c,i)}}case"SOLANA":throw new E;case"SRB":throw new E;case"SUI":throw new E;case"ALG":throw new E;case"STX":throw new E}}b();C();y();import{Big as Re}from"big.js";function ys(o,i,a){let r=mA(o,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),s=bA(r.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function Cs(o,i,a){let r=yA(o,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),s=CA(r.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function mA(o,{feeShare:i,decimals:a},r){let s=Re(o),d=s.times(i),c=s.minus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ms(vt(c,a),r),amountExcludingCommissionInSystemPrecision:ms(vt(s,a),r)}}function ms(o,i){if(o.eq(0))return"0";let a=Re(i.tokenBalance).plus(o),r=ut(a.toFixed(),i.aValue,i.dValue);return Re(i.vUsdBalance).minus(r).round().toFixed()}function bA(o,{feeShare:i,decimals:a},r){if(Re(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let d=Re(o).plus(r.vUsdBalance),c=ut(d,r.aValue,r.dValue),u=xe(Re(r.tokenBalance).minus(c),a),p=Re(u).times(i),I=Re(u).minus(p).round();return{bridgeFeeInTokenPrecision:p.round().toFixed(),amountIncludingCommissionInTokenPrecision:I.toFixed(),amountExcludingCommissionInTokenPrecision:u.toFixed()}}function yA(o,{feeShare:i,decimals:a},r){let s=Re(i).div(Re(1).minus(i)),d=Re(o).times(s),c=Re(o).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:bs(vt(c,a),r),amountExcludingCommissionInSystemPrecision:bs(vt(o,a),r)}}function bs(o,i){let a=Re(i.tokenBalance).minus(o),r=ut(a.toFixed(),i.aValue,i.dValue);return Re(r).minus(i.vUsdBalance).round().toFixed()}function CA(o,{feeShare:i,decimals:a},r){if(Re(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=Re(r.vUsdBalance).minus(o),d=ut(s.toFixed(),r.aValue,r.dValue),c=Re(d).minus(r.tokenBalance),u=xe(c.toFixed(),a),p=Re(i).div(Re(1).minus(i)),I=Re(u).times(p),h=Re(u).plus(I);return{bridgeFeeInTokenPrecision:I.round().toFixed(),amountIncludingCommissionInTokenPrecision:h.round().toFixed(),amountExcludingCommissionInTokenPrecision:u.toFixed()}}b();C();y();import{Big as Jt}from"big.js";function Is(o,i,a,r,s){let d=lt(o,i,a),c=xe(d,i.decimals),u=Xn(d,r,s),p=Jt(o).times(i.feeShare),I=Jt(u).div(Jt(1).minus(r.feeShare)).minus(u);return{sourceLPSwap:{fee:z(p,i.decimals).neg().round(i.decimals,Jt.roundUp).toFixed(),swap:z(Jt(o).minus(c).minus(p),i.decimals).neg().round(i.decimals,Jt.roundUp).toFixed()},destLPSwap:{fee:z(I,r.decimals).neg().round(r.decimals,Jt.roundUp).toFixed(),swap:z(xe(d,r.decimals).minus(u).minus(I),r.decimals).neg().round(r.decimals,Jt.roundUp).toFixed()}}}b();C();y();b();C();y();b();C();y();b();C();y();import{AlgorandClient as hs}from"@algorandfoundation/algokit-utils";import{ABIMethod as IA,OnApplicationComplete as hA}from"algosdk";var va=class{constructor(i){this.nodeRpcUrlsConfig=i}async checkAssetOptIn(i,a,r){let s=this.getAlgorand(r);return Ii(i,a,s)}async buildRawTransactionAssetOptIn(i,a,r){let s=this.getAlgorand(r);typeof i=="string"&&(i=BigInt(i));let d=await s.createTransaction.assetOptIn({assetId:i,sender:a});return Gt(d)}async checkAppOptIn(i,a,r){let s=this.getAlgorand(r);return hi(i,a,s)}async buildRawTransactionAppOptIn(i,a,r){let s=this.getAlgorand(r);typeof i=="string"&&(i=BigInt(i));let d=s.newGroup(),c=s.account.random();d.addAppCallMethodCall({appId:i,method:new IA({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:a,signer:c,onComplete:hA.OptInOC});let{transactions:u}=await d.buildTransactions();return Gt(...u)}getAlgorand(i){if(i){let a=hs.fromClients({algod:i});return a.setDefaultValidityWindow(100),a}else{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG"),r=hs.fromConfig({algodConfig:{server:a}});return r.setDefaultValidityWindow(100),r}}};b();C();y();b();C();y();import wA from"axios";b();C();y();var vs="3.29.1";b();C();y();function Rs(o){return Object.entries(o).reduce((i,a)=>{let r=a[0],s=a[1],d=WA(r,s);return d&&(i[r]=d),i},{})}function Ys(o){let i={};for(let[a,r]of Object.entries(o)){let s=a;for(let d of r.tokens){let c=vn({chainSymbol:s,poolAddress:d.poolAddress}),u=Te(d.poolInfo);i[c]={...d.poolInfo,imbalance:u}}}return i}function vA(o,i){let{name:a,...r}=o,{poolInfo:s,...d}=i;return{...d,...r,chainName:a}}function RA(o){switch(o){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function YA(o){return Object.entries(o).reduce((i,[a,r])=>(i[a]=BA(r),i),{})}function BA(o){return Object.entries(o).reduce((i,[a,r])=>{let s=RA(a);return s&&r!=null&&(i[s]=r),i},{})}function WA(o,i){let a=U.getChainsProperties()[o];if(!a)return null;let r={...a,allbridgeChainId:i.chainId,bridgeId:i.bridgeId,paddingUtilId:i.paddingUtilId,bridgeAddress:i.bridgeAddress,oftBridgeAddress:i.oftBridgeAddress,yieldAddress:i.yieldAddress,abrPayer:i.abrPayer?{payerAddress:i.abrPayer.payerAddress,abrToken:{chainSymbol:o,tokenAddress:i.abrPayer.tokenAddress,decimals:i.abrPayer.tokenDecimals},payerAvailability:fA(i.abrPayer.payerAvailability)}:void 0,transferTime:YA(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations,suiAddresses:i.suiAddresses};return{...r,tokens:i.tokens.map(s=>vA(r,s))}}function fA(o){if(!o)return{};let i={};for(let[a,r]of Object.entries(o)){if(!r)continue;let s=TA[a];s&&(i[s]=!0)}return i}var TA=Object.fromEntries(Object.entries(xa).map(([o,i])=>[i,De[o]]));function vn(o){return o.chainSymbol+"_"+o.poolAddress}function Bs(o){let i=[];for(let[a,r]of Object.entries(o)){let s=a;for(let d of r.tokens)i.push({chainSymbol:s,poolAddress:d.poolAddress})}return i}function Ws(o){let i={};for(let[a,r]of Object.entries(o)){let s=a;for(let[d,c]of Object.entries(r))c.imbalance=Te(c),i[vn({chainSymbol:s,poolAddress:d})]=c}return i}var Rn=class{api;constructor(i){this.api=wA.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+vs},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Rs(i),poolInfoMap:Ys(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:r}=await this.api.get(`/check/${i}/${a}`);return r}async getTransferStatus(i,a){let{data:r}=await this.api.get(`/chain/${i}/${a}`);return r}async getReceiveTransactionCost(i){if(i.messenger===5&&!i.sourceToken)throw new oi("For OFT sourceToken required");let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice,abrExchangeRate:a.abrExchangeRate,adminFeeShareWithExtras:a.adminFeeShareWithExtras}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:r}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return Ws(r)}};b();C();y();import Ra from"timed-cache";var Vr=20*1e3,FA=55*1e3,Yn=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new Ra({defaultTtl:FA}),this.receivedTransactionCache=new Ra({defaultTtl:Vr}),this.pendingInfoCache=new Ra({defaultTtl:Vr}),this.gasBalanceCache=new Ra({defaultTtl:Vr})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,r),r}async getGasBalance(i,a){let r=`GAS_BALANCE_${i}_${a}`,s=this.gasBalanceCache.get(r);if(s)return s;let d=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(r,d),d}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,r),r}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}${i.sourceToken?"_"+i.sourceToken:""}`,r=this.receivedTransactionCache.get(a);if(r)return r;let s=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,s),s}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};b();C();y();var Bn=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};b();C();y();var Wn=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),r={};for(let s in a){let d=a[s];d&&(r[s]={...d,tokens:fs(d.tokens,i,this.isStaging)})}return r}async tokens(i){return fs(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function fs(o,i,a){return o.filter(r=>a?!0:r.flags[i]).map(NA)}function NA(o){let{flags:i,...a}=o;return a}b();C();y();import ZA from"timed-cache";var GA=55*1e3,fn=class{constructor(i){this.client=i;this.poolInfoCache=new Pr}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let r=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(r);let s=r[vn(i)];if(s)return s;throw new G("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Bs(r.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(vn(i),a)}},Pr=class{cache;constructor(){this.cache=new ZA({defaultTtl:GA})}putAll(i){for(let[a,r]of Object.entries(i))this.cache.put(a,r)}putAllIfNotExists(i){for(let[a,r]of Object.entries(i))this.cache.get(a)||this.cache.put(a,r)}put(i,a){this.cache.put(i,a)}get(i){let a=vn(i);return this.cache.get(a)}};b();C();y();import{AlgorandClient as ws}from"@algorandfoundation/algokit-utils";import{Big as OA}from"big.js";import{TronWeb as QA}from"tronweb";import{Web3 as KA}from"web3";b();C();y();b();C();y();b();C();y();b();C();y();import{Big as Ts}from"big.js";var He=class{async checkAllowance(i){let a=await this.getAllowance(i);return Ts(a).gte(Ts(i.amount))}};var _n=class extends He{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}chainType="ALG";approve(a){throw new E}buildRawTransactionApprove(a){throw new E}getAllowance(a){throw new E}async getNativeTokenBalance(a){let{account:r}=a;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(a){let{account:r,token:s}=a;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(s.tokenAddress))).balance.toString()}catch(d){if(d instanceof Error)return d.message.includes("account asset info not found"),"0";throw d}}};b();C();y();b();C();y();var XA={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Ya=XA;var VA="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",PA="0xdac17f958d2ee523a2206206994597c13d831ec7",SA=1e5,$n=class extends He{constructor(a,r){super();this.web3=a;this.api=r}chainType="EVM";getAllowance(a){let r=a.token.tokenAddress,s=a.owner,d=a.spender;return this.getAllowanceByTokenAddress(r,s,d)}getAllowanceByTokenAddress(a,r,s){return this.getERC20Contract(a).methods.allowance(r,s).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let d=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(d,a.chainSymbol)}let r=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(r,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===PA}buildRawTransactionApprove(a){let{tokenAddress:r,spender:s,owner:d,amount:c}=a,p=this.getERC20Contract(r).methods.approve(s,c==null?VA:Ki(c));return Promise.resolve({from:d,to:r,value:"0",data:p.encodeABI()})}async sendRawTransaction(a,r){let s=a,d={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?s.gas=SA:s.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...s,...d});return{txId:c.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(Ya.abi,a)}};b();C();y();import{AnchorProvider as LA}from"@coral-xyz/anchor";import{Connection as kA,PublicKey as Ba}from"@solana/web3.js";var Wa=class extends He{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}chainType="SOLANA";approve(a){throw new E}buildRawTransactionApprove(a){throw new E}buildAnchorProvider(a){let r=new kA(this.solanaRpcUrl,"confirmed"),s=new Ba(a);return new LA(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new E}async getTokenBalance(a){let{account:r,token:s}=a;try{let d=_e(new Ba(r),new Ba(s.tokenAddress));return(await An(d,this.buildAnchorProvider(r))).amount.toString()}catch(d){if(d instanceof Error)return d.message.startsWith("Account does not exist"),"0";throw d}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Ba(a.account))).toString()}};b();C();y();import{Horizon as uZ,NotFoundError as HA}from"@stellar/stellar-sdk";var fa=class extends He{constructor(a,r,s){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=s}chainType="SRB";getAllowance(){throw new E}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new G("OriginTokenAddress missing");let[r,s]=a.token.originTokenAddress.split(":"),d=new uZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await d.loadAccount(a.account)}catch(I){if(I instanceof HA)return"0";throw I}let p=c.balances.find(I=>(I.asset_type==="credit_alphanum4"||I.asset_type==="credit_alphanum12")&&I.asset_code==r&&I.asset_issuer==s);return p?.balance?O(p.balance,U.getChainDecimalsByType(U.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new uZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(u=>u.asset_type==="native");return c?.balance?O(c.balance,U.getChainDecimalsByType(U.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new E}buildRawTransactionApprove(){throw new E}};b();C();y();import{ClarigenClient as MA,contractFactory as jA}from"@clarigen/core";import{createNetwork as JA}from"@stacks/network";var Ta=class extends He{constructor(a,r,s){super();this.nodeRpcUrl=a;this.params=r;this.api=s;let d=JA({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new MA(d,this.params.stxHeroApiKey)}chainType="STX";client;async getTokenBalance(a){let r=jA(st.ftToken,a.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:a.account}))).toString()}async getNativeTokenBalance(a){let r=`${this.nodeRpcUrl}/extended/v1/address/${a.account}/stx`,s=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!s.ok)throw new Error(`Failed to fetch account: ${s.status}`);let c=(await s.json()).balance;return BigInt(c).toString()}getAllowance(a){throw new E}checkAllowance(a){throw new E}approve(a){throw new E}buildRawTransactionApprove(a){throw new E}};b();C();y();import{SuiClient as zA}from"@mysten/sui/client";var wa=class extends He{constructor(a,r){super();this.suiRpcUrl=a;this.api=r;this.suiClient=new zA({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(a){throw new E}buildRawTransactionApprove(a){throw new E}getAllowance(a){throw new E}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:a.account,coinType:a.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(a){let r=await It(s=>this.suiClient.getCoins({owner:a.account,cursor:s}));return r.length===0?"0":r.reduce((s,d)=>s+BigInt(d.balance),BigInt(0)).toString()}};b();C();y();var xA="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",qn=class extends He{constructor(a,r){super();this.tronWeb=a;this.api=r}chainType="TRX";async getAllowance(a){let{token:{tokenAddress:r},owner:s}=a;return(await(await this.getContract(r)).methods.allowance(s,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let r=await this.buildRawTransactionApprove(a);return await Ui(this.tronWeb,r)}async buildRawTransactionApprove(a){let{tokenAddress:r,spender:s,owner:d,amount:c}=a,u=c==null?xA:Ki(c),p=[{type:"address",value:s},{type:"uint256",value:u}];return this.buildRawTransaction(r,"approve(address,uint256)",p,"0",d)}getContract(a){return this.tronWeb.contract(Ya.abi,a)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}};var Tn=class{constructor(i,a,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r}async getAllowance(i,a){let r=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return z(r,i.token.decimals).toFixed()}async checkAllowance(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(Qa(a.amount),te("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(Qa(i.amount),te("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let r=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?z(r,i.token.decimals).toFixed():r}async getNativeTokenBalance(i,a){let r=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:r,float:z(r,U.getChainDecimalsByType(U.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,a,r){switch(U.getChainProperty(i).chainType){case"EVM":{if(r)return new $n(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new $n(new KA(s),this.api)}}case"TRX":{if(r)return new qn(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),d=new QA({fullHost:s});return d.setAddress(a),new qn(d,this.api)}}case"SOLANA":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Wa(s,this.api)}case"SRB":return new fa(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new wa(this.nodeRpcUrlsConfig.getNodeRpcUrl(i),this.api);case"ALG":if(r){let s=r,d=ws.fromClients({algod:s});return new _n(d,this.api)}else{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),d=ws.fromConfig({algodConfig:{server:s}});return new _n(d,this.api)}case"STX":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Ta(s,this.params,this.api)}}}prepareCheckAllowanceParams(i){return{...i,amount:O(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:OA(i.amount).toFixed()}}};var Fa=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a;let r=new Rn(a),s=new Yn(r),d=new Bn(s),c=new fn(d);this.api=new Wn(c,a),this.tokenService=new Tn(this.api,i,a)}api;tokenService;buildRawTransactionApprove(i,a){return this.tokenService.buildRawTransactionApprove(i,a)}checkAllowance(i,a){return this.tokenService.checkAllowance(i,a)}getAllowance(i,a){return this.tokenService.getAllowance(i,a)}};b();C();y();import{Connection as UA,PublicKey as DA,TransactionMessage as EA}from"@solana/web3.js";var Na=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new G("InvalidArgumentException memo cannot be more than 28 characters");let r=new UA(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),s=await Ut(i,r),d=EA.decompile(i.message,{addressLookupTableAccounts:s}),c=d.instructions[d.instructions.length-1];if(!c?.keys)throw new G("Last instruction or its keys are invalid.");c.keys.push({pubkey:new DA(Y.from(a)),isSigner:!1,isWritable:!1}),i.message=d.compileToV0Message(s)}};b();C();y();import{Asset as qA,BASE_FEE as eg,contract as JP,Horizon as Fs,Operation as tg,Operation as ng,rpc as ti,TimeoutInfinite as ig,TransactionBuilder as Sr,TransactionBuilder as Ns}from"@stellar/stellar-sdk";b();C();y();import{contract as e}from"@stellar/stellar-sdk";var _A=e.Spec,$A=e.Client;var ei=class extends $A{constructor(a){super(new _A(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var ag=100,rg=180,Za=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let r=await new Fs.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),d=await this.getContract(ei,i.tokenAddress).name();if(yn(d))throw new G;let c=bn(d);if(!c)throw new G;let[u,p]=c.split(":");if(u===void 0||p===void 0)throw new G("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let I=new qA(u,p),h=ng.changeTrust({asset:I,limit:i.limit});return new Ns(r,{fee:ag.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(h).setTimeout(rg).build().toXDR()}async getBalanceLine(i,a){let s=await this.getContract(ei,a).name();if(yn(s))throw new G;let d=bn(s);if(!d)throw new G;let[c,u]=d.split(":"),p=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new Fs.Server(p).loadAccount(i)).balances.find(B=>(B.asset_type==="credit_alphanum4"||B.asset_type==="credit_alphanum12")&&B.asset_code==c&&B.asset_issuer==u)}async submitTransactionStellar(i){let a=new Fs.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=Ns.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let r=new ti.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await r.getAccount(a),d=Sr.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await r.simulateTransaction(d);if(ti.Api.isSimulationRestore(c))return new Sr(s,{fee:(+eg+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(tg.restoreFootprint({})).setTimeout(ig).build().toXDR()}async sendTransactionSoroban(i){let a=new ti.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=Sr.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(r)}async confirmTx(i,a=15){let r=new ti.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await qr(()=>r.getTransaction(i),c=>c.status===ti.Api.GetTransactionStatus.NOT_FOUND,a);if(s.length===0)throw new G("No transaction responses found.");let d=s[s.length-1];if(!d)throw new G("Unexpected error: last response is undefined.");return d}getContract(i,a){let r={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(r)}};b();C();y();var Ga=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.api=a}_suiBridgeService;async buildSendTxFromCustomTx(i,a,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(i,a,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new pn(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var Xa=class{constructor(i){this.service=i;this.srb=new Za(i.nodeRpcUrlsConfig,i.params),this.sol=new Na(i.nodeRpcUrlsConfig,i.params),this.sui=new Ga(i.nodeRpcUrlsConfig,i.api),this.evm=new Fa(i.nodeRpcUrlsConfig,i.params),this.alg=new va(i.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};b();C();y();var ot=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ABR="abr",r))(ot||{}),vi=(a=>(a.INT="int",a.FLOAT="float",a))(vi||{});b();C();y();import{Big as Ne}from"big.js";var ni=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new ci(i)}},Va=class{constructor(i,a=ri){this.nodeRpcUrlsConfig=i;U.addChainsProperties(a.additionalChainsProperties);let r=new Rn(a),s=new Yn(r),d=new Bn(s),c=new fn(d);this.api=new Wn(c,a),this.tokenService=new Tn(this.api,i,a),this.bridge=new Di(this.api,i,a,this.tokenService),this.pool=new ba(this.api,i,a,this.tokenService),this.yield=new ha(this.api,i,a,this.tokenService),this.params=a}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,a){let s=(await this.api.getChainDetailsMap(a))[i];return s?s.tokens:[]}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,r,s){ae(i);let d;a=="float"?(te("amount",i,r.decimals),d=O(i,r.decimals).toFixed()):d=i;let c=lt(d,r,await we(this.api,r)),u=await we(this.api,s),p=this.getAmountFromVUsdFormatted(c,s,u),I,h=await this.api.getPendingInfo();for(let R in h[s.chainSymbol]){let B=h[s.chainSymbol];if(!B)throw new G("Cannot find pending info for "+s.chainSymbol);I=B[R]}if(I){let R=eo(I.totalSentAmount,u),B=this.getAmountFromVUsdFormatted(c,s,R),W;return Ne(B.int).gt(p.int)?W={min:p,max:B}:W={min:B,max:p},{pendingTxs:I.pendingTxs,pendingAmount:{int:Oe(I.totalSentAmount,3,s.decimals).toFixed(0),float:z(I.totalSentAmount,3).toFixed()},estimatedAmount:W}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:p,max:p}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){ae(i),te("amountFloat",i,a.decimals);let r=O(i,a.decimals);if(r.eq(0))return 0;let s=lt(r,a,await we(this.api,a)),d=xe(s,a.decimals);return Ea(r,d)}async calculateFeePercentOnDestinationChain(i,a,r){ae(i),te("amountFloat",i,a.decimals);let s=O(i,a.decimals);if(s.eq(0))return 0;let d=lt(s,a,await we(this.api,a)),c=Xn(d,r,await we(this.api,r)),u=xe(d,r.decimals);return Ea(u,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,r,s){return ae(i),te("amountToSendFloat",i,a.decimals),{amountToSendFloat:Ne(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,r,s),gasFeeOptions:await this.getGasFeeOptions(a,r,s)}}async getAmountToSendAndGasFeeOptions(i,a,r,s){return ae(i),te("amountToBeReceivedFloat",i,r.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,r,s),amountToBeReceivedFloat:Ne(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,r,s)}}async getAmountToBeReceived(i,a,r,s){return this.getAmountToBeReceivedCompute(i,a,r,s,async()=>await we(this.api,a),async()=>await we(this.api,r))}async getAmountToBeReceivedFromChain(i,a,r,s,d,c){return this.getAmountToBeReceivedCompute(i,a,r,s,async()=>await this.pool.getPoolInfoFromChain(a,d),async()=>await this.pool.getPoolInfoFromChain(r,c))}async getAmountToBeReceivedCompute(i,a,r,s=1,d,c){switch(s){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(i,a,r,await d(),await c());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(i,a,r,s);case 5:return this.getAmountToBeReceivedComputeOft(i,a,r)}}getAmountToBeReceivedComputeWithPools(i,a,r,s,d){ae(i),te("amountToSendFloat",i,a.decimals);let c=O(i,a.decimals),u=lt(c,a,s);return this.getAmountFromVUsdFormatted(u,r,d).float}getAmountToBeReceivedComputeCctp(i,a,r,s){ae(i),te("amountToSendFloat",i,a.decimals);let d=O(i,a.decimals);switch(s){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new Ve("Such route does not support CCTP protocol");let c=d.mul(Ne(1).minus(a.cctpFeeShare)).round(0,Ne.roundUp),u=Oe(c,a.decimals,r.decimals).round(0);return z(u,r.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new Ve("Such route does not support CCTP V2 protocol");let c=d.mul(Ne(1).minus(a.cctpV2FeeShare)).round(0,Ne.roundUp),u=Oe(c,a.decimals,r.decimals).round(0);return z(u,r.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(i,a,r){ae(i),te("amountToSendFloat",i,a.decimals);let s=O(i,a.decimals);if(!a.oftBridgeAddress||!r.oftBridgeAddress||a.oftId!==r.oftId)throw new Pe("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!d)throw new Pe("Such route does not support OFT protocol");let c=s.mul(Ne(1).minus(d)).round(0,Ne.roundUp),u=Oe(c,a.decimals,r.decimals).round(0);return z(u,r.decimals).toFixed()}async getAmountToSend(i,a,r,s){return this.getAmountToSendCompute(i,a,r,s,()=>we(this.api,a),()=>we(this.api,r))}async getAmountToSendFromChain(i,a,r,s,d,c){return this.getAmountToSendCompute(i,a,r,s,()=>this.pool.getPoolInfoFromChain(a,d),()=>this.pool.getPoolInfoFromChain(r,c))}async getAmountToSendCompute(i,a,r,s=1,d,c){switch(s){case 1:case 2:return this.getAmountToSendComputeWithPools(i,a,r,await d(),await c());case 3:case 4:return this.getAmountToSendComputeCctp(i,a,r,s);case 5:return this.getAmountToSendComputeOft(i,a,r)}}getAmountToSendComputeWithPools(i,a,r,s,d){ae(i),te("amountToBeReceivedFloat",i,r.decimals);let c=O(i,r.decimals),u=no(c,r,d),p=to(u,a,s);if(Ne(p).lte(0))throw new ht;return z(p,a.decimals).toFixed()}getAmountToSendComputeCctp(i,a,r,s){ae(i),te("amountToBeReceivedFloat",i,r.decimals);let d=O(i,r.decimals);switch(s){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new Ve("Such route does not support CCTP protocol");let c=d.div(Ne(1).minus(a.cctpFeeShare)).round(0,Ne.roundDown),u=Oe(c,r.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new Ve("Such route does not support CCTP V2 protocol");let c=d.div(Ne(1).minus(a.cctpV2FeeShare)).round(0,Ne.roundDown),u=Oe(c,r.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}}}async getAmountToSendComputeOft(i,a,r){ae(i),te("amountToBeReceivedFloat",i,r.decimals);let s=O(i,r.decimals);if(!a.oftId||!r.oftId||!a.oftBridgeAddress||a.oftId!==r.oftId)throw new Pe("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!d)throw new Pe("Such route does not support OFT protocol");let c=s.div(Ne(1).minus(d)).round(0,Ne.roundDown),u=Oe(c,r.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,r){return $a(i,a.allbridgeChainId,r,this.api)}getAverageTransferTime(i,a,r){return i.transferTime?.[a.chainSymbol]?.[r]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let r=(i instanceof Array?i:[i]).map(s=>({chainSymbol:s.chainSymbol,poolAddress:s.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(i){return ao(i)}async getExtraGasMaxLimits(i,a,r){return await qa(i,a,r,this.api)}async getVUsdFromAmount(i,a,r){ae(i);let s;a=="float"?(te("amount",i,r.decimals),s=O(i,r.decimals).toFixed()):s=i;let d=lt(s,r,await we(this.api,r));return{int:d,float:z(d,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await we(this.api,a))}getAmountFromVUsdFormatted(i,a,r){ae(i);let s=Xn(i,a,r);if(Ne(s).lt(0))throw new ht;return{int:s,float:z(s,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,r){return ys(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await we(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await we(this.api,r)})}async swapAndBridgeFeeCalculationReverse(i,a,r){let s=Cs(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await we(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await we(this.api,r)}),d=s.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ne(d).lt(0))throw new ht;return s}async getSendAmountDetails(i,a,r,s){ae(i);let d;return a=="float"?(te("amount",i,r.decimals),d=O(i,r.decimals).toFixed()):d=i,Is(d,r,await we(this.api,r),s,await we(this.api,s))}};function og(o){return"solanaRpcUrl"in o}var Zs=class{params;bridge;pool;yield;utils;service;constructor(i,a=ri){let r;og(i)?r=new ni({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):r=new ni(i),this.service=new Va(r,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new Xa(this.service),this.params=a}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,a="swap"){return this.service.tokensByChain(i,a)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,r){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,r,s){return this.service.getPendingStatusInfo(i,a,r,s)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,r){return this.service.calculateFeePercentOnDestinationChain(i,a,r)}async getAmountToBeReceivedAndGasFeeOptions(i,a,r,s){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,r,s)}async getAmountToSendAndGasFeeOptions(i,a,r,s){return this.service.getAmountToSendAndGasFeeOptions(i,a,r,s)}async getAmountToBeReceived(i,a,r,s=1){return this.service.getAmountToBeReceived(i,a,r,s)}async getAmountToBeReceivedFromChain(i,a,r,s=1,d,c){return this.service.getAmountToBeReceivedFromChain(i,a,r,s,d,c)}getAmountToBeReceivedFromPools(i,a,r,s,d,c=1){switch(c){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(i,a,r,s,d);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(i,a,r,c)}}async getAmountToSend(i,a,r,s=1){return this.service.getAmountToSend(i,a,r,s)}async getAmountToSendFromChain(i,a,r,s=1,d,c){return this.service.getAmountToSendFromChain(i,a,r,s,d,c)}getAmountToSendFromPools(i,a,r,s,d,c=1){switch(c){case 1:case 2:return this.service.getAmountToSendComputeWithPools(i,a,r,s,d);case 3:case 4:return this.service.getAmountToSendComputeCctp(i,a,r,c)}}async getGasFeeOptions(i,a,r){return this.service.getGasFeeOptions(i,a,r)}getAverageTransferTime(i,a,r){return this.service.getAverageTransferTime(i,a,r)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a,r=1){return this.service.getExtraGasMaxLimits(i,a,r)}async getVUsdFromAmount(i,a,r){return this.service.getVUsdFromAmount(i,a,r)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,r){return this.service.swapAndBridgeFeeCalculation(i,a,r)}async swapAndBridgeFeeCalculationReverse(i,a,r){return this.service.swapAndBridgeFeeCalculationReverse(i,a,r)}async getSendAmountDetails(i,a,r,s){return this.service.getSendAmountDetails(i,a,r,s)}};export{za as AddressStatus,Zs as AllbridgeCoreSdk,vi as AmountFormat,Ft as AmountNotEnoughError,di as ArgumentInvalidDecimalsError,Ve as CCTPDoesNotSupportedError,qe as ChainSymbol,ee as ChainType,Us as ErrorCode,si as ExtraGasMaxLimitExceededError,ot as FeePaymentMethod,ht as InsufficientPoolLiquidityError,gt as InvalidAmountError,Nt as InvalidGasFeePaymentOptionError,oi as InvalidMessengerOptionError,on as InvalidTxError,Xe as JupiterError,De as Messenger,E as MethodNotSupportedError,ci as NodeRpcUrlNotInitializedError,Pe as OFTDoesNotSupportedError,G as SdkError,Ie as SdkRootError,tr as SolanaAutoTxFee,Zn as TimeoutError,gi as TxTooLargeError,Nn as VerifyTxError,Ai as YieldDoesNotSupportedError,AA as assertYieldIsSupported,Ia as isYieldSupported,ri as mainnet,Fg as nodeRpcUrlsDefault,wg as nodeUrlsDefault};
|
|
6
|
+
Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},$i=class{constructor(i){this.value=i}asByteArray(){return this.value}asString(){return this.value!==void 0?Y.from(this.value).toString("utf-8"):void 0}},M=class o{static get create(){return{_resolveByMethod(i){switch(i.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return o.create.createApplication(i)}throw new Error("Unknown ' + verb + ' method")},createApplication(i){return{...i,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.owner,i.args.router,i.args.a,i.args.asset,i.args.feeShareBp,i.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(i){return{...i,method:"optInToApplication()void",args:Array.isArray(i.args)?i.args:[]}},deposit(i){return{...i,method:"deposit(axfer,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(i){return{...i,method:"closeOutOfApplication(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.budget]}}}}static optInAsset(i){return{...i,method:"optInAsset()void",args:Array.isArray(i.args)?i.args:[]}}static deposit(i){return{...i,method:"deposit(axfer,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.assetTransferRef,i.args.budget]}}static withdraw(i){return{...i,method:"withdraw(uint64,uint64)void",args:Array.isArray(i.args)?i.args:[i.args.amountLp,i.args.budget]}}static swapToVUsd(i){return{...i,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(i.args)?i.args:[i.args.user,i.args.amount,i.args.zeroFee]}}static swapFromVUsd(i){return{...i,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(i.args)?i.args:[i.args.user,i.args.amount,i.args.receiveAmountMin,i.args.zeroFee]}}static setFeeShare(i){return{...i,method:"setFeeShare(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.feeShareBp]}}static adjustTotalLpAmount(i){return{...i,method:"adjustTotalLpAmount()void",args:Array.isArray(i.args)?i.args:[]}}static setBalanceRatioMinBp(i){return{...i,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.balanceRatioMinBp]}}static stopDeposit(i){return{...i,method:"stopDeposit()void",args:Array.isArray(i.args)?i.args:[]}}static startDeposit(i){return{...i,method:"startDeposit()void",args:Array.isArray(i.args)?i.args:[]}}static stopWithdraw(i){return{...i,method:"stopWithdraw()void",args:Array.isArray(i.args)?i.args:[]}}static startWithdraw(i){return{...i,method:"startWithdraw()void",args:Array.isArray(i.args)?i.args:[]}}static setStopAuthority(i){return{...i,method:"setStopAuthority(address)void",args:Array.isArray(i.args)?i.args:[i.args.stopAuthority]}}static setRouter(i){return{...i,method:"setRouter(address)void",args:Array.isArray(i.args)?i.args:[i.args.router]}}static claimRewards(i){return{...i,method:"claimRewards()void",args:Array.isArray(i.args)?i.args:[]}}static setAdminFeeShare(i){return{...i,method:"setAdminFeeShare(uint64)void",args:Array.isArray(i.args)?i.args:[i.args.adminFeeShareBp]}}static claimAdminFee(i){return{...i,method:"claimAdminFee()void",args:Array.isArray(i.args)?i.args:[]}}static pendingReward(i){return{...i,method:"pendingReward(address)uint64",args:Array.isArray(i.args)?i.args:[i.args.user]}}static transferOwnership(i){return{...i,method:"transferOwnership(address)void",args:Array.isArray(i.args)?i.args:[i.args.newOwner]}}};var qi=class o{appClient;constructor(i){this.appClient=i instanceof Ei?i:new Ei({...i,appSpec:_i})}decodeReturnValue(i,a){return a!==void 0?Pc(a,this.appClient.getABIMethod(i),_i.structs):void 0}static async fromCreatorAndName(i){return new o(await Ei.fromCreatorAndName({...i,appSpec:_i}))}static async fromNetwork(i){return new o(await Ei.fromNetwork({...i,appSpec:_i}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(i={args:[]})=>this.appClient.params.optIn(M.optIn.optInToApplication(i)),deposit:i=>this.appClient.params.optIn(M.optIn.deposit(i))},closeOut:{closeOutOfApplication:(i={args:[void 0]})=>this.appClient.params.closeOut(M.closeOut.closeOutOfApplication(i))},clearState:i=>this.appClient.params.bare.clearState(i),optInAsset:(i={args:[]})=>this.appClient.params.call(M.optInAsset(i)),deposit:i=>this.appClient.params.call(M.deposit(i)),withdraw:i=>this.appClient.params.call(M.withdraw(i)),swapToVUsd:i=>this.appClient.params.call(M.swapToVUsd(i)),swapFromVUsd:i=>this.appClient.params.call(M.swapFromVUsd(i)),setFeeShare:i=>this.appClient.params.call(M.setFeeShare(i)),adjustTotalLpAmount:(i={args:[]})=>this.appClient.params.call(M.adjustTotalLpAmount(i)),setBalanceRatioMinBp:i=>this.appClient.params.call(M.setBalanceRatioMinBp(i)),stopDeposit:(i={args:[]})=>this.appClient.params.call(M.stopDeposit(i)),startDeposit:(i={args:[]})=>this.appClient.params.call(M.startDeposit(i)),stopWithdraw:(i={args:[]})=>this.appClient.params.call(M.stopWithdraw(i)),startWithdraw:(i={args:[]})=>this.appClient.params.call(M.startWithdraw(i)),setStopAuthority:i=>this.appClient.params.call(M.setStopAuthority(i)),setRouter:i=>this.appClient.params.call(M.setRouter(i)),claimRewards:(i={args:[]})=>this.appClient.params.call(M.claimRewards(i)),setAdminFeeShare:i=>this.appClient.params.call(M.setAdminFeeShare(i)),claimAdminFee:(i={args:[]})=>this.appClient.params.call(M.claimAdminFee(i)),pendingReward:i=>this.appClient.params.call(M.pendingReward(i)),transferOwnership:i=>this.appClient.params.call(M.transferOwnership(i))};createTransaction={optIn:{optInToApplication:(i={args:[]})=>this.appClient.createTransaction.optIn(M.optIn.optInToApplication(i)),deposit:i=>this.appClient.createTransaction.optIn(M.optIn.deposit(i))},closeOut:{closeOutOfApplication:(i={args:[void 0]})=>this.appClient.createTransaction.closeOut(M.closeOut.closeOutOfApplication(i))},clearState:i=>this.appClient.createTransaction.bare.clearState(i),optInAsset:(i={args:[]})=>this.appClient.createTransaction.call(M.optInAsset(i)),deposit:i=>this.appClient.createTransaction.call(M.deposit(i)),withdraw:i=>this.appClient.createTransaction.call(M.withdraw(i)),swapToVUsd:i=>this.appClient.createTransaction.call(M.swapToVUsd(i)),swapFromVUsd:i=>this.appClient.createTransaction.call(M.swapFromVUsd(i)),setFeeShare:i=>this.appClient.createTransaction.call(M.setFeeShare(i)),adjustTotalLpAmount:(i={args:[]})=>this.appClient.createTransaction.call(M.adjustTotalLpAmount(i)),setBalanceRatioMinBp:i=>this.appClient.createTransaction.call(M.setBalanceRatioMinBp(i)),stopDeposit:(i={args:[]})=>this.appClient.createTransaction.call(M.stopDeposit(i)),startDeposit:(i={args:[]})=>this.appClient.createTransaction.call(M.startDeposit(i)),stopWithdraw:(i={args:[]})=>this.appClient.createTransaction.call(M.stopWithdraw(i)),startWithdraw:(i={args:[]})=>this.appClient.createTransaction.call(M.startWithdraw(i)),setStopAuthority:i=>this.appClient.createTransaction.call(M.setStopAuthority(i)),setRouter:i=>this.appClient.createTransaction.call(M.setRouter(i)),claimRewards:(i={args:[]})=>this.appClient.createTransaction.call(M.claimRewards(i)),setAdminFeeShare:i=>this.appClient.createTransaction.call(M.setAdminFeeShare(i)),claimAdminFee:(i={args:[]})=>this.appClient.createTransaction.call(M.claimAdminFee(i)),pendingReward:i=>this.appClient.createTransaction.call(M.pendingReward(i)),transferOwnership:i=>this.appClient.createTransaction.call(M.transferOwnership(i))};send={optIn:{optInToApplication:async(i={args:[]})=>{let a=await this.appClient.send.optIn(M.optIn.optInToApplication(i));return{...a,return:a.return}},deposit:async i=>{let a=await this.appClient.send.optIn(M.optIn.deposit(i));return{...a,return:a.return}}},closeOut:{closeOutOfApplication:async(i={args:[void 0]})=>{let a=await this.appClient.send.closeOut(M.closeOut.closeOutOfApplication(i));return{...a,return:a.return}}},clearState:i=>this.appClient.send.bare.clearState(i),optInAsset:async(i={args:[]})=>{let a=await this.appClient.send.call(M.optInAsset(i));return{...a,return:a.return}},deposit:async i=>{let a=await this.appClient.send.call(M.deposit(i));return{...a,return:a.return}},withdraw:async i=>{let a=await this.appClient.send.call(M.withdraw(i));return{...a,return:a.return}},swapToVUsd:async i=>{let a=await this.appClient.send.call(M.swapToVUsd(i));return{...a,return:a.return}},swapFromVUsd:async i=>{let a=await this.appClient.send.call(M.swapFromVUsd(i));return{...a,return:a.return}},setFeeShare:async i=>{let a=await this.appClient.send.call(M.setFeeShare(i));return{...a,return:a.return}},adjustTotalLpAmount:async(i={args:[]})=>{let a=await this.appClient.send.call(M.adjustTotalLpAmount(i));return{...a,return:a.return}},setBalanceRatioMinBp:async i=>{let a=await this.appClient.send.call(M.setBalanceRatioMinBp(i));return{...a,return:a.return}},stopDeposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.stopDeposit(i));return{...a,return:a.return}},startDeposit:async(i={args:[]})=>{let a=await this.appClient.send.call(M.startDeposit(i));return{...a,return:a.return}},stopWithdraw:async(i={args:[]})=>{let a=await this.appClient.send.call(M.stopWithdraw(i));return{...a,return:a.return}},startWithdraw:async(i={args:[]})=>{let a=await this.appClient.send.call(M.startWithdraw(i));return{...a,return:a.return}},setStopAuthority:async i=>{let a=await this.appClient.send.call(M.setStopAuthority(i));return{...a,return:a.return}},setRouter:async i=>{let a=await this.appClient.send.call(M.setRouter(i));return{...a,return:a.return}},claimRewards:async(i={args:[]})=>{let a=await this.appClient.send.call(M.claimRewards(i));return{...a,return:a.return}},setAdminFeeShare:async i=>{let a=await this.appClient.send.call(M.setAdminFeeShare(i));return{...a,return:a.return}},claimAdminFee:async(i={args:[]})=>{let a=await this.appClient.send.call(M.claimAdminFee(i));return{...a,return:a.return}},pendingReward:async i=>{let a=await this.appClient.send.call(M.pendingReward(i));return{...a,return:a.return}},transferOwnership:async i=>{let a=await this.appClient.send.call(M.transferOwnership(i));return{...a,return:a.return}}};clone(i){return new o(this.appClient.clone(i))}async pendingReward(i){return(await this.appClient.send.call(M.pendingReward(i))).return}state={global:{getAll:async()=>{let i=await this.appClient.state.global.getAll();return{feeShareBp:i.feeShareBP,router:i.router,tokenBalance:i.tokenBalance,vUsdBalance:i.vUsdBalance,balanceRatioMinBp:i.balanceRatioMinBP,reserves:i.reserves,a:i.a,d:i.d,tokenAmountReduce:i.tokenAmountReduce,tokenAmountIncrease:i.tokenAmountIncrease,stopAuthority:i.stopAuthority,canDeposit:i.canDeposit,canWithdraw:i.canWithdraw,asset:i.asset,adminFeeShareBp:i.adminFeeShareBP,totalSupply:i.totalSupply,accRewardPerShareP:new $i(i.accRewardPerShareP),adminFeeAmount:i.adminFeeAmount,owner:i.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new $i(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:i=>{let a=typeof i=="string"?i:Sc(i.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(a).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(a).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(a).getValue("userRewardDebt")}}};newGroup(){let i=this,a=this.algorand.newGroup(),r=Promise.resolve(),s=[];return{optInAsset(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.optInAsset(d))),s.push(void 0),this},deposit(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.deposit(d))),s.push(void 0),this},withdraw(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.withdraw(d))),s.push(void 0),this},swapToVUsd(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapToVUsd(d))),s.push(c=>i.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",c)),this},swapFromVUsd(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.swapFromVUsd(d))),s.push(c=>i.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",c)),this},setFeeShare(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setFeeShare(d))),s.push(void 0),this},adjustTotalLpAmount(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.adjustTotalLpAmount(d))),s.push(void 0),this},setBalanceRatioMinBp(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setBalanceRatioMinBp(d))),s.push(void 0),this},stopDeposit(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.stopDeposit(d))),s.push(void 0),this},startDeposit(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.startDeposit(d))),s.push(void 0),this},stopWithdraw(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.stopWithdraw(d))),s.push(void 0),this},startWithdraw(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.startWithdraw(d))),s.push(void 0),this},setStopAuthority(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setStopAuthority(d))),s.push(void 0),this},setRouter(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setRouter(d))),s.push(void 0),this},claimRewards(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.claimRewards(d))),s.push(void 0),this},setAdminFeeShare(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.setAdminFeeShare(d))),s.push(void 0),this},claimAdminFee(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.claimAdminFee(d))),s.push(void 0),this},pendingReward(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.pendingReward(d))),s.push(c=>i.decodeReturnValue("pendingReward(address)uint64",c)),this},transferOwnership(d){return r=r.then(async()=>a.addAppCallMethodCall(await i.params.transferOwnership(d))),s.push(void 0),this},get optIn(){return{optInToApplication:d=>(r=r.then(async()=>a.addAppCallMethodCall(await i.params.optIn.optInToApplication(d))),s.push(void 0),this),deposit:d=>(r=r.then(async()=>a.addAppCallMethodCall(await i.params.optIn.deposit(d))),s.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:d=>(r=r.then(async()=>a.addAppCallMethodCall(await i.params.closeOut.closeOutOfApplication(d))),s.push(void 0),this)}},clearState(d){return r=r.then(()=>a.addAppCall(i.params.clearState(d))),this},addTransaction(d,c){return r=r.then(()=>a.addTransaction(d,c)),this},async composer(){return await r,a},async simulate(d){await r;let c=await(d?a.simulate(d):a.simulate());return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}},async send(d){await r;let c=await a.send(d);return{...c,returns:c.returns?.map((u,p)=>s[p]!==void 0?s[p](u):u.returnValue)}}}}};b();C();y();b();C();y();var Be=class{lpAmount;rewardDebt;constructor(i){this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}get userLiquidity(){return z(this.lpAmount,3).toFixed()}earned(i,a){let r=io(this.lpAmount,this.rewardDebt,i.accRewardPerShareP,i.p);return a?z(r,a).toFixed():r}};b();C();y();var ke=class{};var zn=class extends ke{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}chainType="ALG";P=48;async buildRawTransactionClaimRewards(a){let r=a.accountAddress,s=BigInt(a.token.tokenAddress),d=BigInt(a.token.poolAddress),c=this.getPool(d),u=this.algorand.newGroup();u.addAppCallMethodCall(await c.params.claimRewards({args:[],sender:r,extraFee:Zt(1),assetReferences:[s]}));let{transactions:p}=await u.buildTransactions();return p=Br(p),Gt(...p)}async buildRawTransactionDeposit(a){let r=a.accountAddress,s=BigInt(a.amount),d=BigInt(a.token.tokenAddress),c=BigInt(a.token.poolAddress),u=this.getPool(c),I=await hi(c,r,this.algorand)?os.NoOpOC:os.OptInOC,h=this.algorand.newGroup(),R=await this.algorand.createTransaction.assetTransfer({assetId:d,amount:s,sender:r,receiver:u.appAddress});h.addAppCallMethodCall(await u.params.deposit({args:{assetTransferRef:R},sender:r,onComplete:I,extraFee:Zt(5)}));let{transactions:B}=await h.buildTransactions();return B=Br(B),Gt(...B)}async buildRawTransactionWithdraw(a){let r=a.accountAddress,s=BigInt(a.amount),d=BigInt(a.token.tokenAddress),c=BigInt(a.token.poolAddress),u=this.getPool(c),p=this.algorand.newGroup();p.addAppCallMethodCall(await u.params.withdraw({args:{amountLp:s},sender:r,assetReferences:[d],extraFee:Zt(7)}));let{transactions:I}=await p.buildTransactions();return I=Br(I),Gt(...I)}async getPoolInfoFromChain(a){let s=await this.getPool(BigInt(a.poolAddress)).state.global.getAll(),d=s.a?.toString(),c=s.d?.toString(),u=s.tokenBalance?.toString(),p=s.vUsdBalance?.toString(),I=s.totalSupply?.toString(),h=Lc(s.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(d&&c&&u&&p&&I&&h){let R=Te({tokenBalance:u,vUsdBalance:p});return{aValue:d,dValue:c,tokenBalance:u,vUsdBalance:p,totalLpAmount:I,accRewardPerShareP:h,p:this.P,imbalance:R}}throw new G("Unable to pool info from chain")}async getUserBalanceInfo(a,r){let s=BigInt(r.poolAddress),d=this.getPool(s);try{let{balance:c,userRewardDebt:u}=await d.state.local(a).getAll();if(c!==void 0&&u!==void 0)return new Be({lpAmount:c.toString(),rewardDebt:u.toString()})}catch{let p=(await this.algorand.account.getInformation(a)).appsLocalState;if(p&&!p.find(({id:h})=>h===s))return new Be({lpAmount:"0",rewardDebt:"0"})}throw new G("Unable to get user balance")}getPool(a){return this.algorand.client.getTypedAppClientById(qi,{appId:a})}};b();C();y();import{Web3 as Mt}from"web3";b();C();y();var kc={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},xn=kc;var On=class extends ke{constructor(a,r){super();this.web3=a;this.api=r}chainType="EVM";P=52;async getUserBalanceInfo(a,r){let s;try{s=await li(this.getUserBalanceInfoByBatch(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{s=await Ka(()=>this.getUserBalanceInfoPerProperty(a,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return s}async getPoolInfoFromChain(a){let r;try{r=await li(this.getPoolInfoByBatch(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5e3)}catch{r=await Ka(()=>this.getPoolInfoPerProperty(a),`Cannot get PoolInfo for ${a.name} on ${a.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(a,r){let s=new this.web3.eth.BatchRequest,d=this.getPoolContract(r.poolAddress),c=d.methods.userRewardDebt(a).encodeABI(),u=d.methods.balanceOf(a).encodeABI();s.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]}),s.add({method:"eth_call",params:[{to:r.poolAddress,data:u},"latest"]});let[p,I]=await s.execute();if(p&&I&&!p.error&&!I.error)return new Be({lpAmount:Mt.utils.toBigInt(I.result).toString(),rewardDebt:Mt.utils.toBigInt(p.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(a,r){let s=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(a).call()).toString(),d=(await this.getPoolContract(r.poolAddress).methods.balanceOf(a).call()).toString();return new Be({lpAmount:d,rewardDebt:s})}async getPoolInfoByBatch(a){let r=new this.web3.eth.BatchRequest,s=this.getPoolContract(a.poolAddress),d=s.methods.a().encodeABI(),c=s.methods.d().encodeABI(),u=s.methods.tokenBalance().encodeABI(),p=s.methods.vUsdBalance().encodeABI(),I=s.methods.totalSupply().encodeABI(),h=s.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:a.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:u},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:p},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:I},"latest"]}),r.add({method:"eth_call",params:[{to:a.poolAddress,data:h},"latest"]});let[R,B,W,N,Z,V]=await r.execute();if(R&&B&&W&&N&&Z&&V&&!R.error&&!B.error&&!W.error&&!N.error&&!Z.error&&!V.error){let S=Mt.utils.toBigInt(W.result).toString(),T=Mt.utils.toBigInt(N.result).toString(),k=Te({tokenBalance:S,vUsdBalance:T});return{aValue:Mt.utils.toBigInt(R.result).toString(),dValue:Mt.utils.toBigInt(B.result).toString(),tokenBalance:S,vUsdBalance:T,totalLpAmount:Mt.utils.toBigInt(Z.result).toString(),accRewardPerShareP:Mt.utils.toBigInt(V.result).toString(),p:this.P,imbalance:k}}throw new Error("Batched failed")}async getPoolInfoPerProperty(a){let r=this.getPoolContract(a.poolAddress),s=(await r.methods.a().call()).toString(),d=(await r.methods.d().call()).toString(),c=(await r.methods.tokenBalance().call()).toString(),u=(await r.methods.vUsdBalance().call()).toString(),p=(await r.methods.totalSupply().call()).toString(),I=(await r.methods.accRewardPerShareP().call()).toString(),h=Te({tokenBalance:c,vUsdBalance:u});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:u,totalLpAmount:p,accRewardPerShareP:I,p:this.P,imbalance:h}}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.deposit(a.amount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.withdraw(a.amount).encodeABI()})}async buildRawTransactionClaimRewards(a){return Promise.resolve({...this.buildTxParams(a),data:this.getPoolContract(a.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(a){return{from:a.accountAddress,to:a.token.poolAddress,value:"0"}}getPoolContract(a){return new this.web3.eth.Contract(xn.abi,a)}};b();C();y();var ea=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s}async approve(i,a){if(a){let r=i,s=a;return this.tokenService.buildRawTransactionApprove({...s,spender:s.token.poolAddress},r)}else{let r=i;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),i.amount=O(i.amount,i.token.decimals).toFixed(),mn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),i.amount=O(i.amount,3).toFixed(),mn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionWithdraw(i)}async claimRewards(i,a){return mn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).buildRawTransactionClaimRewards(i)}};b();C();y();import{AnchorProvider as Hc,BN as ss,Program as Mc,web3 as jc}from"@coral-xyz/anchor";import{createAssociatedTokenAccountInstruction as Jc}from"@solana/spl-token";import{Connection as zc,PublicKey as jt}from"@solana/web3.js";var ta=class extends ke{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}chainType="SOLANA";P=48;async getUserBalanceInfo(a,r){let s=this.buildAnchorProvider(a),d=this.getBridge(r.bridgeAddress,s),c=new jt(r.poolAddress),u=await d.account.pool.fetch(c);try{let p=await er(new jt(a),u.mint,d.programId),{lpAmount:I,rewardDebt:h}=await d.account.userDeposit.fetch(p);return new Be({lpAmount:I.toString(),rewardDebt:h.toString()})}catch{return new Be({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(a){let r=this.buildAnchorProvider(a.bridgeAddress),s=await this.getBridge(a.bridgeAddress,r).account.pool.fetch(a.poolAddress),d=s.vUsdBalance.toString(),c=s.tokenBalance.toString(),u=Te({tokenBalance:c,vUsdBalance:d});return{dValue:s.d.toString(),aValue:s.a.toString(),totalLpAmount:s.totalLpAmount.toString(),vUsdBalance:d,tokenBalance:c,accRewardPerShareP:s.accRewardPerShareP.toString(),p:this.P,imbalance:u}}async buildRawTransactionDeposit(a){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),c=await r.methods.deposit(new ss(a.amount)).accounts(s).preInstructions(d).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new jt(a.accountAddress),await cn(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionWithdraw(a){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),c=await r.methods.withdraw(new ss(a.amount)).accounts(s).preInstructions(d).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new jt(a.accountAddress),await cn(c,a.txFeeParams,this.solanaRpcUrl),c}async buildRawTransactionClaimRewards(a){let{bridge:r,accounts:s,preInstructions:d}=await this.prepareDataForTransaction(a),c=await r.methods.claimRewards().accounts(s).preInstructions(d).transaction();return c.recentBlockhash=(await this.buildAnchorProvider(a.accountAddress).connection.getLatestBlockhash()).blockhash,c.feePayer=new jt(a.accountAddress),await cn(c,a.txFeeParams,this.solanaRpcUrl),c}async prepareDataForTransaction(a){let r=this.buildAnchorProvider(a.accountAddress),s=this.getBridge(a.token.bridgeAddress,r),{accounts:d,preInstructions:c}=await this._getLPTransactionData(s,a.token.poolAddress,a.accountAddress,r);return{bridge:s,accounts:d,preInstructions:c}}getBridge(a,r){return new Mc({...Pt,address:a},r)}buildAnchorProvider(a){let r=new zc(this.solanaRpcUrl,"confirmed"),s=new jt(a);return new Hc(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(a,r,s,d){let c=new jt(s),u=await tt(a.programId),p=await Vt(a.programId),I=new jt(r),R=(await a.account.pool.fetch(I)).mint,B=_e(c,R),W=await Bt(R,a.programId),N=await er(c,R,a.programId),Z=[jc.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await An(B,d)}catch{let T=Jc(c,B,c,R);Z.push(T)}try{await a.account.userDeposit.fetch(N)}catch{let T=await a.methods.initDepositAccount().accountsPartial({mint:R,user:c,userDeposit:N}).instruction();Z.push(T)}return{accounts:{mint:R,user:c,config:u,pool:I,bridgeAuthority:p,userDeposit:N,userToken:B,bridgeToken:W},preInstructions:Z}}};b();C();y();import{contract as JP}from"@stellar/stellar-sdk";b();C();y();import{contract as t}from"@stellar/stellar-sdk";var xc=t.Spec,Oc=t.Client;var na=class extends Oc{constructor(a){super(new xc(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),a);this.options=a}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};b();C();y();import{contract as CB,rpc as Qc}from"@stellar/stellar-sdk";var ds=Qc.Api;function bn(o){let{simulation:i,options:a}=o;if(!i)throw new Error("Soroban assembled transaction does not have simulation");if(ds.isSimulationSuccess(i))return i.result==null?void 0:a.parseResultXdr(i.result.retval);throw new Error(i.error)}function yn(o){let{simulation:i}=o;if(!i)throw new Error("Soroban assembled transaction does not have simulation");return ds.isSimulationError(i)}var ia=class extends ke{constructor(a,r,s){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=s}chainType="SRB";P=48;async getUserBalanceInfo(a,r){let d=await this.getContract(r.poolAddress).get_user_deposit({user:a});if(yn(d))throw new G;let c=bn(d);if(!c)throw new G;let u=c.unwrap();return new Be({lpAmount:u.lp_amount.toString(),rewardDebt:u.reward_debt.toString()})}async getPoolInfoFromChain(a){let s=await this.getContract(a.poolAddress).get_pool();if(yn(s))throw new G;let d=bn(s);if(!d)throw new G;let c=d.unwrap();return{aValue:c.a.toString(),accRewardPerShareP:c.acc_reward_per_share_p.toString(),dValue:c.d.toString(),tokenBalance:c.token_balance.toString(),p:this.P,totalLpAmount:c.total_lp_amount.toString(),vUsdBalance:c.v_usd_balance.toString(),imbalance:Te({tokenBalance:c.token_balance.toString(),vUsdBalance:c.v_usd_balance.toString()})}}async buildRawTransactionDeposit(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).deposit({sender:a.accountAddress,amount:BigInt(a.amount)})).toXDR()}async buildRawTransactionWithdraw(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).withdraw({sender:a.accountAddress,amount_lp:BigInt(a.amount)})).toXDR()}async buildRawTransactionClaimRewards(a){return(await this.getContract(a.token.poolAddress,a.accountAddress).claim_rewards({sender:a.accountAddress})).toXDR()}getContract(a,r){let s={publicKey:r,contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new na(s)}};b();C();y();import{ClarigenClient as Kc,contractFactory as Qn}from"@clarigen/core";import{createNetwork as Uc}from"@stacks/network";import{makeRandomPrivKey as Wr,makeUnsignedContractCall as fr,PostConditionMode as Tr,privateKeyToPublic as wr}from"@stacks/transactions";import{Big as Dc}from"big.js";var aa=class extends ke{constructor(a,r,s){super();this.nodeRpcUrl=a;this.params=r;this.api=s;let d=Uc({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Kc(d,this.params.stxHeroApiKey)}chainType="STX";P=48;A="20";client;async getUserBalanceInfo(a,r){let s=Qn(st.pool,r.poolAddress),d=await this.client.ro(s.getLpBalance({user:a})),c=await this.client.ro(s.getUserRewardDebt({user:a}));return new Be({lpAmount:d.toString(),rewardDebt:c.toString()})}async getPoolInfoFromChain(a){let r=Qn(st.pool,a.poolAddress),[s,d,c,u,p]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),I=s.toString(),h=d.toString(),R=c.toString(),B=u.toString(),W=p.toString();if(I&&h&&R&&B&&W){let N=Te({tokenBalance:h,vUsdBalance:R});return{aValue:this.A,dValue:I,tokenBalance:h,vUsdBalance:R,totalLpAmount:B,accRewardPerShareP:W,p:this.P,imbalance:N}}throw new G("Unable to pool info from chain")}async buildRawTransactionDeposit(a){let r=Qn(st.pool,a.token.poolAddress),{contractAddress:s,contractName:d,functionName:c,functionArgs:u}=r.deposit({amount:BigInt(a.amount),ftRef:a.token.tokenAddress}),p=Wr(),I=wr(p),h=ft(a.amount,"lte",a.accountAddress,a.token.tokenAddress,Wt(a.token)),R=ft(0,"gte",a.token.poolAddress,a.token.tokenAddress,Wt(a.token)),B={contractAddress:s,contractName:d,functionName:c,functionArgs:u,publicKey:I,validateWithAbi:!0,network:this.client.network,postConditions:[h,R],postConditionMode:Tr.Deny};return(await fr(B)).serialize()}async buildRawTransactionWithdraw(a){let r=Qn(st.pool,a.token.poolAddress),{contractAddress:s,contractName:d,functionName:c,functionArgs:u}=r.withdraw({amountLp:BigInt(a.amount),ftRef:a.token.tokenAddress}),p=Wr(),I=wr(p),h=ft(xe(a.amount,a.token.decimals).toFixed(0,Dc.roundDown),"gte",a.token.poolAddress,a.token.tokenAddress,Wt(a.token)),R={contractAddress:s,contractName:d,functionName:c,functionArgs:u,publicKey:I,validateWithAbi:!0,network:this.client.network,postConditions:[h],postConditionMode:Tr.Deny};return(await fr(R)).serialize()}async buildRawTransactionClaimRewards(a){let r=Qn(st.pool,a.token.poolAddress),{contractAddress:s,contractName:d,functionName:c,functionArgs:u}=r.claimRewards({ftRef:a.token.tokenAddress}),p=Wr(),I=wr(p),h=ft(0,"gte",a.token.poolAddress,a.token.tokenAddress,Wt(a.token)),R={contractAddress:s,contractName:d,functionName:c,functionArgs:u,publicKey:I,validateWithAbi:!0,network:this.client.network,postConditions:[h],postConditionMode:Tr.Deny};return(await fr(R)).serialize()}};b();C();y();import{SuiClient as nA}from"@mysten/sui/client";import{Transaction as ua}from"@mysten/sui/transactions";var In=at(Lt());b();C();y();Le();b();C();y();Le();import{bcs as cs}from"@mysten/sui/bcs";import{fromB64 as Ec}from"@mysten/sui/utils";function ra(o){return o=x(o),o.startsWith(`${Ht}::balance::Balance<`)}var ze=class o{__StructClass=!0;static get $typeName(){return`${Ht}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;value;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.value=a.value}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return cs.struct("Balance",{value:cs.u64()})}static fromFields(i,a){return o.reified(i).new({value:ne("u64",a.value)})}static fromFieldsWithTypes(i,a){if(!ra(a.type))throw new Error("not a Balance type");return Ct(a,[i]),o.reified(i).new({value:$("u64",a.fields.value)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({value:q("u64",a.value)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ra(a.type))throw new Error(`object at ${a.fields.id} is not a Balance object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ra(a.bcs.type))throw new Error("object at is not a Balance object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,Ec(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching Balance object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!ra(s.data.bcs.type))throw new Error(`object at id ${r} is not a Balance object`);return o.fromSuiObjectData(a,s.data)}};var Zr=at(Lt());b();C();y();Le();var Fr=at(Lt());import{bcs as oa}from"@mysten/sui/bcs";import{fromB64 as _c}from"@mysten/sui/utils";function sa(o){return o=x(o),o.startsWith(`${Fr.PKG_V1}::pool_rewards::PoolRewards<`)}var en=class o{__StructClass=!0;static get $typeName(){return`${Fr.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.accRewardPerShareP=a.accRewardPerShareP,this.adminFeeShareBp=a.adminFeeShareBp,this.adminFee=a.adminFee,this.rewards=a.rewards,this.lpSupply=a.lpSupply}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return oa.struct("PoolRewards",{acc_reward_per_share_p:oa.u128(),admin_fee_share_bp:oa.u64(),admin_fee:ze.bcs,rewards:ze.bcs,lp_supply:oa.u64()})}static fromFields(i,a){return o.reified(i).new({accRewardPerShareP:ne("u128",a.acc_reward_per_share_p),adminFeeShareBp:ne("u64",a.admin_fee_share_bp),adminFee:ne(ze.reified(i),a.admin_fee),rewards:ne(ze.reified(i),a.rewards),lpSupply:ne("u64",a.lp_supply)})}static fromFieldsWithTypes(i,a){if(!sa(a.type))throw new Error("not a PoolRewards type");return Ct(a,[i]),o.reified(i).new({accRewardPerShareP:$("u128",a.fields.acc_reward_per_share_p),adminFeeShareBp:$("u64",a.fields.admin_fee_share_bp),adminFee:$(ze.reified(i),a.fields.admin_fee),rewards:$(ze.reified(i),a.fields.rewards),lpSupply:$("u64",a.fields.lp_supply)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({accRewardPerShareP:q("u128",a.accRewardPerShareP),adminFeeShareBp:q("u64",a.adminFeeShareBp),adminFee:q(ze.reified(i),a.adminFee),rewards:q(ze.reified(i),a.rewards),lpSupply:q("u64",a.lpSupply)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!sa(a.type))throw new Error(`object at ${a.fields.id} is not a PoolRewards object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!sa(a.bcs.type))throw new Error("object at is not a PoolRewards object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,_c(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching PoolRewards object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!sa(s.data.bcs.type))throw new Error(`object at id ${r} is not a PoolRewards object`);return o.fromSuiObjectData(a,s.data)}};b();C();y();Le();var Nr=at(Lt());import{bcs as Cn}from"@mysten/sui/bcs";import{fromB64 as $c}from"@mysten/sui/utils";function da(o){return o=x(o),o.startsWith(`${Nr.PKG_V1}::pool_state::PoolState<`)}var tn=class o{__StructClass=!0;static get $typeName(){return`${Nr.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.tokenBalance=a.tokenBalance,this.vusdBalance=a.vusdBalance,this.d=a.d,this.a=a.a,this.balanceRatioMinBp=a.balanceRatioMinBp}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return Cn.struct("PoolState",{token_balance:Cn.u64(),vusd_balance:Cn.u64(),d:Cn.u64(),a:Cn.u64(),balance_ratio_min_bp:Cn.u64()})}static fromFields(i,a){return o.reified(i).new({tokenBalance:ne("u64",a.token_balance),vusdBalance:ne("u64",a.vusd_balance),d:ne("u64",a.d),a:ne("u64",a.a),balanceRatioMinBp:ne("u64",a.balance_ratio_min_bp)})}static fromFieldsWithTypes(i,a){if(!da(a.type))throw new Error("not a PoolState type");return Ct(a,[i]),o.reified(i).new({tokenBalance:$("u64",a.fields.token_balance),vusdBalance:$("u64",a.fields.vusd_balance),d:$("u64",a.fields.d),a:$("u64",a.fields.a),balanceRatioMinBp:$("u64",a.fields.balance_ratio_min_bp)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({tokenBalance:q("u64",a.tokenBalance),vusdBalance:q("u64",a.vusdBalance),d:q("u64",a.d),a:q("u64",a.a),balanceRatioMinBp:q("u64",a.balanceRatioMinBp)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!da(a.type))throw new Error(`object at ${a.fields.id} is not a PoolState object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!da(a.bcs.type))throw new Error("object at is not a PoolState object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,$c(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching PoolState object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!da(s.data.bcs.type))throw new Error(`object at id ${r} is not a PoolState object`);return o.fromSuiObjectData(a,s.data)}};import{bcs as Kn}from"@mysten/sui/bcs";import{fromB64 as qc}from"@mysten/sui/utils";function ca(o){return o=x(o),o.startsWith(`${Zr.PKG_V1}::pool::Pool<`)}var Aa=class o{__StructClass=!0;static get $typeName(){return`${Zr.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.id=a.id,this.state=a.state,this.rewards=a.rewards,this.feeShareBp=a.feeShareBp,this.canDeposit=a.canDeposit,this.canWithdraw=a.canWithdraw,this.decimals=a.decimals,this.balance=a.balance}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return Kn.struct("Pool",{id:it.bcs,state:tn.bcs,rewards:en.bcs,fee_share_bp:Kn.u64(),can_deposit:Kn.bool(),can_withdraw:Kn.bool(),decimals:Kn.u8(),balance:ze.bcs})}static fromFields(i,a){return o.reified(i).new({id:ne(it.reified(),a.id),state:ne(tn.reified(i),a.state),rewards:ne(en.reified(i),a.rewards),feeShareBp:ne("u64",a.fee_share_bp),canDeposit:ne("bool",a.can_deposit),canWithdraw:ne("bool",a.can_withdraw),decimals:ne("u8",a.decimals),balance:ne(ze.reified(i),a.balance)})}static fromFieldsWithTypes(i,a){if(!ca(a.type))throw new Error("not a Pool type");return Ct(a,[i]),o.reified(i).new({id:$(it.reified(),a.fields.id),state:$(tn.reified(i),a.fields.state),rewards:$(en.reified(i),a.fields.rewards),feeShareBp:$("u64",a.fields.fee_share_bp),canDeposit:$("bool",a.fields.can_deposit),canWithdraw:$("bool",a.fields.can_withdraw),decimals:$("u8",a.fields.decimals),balance:$(ze.reified(i),a.fields.balance)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({id:q(it.reified(),a.id),state:q(tn.reified(i),a.state),rewards:q(en.reified(i),a.rewards),feeShareBp:q("u64",a.feeShareBp),canDeposit:q("bool",a.canDeposit),canWithdraw:q("bool",a.canWithdraw),decimals:q("u8",a.decimals),balance:q(ze.reified(i),a.balance)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ca(a.type))throw new Error(`object at ${a.fields.id} is not a Pool object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ca(a.bcs.type))throw new Error("object at is not a Pool object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,qc(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching Pool object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!ca(s.data.bcs.type))throw new Error(`object at id ${r} is not a Pool object`);return o.fromSuiObjectData(a,s.data)}};b();C();y();Le();var Xr=at(Lt());import{bcs as Gr}from"@mysten/sui/bcs";import{fromB64 as eA}from"@mysten/sui/utils";function ga(o){return o=x(o),o.startsWith(`${Xr.PKG_V1}::user_deposit::UserDeposit<`)}var la=class o{__StructClass=!0;static get $typeName(){return`${Xr.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=o.$typeName;$fullTypeName;$typeArgs;$isPhantom=o.$isPhantom;id;lpAmount;rewardDebt;constructor(i,a){this.$fullTypeName=re(o.$typeName,...i),this.$typeArgs=i,this.id=a.id,this.lpAmount=a.lpAmount,this.rewardDebt=a.rewardDebt}static reified(i){return{typeName:o.$typeName,fullTypeName:re(o.$typeName,K(i)),typeArgs:[K(i)],isPhantom:o.$isPhantom,reifiedTypeArgs:[i],fromFields:a=>o.fromFields(i,a),fromFieldsWithTypes:a=>o.fromFieldsWithTypes(i,a),fromBcs:a=>o.fromBcs(i,a),bcs:o.bcs,fromJSONField:a=>o.fromJSONField(i,a),fromJSON:a=>o.fromJSON(i,a),fromSuiParsedData:a=>o.fromSuiParsedData(i,a),fromSuiObjectData:a=>o.fromSuiObjectData(i,a),fetch:async(a,r)=>o.fetch(a,i,r),new:a=>new o([K(i)],a),kind:"StructClassReified"}}static get r(){return o.reified}static phantom(i){return he(o.reified(i))}static get p(){return o.phantom}static get bcs(){return Gr.struct("UserDeposit",{id:it.bcs,lp_amount:Gr.u64(),reward_debt:Gr.u64()})}static fromFields(i,a){return o.reified(i).new({id:ne(it.reified(),a.id),lpAmount:ne("u64",a.lp_amount),rewardDebt:ne("u64",a.reward_debt)})}static fromFieldsWithTypes(i,a){if(!ga(a.type))throw new Error("not a UserDeposit type");return Ct(a,[i]),o.reified(i).new({id:$(it.reified(),a.fields.id),lpAmount:$("u64",a.fields.lp_amount),rewardDebt:$("u64",a.fields.reward_debt)})}static fromBcs(i,a){return o.fromFields(i,o.bcs.parse(a))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(i,a){return o.reified(i).new({id:q(it.reified(),a.id),lpAmount:q("u64",a.lpAmount),rewardDebt:q("u64",a.rewardDebt)})}static fromJSON(i,a){if(a.$typeName!==o.$typeName)throw new Error("not a WithTwoGenerics json object");return dt(re(o.$typeName,K(i)),a.$typeArgs,[i]),o.fromJSONField(i,a)}static fromSuiParsedData(i,a){if(a.dataType!=="moveObject")throw new Error("not an object");if(!ga(a.type))throw new Error(`object at ${a.fields.id} is not a UserDeposit object`);return o.fromFieldsWithTypes(i,a)}static fromSuiObjectData(i,a){if(a.bcs){if(a.bcs.dataType!=="moveObject"||!ga(a.bcs.type))throw new Error("object at is not a UserDeposit object");let r=Je(a.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let s=x(r[0]),d=x(K(i));if(s!==x(K(i)))throw new Error(`type argument mismatch: expected '${d}' but got '${s}'`);return o.fromBcs(i,eA(a.bcs.bcsBytes))}if(a.content)return o.fromSuiParsedData(i,a.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(i,a,r){let s=await i.getObject({id:r,options:{showBcs:!0}});if(s.error)throw new Error(`error fetching UserDeposit object at id ${r}: ${s.error.code}`);if(s.data?.bcs?.dataType!=="moveObject"||!ga(s.data.bcs.type))throw new Error(`object at id ${r} is not a UserDeposit object`);return o.fromSuiObjectData(a,s.data)}};b();C();y();function gs(o,i,a){if(i.length===0||!i[0])return[];let r=i[0],s=o.reduce((u,p)=>u+BigInt(p),BigInt(0)),d=BigInt(r.balance),c=[];for(let u of i.slice(1)){if(d>s)return As(a,r,c,o);d+=BigInt(u.balance),c.push(u)}return d>=s?As(a,r,c,o):[]}function As(o,i,a,r){let s=r.map(d=>o.pure.u64(d));return a.length>0&&o.mergeCoins(i.coinObjectId,a.map(d=>d.coinObjectId)),o.splitCoins(i.coinObjectId,s)}b();C();y();var tA="0x0000000000000000000000000000000000000000000000000000000000000000";async function ls(o,i,a){let r=await o.devInspectTransactionBlock({sender:tA,transactionBlock:i});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let s=r.results?.pop()?.returnValues?.pop();if(!s)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[d,c]=s;return typeof a=="object"?a.fromBcs(Uint8Array.from(d)).toJSONField():jn(a).parse(Uint8Array.from(d))}var pa=class extends ke{constructor(a,r){super();this.suiRpcUrl=a;this.api=r;this.client=new nA({url:a})}chainType="SUI";client;async getUserBalanceInfo(a,r){if(!r.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=r.suiAddresses;if(!s)throw new G("SUI token must contain 'suiAddresses'");(0,In.setAddress)(s.bridgeAddress,s.bridgeAddressOrigin);let c=(await this.fetchDeposits(a,r.originTokenAddress)).reduce((u,p)=>{if(p.data)return u.lpAmount+=BigInt(p.data.content.fields.lp_amount),u.rewardDebt+=BigInt(p.data.content.fields.reward_debt),u;throw new G("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new Be({lpAmount:c.lpAmount.toString(),rewardDebt:c.rewardDebt.toString()})}async fetchDeposits(a,r){return await It(s=>this.client.getOwnedObjects({owner:a,filter:{StructType:la.phantom(he(r)).phantomType},options:{showContent:!0},cursor:s}))}async getPoolInfoFromChain(a){let r=a.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=48,d=new ua;Oo(d,a.originTokenAddress,r.bridgeObjectAddress);let c=await ls(this.client,d,Aa.reified(he(a.originTokenAddress))),u=c.state.tokenBalance,p=c.state.vusdBalance,I=Te({tokenBalance:u,vUsdBalance:p});return{dValue:c.state.d,aValue:c.state.a,totalLpAmount:c.rewards.lpSupply,vUsdBalance:p,tokenBalance:u,accRewardPerShareP:c.rewards.accRewardPerShareP,p:s,imbalance:I}}async buildRawTransactionDeposit(a){let r=a.token.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=await It(R=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:R}));if(s.length===0||!s[0])throw new gt("No coins to deposit");let d=s[0],c=new ua;c.setSender(a.accountAddress);let{depositObj:u,isNewDeposit:p}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,c),[I]=gs([a.amount],s,c);if(!I)throw new gt("No coins to deposit");if(!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let h=Jo(c,a.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:u,coin:I});return c.mergeCoins(d.coinObjectId,[h]),p&&c.transferObjects([u],a.accountAddress),await c.toJSON({client:this.client})}async getDepositObject(a,r,s){let d=await this.fetchDeposits(a,r);if(d.length===0||!d[0]){let c=he(r).phantomType;return{depositObj:Qo(s,c),isNewDeposit:!0}}else{if(d[0].data?.objectId)return{depositObj:d[0].data.objectId,isNewDeposit:!1};throw new G("Something went wrong while deposit")}}async buildRawTransactionWithdraw(a){let r=a.token.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=he(a.token.originTokenAddress).phantomType,d=new ua;d.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:u}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d);if(u)throw new gt("No deposit found");let p=zo(d,s,{bridge:r.bridgeObjectAddress,userDeposit:c,amountLp:BigInt(a.amount)}),I=await It(h=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:h}));if(!p[0]||!p[1])throw new G("No rewards found");return I[0]?d.mergeCoins(I[0].coinObjectId,[p[0],p[1]]):(d.mergeCoins(p[0],[p[1]]),d.transferObjects([p[0]],a.accountAddress)),await d.toJSON({client:this.client})}async buildRawTransactionClaimRewards(a){let r=a.token.suiAddresses;if(!r)throw new G("SUI token must contain 'suiAddresses'");if((0,In.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");let s=he(a.token.originTokenAddress).phantomType,d=new ua;d.setSender(a.accountAddress);let{depositObj:c,isNewDeposit:u}=await this.getDepositObject(a.accountAddress,a.token.originTokenAddress,d);if(u)throw new gt("No deposit found");let p=xo(d,s,{bridge:r.bridgeObjectAddress,userDeposit:c}),I=await It(h=>this.client.getCoins({owner:a.accountAddress,coinType:a.token.originTokenAddress,cursor:h}));return I[0]?d.mergeCoins(I[0].coinObjectId,[p]):d.transferObjects([p],a.accountAddress),await d.toJSON({client:this.client})}};b();C();y();import{Web3 as ma}from"web3";import{encodeFunctionCall as iA}from"web3-eth-abi";var Un=class extends ke{constructor(a,r,s){super();this.tronWeb=a;this.api=r;this.tronJsonRpc=s}chainType="TRX";P=52;async getUserBalanceInfo(a,r){let s;if(this.tronJsonRpc)try{s=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,a,r)}catch{s=await this.getUserBalanceInfoPerProperty(a,r)}else s=await this.getUserBalanceInfoPerProperty(a,r);return s}async getUserBalanceInfoByBatch(a,r,s){let d=Vn(s.poolAddress),c=Vn(r),u=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("userRewardDebt",c)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:d,data:this.getFunctionAbi("balanceOf",c)},"latest"]}],I=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();if(Array.isArray(I)&&I.length===2){let h=R=>{let B=I.find(W=>W.id===R);if(!B||!B.result)throw new Error(`Missing or invalid result for id ${R}`);return ma.utils.toBigInt(B.result).toString()};return new Be({lpAmount:ma.utils.toBigInt(h(2)).toString(),rewardDebt:ma.utils.toBigInt(h(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(a,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a);let s=this.getContract(r.poolAddress),d=(await s.methods.userRewardDebt(a).call()).toString(),c=(await s.methods.balanceOf(a).call()).toString();return new Be({lpAmount:c,rewardDebt:d})}async getPoolInfoFromChain(a){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,a)}catch{r=await this.getPoolInfoPerProperty(a)}else r=await this.getPoolInfoPerProperty(a);return r}async getPoolInfoByBatch(a,r){let s=Vn(r.poolAddress),d=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],u=await(await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)})).json();if(Array.isArray(u)&&u.length===6){let p=B=>{let W=u.find(N=>N.id===B);if(!W||!W.result)throw new Error(`Missing or invalid result for id ${B}`);return ma.utils.toBigInt(W.result).toString()},I=p(3),h=p(4),R=Te({tokenBalance:I,vUsdBalance:h});return{aValue:p(1),dValue:p(2),tokenBalance:I,vUsdBalance:h,totalLpAmount:p(5),accRewardPerShareP:p(6),p:this.P,imbalance:R}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(a){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(a.poolAddress);let r=this.getContract(a.poolAddress),[s,d,c,u,p,I]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),h=c.toString(),R=u.toString(),B=Te({tokenBalance:h,vUsdBalance:R});return{aValue:s.toString(),dValue:d.toString(),tokenBalance:h,vUsdBalance:R,totalLpAmount:p.toString(),accRewardPerShareP:I.toString(),p:this.P,imbalance:B}}buildRawTransactionDeposit(a){let{amount:r,accountAddress:s}=a,d=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"deposit(uint256)",d,"0",s)}buildRawTransactionWithdraw(a){let{amount:r,accountAddress:s}=a,d=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.poolAddress,"withdraw(uint256)",d,"0",s)}buildRawTransactionClaimRewards(a){let{accountAddress:r}=a,s=[];return this.buildRawTransaction(a.token.poolAddress,"claimRewards()",s,"0",r)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}getContract(a){return this.tronWeb.contract(xn.abi,a)}getFunctionAbi(a,...r){let s=xn.abi.find(d=>d.type==="function"&&"name"in d&&d.name===a);if(!s)throw new Error(`${a} method not found in Pool ABI`);return iA(s,r)}};var ba=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s;this.rawTxBuilder=new ea(i,a,this.params,s);let d=r.cachePoolInfoChainSec>0?r.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new rA({defaultTtl:d})}rawTxBuilder;cache;async getAllowance(i,a){if(a){let r=i,s=a;return await this.tokenService.getAllowance({...s,spender:s.token.poolAddress},r)}else{let r=i;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(i,a){if(a){let r=i,s=a;return this.tokenService.checkAllowance({...s,spender:s.token.poolAddress},r)}else{let r=i;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(i,a){return this.tokenService.approve(i,{...a,spender:a.token.poolAddress})}async getAmountToBeDeposited(i,a,r){ae(i),te("amount",i,a.decimals);let s=await this.getPoolInfoFromChain(a,r),{vUsdBalance:d,tokenBalance:c,aValue:u,dValue:p}=s,I=as(i,u,p,c,d);return z(I,3).toFixed()}async getAmountToBeWithdrawn(i,a,r,s){ae(i),te("amount",i,r.decimals);let d=await this.getPoolInfoFromChain(r,s),c=rs(i),u=xe(c,r.decimals),I=(await this.getUserBalanceInfo(a,r,s)).earned(d)||"0",h=aA(u).plus(I).toFixed();return z(h,r.decimals).toFixed()}async getUserBalanceInfo(i,a,r){return mn(a.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(i,a)}async getPoolInfoFromChain(i,a){let r={chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},s=this.cache.get(r);if(s)return s;{let d=await mn(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,a).getPoolInfoFromChain(i);return this.cache.put(r,d),this.api.cachePut({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress},d),d}}};function mn(o,i,a,r,s){switch(U.getChainProperty(o).chainType){case"EVM":{if(s)return new On(s,i);{let d=a.getNodeRpcUrl(o),c=new cA(d);return c.defaultReturnFormat={number:dA.STR,bytes:sA.HEX},new On(c,i)}}case"TRX":{let d=a.getNodeRpcUrl(o),c=r.tronJsonRpc;if(s)return new Un(s,i,c);{let u=new oA({fullHost:d});return new Un(u,i,c)}}case"SOLANA":{let d=a.getNodeRpcUrl(o);return new ta(d,i)}case"SRB":return new ia(a,r,i);case"SUI":return new pa(a.getNodeRpcUrl(o),i);case"ALG":if(s){let d=s,c=us.fromClients({algod:d});return new zn(c,i)}else{let d=a.getNodeRpcUrl(o),c=us.fromConfig({algodConfig:{server:d}});return new zn(c,i)}case"STX":{let d=a.getNodeRpcUrl(o);return new aa(d,r,i)}}}b();C();y();import{TronWeb as lA}from"tronweb";import{FMT_BYTES as uA,FMT_NUMBER as pA,Web3 as mA}from"web3";b();C();y();b();C();y();var AA={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},ya=AA;b();C();y();b();C();y();b();C();y();var nn=class{};var Dn=class extends nn{constructor(a,r){super();this.web3=a;this.api=r}chainType="EVM";async balanceOf(a){let r=(await this.getYieldContract(a.token.yieldAddress).methods.balanceOf(a.owner).call()).toString();return z(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=O(a.amount,a.token.decimals).toFixed(),s=(await this.getYieldContract(a.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return z(s,3).toFixed()}async getWithdrawProportionAmount(a){let r=O(a.amount,3).toFixed();return await this.getYieldContract(a.cydToken.yieldAddress).methods.getWithdrawProportionAmount(a.owner,r).call()}async buildRawTransactionDeposit(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.deposit(a.amount,a.token.yieldId,a.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(a){return Promise.resolve({...this.buildTxParams({owner:a.owner,yieldAddress:a.token.yieldAddress}),data:this.getYieldContract(a.token.yieldAddress).methods.withdraw(a.amount).encodeABI()})}buildTxParams(a){return{from:a.owner,to:a.yieldAddress,value:"0"}}getYieldContract(a){return new this.web3.eth.Contract(ya.abi,a)}};b();C();y();var Ca=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s}async approve(i,a){return this.tokenService.buildRawTransactionApprove({...i,spender:i.token.yieldAddress},a)}async deposit(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),ae(i.minVirtualAmount),te("minVirtualAmount",i.minVirtualAmount,3),i.amount=O(i.amount,i.token.decimals).toFixed(),i.minVirtualAmount=O(i.minVirtualAmount,3).toFixed(),hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).buildRawTransactionDeposit(i)}async withdraw(i,a){return ae(i.amount),te("amount",i.amount,3),i.amount=O(i.amount,3).toFixed(),hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).buildRawTransactionWithdraw(i)}};b();C();y();var En=class extends nn{constructor(a,r){super();this.tronWeb=a;this.api=r}chainType="TRX";async balanceOf(a){let r=(await(await this.getContract(a.token.yieldAddress)).methods.balanceOf(a.owner).call()).toString();return z(r,3).toFixed()}async getEstimatedAmountOnDeposit(a){let r=O(a.amount,a.token.decimals).toFixed(),s=(await(await this.getContract(a.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,a.token.yieldId).call()).toString();return z(s,3).toFixed()}async getWithdrawProportionAmount(a){let r=O(a.amount,3).toFixed();return(await(await this.getContract(a.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(a.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(a){let{amount:r,owner:s,token:d,minVirtualAmount:c}=a,u=[{type:"uint256",value:r},{type:"uint256",value:d.yieldId},{type:"uint256",value:c}];return this.buildRawTransaction(a.token.yieldAddress,"deposit(uint256,uint256,uint256)",u,"0",s)}async buildRawTransactionWithdraw(a){let{amount:r,owner:s}=a,d=[{type:"uint256",value:r}];return this.buildRawTransaction(a.token.yieldAddress,"withdraw(uint256)",d,"0",s)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}getContract(a){return this.tronWeb.contract(ya.abi,a)}};b();C();y();function gA(o){if(!Ia(o))throw new Ai("Token does not support Yield")}function Ia(o){return!!o.yieldAddress&&o.yieldId!==void 0}var ha=class{constructor(i,a,r,s){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r;this.tokenService=s;this.rawTxBuilder=new Ca(i,a,r,s)}rawTxBuilder;async getCYDTokens(){let i=[],a=await this.api.getChainDetailsMap("pool");return Object.values(a).forEach(r=>{if(r.yieldAddress){let s=r.tokens.find(c=>c.tokenAddress===r.yieldAddress),d=r.tokens.filter(Ia);if(d.length>0){let c=s??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};i.push({...c,yieldAddress:r.yieldAddress,tokens:d})}}}),i}async getAllowance(i,a){return await this.tokenService.getAllowance({...i,spender:i.token.yieldAddress},a)}async checkAllowance(i,a){return this.tokenService.checkAllowance({...i,spender:i.token.yieldAddress},a)}async balanceOf(i,a){return hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).balanceOf(i)}async getEstimatedAmountOnDeposit(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),hn(i.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.token.yieldAddress,a).getEstimatedAmountOnDeposit(i)}async getWithdrawAmounts(i,a){ae(i.amount),te("amount",i.amount,3);let r=await hn(i.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,i.owner,a).getWithdrawProportionAmount(i);return i.cydToken.tokens.filter(s=>r[s.yieldId]!==void 0).map(s=>({amount:z(r[s.yieldId],s.decimals).toFixed(),token:s}))}};function hn(o,i,a,r,s){switch(U.getChainProperty(o).chainType){case"EVM":{if(s)return new Dn(s,i);{let d=a.getNodeRpcUrl(o),c=new mA(d);return c.defaultReturnFormat={number:pA.STR,bytes:uA.HEX},new Dn(c,i)}}case"TRX":{if(s)return new En(s,i);{let d=a.getNodeRpcUrl(o),c=new lA({fullHost:d});return c.setAddress(r),new En(c,i)}}case"SOLANA":throw new E;case"SRB":throw new E;case"SUI":throw new E;case"ALG":throw new E;case"STX":throw new E}}b();C();y();import{Big as Re}from"big.js";function bs(o,i,a){let r=bA(o,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),s=yA(r.amountIncludingCommissionInSystemPrecision,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function ys(o,i,a){let r=CA(o,{decimals:a.decimals,feeShare:a.feeShare},a.poolInfo),s=IA(r.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:s}}function bA(o,{feeShare:i,decimals:a},r){let s=Re(o),d=s.times(i),c=s.minus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ps(Rt(c,a),r),amountExcludingCommissionInSystemPrecision:ps(Rt(s,a),r)}}function ps(o,i){if(o.eq(0))return"0";let a=Re(i.tokenBalance).plus(o),r=ut(a.toFixed(),i.aValue,i.dValue);return Re(i.vUsdBalance).minus(r).round().toFixed()}function yA(o,{feeShare:i,decimals:a},r){if(Re(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let d=Re(o).plus(r.vUsdBalance),c=ut(d,r.aValue,r.dValue),u=xe(Re(r.tokenBalance).minus(c),a),p=Re(u).times(i),I=Re(u).minus(p).round();return{bridgeFeeInTokenPrecision:p.round().toFixed(),amountIncludingCommissionInTokenPrecision:I.toFixed(),amountExcludingCommissionInTokenPrecision:u.toFixed()}}function CA(o,{feeShare:i,decimals:a},r){let s=Re(i).div(Re(1).minus(i)),d=Re(o).times(s),c=Re(o).plus(d);return{bridgeFeeInTokenPrecision:d.round().toFixed(),amountIncludingCommissionInSystemPrecision:ms(Rt(c,a),r),amountExcludingCommissionInSystemPrecision:ms(Rt(o,a),r)}}function ms(o,i){let a=Re(i.tokenBalance).minus(o),r=ut(a.toFixed(),i.aValue,i.dValue);return Re(r).minus(i.vUsdBalance).round().toFixed()}function IA(o,{feeShare:i,decimals:a},r){if(Re(o).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=Re(r.vUsdBalance).minus(o),d=ut(s.toFixed(),r.aValue,r.dValue),c=Re(d).minus(r.tokenBalance),u=xe(c.toFixed(),a),p=Re(i).div(Re(1).minus(i)),I=Re(u).times(p),h=Re(u).plus(I);return{bridgeFeeInTokenPrecision:I.round().toFixed(),amountIncludingCommissionInTokenPrecision:h.round().toFixed(),amountExcludingCommissionInTokenPrecision:u.toFixed()}}b();C();y();import{Big as Jt}from"big.js";function Cs(o,i,a,r,s){let d=lt(o,i,a),c=xe(d,i.decimals),u=Xn(d,r,s),p=Jt(o).times(i.feeShare),I=Jt(u).div(Jt(1).minus(r.feeShare)).minus(u);return{sourceLPSwap:{fee:z(p,i.decimals).neg().round(i.decimals,Jt.roundUp).toFixed(),swap:z(Jt(o).minus(c).minus(p),i.decimals).neg().round(i.decimals,Jt.roundUp).toFixed()},destLPSwap:{fee:z(I,r.decimals).neg().round(r.decimals,Jt.roundUp).toFixed(),swap:z(xe(d,r.decimals).minus(u).minus(I),r.decimals).neg().round(r.decimals,Jt.roundUp).toFixed()}}}b();C();y();b();C();y();b();C();y();b();C();y();import{AlgorandClient as Is}from"@algorandfoundation/algokit-utils";import{ABIMethod as hA,OnApplicationComplete as vA}from"algosdk";var va=class{constructor(i){this.nodeRpcUrlsConfig=i}async checkAssetOptIn(i,a,r){let s=this.getAlgorand(r);return Ii(i,a,s)}async buildRawTransactionAssetOptIn(i,a,r){let s=this.getAlgorand(r);typeof i=="string"&&(i=BigInt(i));let d=await s.createTransaction.assetOptIn({assetId:i,sender:a});return Gt(d)}async checkAppOptIn(i,a,r){let s=this.getAlgorand(r);return hi(i,a,s)}async buildRawTransactionAppOptIn(i,a,r){let s=this.getAlgorand(r);typeof i=="string"&&(i=BigInt(i));let d=s.newGroup(),c=s.account.random();d.addAppCallMethodCall({appId:i,method:new hA({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:a,signer:c,onComplete:vA.OptInOC});let{transactions:u}=await d.buildTransactions();return Gt(...u)}getAlgorand(i){if(i){let a=Is.fromClients({algod:i});return a.setDefaultValidityWindow(100),a}else{let a=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG"),r=Is.fromConfig({algodConfig:{server:a}});return r.setDefaultValidityWindow(100),r}}};b();C();y();b();C();y();import FA from"axios";b();C();y();var hs="3.29.2-alpha.1";b();C();y();function vs(o){return Object.entries(o).reduce((i,a)=>{let r=a[0],s=a[1],d=fA(r,s);return d&&(i[r]=d),i},{})}function Rs(o){let i={};for(let[a,r]of Object.entries(o)){let s=a;for(let d of r.tokens){let c=vn({chainSymbol:s,poolAddress:d.poolAddress}),u=Te(d.poolInfo);i[c]={...d.poolInfo,imbalance:u}}}return i}function RA(o,i){let{name:a,...r}=o,{poolInfo:s,...d}=i;return{...d,...r,chainName:a}}function YA(o){switch(o){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function BA(o){return Object.entries(o).reduce((i,[a,r])=>(i[a]=WA(r),i),{})}function WA(o){return Object.entries(o).reduce((i,[a,r])=>{let s=YA(a);return s&&r!=null&&(i[s]=r),i},{})}function fA(o,i){let a=U.getChainsProperties()[o];if(!a)return null;let r={...a,allbridgeChainId:i.chainId,bridgeId:i.bridgeId,paddingUtilId:i.paddingUtilId,bridgeAddress:i.bridgeAddress,oftBridgeAddress:i.oftBridgeAddress,yieldAddress:i.yieldAddress,abrPayer:i.abrPayer?{payerAddress:i.abrPayer.payerAddress,abrToken:{chainSymbol:o,tokenAddress:i.abrPayer.tokenAddress,decimals:i.abrPayer.tokenDecimals},payerAvailability:TA(i.abrPayer.payerAvailability)}:void 0,transferTime:BA(i.transferTime),txCostAmount:i.txCostAmount,confirmations:i.confirmations,suiAddresses:i.suiAddresses};return{...r,tokens:i.tokens.map(s=>RA(r,s))}}function TA(o){if(!o)return{};let i={};for(let[a,r]of Object.entries(o)){if(!r)continue;let s=wA[a];s&&(i[s]=!0)}return i}var wA=Object.fromEntries(Object.entries(xa).map(([o,i])=>[i,De[o]]));function vn(o){return o.chainSymbol+"_"+o.poolAddress}function Ys(o){let i=[];for(let[a,r]of Object.entries(o)){let s=a;for(let d of r.tokens)i.push({chainSymbol:s,poolAddress:d.poolAddress})}return i}function Bs(o){let i={};for(let[a,r]of Object.entries(o)){let s=a;for(let[d,c]of Object.entries(r))c.imbalance=Te(c),i[vn({chainSymbol:s,poolAddress:d})]=c}return i}var Rn=class{api;constructor(i){this.api=FA.create({baseURL:i.coreApiUrl,headers:{Accept:"application/json",...i.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+hs},params:i.coreApiQueryParams})}async getTokenInfo(){let{data:i}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:vs(i),poolInfoMap:Rs(i)}}async getPendingInfo(){let{data:i}=await this.api.get("/pending-info");return i}async getGasBalance(i,a){let{data:r}=await this.api.get(`/check/${i}/${a}`);return r}async getTransferStatus(i,a){let{data:r}=await this.api.get(`/chain/${i}/${a}`);return r}async getReceiveTransactionCost(i){if(i.messenger===5&&!i.sourceToken)throw new oi("For OFT sourceToken required");let{data:a}=await this.api.post("/receive-fee",i,{headers:{"Content-Type":"application/json"}});return{exchangeRate:a.exchangeRate,fee:a.fee,sourceNativeTokenPrice:a.sourceNativeTokenPrice,abrExchangeRate:a.abrExchangeRate,adminFeeShareWithExtras:a.adminFeeShareWithExtras}}async getPoolInfoMap(i){let a=i instanceof Array?i:[i],{data:r}=await this.api.post("/pool-info",{pools:a},{headers:{"Content-Type":"application/json"}});return Bs(r)}};b();C();y();import Ra from"timed-cache";var Vr=20*1e3,NA=55*1e3,Yn=class{constructor(i){this.apiClient=i;this.tokenInfoCache=new Ra({defaultTtl:NA}),this.receivedTransactionCache=new Ra({defaultTtl:Vr}),this.pendingInfoCache=new Ra({defaultTtl:Vr}),this.gasBalanceCache=new Ra({defaultTtl:Vr})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let i="TOKEN_INFO_CACHE_KEY",a=this.tokenInfoCache.get(i);if(a)return a;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(i,r),r}async getGasBalance(i,a){let r=`GAS_BALANCE_${i}_${a}`,s=this.gasBalanceCache.get(r);if(s)return s;let d=this.apiClient.getGasBalance(i,a);return this.gasBalanceCache.put(r,d),d}async getPendingInfo(){let i="PENDING_INFO_CACHE_KEY",a=this.pendingInfoCache.get(i);if(a)return a;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(i,r),r}async getReceiveTransactionCost(i){let a=`RECEIVE_TX_COST_${i.sourceChainId}_${i.destinationChainId}_${i.messenger}${i.sourceToken?"_"+i.sourceToken:""}`,r=this.receivedTransactionCache.get(a);if(r)return r;let s=await this.apiClient.getReceiveTransactionCost(i);return this.receivedTransactionCache.put(a,s),s}async getTransferStatus(i,a){return this.apiClient.getTransferStatus(i,a)}async getPoolInfoMap(i){return this.apiClient.getPoolInfoMap(i)}};b();C();y();var Bn=class{constructor(i){this.apiClient=i}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let i=await this.getChainDetailsMap();return Object.values(i).flatMap(a=>a.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(i,a){return this.apiClient.getGasBalance(i,a)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(i,a){return await this.apiClient.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.apiClient.getReceiveTransactionCost(i)}async getPoolInfoMap(i){return await this.apiClient.getPoolInfoMap(i)}};b();C();y();var Wn=class{constructor(i,a){this.client=i;this.isStaging=a.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(i){let a=await this.client.getChainDetailsMap(),r={};for(let s in a){let d=a[s];d&&(r[s]={...d,tokens:Ws(d.tokens,i,this.isStaging)})}return r}async tokens(i){return Ws(await this.client.tokens(),i,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getTransferStatus(i,a){return await this.client.getTransferStatus(i,a)}async getReceiveTransactionCost(i){return await this.client.getReceiveTransactionCost(i)}cachePut(i,a){return this.client.cachePut(i,a)}getPoolInfoByKey(i){return this.client.getPoolInfoByKey(i)}refreshPoolInfo(i){return this.client.refreshPoolInfo(i)}};function Ws(o,i,a){return o.filter(r=>a?!0:r.flags[i]).map(ZA)}function ZA(o){let{flags:i,...a}=o;return a}b();C();y();import GA from"timed-cache";var XA=55*1e3,fn=class{constructor(i){this.client=i;this.poolInfoCache=new Pr}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(i,a){return this.client.getTransferStatus(i,a)}getReceiveTransactionCost(i){return this.client.getReceiveTransactionCost(i)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(i,a){return this.client.getGasBalance(i,a)}async getPoolInfoByKey(i){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let a=this.poolInfoCache.get(i);if(a)return a;{let r=await this.client.getPoolInfoMap(i);this.poolInfoCache.putAll(r);let s=r[vn(i)];if(s)return s;throw new G("Cannot find pool info for "+i.poolAddress+" on chain "+i.chainSymbol)}}async refreshPoolInfo(i){let a;if(i)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),a=await this.client.getPoolInfoMap(i);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();a=await this.client.getPoolInfoMap(Ys(r.chainDetailsMap))}this.poolInfoCache.putAll(a)}cachePut(i,a){this.poolInfoCache.put(vn(i),a)}},Pr=class{cache;constructor(){this.cache=new GA({defaultTtl:XA})}putAll(i){for(let[a,r]of Object.entries(i))this.cache.put(a,r)}putAllIfNotExists(i){for(let[a,r]of Object.entries(i))this.cache.get(a)||this.cache.put(a,r)}put(i,a){this.cache.put(i,a)}get(i){let a=vn(i);return this.cache.get(a)}};b();C();y();import{AlgorandClient as Ts}from"@algorandfoundation/algokit-utils";import{Big as QA}from"big.js";import{TronWeb as KA}from"tronweb";import{Web3 as UA}from"web3";b();C();y();b();C();y();b();C();y();b();C();y();import{Big as fs}from"big.js";var He=class{async checkAllowance(i){let a=await this.getAllowance(i);return fs(a).gte(fs(i.amount))}};var _n=class extends He{constructor(a,r){super();this.algorand=a;this.api=r;a.setDefaultValidityWindow(100)}chainType="ALG";approve(a){throw new E}buildRawTransactionApprove(a){throw new E}getAllowance(a){throw new E}async getNativeTokenBalance(a){let{account:r}=a;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(a){let{account:r,token:s}=a;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(s.tokenAddress))).balance.toString()}catch(d){if(d instanceof Error)return d.message.includes("account asset info not found"),"0";throw d}}};b();C();y();b();C();y();var VA={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Ya=VA;var PA="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",SA="0xdac17f958d2ee523a2206206994597c13d831ec7",LA=1e5,$n=class extends He{constructor(a,r){super();this.web3=a;this.api=r}chainType="EVM";getAllowance(a){let r=a.token.tokenAddress,s=a.owner,d=a.spender;return this.getAllowanceByTokenAddress(r,s,d)}getAllowanceByTokenAddress(a,r,s){return this.getERC20Contract(a).methods.allowance(r,s).call()}async getTokenBalance(a){return await this.getERC20Contract(a.token.tokenAddress).methods.balanceOf(a.account).call()}async getNativeTokenBalance(a){return(await this.web3.eth.getBalance(a.account)).toString()}async approve(a){if(this.isUsdt(a.tokenAddress)&&await this.getAllowanceByTokenAddress(a.tokenAddress,a.owner,a.spender)!=="0"){let d=await this.buildRawTransactionApprove({...a,amount:"0"});await this.sendRawTransaction(d,a.chainSymbol)}let r=await this.buildRawTransactionApprove(a);return await this.sendRawTransaction(r,a.chainSymbol)}isUsdt(a){return a.toLowerCase()===SA}buildRawTransactionApprove(a){let{tokenAddress:r,spender:s,owner:d,amount:c}=a,p=this.getERC20Contract(r).methods.approve(s,c==null?PA:Ki(c));return Promise.resolve({from:d,to:r,value:"0",data:p.encodeABI()})}async sendRawTransaction(a,r){let s=a,d={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?s.gas=LA:s.gas=await this.web3.eth.estimateGas(a);let{transactionHash:c}=await this.web3.eth.sendTransaction({...s,...d});return{txId:c.toString()}}getERC20Contract(a){return new this.web3.eth.Contract(Ya.abi,a)}};b();C();y();import{AnchorProvider as kA}from"@coral-xyz/anchor";import{Connection as HA,PublicKey as Ba}from"@solana/web3.js";var Wa=class extends He{constructor(a,r){super();this.solanaRpcUrl=a;this.api=r}chainType="SOLANA";approve(a){throw new E}buildRawTransactionApprove(a){throw new E}buildAnchorProvider(a){let r=new HA(this.solanaRpcUrl,"confirmed"),s=new Ba(a);return new kA(r,{publicKey:s},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(a){throw new E}async getTokenBalance(a){let{account:r,token:s}=a;try{let d=_e(new Ba(r),new Ba(s.tokenAddress));return(await An(d,this.buildAnchorProvider(r))).amount.toString()}catch(d){if(d instanceof Error)return d.message.startsWith("Account does not exist"),"0";throw d}}async getNativeTokenBalance(a){return(await this.buildAnchorProvider(a.account).connection.getBalance(new Ba(a.account))).toString()}};b();C();y();import{Horizon as pZ,NotFoundError as MA}from"@stellar/stellar-sdk";var fa=class extends He{constructor(a,r,s){super();this.nodeRpcUrlsConfig=a;this.params=r;this.api=s}chainType="SRB";getAllowance(){throw new E}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new G("OriginTokenAddress missing");let[r,s]=a.token.originTokenAddress.split(":"),d=new pZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),c;try{c=await d.loadAccount(a.account)}catch(I){if(I instanceof MA)return"0";throw I}let p=c.balances.find(I=>(I.asset_type==="credit_alphanum4"||I.asset_type==="credit_alphanum12")&&I.asset_code==r&&I.asset_issuer==s);return p?.balance?O(p.balance,U.getChainDecimalsByType(U.getChainProperty(a.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(a){let c=(await new pZ.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(a.account)).balances.find(u=>u.asset_type==="native");return c?.balance?O(c.balance,U.getChainDecimalsByType(U.getChainProperty(a.chainSymbol).chainType)).toFixed():"0"}approve(){throw new E}buildRawTransactionApprove(){throw new E}};b();C();y();import{ClarigenClient as jA,contractFactory as JA}from"@clarigen/core";import{createNetwork as zA}from"@stacks/network";var Ta=class extends He{constructor(a,r,s){super();this.nodeRpcUrl=a;this.params=r;this.api=s;let d=zA({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new jA(d,this.params.stxHeroApiKey)}chainType="STX";client;async getTokenBalance(a){let r=JA(st.ftToken,a.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:a.account}))).toString()}async getNativeTokenBalance(a){let r=`${this.nodeRpcUrl}/extended/v1/address/${a.account}/stx`,s=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!s.ok)throw new Error(`Failed to fetch account: ${s.status}`);let c=(await s.json()).balance;return BigInt(c).toString()}getAllowance(a){throw new E}checkAllowance(a){throw new E}approve(a){throw new E}buildRawTransactionApprove(a){throw new E}};b();C();y();import{SuiClient as xA}from"@mysten/sui/client";var wa=class extends He{constructor(a,r){super();this.suiRpcUrl=a;this.api=r;this.suiClient=new xA({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(a){throw new E}buildRawTransactionApprove(a){throw new E}getAllowance(a){throw new E}async getTokenBalance(a){if(!a.token.originTokenAddress)throw new G("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:a.account,coinType:a.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(a){let r=await It(s=>this.suiClient.getCoins({owner:a.account,cursor:s}));return r.length===0?"0":r.reduce((s,d)=>s+BigInt(d.balance),BigInt(0)).toString()}};b();C();y();var OA="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",qn=class extends He{constructor(a,r){super();this.tronWeb=a;this.api=r}chainType="TRX";async getAllowance(a){let{token:{tokenAddress:r},owner:s}=a;return(await(await this.getContract(r)).methods.allowance(s,a.spender).call()).toString()}async getTokenBalance(a){return(await(await this.getContract(a.token.tokenAddress)).balanceOf(a.account).call()).toString()}async getNativeTokenBalance(a){return(await this.tronWeb.trx.getBalance(a.account)).toString()}async approve(a){let r=await this.buildRawTransactionApprove(a);return await Ui(this.tronWeb,r)}async buildRawTransactionApprove(a){let{tokenAddress:r,spender:s,owner:d,amount:c}=a,u=c==null?OA:Ki(c),p=[{type:"address",value:s},{type:"uint256",value:u}];return this.buildRawTransaction(r,"approve(address,uint256)",p,"0",d)}getContract(a){return this.tronWeb.contract(Ya.abi,a)}async buildRawTransaction(a,r,s,d,c){let u=await this.tronWeb.transactionBuilder.triggerSmartContract(a,r,{callValue:+d},s,c);if(!u?.result?.result)throw new G("Unknown error: "+JSON.stringify(u,null,2));return u.transaction}};var Tn=class{constructor(i,a,r){this.api=i;this.nodeRpcUrlsConfig=a;this.params=r}async getAllowance(i,a){let r=await this.getChainTokenService(i.token.chainSymbol,i.owner,a).getAllowance(i);return z(r,i.token.decimals).toFixed()}async checkAllowance(i,a){return ae(i.amount),te("amount",i.amount,i.token.decimals),this.getChainTokenService(i.token.chainSymbol,i.owner,a).checkAllowance(this.prepareCheckAllowanceParams(i))}async approve(i,a){return a.amount&&(Qa(a.amount),te("amount",a.amount,a.token.decimals)),this.getChainTokenService(a.token.chainSymbol,a.owner,i).approve(this.prepareApproveParams(a))}async buildRawTransactionApprove(i,a){return i.amount&&(Qa(i.amount),te("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,a).buildRawTransactionApprove(this.prepareApproveParams(i))}async getTokenBalance(i,a){let r=await this.getChainTokenService(i.token.chainSymbol,i.account,a).getTokenBalance(i);return i.token.decimals?z(r,i.token.decimals).toFixed():r}async getNativeTokenBalance(i,a){let r=await this.getChainTokenService(i.chainSymbol,i.account,a).getNativeTokenBalance(i);return{int:r,float:z(r,U.getChainDecimalsByType(U.getChainProperty(i.chainSymbol).chainType)).toFixed()}}getChainTokenService(i,a,r){switch(U.getChainProperty(i).chainType){case"EVM":{if(r)return new $n(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new $n(new UA(s),this.api)}}case"TRX":{if(r)return new qn(r,this.api);{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),d=new KA({fullHost:s});return d.setAddress(a),new qn(d,this.api)}}case"SOLANA":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Wa(s,this.api)}case"SRB":return new fa(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new wa(this.nodeRpcUrlsConfig.getNodeRpcUrl(i),this.api);case"ALG":if(r){let s=r,d=Ts.fromClients({algod:s});return new _n(d,this.api)}else{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i),d=Ts.fromConfig({algodConfig:{server:s}});return new _n(d,this.api)}case"STX":{let s=this.nodeRpcUrlsConfig.getNodeRpcUrl(i);return new Ta(s,this.params,this.api)}}}prepareCheckAllowanceParams(i){return{...i,amount:O(i.amount,i.token.decimals)}}prepareApproveParams(i){return{tokenAddress:i.token.tokenAddress,owner:i.owner,spender:i.spender,chainSymbol:i.token.chainSymbol,amount:i.amount==null?void 0:QA(i.amount).toFixed()}}};var Fa=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a;let r=new Rn(a),s=new Yn(r),d=new Bn(s),c=new fn(d);this.api=new Wn(c,a),this.tokenService=new Tn(this.api,i,a)}api;tokenService;buildRawTransactionApprove(i,a){return this.tokenService.buildRawTransactionApprove(i,a)}checkAllowance(i,a){return this.tokenService.checkAllowance(i,a)}getAllowance(i,a){return this.tokenService.getAllowance(i,a)}};b();C();y();import{Connection as DA,PublicKey as EA,TransactionMessage as _A}from"@solana/web3.js";var Na=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async addMemoToTx(i,a){if(a.length>28)throw new G("InvalidArgumentException memo cannot be more than 28 characters");let r=new DA(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),s=await Ut(i,r),d=_A.decompile(i.message,{addressLookupTableAccounts:s}),c=d.instructions[d.instructions.length-1];if(!c?.keys)throw new G("Last instruction or its keys are invalid.");c.keys.push({pubkey:new EA(Y.from(a)),isSigner:!1,isWritable:!1}),i.message=d.compileToV0Message(s)}};b();C();y();import{Asset as eg,BASE_FEE as tg,contract as zP,Horizon as ws,Operation as ng,Operation as ig,rpc as ti,TimeoutInfinite as ag,TransactionBuilder as Sr,TransactionBuilder as Fs}from"@stellar/stellar-sdk";b();C();y();import{contract as e}from"@stellar/stellar-sdk";var $A=e.Spec,qA=e.Client;var ei=class extends qA{constructor(a){super(new $A(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),a);this.options=a}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var rg=100,og=180,Za=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.params=a}async buildChangeTrustLineXdrTx(i){let r=await new ws.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.sender),d=await this.getContract(ei,i.tokenAddress).name();if(yn(d))throw new G;let c=bn(d);if(!c)throw new G;let[u,p]=c.split(":");if(u===void 0||p===void 0)throw new G("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let I=new eg(u,p),h=ig.changeTrust({asset:I,limit:i.limit});return new Fs(r,{fee:rg.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(h).setTimeout(og).build().toXDR()}async getBalanceLine(i,a){let s=await this.getContract(ei,a).name();if(yn(s))throw new G;let d=bn(s);if(!d)throw new G;let[c,u]=d.split(":"),p=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ws.Server(p).loadAccount(i)).balances.find(B=>(B.asset_type==="credit_alphanum4"||B.asset_type==="credit_alphanum12")&&B.asset_code==c&&B.asset_issuer==u)}async submitTransactionStellar(i){let a=new ws.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=Fs.fromXDR(i,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await a.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(i,a){let r=new ti.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await r.getAccount(a),d=Sr.fromXDR(i,this.params.sorobanNetworkPassphrase),c=await r.simulateTransaction(d);if(ti.Api.isSimulationRestore(c))return new Sr(s,{fee:(+tg+ +c.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(c.restorePreamble.transactionData.build()).addOperation(ng.restoreFootprint({})).setTimeout(ag).build().toXDR()}async sendTransactionSoroban(i){let a=new ti.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=Sr.fromXDR(i,this.params.sorobanNetworkPassphrase);return a.sendTransaction(r)}async confirmTx(i,a=15){let r=new ti.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),s=await qr(()=>r.getTransaction(i),c=>c.status===ti.Api.GetTransactionStatus.NOT_FOUND,a);if(s.length===0)throw new G("No transaction responses found.");let d=s[s.length-1];if(!d)throw new G("Unexpected error: last response is undefined.");return d}getContract(i,a){let r={contractId:a,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(r)}};b();C();y();var Ga=class{constructor(i,a){this.nodeRpcUrlsConfig=i;this.api=a}_suiBridgeService;async buildSendTxFromCustomTx(i,a,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(i,a,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new pn(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var Xa=class{constructor(i){this.service=i;this.srb=new Za(i.nodeRpcUrlsConfig,i.params),this.sol=new Na(i.nodeRpcUrlsConfig,i.params),this.sui=new Ga(i.nodeRpcUrlsConfig,i.api),this.evm=new Fa(i.nodeRpcUrlsConfig,i.params),this.alg=new va(i.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};b();C();y();var ot=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ABR="abr",r))(ot||{}),vi=(a=>(a.INT="int",a.FLOAT="float",a))(vi||{});b();C();y();import{Big as Ne}from"big.js";var ni=class{constructor(i){this.nodeRpcUrls=i}getNodeRpcUrl(i){let a=this.nodeRpcUrls[i];if(a!==void 0)return a;throw new ci(i)}},Va=class{constructor(i,a=ri){this.nodeRpcUrlsConfig=i;U.addChainsProperties(a.additionalChainsProperties);let r=new Rn(a),s=new Yn(r),d=new Bn(s),c=new fn(d);this.api=new Wn(c,a),this.tokenService=new Tn(this.api,i,a),this.bridge=new Di(this.api,i,a,this.tokenService),this.pool=new ba(this.api,i,a,this.tokenService),this.yield=new ha(this.api,i,a,this.tokenService),this.params=a}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(i){return this.api.getChainDetailsMap(i)}async tokens(i){return this.api.tokens(i)}async tokensByChain(i,a){let s=(await this.api.getChainDetailsMap(a))[i];return s?s.tokens:[]}async getTransferStatus(i,a){return this.api.getTransferStatus(i,a)}async getGasBalance(i,a){return this.api.getGasBalance(i,a)}async checkAddress(){return new Promise(i=>{i({status:"OK",gasBalance:null})})}async getPendingStatusInfo(i,a,r,s){ae(i);let d;a=="float"?(te("amount",i,r.decimals),d=O(i,r.decimals).toFixed()):d=i;let c=lt(d,r,await we(this.api,r)),u=await we(this.api,s),p=this.getAmountFromVUsdFormatted(c,s,u),I,h=await this.api.getPendingInfo();for(let R in h[s.chainSymbol]){let B=h[s.chainSymbol];if(!B)throw new G("Cannot find pending info for "+s.chainSymbol);I=B[R]}if(I){let R=eo(I.totalSentAmount,u),B=this.getAmountFromVUsdFormatted(c,s,R),W;return Ne(B.int).gt(p.int)?W={min:p,max:B}:W={min:B,max:p},{pendingTxs:I.pendingTxs,pendingAmount:{int:Oe(I.totalSentAmount,3,s.decimals).toFixed(0),float:z(I.totalSentAmount,3).toFixed()},estimatedAmount:W}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:p,max:p}}}async getTokenBalance(i,a){return this.tokenService.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.tokenService.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){ae(i),te("amountFloat",i,a.decimals);let r=O(i,a.decimals);if(r.eq(0))return 0;let s=lt(r,a,await we(this.api,a)),d=xe(s,a.decimals);return Ea(r,d)}async calculateFeePercentOnDestinationChain(i,a,r){ae(i),te("amountFloat",i,a.decimals);let s=O(i,a.decimals);if(s.eq(0))return 0;let d=lt(s,a,await we(this.api,a)),c=Xn(d,r,await we(this.api,r)),u=xe(d,r.decimals);return Ea(u,c)}async getAmountToBeReceivedAndGasFeeOptions(i,a,r,s){return ae(i),te("amountToSendFloat",i,a.decimals),{amountToSendFloat:Ne(i).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(i,a,r,s),gasFeeOptions:await this.getGasFeeOptions(a,r,s)}}async getAmountToSendAndGasFeeOptions(i,a,r,s){return ae(i),te("amountToBeReceivedFloat",i,r.decimals),{amountToSendFloat:await this.getAmountToSend(i,a,r,s),amountToBeReceivedFloat:Ne(i).toFixed(),gasFeeOptions:await this.getGasFeeOptions(a,r,s)}}async getAmountToBeReceived(i,a,r,s){return this.getAmountToBeReceivedCompute(i,a,r,s,async()=>await we(this.api,a),async()=>await we(this.api,r))}async getAmountToBeReceivedFromChain(i,a,r,s,d,c){return this.getAmountToBeReceivedCompute(i,a,r,s,async()=>await this.pool.getPoolInfoFromChain(a,d),async()=>await this.pool.getPoolInfoFromChain(r,c))}async getAmountToBeReceivedCompute(i,a,r,s=1,d,c){switch(s){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(i,a,r,await d(),await c());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(i,a,r,s);case 5:return this.getAmountToBeReceivedComputeOft(i,a,r)}}getAmountToBeReceivedComputeWithPools(i,a,r,s,d){ae(i),te("amountToSendFloat",i,a.decimals);let c=O(i,a.decimals),u=lt(c,a,s);return this.getAmountFromVUsdFormatted(u,r,d).float}getAmountToBeReceivedComputeCctp(i,a,r,s){ae(i),te("amountToSendFloat",i,a.decimals);let d=O(i,a.decimals);switch(s){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new Ve("Such route does not support CCTP protocol");let c=d.mul(Ne(1).minus(a.cctpFeeShare)).round(0,Ne.roundUp),u=Oe(c,a.decimals,r.decimals).round(0);return z(u,r.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new Ve("Such route does not support CCTP V2 protocol");let c=d.mul(Ne(1).minus(a.cctpV2FeeShare)).round(0,Ne.roundUp),u=Oe(c,a.decimals,r.decimals).round(0);return z(u,r.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(i,a,r){ae(i),te("amountToSendFloat",i,a.decimals);let s=O(i,a.decimals);if(!a.oftBridgeAddress||!r.oftBridgeAddress||a.oftId!==r.oftId)throw new Pe("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!d)throw new Pe("Such route does not support OFT protocol");let c=s.mul(Ne(1).minus(d)).round(0,Ne.roundUp),u=Oe(c,a.decimals,r.decimals).round(0);return z(u,r.decimals).toFixed()}async getAmountToSend(i,a,r,s){return this.getAmountToSendCompute(i,a,r,s,()=>we(this.api,a),()=>we(this.api,r))}async getAmountToSendFromChain(i,a,r,s,d,c){return this.getAmountToSendCompute(i,a,r,s,()=>this.pool.getPoolInfoFromChain(a,d),()=>this.pool.getPoolInfoFromChain(r,c))}async getAmountToSendCompute(i,a,r,s=1,d,c){switch(s){case 1:case 2:return this.getAmountToSendComputeWithPools(i,a,r,await d(),await c());case 3:case 4:return this.getAmountToSendComputeCctp(i,a,r,s);case 5:return this.getAmountToSendComputeOft(i,a,r)}}getAmountToSendComputeWithPools(i,a,r,s,d){ae(i),te("amountToBeReceivedFloat",i,r.decimals);let c=O(i,r.decimals),u=no(c,r,d),p=to(u,a,s);if(Ne(p).lte(0))throw new vt;return z(p,a.decimals).toFixed()}getAmountToSendComputeCctp(i,a,r,s){ae(i),te("amountToBeReceivedFloat",i,r.decimals);let d=O(i,r.decimals);switch(s){case 3:{if(!a.cctpAddress||!r.cctpAddress||!a.cctpFeeShare)throw new Ve("Such route does not support CCTP protocol");let c=d.div(Ne(1).minus(a.cctpFeeShare)).round(0,Ne.roundDown),u=Oe(c,r.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}case 4:{if(!a.cctpV2Address||!r.cctpV2Address||!a.cctpV2FeeShare)throw new Ve("Such route does not support CCTP V2 protocol");let c=d.div(Ne(1).minus(a.cctpV2FeeShare)).round(0,Ne.roundDown),u=Oe(c,r.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}}}async getAmountToSendComputeOft(i,a,r){ae(i),te("amountToBeReceivedFloat",i,r.decimals);let s=O(i,r.decimals);if(!a.oftId||!r.oftId||!a.oftBridgeAddress||a.oftId!==r.oftId)throw new Pe("Such route does not support OFT protocol");let{adminFeeShareWithExtras:d}=await this.api.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:a.tokenAddress});if(!d)throw new Pe("Such route does not support OFT protocol");let c=s.div(Ne(1).minus(d)).round(0,Ne.roundDown),u=Oe(c,r.decimals,a.decimals).round(0);return z(u,a.decimals).toFixed()}async getGasFeeOptions(i,a,r){return $a(i,a.allbridgeChainId,r,this.api)}getAverageTransferTime(i,a,r){return i.transferTime?.[a.chainSymbol]?.[r]??null}async getPoolInfoByToken(i){return await this.api.getPoolInfoByKey({chainSymbol:i.chainSymbol,poolAddress:i.poolAddress})}async refreshPoolInfo(i){if(i){let r=(i instanceof Array?i:[i]).map(s=>({chainSymbol:s.chainSymbol,poolAddress:s.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(i){return ao(i)}async getExtraGasMaxLimits(i,a,r){return await qa(i,a,r,this.api)}async getVUsdFromAmount(i,a,r){ae(i);let s;a=="float"?(te("amount",i,r.decimals),s=O(i,r.decimals).toFixed()):s=i;let d=lt(s,r,await we(this.api,r));return{int:d,float:z(d,3).toFixed()}}async getAmountFromVUsd(i,a){return this.getAmountFromVUsdFormatted(i,a,await we(this.api,a))}getAmountFromVUsdFormatted(i,a,r){ae(i);let s=Xn(i,a,r);if(Ne(s).lt(0))throw new vt;return{int:s,float:z(s,a.decimals).toFixed()}}async swapAndBridgeFeeCalculation(i,a,r){return bs(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await we(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await we(this.api,r)})}async swapAndBridgeFeeCalculationReverse(i,a,r){let s=ys(i,{decimals:a.decimals,feeShare:a.feeShare,poolInfo:await we(this.api,a)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await we(this.api,r)}),d=s.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if(Ne(d).lt(0))throw new vt;return s}async getSendAmountDetails(i,a,r,s){ae(i);let d;return a=="float"?(te("amount",i,r.decimals),d=O(i,r.decimals).toFixed()):d=i,Cs(d,r,await we(this.api,r),s,await we(this.api,s))}};function sg(o){return"solanaRpcUrl"in o}var Ns=class{params;bridge;pool;yield;utils;service;constructor(i,a=ri){let r;sg(i)?r=new ni({SOL:i.solanaRpcUrl,TRX:i.tronRpcUrl}):r=new ni(i),this.service=new Va(r,a),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new Xa(this.service),this.params=a}async chainDetailsMap(i="swap"){return this.service.chainDetailsMap(i)}async tokens(i="swap"){return this.service.tokens(i)}async tokensByChain(i,a="swap"){return this.service.tokensByChain(i,a)}async getTransferStatus(i,a){return this.service.getTransferStatus(i,a)}async getGasBalance(i,a){return this.service.getGasBalance(i,a)}async checkAddress(i,a,r){return await this.service.checkAddress()}async getPendingStatusInfo(i,a,r,s){return this.service.getPendingStatusInfo(i,a,r,s)}async getTokenBalance(i,a){return this.service.getTokenBalance(i,a)}async getNativeTokenBalance(i,a){return this.service.getNativeTokenBalance(i,a)}async calculateFeePercentOnSourceChain(i,a){return this.service.calculateFeePercentOnSourceChain(i,a)}async calculateFeePercentOnDestinationChain(i,a,r){return this.service.calculateFeePercentOnDestinationChain(i,a,r)}async getAmountToBeReceivedAndGasFeeOptions(i,a,r,s){return this.service.getAmountToBeReceivedAndGasFeeOptions(i,a,r,s)}async getAmountToSendAndGasFeeOptions(i,a,r,s){return this.service.getAmountToSendAndGasFeeOptions(i,a,r,s)}async getAmountToBeReceived(i,a,r,s=1){return this.service.getAmountToBeReceived(i,a,r,s)}async getAmountToBeReceivedFromChain(i,a,r,s=1,d,c){return this.service.getAmountToBeReceivedFromChain(i,a,r,s,d,c)}getAmountToBeReceivedFromPools(i,a,r,s,d,c=1){switch(c){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(i,a,r,s,d);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(i,a,r,c)}}async getAmountToSend(i,a,r,s=1){return this.service.getAmountToSend(i,a,r,s)}async getAmountToSendFromChain(i,a,r,s=1,d,c){return this.service.getAmountToSendFromChain(i,a,r,s,d,c)}getAmountToSendFromPools(i,a,r,s,d,c=1){switch(c){case 1:case 2:return this.service.getAmountToSendComputeWithPools(i,a,r,s,d);case 3:case 4:return this.service.getAmountToSendComputeCctp(i,a,r,c)}}async getGasFeeOptions(i,a,r){return this.service.getGasFeeOptions(i,a,r)}getAverageTransferTime(i,a,r){return this.service.getAverageTransferTime(i,a,r)}async getPoolInfoByToken(i){return this.service.getPoolInfoByToken(i)}async refreshPoolInfo(i){return this.service.refreshPoolInfo(i)}aprInPercents(i){return this.service.aprInPercents(i)}async getExtraGasMaxLimits(i,a,r=1){return this.service.getExtraGasMaxLimits(i,a,r)}async getVUsdFromAmount(i,a,r){return this.service.getVUsdFromAmount(i,a,r)}async getAmountFromVUsd(i,a){return this.service.getAmountFromVUsd(i,a)}async swapAndBridgeFeeCalculation(i,a,r){return this.service.swapAndBridgeFeeCalculation(i,a,r)}async swapAndBridgeFeeCalculationReverse(i,a,r){return this.service.swapAndBridgeFeeCalculationReverse(i,a,r)}async getSendAmountDetails(i,a,r,s){return this.service.getSendAmountDetails(i,a,r,s)}};export{za as AddressStatus,Ns as AllbridgeCoreSdk,vi as AmountFormat,ht as AmountNotEnoughError,di as ArgumentInvalidDecimalsError,Ve as CCTPDoesNotSupportedError,et as ChainSymbol,ee as ChainType,Ks as ErrorCode,si as ExtraGasMaxLimitExceededError,ot as FeePaymentMethod,vt as InsufficientPoolLiquidityError,gt as InvalidAmountError,Nt as InvalidGasFeePaymentOptionError,oi as InvalidMessengerOptionError,on as InvalidTxError,Xe as JupiterError,De as Messenger,E as MethodNotSupportedError,ci as NodeRpcUrlNotInitializedError,Pe as OFTDoesNotSupportedError,G as SdkError,Ie as SdkRootError,tr as SolanaAutoTxFee,Zn as TimeoutError,gi as TxTooLargeError,Nn as VerifyTxError,Ai as YieldDoesNotSupportedError,gA as assertYieldIsSupported,Ia as isYieldSupported,ri as mainnet,Ng as nodeRpcUrlsDefault,Fg as nodeUrlsDefault};
|
|
7
7
|
/*! Bundled license information:
|
|
8
8
|
|
|
9
9
|
@jspm/core/nodelibs/browser/chunk-DtuTasat.js:
|