@raydium-io/raydium-sdk-v2 0.1.63-alpha → 0.1.64-alpha
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/lib/api/api.d.ts +1 -1
- package/lib/api/index.d.ts +1 -1
- package/lib/api/type.d.ts +1 -1
- package/lib/{api-11ffb196.d.ts → api-f242758a.d.ts} +8 -8
- package/lib/common/accountInfo.d.ts +1 -1
- package/lib/common/bignumber.d.ts +1 -1
- package/lib/common/fractionUtil.d.ts +1 -1
- package/lib/common/index.d.ts +1 -1
- package/lib/common/transfer.d.ts +1 -1
- package/lib/common/txTool/txTool.d.ts +1 -1
- package/lib/common/txTool/txUtils.d.ts +1 -1
- package/lib/common/utility.d.ts +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.mjs.map +1 -1
- package/lib/module/amount.d.ts +1 -1
- package/lib/module/fraction.d.ts +1 -1
- package/lib/module/index.d.ts +1 -1
- package/lib/module/percent.d.ts +1 -1
- package/lib/module/price.d.ts +1 -1
- package/lib/raydium/account/account.d.ts +3 -3
- package/lib/raydium/account/index.d.ts +1 -1
- package/lib/raydium/account/instruction.d.ts +1 -1
- package/lib/raydium/account/types.d.ts +1 -1
- package/lib/raydium/account/util.d.ts +1 -1
- package/lib/raydium/clmm/clmm.d.ts +3 -3
- package/lib/raydium/clmm/index.d.ts +3 -3
- package/lib/raydium/clmm/instrument.d.ts +2 -2
- package/lib/raydium/clmm/layout.d.ts +6 -6
- package/lib/raydium/clmm/type.d.ts +2 -2
- package/lib/raydium/clmm/utils/math.d.ts +2 -2
- package/lib/raydium/clmm/utils/pool.d.ts +2 -2
- package/lib/raydium/clmm/utils/position.d.ts +2 -2
- package/lib/raydium/clmm/utils/tick.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
- package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
- package/lib/raydium/cpmm/cpmm.d.ts +3 -3
- package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
- package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
- package/lib/raydium/cpmm/index.d.ts +1 -1
- package/lib/raydium/cpmm/layout.d.ts +1 -1
- package/lib/raydium/cpmm/type.d.ts +1 -1
- package/lib/raydium/farm/config.d.ts +1 -1
- package/lib/raydium/farm/farm.d.ts +3 -3
- package/lib/raydium/farm/index.d.ts +1 -1
- package/lib/raydium/farm/instruction.d.ts +1 -1
- package/lib/raydium/farm/layout.d.ts +1 -1
- package/lib/raydium/farm/type.d.ts +1 -1
- package/lib/raydium/farm/util.d.ts +1 -1
- package/lib/raydium/ido/ido.d.ts +3 -3
- package/lib/raydium/ido/index.d.ts +3 -3
- package/lib/raydium/ido/instruction.d.ts +1 -1
- package/lib/raydium/ido/type.d.ts +1 -1
- package/lib/raydium/index.d.ts +3 -3
- package/lib/raydium/index.js +1 -1
- package/lib/raydium/index.js.map +1 -1
- package/lib/raydium/index.mjs +1 -1
- package/lib/raydium/index.mjs.map +1 -1
- package/lib/raydium/liquidity/index.d.ts +1 -1
- package/lib/raydium/liquidity/instruction.d.ts +1 -1
- package/lib/raydium/liquidity/layout.d.ts +6 -6
- package/lib/raydium/liquidity/liquidity.d.ts +3 -3
- package/lib/raydium/liquidity/type.d.ts +1 -1
- package/lib/raydium/liquidity/utils.d.ts +1 -1
- package/lib/raydium/marketV2/createMarket.d.ts +3 -3
- package/lib/raydium/marketV2/index.d.ts +3 -3
- package/lib/raydium/moduleBase.d.ts +3 -3
- package/lib/raydium/raydium.d.ts +3 -3
- package/lib/raydium/raydium.js +1 -1
- package/lib/raydium/raydium.js.map +1 -1
- package/lib/raydium/raydium.mjs +1 -1
- package/lib/raydium/raydium.mjs.map +1 -1
- package/lib/raydium/token/constant.d.ts +1 -1
- package/lib/raydium/token/index.d.ts +1 -1
- package/lib/raydium/token/token.d.ts +3 -3
- package/lib/raydium/token/token.js +1 -1
- package/lib/raydium/token/token.js.map +1 -1
- package/lib/raydium/token/token.mjs +1 -1
- package/lib/raydium/token/token.mjs.map +1 -1
- package/lib/raydium/token/type.d.ts +1 -1
- package/lib/raydium/token/utils.d.ts +1 -1
- package/lib/raydium/tradeV2/index.d.ts +2 -2
- package/lib/raydium/tradeV2/instrument.d.ts +2 -2
- package/lib/raydium/tradeV2/trade.d.ts +3 -3
- package/lib/raydium/tradeV2/type.d.ts +2 -2
- package/lib/raydium/type.d.ts +1 -1
- package/lib/raydium/utils1216/index.d.ts +3 -3
- package/lib/raydium/utils1216/utils1216.d.ts +3 -3
- package/lib/{raydium-a023305c.d.ts → raydium-5502e631.d.ts} +3 -3
- package/lib/{type-1bf767ed.d.ts → type-b1a9baec.d.ts} +1 -1
- package/package.json +1 -1
- package/src/raydium/raydium.ts +1 -1
- package/src/raydium/token/token.ts +1 -2
package/lib/raydium/raydium.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Ru=Object.defineProperty,Lu=Object.defineProperties;var Ou=Object.getOwnPropertyDescriptors;var Sr=Object.getOwnPropertySymbols;var rs=Object.prototype.hasOwnProperty,is=Object.prototype.propertyIsEnumerable;var ns=(i,e,t)=>e in i?Ru(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,C=(i,e)=>{for(var t in e||(e={}))rs.call(e,t)&&ns(i,t,e[t]);if(Sr)for(var t of Sr(e))is.call(e,t)&&ns(i,t,e[t]);return i},F=(i,e)=>Lu(i,Ou(e));var Ke=(i,e)=>{var t={};for(var n in i)rs.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&Sr)for(var n of Sr(i))e.indexOf(n)<0&&is.call(i,n)&&(t[n]=i[n]);return t};import{merge as Pd}from"lodash";import Gs from"axios";import{get as os,set as Nu}from"lodash";var Mi=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},ss={},Mu={};function se(i){let e=os(ss,i);if(!e){let t=os(Mu,i);e=new Mi({name:i,logLevel:t}),Nu(ss,i,e)}return e}import{PublicKey as Gc}from"@solana/web3.js";import Xc from"bn.js";import Wc from"big.js";import Wr from"bn.js";import et from"bn.js";var An=9e15,Xt=1e9,_i="0123456789abcdef",Cr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Rr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",vi={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-An,maxE:An,crypto:!1},ls,Nt,re=!0,Or="[DecimalError] ",Gt=Or+"Invalid argument: ",ms=Or+"Precision limit exceeded",ds=Or+"crypto unavailable",ps="[object Decimal]",qe=Math.floor,Le=Math.pow,_u=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,vu=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Vu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,fs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,gt=1e7,J=7,Eu=9007199254740991,Fu=Cr.length-1,Vi=Rr.length-1,_={toStringTag:ps};_.absoluteValue=_.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),H(i)};_.ceil=function(){return H(new this.constructor(this),this.e+1,2)};_.clampedTo=_.clamp=function(i,e){var t,n=this,r=n.constructor;if(i=new r(i),e=new r(e),!i.s||!e.s)return new r(NaN);if(i.gt(e))throw Error(Gt+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new r(n)};_.comparedTo=_.cmp=function(i){var e,t,n,r,o=this,s=o.d,a=(i=new o.constructor(i)).d,u=o.s,c=i.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(o.e!==i.e)return o.e>i.e^u<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===r?0:n>r^u<0?1:-1};_.cosine=_.cos=function(){var i,e,t=this,n=t.constructor;return t.d?t.d[0]?(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+J,n.rounding=1,t=Du(n,As(n,t)),n.precision=i,n.rounding=e,H(Nt==2||Nt==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};_.cubeRoot=_.cbrt=function(){var i,e,t,n,r,o,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(re=!1,o=l.s*Le(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=ve(l.d),i=l.e,(o=(i-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Le(t,1/3),i=qe((i+1)/3)-(i%3==(i<0?-1:2)),o==1/0?t="5e"+i:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+i),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(i=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=we(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,i+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,H(n,i,m.rounding,e)};_.decimalPlaces=_.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-qe(this.e/J))*J,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};_.dividedBy=_.div=function(i){return we(this,new this.constructor(i))};_.dividedToIntegerBy=_.divToInt=function(i){var e=this,t=e.constructor;return H(we(e,new t(i),0,1,1),t.precision,t.rounding)};_.equals=_.eq=function(i){return this.cmp(i)===0};_.floor=function(){return H(new this.constructor(this),this.e+1,3)};_.greaterThan=_.gt=function(i){return this.cmp(i)>0};_.greaterThanOrEqualTo=_.gte=function(i){var e=this.cmp(i);return e==1||e===0};_.hyperbolicCosine=_.cosh=function(){var i,e,t,n,r,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,r=o.d.length,r<32?(i=Math.ceil(r/3),e=(1/Mr(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),o=hn(s,1,o.times(e),new s(1),!0);for(var u,c=i,l=new s(8);c--;)u=o.times(o),o=a.minus(u.times(l.minus(u.times(l))));return H(o,s.precision=t,s.rounding=n,!0)};_.hyperbolicSine=_.sinh=function(){var i,e,t,n,r=this,o=r.constructor;if(!r.isFinite()||r.isZero())return new o(r);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(r.e,r.sd())+4,o.rounding=1,n=r.d.length,n<3)r=hn(o,2,r,r,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,r=r.times(1/Mr(5,i)),r=hn(o,2,r,r,!0);for(var s,a=new o(5),u=new o(16),c=new o(20);i--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(c))))}return o.precision=e,o.rounding=t,H(r,e,t,!0)};_.hyperbolicTangent=_.tanh=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+7,n.rounding=1,we(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};_.inverseCosine=_.acos=function(){var i,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?bt(t,r,o):new t(0):new t(NaN):e.isZero()?bt(t,r+4,o).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),i=bt(t,r+4,o).times(.5),t.precision=r,t.rounding=o,i.minus(e))};_.inverseHyperbolicCosine=_.acosh=function(){var i,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(i=n.precision,e=n.rounding,n.precision=i+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};_.inverseHyperbolicSine=_.asinh=function(){var i,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=i,n.rounding=e,t.ln())};_.inverseHyperbolicTangent=_.atanh=function(){var i,e,t,n,r=this,o=r.constructor;return r.isFinite()?r.e>=0?new o(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(i=o.precision,e=o.rounding,n=r.sd(),Math.max(n,i)<2*-r.e-1?H(new o(r),i,e,!0):(o.precision=t=n-r.e,r=we(r.plus(1),new o(1).minus(r),t+i,1),o.precision=i+4,o.rounding=1,r=r.ln(),o.precision=i,o.rounding=e,r.times(.5))):new o(NaN)};_.inverseSine=_.asin=function(){var i,e,t,n,r=this,o=r.constructor;return r.isZero()?new o(r):(e=r.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(i=bt(o,t+4,n).times(.5),i.s=r.s,i):new o(NaN):(o.precision=t+6,o.rounding=1,r=r.div(new o(1).minus(r.times(r)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,r.times(2)))};_.inverseTangent=_.atan=function(){var i,e,t,n,r,o,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Vi)return s=bt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Vi)return s=bt(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/J+2|0),i=t;i;--i)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/J),n=1,u=c.times(c),s=new l(c),r=c;i!==-1;)if(r=r.times(u),o=s.minus(r.div(n+=2)),r=r.times(u),s=o.plus(r.div(n+=2)),s.d[e]!==void 0)for(i=e;s.d[i]===o.d[i]&&i--;);return t&&(s=s.times(2<<t-1)),re=!0,H(s,l.precision=m,l.rounding=d,!0)};_.isFinite=function(){return!!this.d};_.isInteger=_.isInt=function(){return!!this.d&&qe(this.e/J)>this.d.length-2};_.isNaN=function(){return!this.s};_.isNegative=_.isNeg=function(){return this.s<0};_.isPositive=_.isPos=function(){return this.s>0};_.isZero=function(){return!!this.d&&this.d[0]===0};_.lessThan=_.lt=function(i){return this.cmp(i)<0};_.lessThanOrEqualTo=_.lte=function(i){return this.cmp(i)<1};_.logarithm=_.log=function(i){var e,t,n,r,o,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(i==null)i=new l(10),e=!0;else{if(i=new l(i),t=i.d,i.s<0||!t||!t[0]||i.eq(1))return new l(NaN);e=i.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(r=t[0];r%10===0;)r/=10;o=r!==1}if(re=!1,a=m+p,s=Ut(c,a),n=e?Lr(l,a+10):Ut(i,a),u=we(s,n,a,1),_n(u.d,r=m,d))do if(a+=10,s=Ut(c,a),n=e?Lr(l,a+10):Ut(i,a),u=we(s,n,a,1),!o){+ve(u.d).slice(r+1,r+15)+1==1e14&&(u=H(u,m+1,0));break}while(_n(u.d,r+=10,d));return re=!0,H(u,m,d)};_.minus=_.sub=function(i){var e,t,n,r,o,s,a,u,c,l,m,d,p=this,y=p.constructor;if(i=new y(i),!p.d||!i.d)return!p.s||!i.s?i=new y(NaN):p.d?i.s=-i.s:i=new y(i.d||p.s!==i.s?p:NaN),i;if(p.s!=i.s)return i.s=-i.s,p.plus(i);if(c=p.d,d=i.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])i.s=-i.s;else if(c[0])i=new y(p);else return new y(u===3?-0:0);return re?H(i,a,u):i}if(t=qe(i.e/J),l=qe(p.e/J),c=c.slice(),o=l-t,o){for(m=o<0,m?(e=c,o=-o,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/J),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}o=0}for(m&&(e=c,c=d,d=e,i.s=-i.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>o;){if(c[--n]<d[n]){for(r=n;r&&c[--r]===0;)c[r]=gt-1;--c[r],c[n]+=gt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(i.d=c,i.e=Nr(c,t),re?H(i,a,u):i):new y(u===3?-0:0)};_.modulo=_.mod=function(i){var e,t=this,n=t.constructor;return i=new n(i),!t.d||!i.s||i.d&&!i.d[0]?new n(NaN):!i.d||t.d&&!t.d[0]?H(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=we(t,i.abs(),0,3,1),e.s*=i.s):e=we(t,i,0,n.modulo,1),e=e.times(i),re=!0,t.minus(e))};_.naturalExponential=_.exp=function(){return Ei(this)};_.naturalLogarithm=_.ln=function(){return Ut(this)};_.negated=_.neg=function(){var i=new this.constructor(this);return i.s=-i.s,H(i)};_.plus=_.add=function(i){var e,t,n,r,o,s,a,u,c,l,m=this,d=m.constructor;if(i=new d(i),!m.d||!i.d)return!m.s||!i.s?i=new d(NaN):m.d||(i=new d(i.d||m.s===i.s?m:NaN)),i;if(m.s!=i.s)return i.s=-i.s,m.minus(i);if(c=m.d,l=i.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(i=new d(m)),re?H(i,a,u):i;if(o=qe(m.e/J),n=qe(i.e/J),c=c.slice(),r=o-n,r){for(r<0?(t=c,r=-r,s=l.length):(t=l,n=o,s=c.length),o=Math.ceil(a/J),s=o>s?o+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=c.length,r=l.length,s-r<0&&(r=s,t=l,l=c,c=t),e=0;r;)e=(c[--r]=c[r]+l[r]+e)/gt|0,c[r]%=gt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return i.d=c,i.e=Nr(c,n),re?H(i,a,u):i};_.precision=_.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(Gt+i);return t.d?(e=ys(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};_.round=function(){var i=this,e=i.constructor;return H(new e(i),i.e+1,e.rounding)};_.sine=_.sin=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+J,n.rounding=1,t=qu(n,As(n,t)),n.precision=i,n.rounding=e,H(Nt>2?t.neg():t,i,e,!0)):new n(NaN)};_.squareRoot=_.sqrt=function(){var i,e,t,n,r,o,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(re=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=qe((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(o=n,n=o.plus(we(s,o,t+2,1)).times(.5),ve(o.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(H(o,u+1,0),o.times(o).eq(s))){n=o;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,u+1,1),i=!n.times(n).eq(s));break}return re=!0,H(n,u,l.rounding,i)};_.tangent=_.tan=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+10,n.rounding=1,t=t.sin(),t.s=1,t=we(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,H(Nt==2||Nt==4?t.neg():t,i,e,!0)):new n(NaN)};_.times=_.mul=function(i){var e,t,n,r,o,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(i=new m(i)).d;if(i.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!i.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?i.s/0:i.s*0);for(t=qe(l.e/J)+qe(i.e/J),u=d.length,c=p.length,u<c&&(o=d,d=p,p=o,s=u,u=c,c=s),o=[],s=u+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,r=u+n;r>n;)a=o[r]+p[n]*d[r-n-1]+e,o[r--]=a%gt|0,e=a/gt|0;o[r]=(o[r]+e)%gt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),i.d=o,i.e=Nr(o,t),re?H(i,m.precision,m.rounding):i};_.toBinary=function(i,e){return Di(this,2,i,e)};_.toDecimalPlaces=_.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:($e(i,0,Xt),e===void 0?e=n.rounding:$e(e,0,8),H(t,i+t.e+1,e))};_.toExponential=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=Kt(n,!0):($e(i,0,Xt),e===void 0?e=r.rounding:$e(e,0,8),n=H(new r(n),i+1,e),t=Kt(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toFixed=function(i,e){var t,n,r=this,o=r.constructor;return i===void 0?t=Kt(r):($e(i,0,Xt),e===void 0?e=o.rounding:$e(e,0,8),n=H(new o(r),i+r.e+1,e),t=Kt(n,!1,i+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};_.toFraction=function(i){var e,t,n,r,o,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),o=e.e=ys(y)-p.e-1,s=o%J,e.d[0]=Le(10,s<0?J+s:s),i==null)i=o>0?e:c;else{if(a=new f(i),!a.isInt()||a.lt(c))throw Error(Gt+a);i=a.gt(e)?o>0?e:c:a}for(re=!1,a=new f(ve(y)),l=f.precision,f.precision=o=y.length*J*2;m=we(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(i)!=1;)t=n,n=r,r=c,c=u.plus(m.times(r)),u=r,r=e,e=a.minus(m.times(r)),a=r;return r=we(i.minus(t),n,0,1,1),u=u.plus(r.times(c)),t=t.plus(r.times(n)),u.s=c.s=p.s,d=we(c,n,o,1).minus(p).abs().cmp(we(u,t,o,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,re=!0,d};_.toHexadecimal=_.toHex=function(i,e){return Di(this,16,i,e)};_.toNearest=function(i,e){var t=this,n=t.constructor;if(t=new n(t),i==null){if(!t.d)return t;i=new n(1),e=n.rounding}else{if(i=new n(i),e===void 0?e=n.rounding:$e(e,0,8),!t.d)return i.s?t:i;if(!i.d)return i.s&&(i.s=t.s),i}return i.d[0]?(re=!1,t=we(t,i,0,e,1).times(i),re=!0,H(t)):(i.s=t.s,t=i),t};_.toNumber=function(){return+this};_.toOctal=function(i,e){return Di(this,8,i,e)};_.toPower=_.pow=function(i){var e,t,n,r,o,s,a=this,u=a.constructor,c=+(i=new u(i));if(!a.d||!i.d||!a.d[0]||!i.d[0])return new u(Le(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,i.eq(1))return H(a,n,o);if(e=qe(i.e/J),e>=i.d.length-1&&(t=c<0?-c:c)<=Eu)return r=bs(u,a,t,n),i.s<0?new u(1).div(r):H(r,n,o);if(s=a.s,s<0){if(e<i.d.length-1)return new u(NaN);if((i.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Le(+a,c),e=t==0||!isFinite(t)?qe(c*(Math.log("0."+ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(re=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Ei(i.times(Ut(a,n+t)),n),r.d&&(r=H(r,n+5,1),_n(r.d,n,o)&&(e=n+10,r=H(Ei(i.times(Ut(a,e+t)),e),e+5,1),+ve(r.d).slice(n+1,n+15)+1==1e14&&(r=H(r,n+1,0)))),r.s=s,re=!0,u.rounding=o,H(r,n,o))};_.toPrecision=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=Kt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):($e(i,1,Xt),e===void 0?e=r.rounding:$e(e,0,8),n=H(new r(n),i,e),t=Kt(n,i<=n.e||n.e<=r.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toSignificantDigits=_.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):($e(i,1,Xt),e===void 0?e=n.rounding:$e(e,0,8)),H(new n(t),i,e)};_.toString=function(){var i=this,e=i.constructor,t=Kt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};_.truncated=_.trunc=function(){return H(new this.constructor(this),this.e+1,1)};_.valueOf=_.toJSON=function(){var i=this,e=i.constructor,t=Kt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function ve(i){var e,t,n,r=i.length-1,o="",s=i[0];if(r>0){for(o+=s,e=1;e<r;e++)n=i[e]+"",t=J-n.length,t&&(o+=qt(t)),o+=n;s=i[e],n=s+"",t=J-n.length,t&&(o+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function $e(i,e,t){if(i!==~~i||i<e||i>t)throw Error(Gt+i)}function _n(i,e,t,n){var r,o,s,a;for(o=i[0];o>=10;o/=10)--e;return--e<0?(e+=J,r=0):(r=Math.ceil((e+1)/J),e%=J),o=Le(10,J-e),a=i[r]%o|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(i[r+1]/o/100|0)==Le(10,e-2)-1||(a==o/2||a==0)&&(i[r+1]/o/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(i[r+1]/o/1e3|0)==Le(10,e-3)-1,s}function Kr(i,e,t){for(var n,r=[0],o,s=0,a=i.length;s<a;){for(o=r.length;o--;)r[o]*=e;for(r[0]+=_i.indexOf(i.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function Du(i,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Mr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),i.precision+=t,e=hn(i,1,e.times(r),new i(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return i.precision-=t,e}var we=function(){function i(n,r,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*r+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,r,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=r[a]){u=n[a]>r[a]?1:-1;break}return u}function t(n,r,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<r[o]?1:0,n[o]=a*s+n[o]-r[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,o,s,a,u){var c,l,m,d,p,y,f,b,g,h,w,P,I,T,S,x,R,B,O,D,v=n.constructor,j=n.s==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new v(!n.s||!r.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?j*0:j/0);for(u?(p=1,l=n.e-r.e):(u=gt,p=J,l=qe(n.e/p)-qe(r.e/p)),O=q.length,R=G.length,g=new v(j),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,o==null?(T=o=v.precision,s=v.rounding):a?T=o+(n.e-r.e)+1:T=o,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,O==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=u/(q[0]+1)|0,d>1&&(q=i(q,d,u),G=i(G,d,u),O=q.length,R=G.length),x=O,w=G.slice(0,O),P=w.length;P<O;)w[P++]=0;D=q.slice(),D.unshift(0),B=q[0],q[1]>=u/2&&++B;do d=0,c=e(q,w,O,P),c<0?(I=w[0],O!=P&&(I=I*u+(w[1]||0)),d=I/B|0,d>1?(d>=u&&(d=u-1),f=i(q,d,u),b=f.length,P=w.length,c=e(f,w,b,P),c==1&&(d--,t(f,O<b?D:q,b,u))):(d==0&&(c=d=1),f=q.slice()),b=f.length,b<P&&f.unshift(0),t(w,f,P,u),c==-1&&(P=w.length,c=e(q,w,O,P),c<1&&(d++,t(w,O<P?D:q,P,u))),P=w.length):c===0&&(d++,w=[0]),h[m++]=d,c&&w[0]?w[P++]=G[x]||0:(w=[G[x]],P=1);while((x++<R||w[0]!==void 0)&&T--);y=w[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,ls=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?o+g.e+1:o,s,y)}return g}}();function H(i,e,t,n){var r,o,s,a,u,c,l,m,d,p=i.constructor;e:if(e!=null){if(m=i.d,!m)return i;for(r=1,a=m[0];a>=10;a/=10)r++;if(o=e-r,o<0)o+=J,s=e,l=m[d=0],u=l/Le(10,r-s-1)%10|0;else if(d=Math.ceil((o+1)/J),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,r=1,o%=J,s=o-J+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;o%=J,s=o-J+r,u=s<0?0:l/Le(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Le(10,r-s-1)),c=t<4?(u||n)&&(t==0||t==(i.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(o>0?s>0?l/Le(10,r-s):0:m[d-1])%10&1||t==(i.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=i.e+1,m[0]=Le(10,(J-e%J)%J),i.e=-e||0):m[0]=i.e=0,i;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Le(10,J-o),m[d]=s>0?(l/Le(10,r-s)%Le(10,s)|0)*a:0),c)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(i.e++,m[0]==gt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=gt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return re&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function Kt(i,e,t){if(!i.isFinite())return ws(i);var n,r=i.e,o=ve(i.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+qt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i.e<0?"e":"e+")+i.e):r<0?(o="0."+qt(-r-1)+o,t&&(n=t-s)>0&&(o+=qt(n))):r>=s?(o+=qt(r+1-s),t&&(n=t-r-1)>0&&(o=o+"."+qt(n))):((n=r+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(o+="."),o+=qt(n))),o}function Nr(i,e){var t=i[0];for(e*=J;t>=10;t/=10)e++;return e}function Lr(i,e,t){if(e>Fu)throw re=!0,t&&(i.precision=t),Error(ms);return H(new i(Cr),e,1,!0)}function bt(i,e,t){if(e>Vi)throw Error(ms);return H(new i(Rr),e,t,!0)}function ys(i){var e=i.length-1,t=e*J+1;if(e=i[e],e){for(;e%10==0;e/=10)t--;for(e=i[0];e>=10;e/=10)t++}return t}function qt(i){for(var e="";i--;)e+="0";return e}function bs(i,e,t,n){var r,o=new i(1),s=Math.ceil(n/J+4);for(re=!1;;){if(t%2&&(o=o.times(e),us(o.d,s)&&(r=!0)),t=qe(t/2),t===0){t=o.d.length-1,r&&o.d[t]===0&&++o.d[t];break}e=e.times(e),us(e.d,s)}return re=!0,o}function as(i){return i.d[i.d.length-1]&1}function gs(i,e,t){for(var n,r=new i(e[0]),o=0;++o<e.length;)if(n=new i(e[o]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function Ei(i,e){var t,n,r,o,s,a,u,c=0,l=0,m=0,d=i.constructor,p=d.rounding,y=d.precision;if(!i.d||!i.d[0]||i.e>17)return new d(i.d?i.d[0]?i.s<0?0:1/0:1:i.s?i.s<0?0:i:0/0);for(e==null?(re=!1,u=y):u=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(Le(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new d(1),d.precision=u;;){if(o=H(o.times(i),u,1),t=t.times(++l),a=s.plus(we(o,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(r=m;r--;)s=H(s.times(s),u,1);if(e==null)if(c<3&&_n(s.d,u-n,p,c))d.precision=u+=10,t=o=a=new d(1),l=0,c++;else return H(s,d.precision=y,p,re=!0);else return d.precision=y,s}s=a}}function Ut(i,e){var t,n,r,o,s,a,u,c,l,m,d,p=1,y=10,f=i,b=f.d,g=f.constructor,h=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(re=!1,l=w):l=e,g.precision=l+=y,t=ve(b),n=t.charAt(0),Math.abs(o=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(i),t=ve(f.d),n=t.charAt(0),p++;o=f.e,n>1?(f=new g("0."+t),o++):f=new g(n+"."+t.slice(1))}else return c=Lr(g,l+2,w).times(o+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=w,e==null?H(f,w,h,re=!0):f;for(m=f,u=s=f=we(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),r=3;;){if(s=H(s.times(d),l,1),c=u.plus(we(s,new g(r),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(Lr(g,l+2,w).times(o+""))),u=we(u,new g(p),l,1),e==null)if(_n(u.d,l-y,h,a))g.precision=l+=y,c=s=f=we(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),r=a=1;else return H(u,g.precision=w,h,re=!0);else return g.precision=w,u;u=c,r+=2}}function ws(i){return String(i.s*i.s/0)}function Fi(i,e){var t,n,r;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,i.e=t=t-n-1,i.d=[],n=(t+1)%J,t<0&&(n+=J),n<r){for(n&&i.d.push(+e.slice(0,n)),r-=J;n<r;)i.d.push(+e.slice(n,n+=J));e=e.slice(n),n=J-e.length}else n-=r;for(;n--;)e+="0";i.d.push(+e),re&&(i.e>i.constructor.maxE?(i.d=null,i.e=NaN):i.e<i.constructor.minE&&(i.e=0,i.d=[0]))}else i.e=0,i.d=[0];return i}function Wu(i,e){var t,n,r,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),fs.test(e))return Fi(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(vu.test(e))t=16,e=e.toLowerCase();else if(_u.test(e))t=2;else if(Vu.test(e))t=8;else throw Error(Gt+e);for(o=e.search(/p/i),o>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=i.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,r=bs(n,new n(t),o,o*2)),c=Kr(e,t,gt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(i.s*0):(i.e=Nr(c,l),i.d=c,re=!1,s&&(i=we(i,r,a*4)),u&&(i=i.times(Math.abs(u)<54?Le(2,u):vn.pow(2,u))),re=!0,i)}function qu(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:hn(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Mr(5,t)),e=hn(i,2,e,e);for(var r,o=new i(5),s=new i(16),a=new i(20);t--;)r=e.times(e),e=e.times(o.plus(r.times(s.times(r).minus(a))));return e}function hn(i,e,t,n,r){var o,s,a,u,c=1,l=i.precision,m=Math.ceil(l/J);for(re=!1,u=t.times(t),a=new i(n);;){if(s=we(a.times(u),new i(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=we(s.times(u),new i(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,c++}return re=!0,s.d.length=m+1,s}function Mr(i,e){for(var t=i;--e;)t*=i;return t}function As(i,e){var t,n=e.s<0,r=bt(i,i.precision,1),o=r.times(.5);if(e=e.abs(),e.lte(o))return Nt=n?4:1,e;if(t=e.divToInt(r),t.isZero())Nt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(o))return Nt=as(t)?n?2:3:n?4:1,e;Nt=as(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Di(i,e,t,n){var r,o,s,a,u,c,l,m,d,p=i.constructor,y=t!==void 0;if(y?($e(t,1,Xt),n===void 0?n=p.rounding:$e(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=ws(i);else{for(l=Kt(i),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Kr(Kt(d),10,r),d.e=d.d.length),m=Kr(l,10,r),o=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?o--:(i=new p(i),i.d=m,i.e=o,i=we(i,d,t,n,0,r),m=i.d,o=i.e,c=ls),s=m[t],a=r/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(i.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(i.s<0?8:7)),m.length=t,c)for(;++m[--t]>r-1;)m[t]=0,t||(++o,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=_i.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Kr(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=_i.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>u)for(o-=u;o--;)l+="0";else o<u&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return i.s<0?"-"+l:l}function us(i,e){if(i.length>e)return i.length=e,!0}function Uu(i){return new this(i).abs()}function Gu(i){return new this(i).acos()}function Xu(i){return new this(i).acosh()}function zu(i,e){return new this(i).plus(e)}function Qu(i){return new this(i).asin()}function Yu(i){return new this(i).asinh()}function ju(i){return new this(i).atan()}function Hu(i){return new this(i).atanh()}function Zu(i,e){i=new this(i),e=new this(e);var t,n=this.precision,r=this.rounding,o=n+4;return!i.s||!e.s?t=new this(NaN):!i.d&&!e.d?(t=bt(this,o,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?bt(this,n,r):new this(0),t.s=i.s):!i.d||e.isZero()?(t=bt(this,o,1).times(.5),t.s=i.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(we(i,e,o,1)),e=bt(this,o,1),this.precision=n,this.rounding=r,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(we(i,e,o,1)),t}function $u(i){return new this(i).cbrt()}function Ju(i){return H(i=new this(i),i.e+1,2)}function ec(i,e,t){return new this(i).clamp(e,t)}function tc(i){if(!i||typeof i!="object")throw Error(Or+"Object expected");var e,t,n,r=i.defaults===!0,o=["precision",1,Xt,"rounding",0,8,"toExpNeg",-An,0,"toExpPos",0,An,"maxE",0,An,"minE",-An,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],r&&(this[t]=vi[t]),(n=i[t])!==void 0)if(qe(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",r&&(this[t]=vi[t]),(n=i[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(ds);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function nc(i){return new this(i).cos()}function rc(i){return new this(i).cosh()}function hs(i){var e,t,n;function r(o){var s,a,u,c=this;if(!(c instanceof r))return new r(o);if(c.constructor=r,cs(o)){c.s=o.s,re?!o.d||o.e>r.maxE?(c.e=NaN,c.d=null):o.e<r.minE?(c.e=0,c.d=[0]):(c.e=o.e,c.d=o.d.slice()):(c.e=o.e,c.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){c.s=1/o<0?-1:1,c.e=0,c.d=[0];return}if(o<0?(o=-o,c.s=-1):c.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;re?s>r.maxE?(c.e=NaN,c.d=null):s<r.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[o]):(c.e=s,c.d=[o]);return}else if(o*0!==0){o||(c.s=NaN),c.e=NaN,c.d=null;return}return Fi(c,o.toString())}else if(u!=="string")throw Error(Gt+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),fs.test(o)?Fi(c,o):Wu(c,o)}if(r.prototype=_,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=tc,r.clone=hs,r.isDecimal=cs,r.abs=Uu,r.acos=Gu,r.acosh=Xu,r.add=zu,r.asin=Qu,r.asinh=Yu,r.atan=ju,r.atanh=Hu,r.atan2=Zu,r.cbrt=$u,r.ceil=Ju,r.clamp=ec,r.cos=nc,r.cosh=rc,r.div=ic,r.exp=oc,r.floor=sc,r.hypot=ac,r.ln=uc,r.log=cc,r.log10=mc,r.log2=lc,r.max=dc,r.min=pc,r.mod=fc,r.mul=yc,r.pow=bc,r.random=gc,r.round=wc,r.sign=Ac,r.sin=hc,r.sinh=Pc,r.sqrt=kc,r.sub=Tc,r.sum=Ic,r.tan=Bc,r.tanh=xc,r.trunc=Sc,i===void 0&&(i={}),i&&i.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)i.hasOwnProperty(t=n[e++])||(i[t]=this[t]);return r.config(i),r}function ic(i,e){return new this(i).div(e)}function oc(i){return new this(i).exp()}function sc(i){return H(i=new this(i),i.e+1,3)}function ac(){var i,e,t=new this(0);for(re=!1,i=0;i<arguments.length;)if(e=new this(arguments[i++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function cs(i){return i instanceof vn||i&&i.toStringTag===ps||!1}function uc(i){return new this(i).ln()}function cc(i,e){return new this(i).log(e)}function lc(i){return new this(i).log(2)}function mc(i){return new this(i).log(10)}function dc(){return gs(this,arguments,"lt")}function pc(){return gs(this,arguments,"gt")}function fc(i,e){return new this(i).mod(e)}function yc(i,e){return new this(i).mul(e)}function bc(i,e){return new this(i).pow(e)}function gc(i){var e,t,n,r,o=0,s=new this(1),a=[];if(i===void 0?i=this.precision:$e(i,1,Xt),n=Math.ceil(i/J),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)r=e[o],r>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)r=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(r%1e7),o+=4);o=n/4}else throw Error(ds);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],i%=J,n&&i&&(r=Le(10,J-i),a[o]=(n/r|0)*r);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=J)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<J&&(t-=J-n)}return s.e=t,s.d=a,s}function wc(i){return H(i=new this(i),i.e+1,this.rounding)}function Ac(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function hc(i){return new this(i).sin()}function Pc(i){return new this(i).sinh()}function kc(i){return new this(i).sqrt()}function Tc(i,e){return new this(i).sub(e)}function Ic(){var i=0,e=arguments,t=new this(e[i]);for(re=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return re=!0,H(t,this.precision,this.rounding)}function Bc(i){return new this(i).tan()}function xc(i){return new this(i).tanh()}function Sc(i){return H(i=new this(i),i.e+1,1)}_[Symbol.for("nodejs.util.inspect.custom")]=_.toString;_[Symbol.toStringTag]="Decimal";var vn=_.constructor=hs(vi);Cr=new vn(Cr);Rr=new vn(Rr);var L=vn;import{PublicKey as Xi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kc}from"@solana/spl-token";import{PublicKey as he,SystemProgram as Ps,SYSVAR_RENT_PUBKEY as Cc}from"@solana/web3.js";function k({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var Wi=[k({pubkey:Kc,isWritable:!1}),k({pubkey:Ps.programId,isWritable:!1}),k({pubkey:Cc,isWritable:!1})];function qi({publicKey:i,transformSol:e}){let t=Ui(i.toString());if(t instanceof he)return e&&t.equals(Oe)?Q:t;if(e&&t.toString()===Oe.toBase58())return Q;if(typeof t=="string"){if(t===he.default.toBase58())return he.default;try{return new he(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ui(i){try{return new he(i)}catch{return i}}var _r=new he("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),vr=new he("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),wt=new he("SysvarRent111111111111111111111111111111111"),ks=new he("SysvarC1ock11111111111111111111111111111111"),Pn=new he("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Rc=new he("Sysvar1nstructions1111111111111111111111111"),Gi=Ps.programId,Cd=new he("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Rd=new he("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Ld=new he("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Od=new he("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Nd=new he("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Md=new he("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),_d=new he("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),vd=new he("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Vd=new he("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Ed=new he("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Fd=new he("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Q=new he("So11111111111111111111111111111111111111112"),Oe=he.default;function it(i){return qi({publicKey:i,transformSol:!0})}import{PublicKey as Lc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ts}from"@solana/spl-token";var zt={chainId:101,address:Lc.default.toBase58(),programId:Ts.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ts.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var zi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:o=!1,isToken2022:s=!1}){if(e===Oe.toBase58()||e instanceof Xi&&Oe.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new Xi(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=o?Xi.default:qi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Pe=zi;Pe.WSOL=new zi(F(C({},Ve),{mint:Ve.address}));import Er from"big.js";import Mc from"bn.js";import _c from"decimal.js-light";import Oc from"toformat";var Nc=Oc,Vn=Nc;var Vr=se("module/fraction"),Qi=Vn(Er),En=Vn(_c),vc={[0]:En.ROUND_DOWN,[1]:En.ROUND_HALF_UP,[2]:En.ROUND_UP},Vc={[0]:Er.roundDown,[1]:Er.roundHalfUp,[2]:Er.roundUp},de=class{constructor(e,t=new Mc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Vr.logWithError(`${e} is not an integer.`),e<=0&&Vr.logWithError(`${e} is not positive.`),En.set({precision:e+1,rounding:vc[n]});let r=new En(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Vr.logWithError(`${e} is not an integer.`),e<0&&Vr.logWithError(`${e} is negative.`),Qi.DP=e,Qi.RM=Vc[n]||1,new Qi(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Fc=se("Raydium_price"),Je=class extends de{constructor(t){let{baseToken:n,quoteToken:r,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=r,this.scalar=new de(Yi(n.decimals),Yi(r.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Je({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Fc.logWithError("mul token not equals");let n=super.mul(t);return new Je({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var ji=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Fr=ji;Fr.SOL=new ji(zt);import Dc from"bn.js";var Is=new de(new Dc(100)),Ue=class extends de{toSignificant(e=5,t,n){return this.mul(Is).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Is).toFixed(e,t,n)}};var ut=new et(0),xs=new et(1),_p=new et(2),vp=new et(3),Vp=new et(5),Hi=new et(10),Ep=new et(100),Fp=new et(1e3),Dp=new et(1e4),Bs=9007199254740991;function Z(i){let e=se("Raydium_parseBigNumberish");if(i instanceof et)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new et(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Bs||i<=-Bs)&&e.logWithError(`BigNumberish number overflow: ${i}`),new et(String(i))):typeof i=="bigint"?new et(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new et(0))}function Yi(i){return Hi.pow(Z(i))}function Dr(i,e){let t=i.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var qc=se("Raydium_amount"),Ks=Vn(Wc);function Uc(i,e){let t="0",n="0";if(i.includes(".")){let r=i.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):qc.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,r=!0,o){let s=new Wr(0),a=Hi.pow(new Wr(t.decimals));if(r)s=Z(n);else{let u=new Wr(0),c=new Wr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Uc(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(o||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return Ks.DP=this.token.decimals,new Ks(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Ss(i){return typeof i=="object"&&i!==null&&![Pe,ye,Gc,de,Xc,Je,Ue].some(e=>typeof e=="object"&&i instanceof e)}function Ee(i){return typeof i=="string"?Ui(i):Array.isArray(i)?i.map(e=>Ee(e)):Ss(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ee(t)])):i}import{PublicKey as Wn,sendAndConfirmTransaction as to,Transaction as qn,TransactionMessage as Un,VersionedTransaction as Gn}from"@solana/web3.js";import tl from"axios";var E={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as zc,ComputeBudgetProgram as Cs,Transaction as Ls,TransactionMessage as Qc,Keypair as Os,VersionedTransaction as Ns}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Yc}from"@solana/spl-token";var Rs=se("Raydium_txUtil"),Ms=1644;function qr(i){let e=[],t=[];return i.microLamports&&(e.push(Cs.setComputeUnitPrice({microLamports:i.microLamports})),t.push(E.SetComputeUnitPrice)),i.units&&(e.push(Cs.setComputeUnitLimit({units:i.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function kn(i,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=i.getLatestBlockhash)==null?void 0:n.call(i,{commitment:t})))==null?void 0:r.blockhash)||(await i.getRecentBlockhash(t)).blockhash}catch{return(await i.getRecentBlockhash(t)).blockhash}}function Zi(i,e){i.length<1&&Rs.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&Rs.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ls;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ms}catch{return!1}}function le(i,e){let[t,n]=zc.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}function Fn({instructions:i,payer:e,signers:t}){return Zi(i,[e,...t])}function Dn({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Os.generate().publicKey.toString()}){let o=new Qc({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Ns(o).serialize()).toString("base64").length<Ms}catch{return!1}}var jc=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i),Hc=i=>{let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});i instanceof Ns&&(e=jc(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function nn(i){let e=[];return i.forEach(t=>{t instanceof Ls&&(t.recentBlockhash||(t.recentBlockhash=Yc.toBase58()),t.feePayer||(t.feePayer=Os.generate().publicKey)),e.push(Hc(t))}),console.log("simulate tx string:",e),e}import{PublicKey as vs,AddressLookupTableAccount as Ur}from"@solana/web3.js";import{PublicKey as _s}from"@solana/web3.js";import{MINT_SIZE as Zc,TOKEN_PROGRAM_ID as $c,getTransferFeeConfig as Jc,unpackMint as el}from"@solana/spl-token";var $i=se("Raydium_accountInfo_util");async function At(i,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:o=100}=C({batchRequest:!1},t),s=Ji(e,o),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=i._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Ji(u,10);a=(await(await Promise.all(c.map(async m=>await i._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&$i.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&$i.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new _s(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>i.getMultipleAccountsInfo(u,r)))}catch(u){u instanceof Error&&$i.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Me(i,e,t){let n=await At(i,e.map(r=>r.pubkey),t);return e.map((r,o)=>F(C({},r),{accountInfo:n[o]}))}async function Tn({connection:i,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await Me(i,e.map(u=>({pubkey:it(u)})),t),r={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<Zc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=el(u.pubkey,u.accountInfo,(o=u.accountInfo)==null?void 0:o.owner);r[u.pubkey.toString()]=F(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||$c,feeConfig:(a=Jc(c))!=null?a:void 0})}return r[_s.default.toBase58()]=r[Q.toBase58()],r}async function eo({connection:i,address:e}){let t=await At(i,[...new Set(e.map(r=>r.toString()))].map(r=>new vs(r))),n={};for(let r=0;r<e.length;r++){let o=t[r],s=e[r];if(!o)continue;let a=new Ur({key:s,state:Ur.deserialize(o.data)});n[s.toString()]=a,Gr[s.toString()]=a}return n}var Gr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Ur({key:new vs("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Ur.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var Xr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await tl.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=qr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:r=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==Wn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new qn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var c;let{recentBlockHash:o,skipPreflight:s=!0,sendAndConfirm:a}=r||{},u=o!=null?o:await kn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),nn([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await to(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),o=t.filter(l=>l.transaction.instructions.length>0),s=[r,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],u=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await kn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let w=await to(this.connection,h,this.signers.find(P=>P.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((w,P)=>(w.recentBlockhash=f,a[P].length&&w.sign(...a[P]),w));nn(g);let h=await this.signAllTransactions(g);if(m){let w=0,P=[],I=async()=>{if(!h[w])return;let T=await this.connection.sendRawTransaction(h[w].serialize(),{skipPreflight:y});P.push({txId:T,status:"sent",signedTx:h[w]}),d==null||d([...P]),w++,this.connection.onSignature(T,S=>{let x=P.findIndex(R=>R.txId===T);x>-1&&(P[x].status=S.err?"error":"success"),d==null||d([...P]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:P.map(T=>T.txId),signedTxs:h}}else{let w=[];for(let P=0;P<h.length;P+=1){let I=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});w.push(I)}return{txIds:w,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r,recentBlockhash:o}=y,s=Ke(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=C(C({},this.cluster==="devnet"?{}:Gr),t),u=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let b of u)a[b]===void 0&&c.push(new Wn(b));let l=await eo({connection:this.connection,address:c});for(let[b,g]of Object.entries(l))a[b]=g;let m=r?Wn.default.toBase58():o!=null?o:await kn(this.connection,this.blockhashCommitment),d=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Gn(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var w;let{skipPreflight:g=!0,sendAndConfirm:h}=b||{};if(nn([p]),(w=this.owner)!=null&&w.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});if(h){let{lastValidBlockHeight:I,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:I,signature:P},"confirmed")}return{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),o=t.filter(l=>l.builder.instructions.length>0),s=[r,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],u=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),nn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:w,blockhash:P}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:P,lastValidBlockHeight:w,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],w=async()=>{if(!b[g])return;let P=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:P,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(P,I=>{let T=h.findIndex(S=>S.txId===P);T>-1&&(h[T].status=I.err?"error":"success"),d==null||d([...h]),I.err||w()},"processed"),this.connection.getSignatureStatus(P)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let w=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Ke(c,["computeBudgetConfig"]),r=t?qr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Wn(b));if(u.length<12&&Fn({instructions:p,payer:this.feePayer,signers:f})||Fn({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");Fn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new qn().add(...r.instructions,...u)):s.push(new qn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>o[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>o[p]).filter(p=>p!==void 0);Fn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new qn().add(...r.instructions,...u)):s.push(new qn().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await kn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,w)=>{h.recentBlockhash=b,a[w].length&&h.sign(...a[w])}),nn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let w of s){let P=await to(this.connection,w,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(P)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let w=0,P=[],I=async()=>{if(!h[w])return;let T=await this.connection.sendRawTransaction(h[w].serialize(),{skipPreflight:f});P.push({txId:T,status:"sent",signedTx:h[w]}),p==null||p([...P]),w++,this.connection.onSignature(T,S=>{let x=P.findIndex(R=>R.txId===T);x>-1&&(P[x].status=S.err?"error":"success"),p==null||p([...P]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:P.map(T=>T.txId),signedTxs:h}}else{let w=[];for(let P=0;P<h.length;P+=1){let I=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});w.push(I)}return{txIds:w,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,o=Ke(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:Gr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of a)s[h]===void 0&&u.push(new Wn(h));let c=await eo({connection:this.connection,address:u});for(let[h,w]of Object.entries(c))s[h]=w;let l=t?qr(t):{instructions:[],instructionTypes:[]},m=await kn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,w)=>F(C({},h),{[w.publicKey.toBase58()]:w}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let w=[...f,h],P=t?[...l.instructions,...w]:w;if(f.length<12&&Dn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s})||Dn({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Gn(T))}else{let T=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Gn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let w=[...new Set(f.map(P=>P.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(P=>d[P]).filter(P=>P!==void 0);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let P=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Gn(P))}else{let P=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Gn(P))}y.push(w)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(w=>w.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:w,onTxUpdate:P,recentBlockHash:I,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),I&&(x.message.recentBlockhash=I)}),nn(p),(S=this.owner)!=null&&S.isKeyPair){if(w){let x=[];for(let R of p){let B=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:O,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:O,signature:B},"confirmed"),x.push(B)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(w){let R=0,B=[],O=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});B.push({txId:D,status:"sent",signedTx:x[R]}),P==null||P([...B]),R++,this.connection.onSignature(D,v=>{let j=B.findIndex(G=>G.txId===D);j>-1&&(B[j].status=v.err?"error":"success"),P==null||P([...B]),v.err||O()},"processed"),this.connection.getSignatureStatus(D)};return O(),{txIds:[],signedTxs:x}}else{let R=[];for(let B=0;B<x.length;B+=1){let O=await this.connection.sendTransaction(x[B],{skipPreflight:T});R.push(O)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}};var ht=class{constructor(e){this._owner=e}get publicKey(){return ht.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return ht.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return ht.isKeyPair(this._owner)}get isPublicKey(){return ht.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!ht.isKeyPair(e)}};function Ji(i,e=1,t=[]){let n=[...i];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var Vs=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Es=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),zn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Zf=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),$f=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),no=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Fs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Jf=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ds=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ws=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ey=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ty=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),nl=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),rl=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),il=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),ol=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),qs=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ny=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ry=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),al=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ul=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Qn={IDO_PROGRAM_ID_V1:nl,IDO_PROGRAM_ID_V2:rl,IDO_PROGRAM_ID_V3:il,IDO_PROGRAM_ID_V4:ol};var iy={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:sl,CREATE_CPMM_POOL_AUTH:al,CREATE_CPMM_POOL_FEE_ACC:ul,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as cl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ll}from"@solana/spl-token";function ke(i,e,t){return le([i.toBuffer(),(t!=null?t:ll).toBuffer(),e.toBuffer()],new cl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Pt from"bn.js";var Yn=1e4;function be(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let r=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new Pt(o.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===Yn){let u=new Pt(o.maximumFee.toString());return{amount:i.add(u),fee:u,expirationTime:a}}else{let u=Qt(i.mul(new Pt(Yn)),new Pt(Yn-o.transferFeeBasisPoints)),c=new Pt(o.maximumFee.toString()),l=u.sub(i).gt(c)?i.add(c):u,m=Qt(l.mul(new Pt(o.transferFeeBasisPoints)),new Pt(Yn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Qt(i.mul(new Pt(o.transferFeeBasisPoints)),new Pt(Yn)),c=u.gt(s)?s:u;return{amount:i,fee:c,expirationTime:a}}}function kt(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function Qt(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new Pt(0))?t.add(new Pt(1)):t}var Ce={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Ry=C({},Ce);var Us="ray_tab_hash",ro="ray_req_hash",ml=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(Us);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(Us,i)),i},zr=async n=>{var r=n,{logCount:i=1e3,removeLastLog:e}=r,t=Ke(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(ro)||"[]").slice(0,i-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(F(C({},t),{time:Date.now(),session:ml()}));try{localStorage.setItem(ro,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let u=JSON.stringify(t.data).substring(0,100);o[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ro,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return zr(F(C({},t),{logCount:i,removeLastLog:!0}))}};var Qr=se("Raydium_Api"),io=new Map;var Yr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=r||1e3,this.api=Gs.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Qr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Qr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&zr({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Qr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&zr({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Qr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ce.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Gs.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,o)=>r+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ce.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>io.has(s)?(n.push(io.get(s)),!1):!0),o=[];return r.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),o.forEach(a=>{io.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:o="default",order:s="desc",page:a=1}=e,[u,c]=[t&&it(t).toBase58(),n&&n!=="undefined"?it(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var jr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Xs="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as bo,TOKEN_PROGRAM_ID as Ht,AccountLayout as Sn,TOKEN_2022_PROGRAM_ID as Dl}from"@solana/spl-token";import{PublicKey as ni,SystemProgram as Wl}from"@solana/web3.js";var oo=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ie=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new Xr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(oo(e))}logInfo(...e){this.logger.info(oo(e))}logAndCreateError(...e){let t=oo(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Ml,createCloseAccountInstruction as _l,createTransferInstruction as vl,TOKEN_PROGRAM_ID as xn}from"@solana/spl-token";import{PublicKey as Vl,SystemProgram as El}from"@solana/web3.js";import Fl from"bn.js";import{PublicKey as oa,Keypair as Rl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ll}from"@solana/spl-token";import Ol from"bn.js";import{PublicKey as Tl}from"@solana/web3.js";import Hs,{isBN as Zs}from"bn.js";import{bits as dl,BitStructure as mb,blob as pl,Blob as db,cstr as pb,f32 as fb,f32be as yb,f64 as bb,f64be as gb,greedy as wb,Layout as fl,ns64 as Ab,ns64be as hb,nu64 as yl,nu64be as Pb,offset as kb,s16 as Tb,s16be as Ib,s24 as Bb,s24be as xb,s32 as bl,s32be as Sb,s40 as Kb,s40be as Cb,s48 as Rb,s48be as Lb,s8 as Ob,seq as gl,struct as Nb,Structure as wl,u16 as Al,u16be as Mb,u24 as _b,u24be as vb,u32 as hl,u32be as Vb,u40 as Eb,u40be as Fb,u48 as Db,u48be as Wb,u8 as Pl,UInt as kl,union as qb,Union as Ub,unionLayoutDiscriminator as Gb,utf8 as Xb}from"@solana/buffer-layout";var Hr=fl,zs=wl;var so=kl;var Qs=Pl,Mt=Al;var ao=hl;var Ys=yl;var Fe=bl;var js=gl;var pe=pl;var uo=dl;var rn=class extends Hr{constructor(t,n,r){super(t,r);this.blob=pe(t),this.signed=n}decode(t,n=0){let r=new Hs(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new Hs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Zr=class extends Hr{constructor(t){super(8,t);this._lower=uo(ao(),!1),this._upper=uo(ao(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return C(C({},r),o)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function W(i){return new so(1,i)}function Ge(i){return new so(4,i)}function A(i){return new rn(8,!1,i)}function $(i){return new rn(16,!1,i)}function $s(i){return new rn(1,!0,i)}function In(i){return new rn(8,!0,i)}function Js(i){return new rn(16,!0,i)}var $r=class extends Hr{constructor(t,n,r,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(i){return new $r(pe(32),e=>new Tl(e),e=>e.toBuffer(),i)}function Xe(i){return new $r(Qs(),Il,Bl,i)}function Il(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function Bl(i){return i?1:0}var co=class extends zs{decode(e,t){return super.decode(e,t)}};function V(i,e,t){return new co(i,e,t)}function X(i,e,t){let n,r=typeof e=="number"?e:Zs(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Zs(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return js(i,r,t)}var Bn=V([K("mint"),K("owner"),A("amount"),Ge("delegateOption"),K("delegate"),W("state"),Ge("isNativeOption"),A("isNative"),A("delegatedAmount"),Ge("closeAuthorityOption"),K("closeAuthority")]);function xl(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function lo(i,...e){if(!xl(i))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(i.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${i.length}`)}function mo(i,e=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(e&&i.finished)throw new Error("Hash#digest() has already been called")}function ea(i,e){lo(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ei=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),Tt=(i,e)=>i<<32-e|i>>>e;var sg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Sl(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function po(i){return typeof i=="string"&&(i=Sl(i)),lo(i),i}var Jr=class{clone(){return this._cloneInto()}},ag={}.toString;function ta(i){let e=n=>i().update(po(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function Kl(i,e,t,n){if(typeof i.setBigUint64=="function")return i.setBigUint64(e,t,n);let r=BigInt(32),o=BigInt(4294967295),s=Number(t>>r&o),a=Number(t&o),u=n?4:0,c=n?0:4;i.setUint32(e+u,s,n),i.setUint32(e+c,a,n)}var na=(i,e,t)=>i&e^~i&t,ra=(i,e,t)=>i&e^i&t^e&t,ti=class extends Jr{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ei(this.buffer)}update(e){mo(this);let{view:t,buffer:n,blockLen:r}=this;e=po(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(r-this.pos,o-s);if(a===r){let u=ei(e);for(;r<=o-s;s+=r)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){mo(this),ea(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Kl(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=ei(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:o,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=o,e.destroyed=s,r%t&&e.buffer.set(n),e}};var Cl=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Yt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jt=new Uint32Array(64),fo=class extends ti{constructor(){super(64,32,8,!1),this.A=Yt[0]|0,this.B=Yt[1]|0,this.C=Yt[2]|0,this.D=Yt[3]|0,this.E=Yt[4]|0,this.F=Yt[5]|0,this.G=Yt[6]|0,this.H=Yt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:o,F:s,G:a,H:u}=this;return[e,t,n,r,o,s,a,u]}set(e,t,n,r,o,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)jt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=jt[m-15],p=jt[m-2],y=Tt(d,7)^Tt(d,18)^d>>>3,f=Tt(p,17)^Tt(p,19)^p>>>10;jt[m]=f+jt[m-7]+y+jt[m-16]|0}let{A:n,B:r,C:o,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=Tt(a,6)^Tt(a,11)^Tt(a,25),p=l+d+na(a,u,c)+Cl[m]+jt[m]|0,f=(Tt(n,2)^Tt(n,13)^Tt(n,22))+ra(n,r,o)|0;l=c,c=u,u=a,a=s+p|0,s=o,o=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,o,s,a,u,c,l)}roundClean(){jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ia=ta(()=>new fo);var Ig=se("Raydium_Util");function sa({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:o,account:s}of t.value){let a=Bn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:ke(i,u,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),r.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:oa.default,amount:new Ol(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function tt({fromPublicKey:i,programId:e=Ll}){let t=Rl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Nl(i,t,e),seed:t}}function Nl(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ia(n);return new oa(r)}function yo(i){let{mint:e,tokenAccount:t,owner:n,programId:r=xn}=i;return Ml(t,e,n,r)}function Ct(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:o=xn}=i;return _l(e,t,r,n,o)}async function _t(i){let{connection:e,amount:t,commitment:n,payer:r,owner:o,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(Bn.span,n),u=Z(t).add(new Fl(a)),c=tt({fromPublicKey:r,programId:xn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[El.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Bn.span,programId:xn}),yo({mint:new Vl(Ve.address),tokenAccount:c.publicKey,owner:o,programId:xn})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[Ct({tokenAccount:c.publicKey,payer:r,owner:o})]}}function jn({source:i,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:o=xn}){return vl(i,e,t,BigInt(String(n)),r,o)}var Hn=class extends Ie{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ke(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Ht},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Dl},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=sa({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Ht,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:u}=a;if(u&&(!r||r&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new ni(t.tokenProgram||Ht),m=this.getAssociatedTokenAccount(n,new ni(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!o||h.pubkey.equals(m))).sort((h,w)=>h.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let h=bo(s,m,s,n,l);if(c){let w=await this.scope.connection.getAccountInfo(m);if(w===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(E.CreateATA);else if(!(w.owner.equals(l)&&Sn.decode(w.data).mint.equals(n)&&Sn.decode(w.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(E.CreateATA);if(n.equals(Q)&&r.amount){let w=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),r.amount&&(p.instructions.push(jn({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:Ht})),p.instructionTypes.push(E.TransferAmount))}return u||(p.endInstructions.push(Ct({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:m,instructionParams:p}}else{let h=tt({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Sn.span),P=Wl.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:w+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Sn.span,programId:l});return p.instructions.push(P,yo({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),u||(p.endInstructions.push(Ct({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Ht,autoUnwrapWSOLToSOL:r}){var u;await this.fetchWalletTokenAccounts();let o=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let c=this.getAssociatedTokenAccount(t,n),l=await bo(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],o=c}return r&&Q.toBase58()===t.toBase58()&&(a.endInstructions=[Ct({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:o,programId:s=Ht,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new ni(Q).equals(o)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=bo(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Ht)&&Sn.decode(f.data).mint.equals(o)&&Sn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=Ht,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new ni(Q))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Ke(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Ke(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as im}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as om}from"@solana/web3.js";import{PublicKey as ca}from"@solana/web3.js";var go=V([W("instruction")]),wo=V([W("instruction")]),ql=V([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),$("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),A("rewardType"),X(A(),15,"padding")]),Ul=V([A("state"),A("nonce"),K("lpVault"),K("rewardVault"),K(),K(),A(),A(),A("totalReward"),$("perShareReward"),A("lastSlot"),A("perSlotReward")]),Gl=V([A("state"),A("nonce"),K("lpVault"),K("rewardVaultA"),A("totalRewardA"),$("perShareRewardA"),A("perSlotRewardA"),W("option"),K("rewardVaultB"),pe(7),A("totalRewardB"),$("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),K()]),Xl=V([A(),A("state"),A("nonce"),A("validRewardTokenNum"),$("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(ql,5,"rewardInfos"),K("creator"),K(),X(A(),32,"padding")]),zl=new Proxy(Ul,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return F(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(i,e,t)}}),Ql=new Proxy(Gl,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return F(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(i,e,t)}}),ri=new Proxy(Xl,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return F(C({},r),{version:6,rewardInfos:r.rewardInfos.map(o=>{var s;return F(C({},o),{rewardType:((s=Object.entries(Zt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),Yl=V([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Ao=V([W("instruction"),A("nonce"),X(Yl,5,"rewardTimeInfo")]),ho=V([W("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Po=V([W("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),nw=V([A("state"),K("id"),K("owner"),A("deposited"),X(A(),1,"rewardDebts")]),ko=V([A("state"),K("id"),K("owner"),A("deposited"),X($(),1,"rewardDebts"),A(""),A("voteLockedBalance"),X(A(),15)]),rw=V([A("state"),K("id"),K("owner"),A("deposited"),X(A(),2,"rewardDebts")]),aa=V([A("state"),K("id"),K("owner"),A("deposited"),X($(),2,"rewardDebts"),X(A(),17)]),ua=V([A(),A("state"),K("id"),K("owner"),A("deposited"),X($(),5,"rewardDebts"),X(A(),16)]),ot=V([W("instruction"),A("amount")]),jl=V([K("mint"),K("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),$s("digitShift"),X(W(),7,"reserved1"),X(A(),7,"reserved2")]),Hl=V([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(W(),32,"reserved1"),X(jl,4,"votingMints"),In("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(A(),11,"reserved3")]),Zl=V([In("startTime"),In("endTime"),W("kind"),X(W(),15,"reserved")]),$l=V([X(Zl,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Xe("isUsed"),Xe("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),Jl=V([pe(8),K("voterAuthority"),K("registrar"),X($l,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var mw=se("Raydium_farm_config"),la=new ca("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ma=new ca("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var da={3:ko,5:aa,6:ua},To=i=>[3,5,6].indexOf(i)!==-1,Io=i=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=i,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=o[e])==null?void 0:s.call(o)},Zt={"Standard SPL":0,"Option tokens":1},ct={[Vs.toString()]:3,[Es.toString()]:5,[zn.toString()]:6};import{PublicKey as me,SystemProgram as ya,SYSVAR_RENT_PUBKEY as nm,SYSVAR_CLOCK_PUBKEY as ii,TransactionInstruction as It}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as qw,TOKEN_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as Uw}from"@solana/spl-token";import ba from"bn.js";import em from"bn.js";var tm=se("Raydium.farm.util");function Zn({programId:i,poolId:e,mint:t,type:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return r}function lt({programId:i,poolId:e,owner:t,version:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return r}var pa=({programId:i,poolId:e})=>le([e.toBuffer()],i);function fa(i){return{isSet:new em(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(Zt[i.rewardType])}}function Bo(i){return Z(i.endTime).sub(Z(i.openTime)).mul(Z(i.perSecond))}function $n(i){let e=da[i];return e||tm.logWithError("invalid version",i),e}var rm=se("Raydium_farm_instruction"),nA={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function Jn(i){let{version:e,id:t,ledger:n,programId:r,owner:o}=i,s={3:9,5:10}[e];s||rm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(go.span);go.encode({instruction:s},a);let u=[k({pubkey:t}),k({pubkey:n}),k({pubkey:o,isWritable:!1}),k({pubkey:ya.programId,isWritable:!1}),k({pubkey:nm,isWritable:!1})];return{instruction:new It({programId:r,keys:u,data:a}),instructionType:E.FarmV3CreateLedger}}function ga(i){var n;let e=Buffer.alloc(Ao.span);Ao.encode({instruction:0,nonce:new ba(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...Wi,k({pubkey:i.farmId}),k({pubkey:i.farmAuthority,isWritable:!1}),k({pubkey:i.lpVault}),k({pubkey:i.lpMint,isWritable:!1}),k({pubkey:i.lockVault}),k({pubkey:i.lockMint,isWritable:!1}),k({pubkey:(n=i.lockUserAccount)!=null?n:Oe}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let r of i.rewardInfo)t.push(k({pubkey:r.rewardMint,isWritable:!1}),k({pubkey:r.rewardVault}),k({pubkey:r.userRewardToken}));return{instruction:new It({programId:i.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function wa(i){let e=Buffer.alloc(wo.span);wo.encode({instruction:5},e);let t=[k({pubkey:$t,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.lpVault,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new It({programId:i.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function xo({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let o=Buffer.alloc(ho.span);ho.encode({instruction:3,rewardReopenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardPerSecond:Z(r.perSecond)},o);let s=[k({pubkey:$t,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new It({programId:n.programId,keys:s,data:o})}function So({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let o=Buffer.alloc(Po.span);Po.encode({instruction:4,isSet:new ba(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(Zt[r.rewardType])},o);let s=[...Wi,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:r.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new It({programId:t.programId,keys:s,data:o})}function er(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new me(e.programId),new me(e.id)],c=lt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:2,amount:Z(s)},l);let m=[k({pubkey:$t,isWritable:!1}),k({pubkey:u}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:new me(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new me(t.rewardInfos[d].vault)})),m.push(k({pubkey:r[d]}));return new It({programId:a,keys:m,data:l})}function tr(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:12,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:r[p]})),d.push(k({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function nr(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function Aa(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:10,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function ha(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:r[p]})),d.push(k({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function Pa(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new me(e.programId),new me(e.id)],c=lt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:1,amount:Z(s)},l);let m=[k({pubkey:$t,isWritable:!1}),k({pubkey:ya.programId,isWritable:!1}),k({pubkey:u}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:new me(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new me(t.rewardInfos[d].vault)})),m.push(k({pubkey:r[d]}));return new It({programId:a,keys:m,data:l})}var rr=class extends Ie{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Oe)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Bo(F(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:r=zn,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:la,lockVault:ma},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=tt({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ri.span);u.addInstruction({instructions:[om.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ri.span,programId:a.programId})]});let{publicKey:d,nonce:p}=pa({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(Zt[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(fa(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=I.mint.equals(Oe)?new fe(Ve.address):I.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:w,instructionType:P}=ga({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[w],instructionTypes:[P]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,c=n.mint.equals(Oe)?new fe(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Oe,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[xo({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Oe)?new fe(Ve.address):m.mint,p=a.rewardInfos.findIndex(w=>new fe(w.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Oe,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=xo({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[E.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:o}=e,s=ct[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Oe)?new fe(Ve.address):r.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,c.addInstruction({instructions:[So({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:o}=e,s=ct[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Oe)?new fe(Ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=So({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[E.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ct[d];To(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=lt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let w={};for(let v of this.scope.account.tokenAccounts)if(a){let j=ke(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&j.equals(v.publicKey)&&(w[v.mint.toString()]=v.publicKey)}else w[v.mint.toString()]=v.publicKey;let P=b.lpMint,I=w[P.address];I||this.logAndCreateError("you don't have any lp","lp zero",w);let T=[];for(let v of m){let j=s&&v.mint.address===Q.toString(),G=w[v.mint.address];if(!G){let{account:q,instructionParams:je}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new fe(v.mint.address),notUseTokenAccount:j,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!j,associatedOnly:j?!1:a,checkCreateATAOwner:u});G=q,je&&h.addInstruction(je)}w[v.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=$n(p).decode(x.data)),n.programId!==zn.toString()&&!S){let{instruction:v,instructionType:j}=Jn({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[v],instructionTypes:[j]})}let R=Io({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let B={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(v=>new fe(v))},O=p===6?Pa(B):p===5?ha(B):Aa(B),D={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return h.addInstruction({instructions:[O],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ct[n.programId];To(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(u){let B=ke(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&B.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=lt({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),B=await this.scope.connection.getAccountInfo(R);if(B)$n(p).decode(B.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:O,instructionType:D}=Jn({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[O],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:B})}let g=y.lpMint.address,h=s&&g===Q.toString(),w=b[g.toString()];if(!w){let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});w=R,B&&f.addInstruction(B)}b[g.toString()]=w;let P=[];for(let R of d){let B=s&&R.mint.address===Q.toString(),O=b[R.mint.address];if(!O){let{account:D,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new fe(R.mint.address),notUseTokenAccount:B,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!B,associatedOnly:B?!1:u,checkCreateATAOwner:c});O=D,v&&f.addInstruction(v)}b[R.mint.address]=O,P.push(O)}let I=Io({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:P});I&&this.logAndCreateError(I);let T={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:P,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new fe(R))},S=p===6?er(T):p===5?tr(T):nr(T),x={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Oe.toString()?new fe(Ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Oe,c=this.createTxBuilder(),l;if(t.equals(Oe)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Bo(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new L(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[im(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:m,instructionType:d}=wa({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(o){let f=ke(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,w=ct[f],P=b.address,I=n&&P===Q.toString(),T=m[P];if(!T){let{account:D,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(P),notUseTokenAccount:I,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:o,checkCreateATAOwner:s});T=D,v&&l.addInstruction(v)}m[P.toString()]=T;let S=[];for(let D of g){let v=n&&D.mint.address===Q.toString(),j=m[D.mint.address];if(!j){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new fe(D.mint.address),notUseTokenAccount:v,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:o,checkCreateATAOwner:s});j=G,q&&l.addInstruction(q)}m[D.mint.address]=j,S.push(j)}let x=p[h],R={amount:ut,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new fe(D))},B=w===6?er(R):w===5?tr(R):nr(R),O={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[O[w]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Qe}from"@solana/web3.js";import{AccountLayout as qm,NATIVE_MINT as tu,TOKEN_PROGRAM_ID as Rn}from"@solana/spl-token";var BA=V([Ge("mintAuthorityOption"),K("mintAuthority"),A("supply"),W("decimals"),W("isInitialized"),Ge("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as CA}from"@solana/web3.js";import{MintLayout as LA,TOKEN_PROGRAM_ID as NA}from"@solana/spl-token";var oi=i=>new Pe({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name}),ir=r=>{var o=r,{amount:i,isRaw:e,name:t}=o,n=Ke(o,["amount","isRaw","name"]);return new ye(new Pe({mint:it(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),i,e,t)};var He=r=>{var o=r,{address:i,programId:e,decimals:t}=o,n=Ke(o,["address","programId","decimals"]);return C({chainId:101,address:it(i).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Jt=i=>i?F(C({},i),{transferFeeConfigAuthority:i.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:i.withdrawWithheldAuthority.toBase58(),withheldAmount:i.withheldAmount.toString(),olderTransferFee:F(C({},i.olderTransferFee),{epoch:i.olderTransferFee.epoch.toString(),maximumFee:i.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},i.newerTransferFee),{epoch:i.newerTransferFee.epoch.toString(),maximumFee:i.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as sr,ASSOCIATED_TOKEN_PROGRAM_ID as Am}from"@solana/spl-token";import{PublicKey as Rt,TransactionInstruction as Cn,SystemProgram as hm,SYSVAR_RENT_PUBKEY as ih}from"@solana/web3.js";var Ko=V([W("instruction"),A("amountIn"),A("minAmountOut")]),Co=V([W("instruction"),A("maxAmountIn"),A("amountOut")]),jA=V([W("instruction"),W("nonce")]),sm=V([W("instruction"),W("nonce"),A("startTime")]),si=V([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),$("swapBaseInAmount"),$("swapQuoteOutAmount"),A("swapBase2QuoteFee"),$("swapQuoteInAmount"),$("swapBaseOutAmount"),A("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),A("lpReserve"),X(A(),3,"padding")]),HA=V([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),$("swapBaseInAmount"),$("swapQuoteOutAmount"),$("swapQuoteInAmount"),$("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(A(),64,"padding")]),Ro=V([W("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide")]),Lo=V([W("instruction"),A("amountIn")]);var ka=V([A("fee")]);import{PublicKey as am}from"@solana/web3.js";var Kn=new am("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),sn=5e4,um=V([A("x"),A("y"),A("price")]),cm=V([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),X(um,sn,"DataElement")]);function lm(i,e){return[0,sn-2]}function mm(i){return[0,sn-2]}function dm(i){return[0,sn-2]}function pm(i,e,t){let[n,r]=lm(e,t),o=n,s=r,a=0,u=e*i.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=sn-2)return[a,a,!1];let c=i.DataElement[a].x*i.multiplier/i.DataElement[a].y,l=i.DataElement[a-1].x*i.multiplier/i.DataElement[a-1].y,m=i.DataElement[a+1].x*i.multiplier/i.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Oo(i,e,t){let[n,r,o]=pm(i,e,t);if(!o)return 0;if(n===r){let s=i.DataElement[n].x;return e*i.multiplier/s}else{let s=i.DataElement[n].x,a=i.DataElement[n].y,u=i.DataElement[r].x,c=i.DataElement[r].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*i.multiplier*l/p}}function on(i,e,t){return e*i.multiplier/t}function Ta(i,e,t){return e*t/i.multiplier}function fm(i,e){let[t,n]=mm(e),r=t,o=n,s=0,a=e;for(;r<o;){if(s=Math.floor((o+r)/2),s<=0||s>sn-2)return[s,s,!1];let u=i.DataElement[s].x,c=i.DataElement[s-1].x,l=i.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)o=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function ym(i,e){let[t,n]=dm(e),r=t,o=n,s=0,a=e;for(;r<=o;){if(s=Math.floor((o+r)/2),s<=0||s>=sn-2)return[s,s,!1];let u=i.DataElement[s].y,c=i.DataElement[s-1].y,l=i.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Ia(i,e,t,n){let r=n?e+t:e-t,[o,s,a]=fm(i,r);if(!a)return[0,0,!1,a];if(o===s)return[i.DataElement[s].price,i.DataElement[s].y,!1,a];{let u=i.DataElement[o].x,c=i.DataElement[s].x,l=i.DataElement[o].price,m=i.DataElement[s].price,d=i.DataElement[o].y,p=i.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(r-u)*i.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-r)*i.multiplier/l),[y,f,!1,a]}}}function bm(i,e,t,n){let r=n?e-t:e+t,[o,s,a]=ym(i,r);if(!a)return[0,0,!1,a];if(o===s)return[i.DataElement[s].price,i.DataElement[s].x,!1,a];{let u=i.DataElement[o].x,c=i.DataElement[s].x,l=i.DataElement[o].price,m=i.DataElement[s].price,d=i.DataElement[o].y,p=i.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-r)/i.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(r-p)/i.multiplier),[y,f,!1,a]}}}function gm(i,e){let t=Ia(i,e,0,!1);return t[3]?t[0]:0}function Ba(i,e,t,n){let r=Oo(i,e,t),o=on(i,e,r),s=on(i,t,r),a=on(i,n,r),u=!0,[c,l,m,d]=Ia(i,o,a,u);if(!d)return 0;if(m)return n*i.multiplier/c;{let p=s-l;return Ta(i,p,r)}}function xa(i,e,t,n){let r=Oo(i,e,t),o=on(i,e,r),s=on(i,t,r),a=on(i,n,r),u=!1,[c,l,m,d]=bm(i,s,a,u);if(!d)return 0;if(m)return n*c/i.multiplier;{let p=o-l;return Ta(i,p,r)}}function wm(i){let e=cm.decode(i);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function Sa(i,e,t,n){let r=gm(i,on(i,e,Oo(i,e,t)))/i.multiplier;return n?r:1/r}var or=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Kn);e&&(this._layoutData=wm(e==null?void 0:e.data))}}};var Ka=se("Raydium_liquidity_instruction");function Ca(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:o,fixedSide:s}=i,a=Buffer.alloc(Ro.span);Ro.encode({instruction:3,baseAmountIn:Z(r),quoteAmountIn:Z(o),fixedSide:s==="base"?ut:xs},a);let u=[k({pubkey:sr,isWritable:!1}),k({pubkey:new Rt(e.id)}),k({pubkey:new Rt(t.authority),isWritable:!1}),k({pubkey:new Rt(t.openOrders),isWritable:!1}),k({pubkey:new Rt(t.targetOrders)}),k({pubkey:new Rt(e.lpMint.address)}),k({pubkey:new Rt(t.vault.A)}),k({pubkey:new Rt(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Kn})),u.push(k({pubkey:new Rt(e.marketId),isWritable:!1}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:new Rt(t.marketEventQueue),isWritable:!1})),new Cn({programId:new Rt(e.programId),keys:u,data:a})}function No(i){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=i,o=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Lo.span);Lo.encode({instruction:4,amountIn:Z(r)},a);let u=[k({pubkey:sr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return s===5?u.push(k({pubkey:Kn})):(u.push(k({pubkey:o.id})),u.push(k({pubkey:o.id}))),u.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks})),new Cn({programId:o.programId,keys:u,data:a})}return new Cn({programId:o.programId,keys:[]})}function Ra({programId:i,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:o,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:w,coinAmount:P,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let x=V([W("instruction"),W("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),R=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:Am,isSigner:!1,isWritable:!1},{pubkey:hm.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:w,coinAmount:P,pcAmount:I},B),{instruction:new Cn({keys:R,programId:i,data:B}),instructionType:E.AmmV4CreatePool}}function Pm({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n},r){let o=Ee(i),s=Buffer.alloc(Ko.span);Ko.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[k({pubkey:sr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders})];return r===4&&a.push(k({pubkey:o.targetOrders})),a.push(k({pubkey:o.vault.A}),k({pubkey:o.vault.B})),r===5&&a.push(k({pubkey:Kn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new Cn({programId:o.programId,keys:a,data:s})}function km({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n},r){let o=Ee(i),s=Buffer.alloc(Co.span);Co.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[k({pubkey:sr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return r===5&&a.push(k({pubkey:Kn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Cn({programId:o.programId,keys:a,data:s})}function ai(i){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:o,fixedSide:s}=i;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Pm(F(C({},a),{amountIn:r,minAmountOut:o}),t);if(s==="out")return km(F(C({},a),{maxAmountIn:r,amountOut:o}),t);Ka.logWithError("invalid params","params",i)}throw Ka.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{ASSOCIATED_TOKEN_PROGRAM_ID as ja,TOKEN_2022_PROGRAM_ID as en,TOKEN_PROGRAM_ID as De}from"@solana/spl-token";import{Keypair as Wo,PublicKey as U,SystemProgram as pr,TransactionInstruction as xt}from"@solana/web3.js";import Ha from"bn.js";import Om from"bn.js";function ui(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function Mo(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function _o(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function ar(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function La(i,e){return ar(i,e)?null:Mo(i,e)}function Oa(i,e){return ar(i,e)?null:_o(i,e)}var wh=Buffer.from("amm_config","utf8"),Tm=Buffer.from("pool","utf8"),Im=Buffer.from("pool_vault","utf8"),Bm=Buffer.from("pool_reward_vault","utf8"),Na=Buffer.from("position","utf8"),xm=Buffer.from("tick_array","utf8"),Sm=Buffer.from("operation","utf8"),Km=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Cm=Buffer.from("observation","utf8");function Ma(i,e,t,n){return le([Tm,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function vo(i,e,t){return le([Im,e.toBuffer(),t.toBuffer()],i)}function _a(i,e,t){return le([Bm,e.toBuffer(),t.toBuffer()],i)}function ge(i,e,t){return le([xm,e.toBuffer(),ui(t)],i)}function an(i,e,t,n){return le([Na,e.toBuffer(),ui(t),ui(n)],i)}function mt(i,e){return le([Na,e.toBuffer()],i)}function ci(i){return le([Buffer.from("metadata","utf8"),Pn.toBuffer(),i.toBuffer()],Pn)}function ur(i){return le([Sm],i)}function nt(i,e){return le([Km,e.toBuffer()],i)}function va(i,e){return le([Cm,e.toBuffer()],i)}import dt from"bn.js";var Be=new dt(0),st=new dt(1),vt=new dt(-1),at=new dt(1).shln(64),li=new dt(1).shln(128),Vo=at.sub(st),cr=64,Va=li.subn(1),ze=-443636,Ze=-ze,pt=new dt("4295048016"),ft=new dt("79226673521066979257578248091"),mi=new dt("4295048017"),di=new dt("79226673521066979257578248090"),Ea=16,Fa="59543866431248",Da="184467440737095516",Wa="15793534762490258745",pi=new dt(10).pow(new dt(6));var qa={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},Ph=new dt("18446744073700000000");var Rm=15,ae=class{static async getTickArrays(e,t,n,r,o,s,a){let u=[],c=Y.getTickArrayStartIndexByTick(r,o),l=Y.getInitializedTickArrayInRange(s,a,o,c,Math.floor(Rm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=ge(t,n,l[p]);u.push(y)}let m=(await At(e,u)).map(p=>p!==null?lr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,r,o,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,r,o,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Y.getNextTickArrayStartIndex(c,o,s),this.checkIsValidStartIndex(c,o))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,r,o){let s=Math.floor(e/ae.tickCount(t)),a=n?Y.searchLowBitFromStart(r,o,s-1,1,t):Y.searchHightBitFromStart(r,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let o;if(r){let a=Ne-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a-1}}else{let a=0;for(;a<Ne;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=ge(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,o,s){let a=Y.getTickArrayStartIndexByTick(r,o),u=Math.floor((r-a)/o),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Ne;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=ge(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>Ze)return!1;let n=Y.getTickArrayStartIndexByTick(ze,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ne*e}};import oe from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ae from"bn.js";var Eo=14,Vt=class{static maxTickInTickarrayBitmap(e){return e*Ne*un}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let o=n*r;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=r?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Ne,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(r){let l=e.shln(1024-c-1),m=La(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(c),m=Oa(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-ae.tickCount(n)}}}},mr=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Vt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=ze)throw Error(`extensionTickBoundary check error: ${n}, ${ze}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(r).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let o=ae.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:o,maxValue:s}=Vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=Y.mergeTickArrayBitmap(e).shln(un-1-a),c=ar(512,u)?null:Mo(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=Y.mergeTickArrayBitmap(e).shrn(a),c=ar(512,u)?null:_o(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Vt.maxTickInTickarrayBitmap(t),r=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(r=un-r),r}};import Lt from"bn.js";var dr=class{static getfeeGrowthInside(e,t,n){let r=new Lt(0),o=new Lt(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Lt(0),a=new Lt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,at),u=t.tokenFeesOwedA.add(a),c=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,at),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,at),u=t.tokenFeesOwedA.add(a),c=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,at),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ne.wrappingSubU128(u,c.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,at),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,r){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ne.wrappingSubU128(u,c.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,at),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,r){let o=[];for(let s=0;s<r.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return o}static getRewardGrowthInsideV2(e,t,n,r){let o=[];for(let s=0;s<r.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:o,epochInfo:s}){var b,g,h,w;let a=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),u=te.getSqrtPriceX64FromTick(t.tickLower),c=te.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+r:1-r,m=ce.getAmountsFromLiquidity(a,u,c,n,o),[d,p]=[be(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),be(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[be(new Lt(new L(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),be(new Lt(new L(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:kt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Ua}from"@solana/spl-token";var xe=class{static getOutputAmountAndRemainAccounts(e,t,n,r,o,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,o,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=ge(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(vt),c,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=xe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mr.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=ge(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=ge(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/ae.tickCount(e.tickSpacing)),r=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:o}=Vt.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=mr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<ze||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:o}){var a,u,c;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||r.eq(Be)){s.push(p);continue}let y=new Ae(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,at),w=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let o of t){let s=Y.getTickArrayStartIndexByTick(o,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<ze&&(n=ae.getArrayStartIndex(ze,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*un}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Me(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of r)s.accountInfo!==null&&(o[s.pubkey.toString()]=Xa.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},o=[];for(let u of t){let c=Y.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Y.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=ge(u.programId,u.id,m);o.push({pubkey:d}),r[d.toString()]=u.id}}let s=await Me(e,o,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=r[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=F(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(mt(p,d).publicKey);let l=await At(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=fi.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:P}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:w,amountB:P,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ae(0)})),leverage:I,tokenFeeAmountA:new Ae(0),tokenFeeAmountB:new Ae(0)}];let T=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(o){let d=Object.values(m),p=await At(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lr.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,P=y[m[h].toString()],I=y[m[w].toString()],T=P.ticks[Y.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[Y.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await dr.GetPositionFees(f,g,T,S),B=await dr.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ae(0))?x:new Ae(0),g.tokenFeeAmountB=R.gte(new Ae(0))?R:new Ae(0);for(let O=0;O<B.length;O++)g.rewardInfos[O].pendingReward=B[O].gte(new Ae(0))?B[O]:new Ae(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:o,slippage:s,priceLimit:a=new L(0),catchLiquidityInsufficient:u=!1}){var D;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new L(0))?c=l?pt.add(new Ae(1)):ft.sub(new Ae(1)):c=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=be(o,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=xe.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:Be),c,u),w=be(f,d,r,!1),P=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?P:new L(1).div(P),T=f.mul(new Ae(Math.floor((1-s)*1e10))).div(new Ae(1e10)),S=be(T,d,r,!1),x=l?e.currentPrice:new L(1).div(e.currentPrice),R=new L(I).sub(x).abs(),B=x,O=new Ue(new L(R).mul(10**15).toFixed(0),new L(B).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:kt(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:O,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:o,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=r.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Pe(F(C({},c),{mint:c.address,isToken2022:c.programId===Ua.toBase58()})),new Pe(F(C({},l),{mint:l.address,isToken2022:l.programId===Ua.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:w,priceImpact:P,fee:I,remainingAccounts:T,executionPriceX64:S}=xe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(c.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=F(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),B=F(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),O=new Je({baseToken:m,denominator:new Ae(10).pow(new Ae(20+m.decimals)),quoteToken:d,numerator:h.mul(new L(10**(20+d.decimals))).toFixed(0)}),D=new Je({baseToken:m,denominator:new Ae(10).pow(new Ae(20+m.decimals)),quoteToken:d,numerator:w.mul(new L(10**(20+d.decimals))).toFixed(0)}),v=new ye(m,I);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:B,expirationTime:g,currentPrice:O,executionPrice:D,priceImpact:P,fee:v,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountOut:o,slippage:s,priceLimit:a=new L(0)}){var B;let u=n.toBase58()===e.mintA.address,c={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new L(0))?l=u?ft.sub(new Ae(1)):pt.add(new Ae(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=be(o,c[n.toString()],r,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=xe.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:Be),l),b=u?e.mintB.address:e.mintA.address,g=be(d,c[b],r,!1),h=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),w=u?h:new L(1).div(h),P=d.mul(new Ae(Math.floor((1+s)*1e10))).div(new Ae(1e10)),I=be(P,c[b],r,!0),T=u?e.currentPrice:new L(1).div(e.currentPrice),S=new L(w).sub(T).abs(),x=T,R=new Ue(new L(S).mul(10**15).toFixed(0),new L(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:kt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:R,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let o=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),u=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-u,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[((y=o.rewardApr[0])!=null?y:0)*p,((f=o.rewardApr[1])!=null?f:0)*p,((b=o.rewardApr[2])!=null?b:0)*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[it(e.mintA.address).toString()],d=r[it(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:w}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:P,amountSlippageB:I}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),T=new L(h.toString()).div(new L(10).pow(p)).mul(m.value).add(new L(w.toString()).div(new L(10).pow(y)).mul(d.value)),S=new L(P.toString()).div(new L(10).pow(p)).mul(m.value).add(new L(I.toString()).div(new L(10).pow(y)).mul(d.value)),x=new L(1).div(T.add(S)),B=new L(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),O=3600*24*365,D=e.rewardDefaultInfos.map(v=>{var q,je;let j=v.mint.decimals,G=r[v.mint.address];return u<((q=v.startTime)!=null?q:0)||u>((je=v.endTime)!=null?je:0)||!v.perSecond||!G||j===void 0?0:new L(G.value).mul(new L(v.perSecond).mul(O)).div(new L(10).pow(j)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:D,apr:B+D.reduce((v,j)=>v+j,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:o,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=be(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Ae(new L(y.amount.sub((h=y.fee)!=null?h:Be).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ae(0);else if(l.lte(d)){let w=ce.getLiquidityFromTokenAmountA(l,d,f,!a),P=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?w:P}else b=t?new Ae(0):ce.getLiquidityFromTokenAmountB(m,d,f);return xe.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:o,slippage:s,add:a}){var b,g,h,w;let u=te.getSqrtPriceX64FromTick(n),c=te.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new L(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[d,p]=[be(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),be(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[be(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),be(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:kt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(u=>!n[u.id]).map(u=>new Bt(u.id));(await At(e,r)).forEach((u,c)=>{!u||(n[r[c].toBase58()]=ln.decode(u.data))});let s=t.map(u=>nt(new Bt(u.programId),new Bt(u.id)).publicKey),a=await xe.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>F(C({},u),{[c.id]:F(C({},n[c.id]),{id:new Bt(c.id),version:6,programId:new Bt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:F(C({},c.config),{id:new Bt(c.config.id),fundOwner:""}),currentPrice:new L(c.price),exBitmapInfo:a[nt(new Bt(c.programId),new Bt(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Fo={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Ga(i){return F(C({},i),{type:"Concentrated",programId:i.programId.toString(),id:i.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:i.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:i.ammConfig.tradeFeeRate,openTime:i.startTime.toString(),tvl:0,day:Fo,week:Fo,month:Fo,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},i.ammConfig),{id:i.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),o=r.div(n);return r.mod(n).eq(Be)||(o=o.add(st)),o}static mulDivFloor(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).add(n.sub(st)).div(n)}static x64ToDecimal(e,t){return new L(e.toString()).div(L.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(L.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(li).sub(t).mod(li)}};function _e(i,e){return Do(i.mul(e),64,256)}function Lm(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Do(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(L.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(L.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(Be))return e;let o=t.shln(cr);if(r){let s=o,a=o.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,st,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return ne.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let o=n.shln(cr);if(r)return e.add(o.div(t));{let s=ne.mulDivRoundingUp(o,st,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<ze||e>Ze)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new oe("18445821805675395072"):new oe("18446744073709551616");return(t&2)!=0&&(n=_e(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=_e(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=_e(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=_e(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=_e(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=_e(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=_e(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=_e(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=_e(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=_e(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=_e(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=_e(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=_e(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=_e(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=_e(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=_e(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=_e(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=_e(n,new oe("37481735321082"))),e>0&&(n=Va.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(ft)||e.lt(pt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=Lm(n,32,128),o=new oe("8000000000000000","hex"),s=0,a=new oe(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new oe(0))&&s<Ea;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(o.mul(y)),o=o.shrn(1),s+=1}let c=a.shrn(32),m=r.add(c).mul(new oe(Fa)),d=Do(m.sub(new oe(Da)),64,128).toNumber(),p=Do(m.add(new oe(Wa)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},mn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let o=mn.getTickWithPriceAndTickspacing(e,t,n,r),s=te.getSqrtPriceX64FromTick(o);return te.sqrtPriceX64ToPrice(s,n,r)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(cr),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(o,s,t),st,e):ne.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),at):ne.mulDivFloor(n,t.sub(e),at)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return r?ne.mulDivRoundingUp(a,st,Vo):a.shrn(cr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Vo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,r,!1),a=ce.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,r,o),amountB:new oe(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,r,o),a=ce.getTokenAmountBFromLiquidity(t,e,r,o);return{amountA:s,amountB:a}}else return{amountA:new oe(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,r,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,o,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=o?1+a:1-a,m=new oe(new L(u.toString()).mul(l).toFixed(0)),d=new oe(new L(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:o,add:s,epochInfo:a,amountAddFee:u}){var h,w,P,I;let c=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=ce.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[be(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),be(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,u)],[b,g]=[be(new oe(new L(p.amountA.toString()).mul(d).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,u),be(new oe(new L(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:kt(y.expirationTime,f.expirationTime)}}},cn=class{static swapCompute(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(Be))throw new Error("amountSpecified must not be 0");if(y||(y=s?pt.add(st):ft.sub(st)),s){if(y.lt(pt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(ft))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Be),g={amountSpecifiedRemaining:d,amountCalculated:Be,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new oe(0)},h=p,w=n[p],P=0,I=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Be)&&!g.sqrtPriceX64.eq(y);){P>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(w,g.tick,l,s,I),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let O=xe.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:o},h,s);if(!O.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=O.nextStartIndex;let{publicKey:D}=ge(e,t,h);R=D,w=n[h];try{x=Y.firstInitializedTick(w,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<ze?T.tickNext=ze:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let B;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?B=y:B=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=cn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let O=x.liquidityNet;s&&(O=O.mul(vt)),g.liquidity=ce.addDelta(g.liquidity,O)}I=T.tickNext!=g.tick&&!s&&w.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let O=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=O!=g.tick&&!s&&w.startTickIndex===O,g.tick=O}++P}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,r,o);S&&p!==T&&(g.accounts.push(ge(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Be,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,o){let s={sqrtPriceX64Next:new oe(0),amountIn:new oe(0),amountOut:new oe(0),feeAmount:new oe(0)},a=e.gte(t),u=r.gte(Be);if(u){let l=ne.mulDivFloor(r,pi.sub(new oe(o.toString())),pi);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,r.mul(vt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(vt))&&(s.amountOut=r.mul(vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new oe(o),pi.sub(new oe(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ne=60,un=512,Y=class{static getTickArrayAddressByTick(e,t,n,r){let o=Y.getTickArrayStartIndexByTick(n,r),{publicKey:s}=ge(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Ne)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=ae.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ne,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Ne,o=Math.floor(t/r)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ne:e+t*Ne}static mergeTickArrayBitmap(e){let t=new Om(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,o){let s=Math.floor(r/(n*Ne));return[...Y.searchLowBitFromStart(e,t,s-1,o,n),...Y.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,un,n)}static getAllInitializedTickArrayInfo(e,t,n,r,o){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,r,o);for(let u of a){let{publicKey:c}=ge(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Y.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===r)break}let u=ae.tickCount(o);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,r,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Y.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===r)break}let u=ae.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<ze||e>Ze}static nextInitTick(e,t,n,r,o){if(ae.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<Ne;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ne-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ne;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let r=te.getSqrtPriceX64FromTick(t),o=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new L(1).div(o),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new L(1).div(t),o=mn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(o),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new L(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=te.getSqrtPriceX64FromTick(t),o=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new L(1).div(o),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new L(1).div(t),o=mn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(o),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new L(1).div(a)}}};var za=V([pe(8),W("bump"),Mt("index"),K(""),Ge("protocolFeeRate"),Ge("tradeFeeRate"),Mt("tickSpacing"),X(A(),8,"")]),Nm=V([Ge("blockTimestamp"),In("tickCumulative"),X(A(),4)]),Qa=V([pe(8),Xe("initialized"),A("recentEpoch"),Mt("observationIndex"),K("poolId"),X(Nm,100,"observations"),X(A(),4)]),Mm=V([W("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),$("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),$("rewardGrowthGlobalX64")]),ln=V([pe(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Mt("tickSpacing"),$("liquidity"),$("sqrtPriceX64"),Fe("tickCurrent"),Ge(),$("feeGrowthGlobalX64A"),$("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),$("swapInAmountTokenA"),$("swapOutAmountTokenB"),$("swapInAmountTokenB"),$("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(Mm,3,"rewardInfos"),X(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),X(A(),15*4-3,"padding")]),_m=V([$("growthInsideLastX64"),A("rewardAmountOwed")]),fi=V([pe(8),W("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),$("liquidity"),$("feeGrowthInsideLastX64A"),$("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),X(_m,3,"rewardInfos"),X(A(),8,"")]),CP=V([pe(8),W("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),$("liquidity"),$("feeGrowthInsideLastX64A"),$("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),X($(),3,"rewardGrowthInside"),X(A(),8,"")]),vm=V([Fe("tick"),Js("liquidityNet"),$("liquidityGross"),$("feeGrowthOutsideX64A"),$("feeGrowthOutsideX64B"),X($(),3,"rewardGrowthsOutsideX64"),X(Ge(),13,"")]),lr=V([pe(8),K("poolId"),Fe("startTickIndex"),X(vm,Ne,"ticks"),W("initializedTickCount"),X(W(),115,"")]),Ya=V([pe(329),X(K(),100,"whitelistMints")]),Xa=V([pe(8),K("poolId"),X(X(A(),8),Eo,"positiveTickArrayBitmap"),X(X(A(),8),Eo,"negativeTickArrayBitmap")]);Qa.span;var Za=se("Raydium_Clmm"),St={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},Te=class{static createPoolInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=V([$("sqrtPriceX64"),A("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:r,mintB:o,ammConfigId:s,initialPriceX64:a,startTime:u}=e,[c,l]=[new U(r.address),new U(o.address)],{publicKey:m}=Ma(t,s,c,l),{publicKey:d}=va(t,m),{publicKey:p}=vo(t,m,c),{publicKey:y}=vo(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,c,p,new U(r.programId||De),l,y,new U(o.programId||De),nt(t,m).publicKey,a,u)];return{signers:[],instructions:f,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w,P,I,T,S,x,R,B){let O=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),$("liquidity"),A("amountMaxA"),A("amountMaxB"),Xe("withMetadata"),W("optionBaseFlag"),Xe("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:ja,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],j=Buffer.alloc(O.span);O.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},j);let G=Buffer.from([...St.openPosition,...j]);return new xt({keys:v,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Wo.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(d,p,f),{publicKey:h}=ge(d,p,b),{publicKey:w}=ke(n.wallet,y,De),{publicKey:P}=ci(y),{publicKey:I}=mt(d,y),{publicKey:T}=an(d,p,r,o),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,w,P,T,g,h,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,o,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:P,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Wo.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(d,p,f),{publicKey:h}=ge(d,p,b),{publicKey:w}=ke(n.wallet,y,De),{publicKey:P}=ci(y),{publicKey:I}=mt(d,y),{publicKey:T}=an(d,p,r,o),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,w,P,T,g,h,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,o,f,b,c,s,a,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?nt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:P,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w,P,I,T,S,x,R,B){let O=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),$("liquidity"),A("amountMaxA"),A("amountMaxB"),Xe("withMetadata"),W("optionBaseFlag"),Xe("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:ja,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],j=Buffer.alloc(O.span);O.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:I,liquidity:new Ha(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},j);let G=Buffer.from([...St.openPosition,...j]);return new xt({keys:v,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Wo.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(p,y,f),{publicKey:h}=ge(p,y,b),{publicKey:w}=ke(n.wallet,m,De),{publicKey:P}=ci(m),{publicKey:I}=mt(p,m),{publicKey:T}=an(p,y,r,o),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,w,P,T,g,h,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,o,f,b,s,a,u,c,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?nt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:P,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,o){let s=V([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...St.closePosition,...u]);return new xt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let o=new U(e.programId),{publicKey:s}=ke(n.wallet,r.nftMint,De),{publicKey:a}=mt(o,r.nftMint),u=[];return u.push(this.closePositionInstruction(o,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h){let w=V([$("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Xe("baseFlag")]),P=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...P],T=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ge(u,c,l),{publicKey:p}=ge(u,c,m),{publicKey:y}=ke(r.wallet,n.nftMint,De),{publicKey:f}=mt(u,n.nftMint),{publicKey:b}=an(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?nt(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:o,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ge(u,c,l),{publicKey:p}=ge(u,c,m),{publicKey:y}=ke(r.wallet,n.nftMint,De),{publicKey:f}=mt(u,n.nftMint),{publicKey:b}=an(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?nt(u,c).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h){let w=V([$("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Xe("baseFlag")]),P=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...P],T=Buffer.alloc(w.span);w.encode({liquidity:new Ha(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w){let P=V([$("liquidity"),A("amountMinA"),A("amountMinB")]),I=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:_r,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(P.span);P.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:o,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ge(c,l,m),{publicKey:y}=ge(c,l,d),{publicKey:f}=ke(r.wallet,n.nftMint,u),{publicKey:b}=mt(c,n.nftMint),{publicKey:g}=an(c,l,n.tickLower,n.tickUpper),h=[];for(let P=0;P<e.rewardDefaultInfos.length;P++)h.push({poolRewardVault:new U(t.rewardInfos[P].vault),ownerRewardVault:r.rewardAccounts[P],rewardMint:new U(e.rewardDefaultInfos[P].mint.address)});let w=[];return w.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,o,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?nt(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g){let h=V([A("amount"),A("otherAmountThreshold"),$("sqrtPriceLimitX64"),Xe("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:_r,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],I=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...St.swap,...I]);return new xt({keys:P,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===o.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,nt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,outputMint:o,amountOut:s,amountInMax:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountB:r.tokenAccountA,b?r.tokenAccountA:r.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,c,n,s,a,u,!1,nt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=V([A("openTime"),A("endTime"),$("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new U(e.programId),new U(e.id)],a=_a(o,s,r.mint).publicKey,u=ur(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=V([W("rewardIndex"),$("emissionsPerSecondX64"),A("openTime"),A("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ur(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,o,s,a){let u=V([W("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:_r,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[o,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,u,r,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[E.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}};import{PublicKey as Fm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dm}from"@solana/spl-token";import{PublicKey as Vm}from"@solana/web3.js";import $a from"bn.js";var qo=new $a(25),yi=new $a(1e4);var Em=se("Raydium_liquidity_serum");function Ja({programId:i,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Vm.createProgramAddressSync(o,i)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:r,nonce:n}}throw Em.logWithError("unable to find a viable program address nonce","params",{programId:i,marketId:e}),new Error("unable to find a viable program address nonce")}import lk from"bn.js";function bi({programId:i}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function dn({name:i,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function Wm({programId:i,marketId:e}){let{publicKey:t}=le([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function Go({programId:i}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function eu({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=dn({name:"amm_associated_seed",programId:a,marketId:t}),l=dn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Go({programId:a}),p=dn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=dn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=dn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Wm({programId:a,marketId:t}),g=dn({name:"target_associated_seed",programId:a,marketId:t}),h=dn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=Ja({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:i,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:w,lookupTableAccount:Fm.default,configId:bi({programId:a})}}var Uo={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},gi=i=>{let e={},t=Dm.toBase58();return Object.keys(i).map(n=>{let r=i[n],[o,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:He({address:o,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new L(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new L(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new L(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Uo,week:Uo,month:Uo,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:bi({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import We from"bn.js";var fr=class extends Ie{constructor(t){super(t);this.stableLayout=new or({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:o}){let s=new We(new L(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=oi(t[o?"mintB":"mintA"]),[u,c]=[new We(new L(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new We(new L(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new We(new L(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,L.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=ut;s.isZero()||(d=m==="base"?Dr(s.mul(c),u):Dr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Dr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Ue(new We(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:o,amountInB:s,fixedSide:a,config:u,txVersion:c,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",o,"amountInB:",s),(o.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:o.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,f]=[o.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Qe(n.lpMint.address)}),w=[y,f],P=[b,g],I=[o.raw,s.raw],T=o.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(w.reverse(),P.reverse(),I.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=w,[B,O]=P,[D,v]=I,j=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Ot=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:B,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Ot,je=Ke(Ot,["tokenAccount"]);G.addInstruction(je);let wn=await m.handleTokenAccount({side:"in",amount:v,mint:R.mint,tokenAccount:O,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:bn}=wn,tn=Ke(wn,["tokenAccount"]);G.addInstruction(tn);let xr=await m.handleTokenAccount({side:"out",amount:0,mint:new Qe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Dt}=xr,gn=Ke(xr,["tokenAccount"]);return G.addInstruction(gn),G.addInstruction({instructions:[Ca({poolInfo:n,poolKeys:j,userKeys:{baseTokenAccount:q,quoteTokenAccount:bn,lpTokenAccount:Dt,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:v,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:o,config:s,txVersion:a,computeBudgetConfig:u}=t,c=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Qe(n.mintA.address),new Qe(n.mintB.address),new Qe(n.lpMint.address)];this.logDebug("amountIn:",o),o.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",o.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:w}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:w}),{tokenAccount:P}=x,I=Ke(x,["tokenAccount"]);g.addInstruction(I);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:w}),{tokenAccount:T}=R,S=Ke(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[No({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:P,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:o})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Rn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(c);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||ke(this.scope.ownerPubKey,q.accountInfo.mint,Rn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let w=r.add(a!=null?a:new We(0)),P=t.mintA.address===Pe.WSOL.mint.toString(),I=t.mintB.address===Pe.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=ct[s.programId],je=lt({programId:new Qe(s.programId),poolId:new Qe(s.id),owner:this.scope.ownerPubKey,version:q}),bn,tn=await this.scope.connection.getAccountInfo(je);if(tn&&(bn=$n(q).decode(tn.data)),q!==6&&!bn){let{instruction:Wt,instructionType:Ni}=Jn({id:new Qe(s.id),programId:new Qe(s.programId),version:q,ledger:je,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Wt],instructionTypes:[Ni]})}let Dt=[];for(let Wt of s.rewardInfos){let Ni=Wt.mint.address===Pe.WSOL.mint.toString();if(g[Wt.mint.address])Dt.push(g[Wt.mint.address]);else{let{account:es,instructionParams:ts}=await this.scope.account.getOrCreateTokenAccount({mint:new Qe(Wt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Ni,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});es||this.logAndCreateError("farm reward account not found:",Wt.mint.address),ts&&b.addInstruction(ts),Dt.push(es)}}let gn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ot={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:gn,lpAccount:h,rewardAccounts:Dt},wn=ct[s.programId],xr=wn===6?er(Ot):wn===5?tr(Ot):nr(Ot),Cu={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[xr],instructionTypes:[Cu[wn]]})}let B=await this.getAmmPoolKeys(t.id),O=No({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:w});b.addInstruction({instructions:[O],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[D,v]=t.mintA.address===n.mintA.address?[T,x]:[x,T],j=await this.scope.clmm.getClmmPoolKeys(n.id),G=await Te.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:j,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:v},withMetadata:"create"},o),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=c.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=c.useSOLBalance&&r.mint.equals(tu),h=c.useSOLBalance&&o.mint.equals(tu),w=this.createTxBuilder(),{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});w.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(w.addInstruction(S||{}),P===void 0||T===void 0)throw Error("you don't has some token account");let x=eu({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:o.mint,baseDecimals:r.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:B,instructionType:O}=Ra(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:P,userPcVault:T,userLpVault:ke(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[B],instructionTypes:[O]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=bi({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return ka.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:o,slippage:s}){let[a,u]=[r.toString(),o.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,h=t.version===4,w;if(h)w=new L(f.toString()).div(10**g).div(new L(y.toString()).div(10**b));else{let v=Sa(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);p==="quote"?w=new L(1e6).div(v*1e6):w=new L(v*1e6).div(1e6)}let P=n,I=new We(0),T=new We(0);if(!P.isZero())if(h){T=Qt(P.mul(qo),yi);let v=P.sub(T),j=y.add(v);I=f.mul(v).div(j)}else{T=P.mul(new We(2)).div(new We(1e4));let v=P.sub(T);p==="quote"?I=new We(Ba(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),v.toNumber())):I=new We(xa(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),v.toNumber()))}let S=new We(new L(I.toString()).mul(1-s).toFixed(0)),x=I,R=S,B=new L(I.toString()).div(new L(P.sub(T).toString()).toFixed(0));!P.isZero()&&!I.isZero()&&(B=new L(I.toString()).div(10**g).div(new L(P.sub(T).toString()).div(10**b)));let O=w.sub(B).div(w).mul(100);return{amountOut:x,minAmountOut:R,currentPrice:w,executionPrice:B,priceImpact:O,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:r,mintOut:o,slippage:s}){let{baseReserve:a,quoteReserve:u}=t;r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",u.toString());let c=r.toString()===t.mintA.address,[l,m]=c?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new L(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,u],p=c?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new L(f.toString()).div(10**t[c?"mintB":"mintA"].decimals).div(new L(y.toString()).div(10**t[c?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new L(1).div(b).toString()} ${l.symbol||l.address}`);let g=new We(0),h=n;if(!h.isZero()){h.gt(f)&&(h=f.sub(new We(1)));let R=f.sub(h);g=y.mul(h).div(R).mul(yi).div(yi.sub(qo))}let w=new We(new L(g.toString()).mul(1+s).toFixed(0)),P=g,I=w;this.logDebug("amountIn:",new L(P.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new L(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!h.isZero()&&(T=new L(h.toString()).div(10**m.decimals).div(new L(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new L(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(P.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:P,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:o,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Q.toBase58(),h=y&&b.address===Q.toBase58(),{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(P||{}),w||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:w,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[ai({version:x,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:r,amountOut:o,fixedSide:a})],instructionTypes:[x===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Me(this.scope.connection,t.map(l=>({pubkey:new Qe(l)})),n),o={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=si.decode(m.accountInfo.data);o[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Me(this.scope.connection,s.map(l=>({pubkey:new Qe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new We(qm.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(o)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new L(p.toString()).div(new L(10).pow(m.quoteDecimal.toString())).div(new L(d.toString()).div(new L(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=gi({[t]:n}),o=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:o,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import rt from"bn.js";import{AccountLayout as nu,TOKEN_PROGRAM_ID as ru}from"@solana/spl-token";var yr=class extends Ie{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var w;let{programId:t,owner:n=((w=this.scope.owner)==null?void 0:w.publicKey)||ie.default,mint1:r,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new rt(new ie(r.address).toBuffer()).gt(new rt(new ie(o.address).toBuffer()))?[o,r,new L(1).div(a)]:[r,o,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),h=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:u,forerunCreate:!m&&l});return p.addInstruction(h),p.addCustomComputeBudget(c),p.versionBuild({txVersion:d,extInfo:{address:F(C({},h.address),{programId:t.toString(),id:h.address.poolId.toString(),mintA:y,mintB:f,openTime:u.toString(),vault:{A:h.address.mintAVault.toString(),B:h.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:h.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},qa),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Q.toString(),w=n.useSOLBalance&&e.mintB.address===Q.toString(),[P,I]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||P.isZero()?{payer:this.scope.ownerPubKey,amount:P}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let B=t||await this.getClmmPoolKeys(e.id),O=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:B,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(O),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:C({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Q.toBase58(),w=n.useSOLBalance&&e.mintB.address===Q.toBase58(),{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});P&&(b=P),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),R=await Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,amountMaxB:o,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:o,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===Q.toString(),g=u.useSOLBalance&&t.mintB.address===Q.toString(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(w||{});let{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});P&&(f=P),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:o,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Q.toString(),b=a.useSOLBalance&&t.mintB.address===Q.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?o:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});w&&(y=w),d.addInstruction(P||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:o,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:o,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=o.useSOLBalance&&t.mintA.address===Q.toString(),f=o.useSOLBalance&&t.mintB.address===Q.toString(),b,g,{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,w&&p.addInstruction(w);let{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=P,I&&p.addInstruction(I);let T=[];for(let B of t.rewardDefaultInfos){let O=o.useSOLBalance&&B.mint.address===Q.toString(),D;if(B.mint.address===t.mintA.address)D=b;else if(B.mint.address===t.mintB.address)D=g;else{let{account:v,instructionParams:j}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(B.mint.programId),mint:new ie(B.mint.address),notUseTokenAccount:O,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!O,associatedOnly:O?!1:c,checkCreateATAOwner:l});D=v,j&&p.addInstruction(j)}T.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[E.ClmmDecreasePosition]});let R=C({},x.address);if(o.closePosition){let B=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:B.instructions,endInstructionTypes:B.instructionTypes}),R=C(C({},R),B.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let o=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return o.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===Q.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new L(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:o});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===Q.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new L(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(Q),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new L(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:o});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Q.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new L(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(Q),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:r,checkCreateATAOwner:o});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(Q),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:o,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=u.useSOLBalance&&e.mintA.address===Q.toBase58(),g=u.useSOLBalance&&e.mintB.address===Q.toBase58(),h;!s||s.equals(new L(0))?h=f?pt.add(new rt(1)):ft.sub(new rt(1)):h=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}(!w||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:P,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:P},inputMint:new ie(n),amountIn:r,amountOutMin:o,sqrtPriceLimitX64:h,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:r,amountInMax:o,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=u.useSOLBalance&&e.mintA.address===Q.toBase58(),g=u.useSOLBalance&&e.mintB.address===Q.toBase58(),h;!s||s.equals(new L(0))?h=n.toString()===e.mintB.address?pt.add(new rt(1)):ft.sub(new rt(1)):h=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?o:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}(!w||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:P,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Te.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:P},outputMint:new ie(n),amountOut:r,amountInMax:o,sqrtPriceLimitX64:h,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)r?ke(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(w=>!w.liquidity.isZero()||w.rewardInfos.find(P=>!P.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Q.toString(),y=n.useSOLBalance&&d.mintB.address===Q.toString(),f=c[d.mintA.address];if(!f){let{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:o});f=w,P&&l.addInstruction(P)}let b=c[d.mintB.address];if(!b){let{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:o});b=w,P&&l.addInstruction(P)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let w of d.rewardDefaultInfos){let P=n.useSOLBalance&&w.mint.address===Q.toString(),I=c[w.mint.address];if(!I){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(w.mint.programId),mint:new ie(w.mint.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:r});I=T,S&&l.addInstruction(S)}c[w.mint.address]=I,g.push(I)}let h=await this.getClmmPoolKeys(d.id);for(let w of t[m.id]){let P=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:w,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new rt(0),amountMinA:new rt(0),amountMinB:new rt(0)});l.addInstruction(P)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ur(e).publicKey);return t?Ya.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new rt(1))).map(s=>mt(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return r.forEach(s=>{if(!s)return;let a=fi.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Me(this.scope.connection,e.map(o=>({pubkey:new ie(o)})),t),r={};for(let o=0;o<e.length;o++){let s=n[o];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[o]));let a=ln.decode(s.accountInfo.data),u=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[o])]=F(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),r=await Me(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),o={};r.forEach(u=>{!u.accountInfo||(o[u.pubkey.toBase58()]=za.decode(u.accountInfo.data))});let s=await xe.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||ru.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Jt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||ru.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Jt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:F(C({},o[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await xe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await Tn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:o,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Me(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Ga(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(nu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(nu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=F(C({},o[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:o[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as xi,TOKEN_PROGRAM_ID as Et,AccountLayout as ed}from"@solana/spl-token";import zo from"bn.js";import ou from"bn.js";var Xo=new ou(1e6);function Um(i,e,t){return i.mul(e).add(t).sub(new ou(1)).div(t)}function iu(i,e,t){return i.mul(e).div(t)}var wi=class{static tradingFee(e,t){return Um(e,t,Xo)}static protocolFee(e,t){return iu(e,t,Xo)}static fundFee(e,t){return iu(e,t,Xo)}};import br from"bn.js";function Ai(i,e){if(e.isZero())throw Error("divisor is zero");return i.mod(e)}function Gm(i,e){if(e.isZero())throw Error("rhs is zero");let t=i.div(e);if(t.isZero())throw Error("quotient is zero");let n=Ai(i,e);return n.gt(Ln)&&(t=t.add(new br(1)),e=i.div(t),n=Ai(i,t),n.gt(Ln)&&(e=e.add(new br(1)))),[t,e]}var Ln=new br(0),hi=class{static swapWithoutFees(e,t,n){let r=t.mul(n),o=t.add(e),[s,a]=Gm(r,o),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,r,o){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return Ai(e.mul(n),t).gt(Ln)&&s.gt(Ln)&&(s=s.add(new br(1))),Ai(e.mul(r),t).gt(Ln)&&a.gt(Ln)&&(a=a.add(new br(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Pi from"decimal.js-light";var ki=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,r){let o=wi.tradingFee(e,r),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:u}=hi.swapWithoutFees(s,t,n),c=a.add(o);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:o}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:r,quoteReserve:o,outputMint:s,outputAmount:a}){let[u,c,l,m,d]=t.address===s.toString()?[r,o,e.decimals,t.decimals,e.address]:[o,r,t.decimals,e.decimals,t.address],p=new Pi(c.toString()).div(10**m).div(new Pi(u.toString()).div(10**l)),y=a.gte(c)?c.sub(new zo(1)):a,f=c.sub(y),b=Qt(u.mul(y),f),g=Qt(b.mul(new zo(1e6)),new zo(1e6).sub(n)),h=g.sub(b),w=new Pi(y.toString()).div(10**m).div(new Pi(g.toString()).div(10**l)),P=p.isZero()?0:w.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:h,priceImpact:P}}};var Xm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),qT=Buffer.from("amm_config","utf8"),zm=Buffer.from("pool","utf8"),Qm=Buffer.from("pool_lp_mint","utf8"),Ym=Buffer.from("pool_vault","utf8"),jm=Buffer.from("observation","utf8");function On(i){return le([Xm],i)}function Hm(i,e,t,n){return le([zm,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Zm(i,e){return le([Qm,e.toBuffer()],i)}function su(i,e,t){return le([Ym,e.toBuffer(),t.toBuffer()],i)}function Ti(i,e){return le([jm,e.toBuffer()],i)}function au({programId:i,configId:e,mintA:t,mintB:n}){let r=On(i).publicKey,o=Hm(i,e,t,n).publicKey,s=Zm(i,o).publicKey,a=su(i,o,t).publicKey,u=su(i,o,n).publicKey,c=Ti(i,o).publicKey;return{poolId:o,configId:e,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as gr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qo,TOKEN_2022_PROGRAM_ID as uu,ASSOCIATED_TOKEN_PROGRAM_ID as $m}from"@solana/spl-token";var Jm=se("Raydium_cpmm"),wr={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173]};function cu(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w){let P=V([A("amountMaxA"),A("amountMaxB"),A("openTime")]),I=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:$m,isSigner:!1,isWritable:!1},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:h,openTime:w},T),new gr({keys:I,programId:i,data:Buffer.from([...wr.initialize,...T])})}function lu(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=V([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:uu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Jm.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new gr({keys:b,programId:i,data:Buffer.from([...wr.deposit,...g])})}function mu(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=V([A("lpAmount"),A("amountMinA"),A("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:uu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:vr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new gr({keys:b,programId:i,data:Buffer.from([...wr.withdraw,...g])})}function Ii(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=V([A("amountIn"),A("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new gr({keys:g,programId:i,data:Buffer.from([...wr.swapBaseInput,...h])})}function du(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=V([A("amountInMax"),A("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new gr({keys:g,programId:i,data:Buffer.from([...wr.swapBaseOutput,...h])})}import Re from"bn.js";var pu=V([pe(8),W("bump"),Xe("disableCreatePool"),Mt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(A(),16)]),Bi=V([pe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),X(A(),32)]);var Ar=class extends Ie{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Me(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),r={},o=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Bi.decode(d.accountInfo.data);r[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await Me(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=pu.decode(y.data)}}let u={},c=await Me(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new Re(ed.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new L(y.toString()).div(new L(10).pow(d.mintDecimalB)).div(new L(p.toString()).div(new L(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var u,c,l,m;let o=e[r],[s,a]=[o.mintA.toBase58(),o.mintB.toBase58()];return F(C({},n),{[r]:F(C({},o),{id:new z(r),configInfo:o.configInfo,version:7,authority:On(o.programId).publicKey,mintA:He({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Jt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:o.mintDecimalB,programId:o.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Jt((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Tn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Jt(n[t.mintA.toBase58()].feeConfig):void 0}}),o=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Jt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:r,mintB:o,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new L(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new L(t.vaultBAmount.toString()).div(10**o.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:o,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:On(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(m){var d=m,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,feeConfig:u,computeBudgetConfig:c}=d,l=Ke(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var v,j,G;let p=r.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),y=new Re(new z(l.mintA.address).toBuffer()).lte(new Re(new z(l.mintB.address).toBuffer())),[f,b]=y?[l.mintA,l.mintB]:[l.mintB,l.mintA],[g,h]=y?[l.mintAAmount,l.mintBAmount]:[l.mintBAmount,l.mintAAmount],w=r.useSOLBalance&&f.address===xi.toBase58(),P=r.useSOLBalance&&b.address===xi.toBase58(),[I,T]=[new z(f.address),new z(b.address)],S=this.createTxBuilder(),{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:I,tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:p,amount:g}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:o,checkCreateATAOwner:s});S.addInstruction(R||{});let{account:B,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new z(b.address),tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:p,amount:h}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:o,checkCreateATAOwner:s});if(S.addInstruction(O||{}),x===void 0||B===void 0)throw Error("you don't has some token account");let D=au({programId:e,configId:new z(u.id),mintA:I,mintB:T});return S.addInstruction({instructions:[cu(e,this.scope.ownerPubKey,new z(u.id),D.authority,D.poolId,I,T,D.lpMint,x,B,ke(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,t,new z((j=f.programId)!=null?j:Et),new z((G=b.programId)!=null?G:Et),D.observationId,g,h,n)],instructionTypes:[E.CpmmCreatePool]}),S.addCustomComputeBudget(c),S.versionBuild({txVersion:a,extInfo:{address:F(C({},D),{mintA:f,mintB:b,programId:e,poolFeeAccount:t,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:o,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(C({},t),{lpAmount:new L(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Ue(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new L(r.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,w=t.mintA.address===xi.toString(),P=t.mintB.address===xi.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||(o?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:o?r:h}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{});let{account:B,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:o?h:r}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(O||{}),!x&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),je=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:v}=je,j=Ke(je,["tokenAccount"]);I.addInstruction(j);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Ue(new Re(1)).sub(s);return I.addInstruction({instructions:[lu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),v,x,B,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,o?b.amount:h,o?h:b.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var v,j;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:o,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Ue(new Re(1)).sub(o),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(r.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(r.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[be(l,t.mintA.extensions.feeConfig,d,!1),be(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new z(t.mintA.address),new z(t.mintB.address)],w=g.equals(Q),P=h.equals(Q),I,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});I=S,x&&b.addInstruction(x);let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});T=R,B&&b.addInstruction(B),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let O=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[mu(new z(t.programId),this.scope.ownerPubKey,new z(D.authority),new z(t.id),O,I,T,new z(D.vault.A),new z(D.vault.B),g,h,new z(t.lpMint.address),r,l.sub((v=p.fee)!=null?v:new Re(0)),m.sub((j=y.fee)!=null?j:new Re(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var R,B,O,D,v,j;let{poolInfo:t,poolKeys:n,baseIn:r,fixedOut:o,inputAmount:s,swapResult:a,slippage:u=0,config:c,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},c),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];o?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Re((1+u)*1e4)).div(new Re(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Re((1-u)*1e4)).div(new Re(1e4));let h=t.mintA.address===Q.toBase58(),w=t.mintB.address===Q.toBase58(),{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((R=t.mintA.programId)!=null?R:Et),owner:this.scope.ownerPubKey,createInfo:h||!r?{payer:this.scope.ownerPubKey,amount:r?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintB.programId)!=null?B:Et),owner:this.scope.ownerPubKey,createInfo:w||r?{payer:this.scope.ownerPubKey,amount:r?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!P||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:P,mintBTokenAcc:T,mintAUseSOLBalance:h,mintBUseSOLBalance:w,associatedOnly:y});let x=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[o?du(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?P:T,r?T:P,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((v=t[r?"mintA":"mintB"].programId)!=null?v:Et),new z((j=t[r?"mintB":"mintA"].programId)!=null?j:Et),r?b:g,r?g:b,Ti(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Ii(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?P:T,r?T:P,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((O=t[r?"mintA":"mintB"].programId)!=null?O:Et),new z((D=t[r?"mintB":"mintA"].programId)!=null?D:Et),r?b:g,r?g:b,Ti(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[o?E.CpmmSwapBaseOut:E.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let o=n.toString()===e.mintB.address,s=ki.swap(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new L(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new Re((1-r)*1e4)).div(new Re(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:r,slippage:o,epochInfo:s,baseIn:a}){var h,w,P,I,T,S,x,R;let u=1-Number(o.toSignificant())/100,c=new Re(new L(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=be(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new Re(0)),d=new Re(new L(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,L.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(P=(w=l.fee)==null?void 0:w.toString())!=null?P:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:ut,fee:void 0,expirationTime:void 0};if(!m.isZero()){let B=td(y,t,n,d);this.logDebug("lpAmountData:",{amountA:B.amountA.toString(),amountB:B.amountB.toString()}),f=be(B[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ue(new Re(1)).add(o),g=be(b.mul(f.amount.sub((I=f.fee)!=null?I:new Re(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function td(i,e,t,n){let r=i.mul(e).div(n);!r.isZero()&&!i.mul(e).mod(n).isZero()&&(r=r.add(new Re(1)));let o=i.mul(t).div(n);return!o.isZero()&&!i.mul(t).mod(n).isZero()&&(o=o.add(new Re(1))),{amountA:r,amountB:o}}import{PublicKey as fn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Se,TOKEN_2022_PROGRAM_ID as Ci,createTransferInstruction as Au}from"@solana/spl-token";import Ri from"bn.js";import{TOKEN_PROGRAM_ID as nd,TOKEN_2022_PROGRAM_ID as rd,ASSOCIATED_TOKEN_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as ee,TransactionInstruction as od,SystemProgram as sd}from"@solana/web3.js";import pn from"bn.js";function ad(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[k({pubkey:nd,isWritable:!1}),k({pubkey:rd,isWritable:!1}),k({pubkey:id,isWritable:!1}),k({pubkey:sd.programId,isWritable:!1}),k({pubkey:e,isSigner:!0})];b.push(k({pubkey:t})),b.push(k({pubkey:r}));let g=[u,c],h=[l,m],w=[o,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=w[S]===x.mintA.address;if(b.push(k({pubkey:new ee(x.programId),isWritable:!1})),S===g.length-1?b.push(k({pubkey:r})):b.push(k({pubkey:n})),b.push(k({pubkey:new ee(w[S])})),b.push(k({pubkey:new ee(w[S+1])})),x.version===6){let B=h[S];b.push(k({pubkey:new ee(B.config.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(R?B.vault.A:B.vault.B)})),b.push(k({pubkey:new ee(R?B.vault.B:B.vault.A)})),b.push(k({pubkey:new ee(x.observationId)})),b.push(k({pubkey:vr})),b.push(k({pubkey:nt(new ee(x.programId),new ee(x.id)).publicKey})),f.push(ud(x.sqrtPriceX64.toString(),R));for(let O of(T=y[S])!=null?T:[])b.push(k({pubkey:new ee(O)}))}else if(x.version===5){let B=h[S];b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.authority),isWritable:!1})),b.push(k({pubkey:new ee(B.marketProgramId)})),b.push(k({pubkey:new ee(B.marketAuthority)})),b.push(k({pubkey:Ds,isWritable:!1})),b.push(k({pubkey:new ee(B.openOrders)})),b.push(k({pubkey:new ee(B.vault.A)})),b.push(k({pubkey:new ee(B.vault.B)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.marketId)})),b.push(k({pubkey:new ee(B.marketBids)})),b.push(k({pubkey:new ee(B.marketAsks)})),b.push(k({pubkey:new ee(B.marketEventQueue)})),b.push(k({pubkey:new ee(B.marketBaseVault)})),b.push(k({pubkey:new ee(B.marketQuoteVault)}))}else if(x.version===4){let B=h[S],O=x.status!==1;b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.authority),isWritable:!1})),b.push(k({pubkey:new ee(O?B.id:B.marketProgramId)})),b.push(k({pubkey:new ee(O?B.id:B.marketAuthority)})),b.push(k({pubkey:new ee(O?B.id:B.openOrders)})),b.push(k({pubkey:new ee(B.vault.A)})),b.push(k({pubkey:new ee(B.vault.B)})),b.push(k({pubkey:new ee(O?B.id:B.marketId)})),b.push(k({pubkey:new ee(O?B.id:B.marketBids)})),b.push(k({pubkey:new ee(O?B.id:B.marketAsks)})),b.push(k({pubkey:new ee(O?B.id:B.marketEventQueue)})),b.push(k({pubkey:new ee(O?B.id:B.marketBaseVault)})),b.push(k({pubkey:new ee(O?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=h[S];b.push(k({pubkey:new ee(B.authority)})),b.push(k({pubkey:new ee(B.config.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(R?B.vault.A:B.vault.B)})),b.push(k({pubkey:new ee(R?B.vault.B:B.vault.A)})),b.push(k({pubkey:new ee(x.observationId)}))}else throw Error("pool type error")}let P=V([W("insId"),A("amountIn"),A("amountOut"),X($(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(P.span);return P.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new od({keys:b,programId:i,data:I})}function ud(i,e){if(i)if(e){let t=new pn(i).div(new pn(25));return t.gt(mi)?t:mi}else{let t=new pn(i).mul(new pn(25));return t.lt(di)?t:di}else return e?mi:di}function fu({routeProgram:i,ownerInfo:e,inputMint:t,swapInfo:n}){var r,o,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?pt.add(st):ft.sub(st);return Te.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?o:new pn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Ii(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new ee(m[d?"mintA":"mintB"].address),new ee(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ai({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new pn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[ad(i,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new pn(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var yu={[no.toBase58()]:3},bu={3:no};var Yo=V([pe(5),pe(8),K("ownAddress"),A("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),K("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),pe(7)]),gu={3:Yo};import{PublicKey as wu}from"@solana/web3.js";var Si=se("Serum"),Ki=class{static getProgramId(e){let t=bu[e];return t||Si.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=yu[t];return n||Si.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=gu[e];return t||Si.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],r=0,o;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));o=wu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:o,nonce:r}}return Si.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:wu.default,nonce:r}}};var Ft=new Ri(0),hr=class extends Ie{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Q));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,o=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<o.length;c++)u.gte(o[c].amount)?(s.addInstruction({instructions:[Ct({tokenAccount:o[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(o[c].amount)):(s.addInstruction({instructions:[Ct({tokenAccount:o[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),jn({destination:a.addresses.newAccount,source:o[c].publicKey,amount:u,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),o=this.createTxBuilder(),s=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return o.addInstruction(s),r.length&&o.addInstruction({instructions:[jn({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ct({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),o.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:o,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(Q),m=c.amount.token.mint.equals(Q),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Ci:Se,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?Ci:Se);else{let{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Ci:Se,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=P,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[Ct({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Se})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let P=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?Ci:Se)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=fu({routeProgram:o,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let P=this.createTxBuilder();P.addInstruction({instructions:[Au(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),P.addInstruction(w);let{transactions:I}=s===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[Au(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Fs,clmm:n=Ws,cpmm:r=qs}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:si.offsetOf("baseMint"),length:64}}),s=V([K("baseMint"),K("quoteMint")]),a=o.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),u=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:ln.span}],dataSlice:{offset:ln.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Bi.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:o}){e=e.toString()===fn.default.toString()?Q:e,t=t.toString()===fn.default.toString()?Q:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&u[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let r=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let o=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=gi(o),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new fn(f.mintA.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new fn(f.mintB.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Se)?(r.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(b),f.mintProgramB.equals(Se)?(r.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let c=await Tn({connection:this.scope.connection,mints:Array.from(r).map(f=>new fn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(C({},f),{[b]:F(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:o,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:o,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,w,P,I,T,S,x,R;let m=l===void 0?new Ri(0):e.raw.mul(new Ri(l.feeBps.toNumber())).div(new Ri(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:it(t.address).toString()}),b=[];for(let B of n)try{b.push(F(C({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:o,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(O){this.logDebug("direct error",B.version,B.id.toString(),O.message)}this.logDebug("direct done");for(let[B,O]of Object.entries(r)){let D={chainId:101,address:B,programId:O.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:O.mDecimals,tags:[],extensions:{}},v=O.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:o,chainTime:u,epochInfo:c,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var tn,Dt,gn,Ot;let je=G===void 0?Ft:G.data.amountOut.amount.raw.sub((Dt=(tn=G.data.amountOut.fee)==null?void 0:tn.raw)!=null?Dt:Ft),bn=q===void 0?Ft:q.data.amountOut.amount.raw.sub((Ot=(gn=q.data.amountOut.fee)==null?void 0:gn.raw)!=null?Ot:Ft);return je.lt(bn)?1:-1})[0];if(v===void 0)continue;let j=new ye(oi(D),v.data.amountOut.amount.raw.sub((h=(g=v.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Ft));for(let G of O.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:o,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:j});b.push(F(C({},q),{allTrade:!!(v.data.allTrade&&q.allTrade),amountIn:v.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new L(new Je({baseToken:v.data.amountIn.amount.token,denominator:v.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((P=(w=q.amountOut.fee)==null?void 0:w.raw)!=null?P:Ft)}).toFixed()),priceImpact:new L(v.data.priceImpact.add(q.priceImpact).toFixed()),fee:[v.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[v.pool,G],remainingAccounts:[v.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new ye(v.data.amountOut.amount.token,((S=(T=v.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Ft).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Ft)):void 0,middleToken:v.data.amountOut.amount.token,poolReady:v.data.poolReady&&q.poolReady,poolType:[v.data.poolType,q.poolType],feeConfig:y,expirationTime:kt(v.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(O=>O.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,O)=>B.amountOut.amount.raw.sub(O.amountOut.amount.raw).gt(Ft)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:o,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:w}=xe.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:o,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new L(y.toFixed()),executionPrice:new L(f.toFixed()),priceImpact:new L(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:kt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ir(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ir(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ir(F(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ir(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let r=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(r.size>0){let c=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=await this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Me(this.scope.connection,Array.from(s).map(l=>({pubkey:new fn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Yo.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ki.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Go({programId:new fn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:On(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Se.toBase58(),decimals:c.lpDecimals}),config:F(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as cd}from"@solana/spl-token";import{PublicKey as ld,Transaction as jo,TransactionInstruction as md}from"@solana/web3.js";import hu from"bn.js";var Ye=class extends Ie{static getPdaPoolId(e,t){return le([Ye.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return le([Ye.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new hu(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>Ye.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ye.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ye.getPdaOwnerId(t,m,r,l).publicKey));let u=await At(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==Ye.POOL_LAYOUT.span||b.data.length!==Ye.OWNER_LAYOUT.span)continue;let g=Ye.POOL_LAYOUT.decode(f.data),h=Ye.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),P=g.endTime.toNumber(),I=h.tokenInfo.map(x=>x.debtAmount.gt(new hu(0))).filter(x=>!x).length!==3,T=o>w&&o<P&&g.status===1,S=I&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:Ye.VERSION_PROJECT[m],openTime:w,endTime:P,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,o=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Pe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(Pe.WSOL.mint),associatedOnly:u.mintAddress.equals(Pe.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[Ye.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,o={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Pe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(Pe.WSOL.mint),associatedOnly:m.mintAddress.equals(Pe.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Ye.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:r,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Zi(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new jo().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new jo().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new jo().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=V([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:cd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new md({keys:o,programId:e,data:a})}},yt=Ye;yt.CLAIMED_NUM=3,yt.POOL_LAYOUT=V([pe(8),W("bump"),W("status"),A("openTime"),A("endTime"),K("ammId"),X(V([W("mintDecimals"),K("mintAddress"),K("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),Ye.CLAIMED_NUM,"tokenInfo"),X(A(),10,"padding")]),yt.OWNER_LAYOUT=V([pe(8),W("bump"),W("version"),K("poolId"),K("owner"),A("lpAmount"),X(V([K("mintAddress"),A("debtAmount"),A("claimedAmount")]),Ye.CLAIMED_NUM,"tokenInfo"),X(A(),4,"padding")]),yt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ld(e)),yt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},yt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Pr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bu}from"@solana/spl-token";import kr from"bn.js";import{TransactionInstruction as pd,SYSVAR_RENT_PUBKEY as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pu}from"@solana/spl-token";import{createInitializeAccountInstruction as ku}from"@solana/spl-token";import{SystemProgram as yn,Transaction as Tu}from"@solana/web3.js";function dd(i="accountFlags"){let e=new Zr(i);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ho=V([pe(5),dd("accountFlags"),K("ownAddress"),A("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),K("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),pe(7)]);function yd({programId:i,marketInfo:e}){let t=V([W("version"),Ge("instruction"),A("baseLotSize"),A("quoteLotSize"),Mt("feeRateBps"),A("vaultSignerNonce"),A("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:fd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),r=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},r),new pd({keys:n,programId:i,data:r})}async function Iu({connection:i,wallet:e,marketInfo:t}){var s,a,u,c,l,m,d,p;let n=new Tu,r=await i.getMinimumBalanceForRentExemption(165);n.add(yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:Pu}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Pu}),ku(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ku(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Tu;return o.add(yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(Ho.span),space:Ho.span,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:(c=t.eventQueueSpace)!=null?c:262144+12,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await i.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await i.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),yd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:o,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var Nn=class extends Ie{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:o,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,txVersion:c,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=tt({fromPublicKey:m,programId:o}),p=tt({fromPublicKey:m,programId:o}),y=tt({fromPublicKey:m,programId:o}),f=tt({fromPublicKey:m,programId:o}),b=tt({fromPublicKey:m,programId:o}),g=tt({fromPublicKey:m,programId:Bu}),h=tt({fromPublicKey:m,programId:Bu}),w=0,P=new kr(100);function I(){let D=new kr(0);for(;;)try{return{vaultOwner:Pr.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new kr(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),x=new kr(Math.round(10**e.decimals*n)),R=new kr(Math.round(n*10**t.decimals*r));if(x.eq(ut))throw Error("lot size is too small");if(R.eq(ut))throw Error("tick size or lot size is too small");let B=await Iu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:h,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:w,quoteDustThreshold:P,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u}}),O=this.createTxBuilder();O.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let D of B.slice(1,B.length))O.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return c===0?O.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new Pr(e.mint),quoteMin:new Pr(t.mint)}}):O.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new Pr(e.mint),quoteMin:new Pr(t.mint)}})}};import{PublicKey as Ir}from"@solana/web3.js";import{TransactionInstruction as xu,SYSVAR_CLOCK_PUBKEY as gd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Su}from"@solana/spl-token";var bd=V([W("instruction"),Ys("amount")]),Tr=V([W("instruction")]);function Li({programId:i},e){let t=[{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:ks,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,o])=>({pubkey:o,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Tr.span);return Tr.encode({instruction:2},n),new xu({keys:t,programId:i,data:n})}function Zo(i){let{poolConfig:e,userKeys:t,side:n}=i,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Tr.span);Tr.encode({instruction:2},s);let a=[{pubkey:Su,isWritable:!1,isSigner:!1},{pubkey:gd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new xu({programId:e.programId,keys:a,data:s})}import Ku from"bn.js";var wd={[Qn.IDO_PROGRAM_ID_V1.toString()]:1,[Qn.IDO_PROGRAM_ID_V2.toString()]:2,[Qn.IDO_PROGRAM_ID_V3.toString()]:3,[Qn.IDO_PROGRAM_ID_V4.toString()]:4},Mn=class extends Ie{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:o}){let s=this.createTxBuilder(),a=wd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Ku(e.coin).isZero(),!new Ku(e.pc).isZero()],m=u.projectInfo.mint.address.equals(Q),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(Q),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[Li({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Ir(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Li({programId:new Ir(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Ir(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Li({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Ir(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Ir(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[Zo(F(C({},g),{side:"base"}))]:[],...l?[Zo(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as Ad}from"@solana/web3.js";import{MintLayout as hd,TOKEN_2022_PROGRAM_ID as $o,TOKEN_PROGRAM_ID as Jo}from"@solana/spl-token";var Br=class extends Ie{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(zt.address,zt),this._mintGroup.official.add(zt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,F(C({},c),{priority:-1}))}),o.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,F(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?$o.toBase58():Jo.toBase58(),tags:c.freezeAuthority?[...c.tags||[],"hasFreeze"]:c.tags})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?$o.toBase58():Jo.toBase58(),mintAuthority:c.mintAuthority})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?$o.toBase58():Jo.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return zt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Ad(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=hd.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Oi=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new ht(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new rr({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new fr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Br({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new hr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new yr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ar({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new yt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Nn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Mn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Pd({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:o,logRequests:s,urlConfigs:a}=t,u=new Yr({cluster:n,timeout:r,urlConfigs:a,logCount:o,logRequests:s}),c=new Oi(F(C({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(jr);return this._owner.publicKey}setOwner(e){return this._owner=e?new ht(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Xs);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(jr),new Error(jr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(r=>F(C({},r),{mintAuthority:r.mint_authority||void 0,freezeAuthority:r.freezeAuthority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{Oi as Raydium};
|
|
1
|
+
var Ru=Object.defineProperty,Lu=Object.defineProperties;var Ou=Object.getOwnPropertyDescriptors;var Sr=Object.getOwnPropertySymbols;var rs=Object.prototype.hasOwnProperty,is=Object.prototype.propertyIsEnumerable;var ns=(i,e,t)=>e in i?Ru(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,C=(i,e)=>{for(var t in e||(e={}))rs.call(e,t)&&ns(i,t,e[t]);if(Sr)for(var t of Sr(e))is.call(e,t)&&ns(i,t,e[t]);return i},F=(i,e)=>Lu(i,Ou(e));var Ke=(i,e)=>{var t={};for(var n in i)rs.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&Sr)for(var n of Sr(i))e.indexOf(n)<0&&is.call(i,n)&&(t[n]=i[n]);return t};import{merge as Pd}from"lodash";import Gs from"axios";import{get as os,set as Nu}from"lodash";var Mi=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},ss={},Mu={};function se(i){let e=os(ss,i);if(!e){let t=os(Mu,i);e=new Mi({name:i,logLevel:t}),Nu(ss,i,e)}return e}import{PublicKey as Gc}from"@solana/web3.js";import Xc from"bn.js";import Wc from"big.js";import Wr from"bn.js";import et from"bn.js";var An=9e15,Xt=1e9,_i="0123456789abcdef",Cr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Rr="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",vi={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-An,maxE:An,crypto:!1},ls,Nt,re=!0,Or="[DecimalError] ",Gt=Or+"Invalid argument: ",ms=Or+"Precision limit exceeded",ds=Or+"crypto unavailable",ps="[object Decimal]",qe=Math.floor,Le=Math.pow,_u=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,vu=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Vu=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,fs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,gt=1e7,J=7,Eu=9007199254740991,Fu=Cr.length-1,Vi=Rr.length-1,_={toStringTag:ps};_.absoluteValue=_.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),H(i)};_.ceil=function(){return H(new this.constructor(this),this.e+1,2)};_.clampedTo=_.clamp=function(i,e){var t,n=this,r=n.constructor;if(i=new r(i),e=new r(e),!i.s||!e.s)return new r(NaN);if(i.gt(e))throw Error(Gt+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new r(n)};_.comparedTo=_.cmp=function(i){var e,t,n,r,o=this,s=o.d,a=(i=new o.constructor(i)).d,u=o.s,c=i.s;if(!s||!a)return!u||!c?NaN:u!==c?u:s===a?0:!s^u<0?1:-1;if(!s[0]||!a[0])return s[0]?u:a[0]?-c:0;if(u!==c)return u;if(o.e!==i.e)return o.e>i.e^u<0?1:-1;for(n=s.length,r=a.length,e=0,t=n<r?n:r;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===r?0:n>r^u<0?1:-1};_.cosine=_.cos=function(){var i,e,t=this,n=t.constructor;return t.d?t.d[0]?(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+J,n.rounding=1,t=Du(n,As(n,t)),n.precision=i,n.rounding=e,H(Nt==2||Nt==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};_.cubeRoot=_.cbrt=function(){var i,e,t,n,r,o,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(re=!1,o=l.s*Le(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=ve(l.d),i=l.e,(o=(i-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Le(t,1/3),i=qe((i+1)/3)-(i%3==(i<0?-1:2)),o==1/0?t="5e"+i:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+i),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(i=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=we(c.plus(l).times(a),c.plus(u),s+2,1),ve(a.d).slice(0,s)===(t=ve(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(H(a,i+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,r=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&(H(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,H(n,i,m.rounding,e)};_.decimalPlaces=_.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-qe(this.e/J))*J,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};_.dividedBy=_.div=function(i){return we(this,new this.constructor(i))};_.dividedToIntegerBy=_.divToInt=function(i){var e=this,t=e.constructor;return H(we(e,new t(i),0,1,1),t.precision,t.rounding)};_.equals=_.eq=function(i){return this.cmp(i)===0};_.floor=function(){return H(new this.constructor(this),this.e+1,3)};_.greaterThan=_.gt=function(i){return this.cmp(i)>0};_.greaterThanOrEqualTo=_.gte=function(i){var e=this.cmp(i);return e==1||e===0};_.hyperbolicCosine=_.cosh=function(){var i,e,t,n,r,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,r=o.d.length,r<32?(i=Math.ceil(r/3),e=(1/Mr(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),o=hn(s,1,o.times(e),new s(1),!0);for(var u,c=i,l=new s(8);c--;)u=o.times(o),o=a.minus(u.times(l.minus(u.times(l))));return H(o,s.precision=t,s.rounding=n,!0)};_.hyperbolicSine=_.sinh=function(){var i,e,t,n,r=this,o=r.constructor;if(!r.isFinite()||r.isZero())return new o(r);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(r.e,r.sd())+4,o.rounding=1,n=r.d.length,n<3)r=hn(o,2,r,r,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,r=r.times(1/Mr(5,i)),r=hn(o,2,r,r,!0);for(var s,a=new o(5),u=new o(16),c=new o(20);i--;)s=r.times(r),r=r.times(a.plus(s.times(u.times(s).plus(c))))}return o.precision=e,o.rounding=t,H(r,e,t,!0)};_.hyperbolicTangent=_.tanh=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+7,n.rounding=1,we(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};_.inverseCosine=_.acos=function(){var i,e=this,t=e.constructor,n=e.abs().cmp(1),r=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?bt(t,r,o):new t(0):new t(NaN):e.isZero()?bt(t,r+4,o).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),i=bt(t,r+4,o).times(.5),t.precision=r,t.rounding=o,i.minus(e))};_.inverseHyperbolicCosine=_.acosh=function(){var i,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(i=n.precision,e=n.rounding,n.precision=i+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};_.inverseHyperbolicSine=_.asinh=function(){var i,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=i,n.rounding=e,t.ln())};_.inverseHyperbolicTangent=_.atanh=function(){var i,e,t,n,r=this,o=r.constructor;return r.isFinite()?r.e>=0?new o(r.abs().eq(1)?r.s/0:r.isZero()?r:NaN):(i=o.precision,e=o.rounding,n=r.sd(),Math.max(n,i)<2*-r.e-1?H(new o(r),i,e,!0):(o.precision=t=n-r.e,r=we(r.plus(1),new o(1).minus(r),t+i,1),o.precision=i+4,o.rounding=1,r=r.ln(),o.precision=i,o.rounding=e,r.times(.5))):new o(NaN)};_.inverseSine=_.asin=function(){var i,e,t,n,r=this,o=r.constructor;return r.isZero()?new o(r):(e=r.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(i=bt(o,t+4,n).times(.5),i.s=r.s,i):new o(NaN):(o.precision=t+6,o.rounding=1,r=r.div(new o(1).minus(r.times(r)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,r.times(2)))};_.inverseTangent=_.atan=function(){var i,e,t,n,r,o,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding;if(c.isFinite()){if(c.isZero())return new l(c);if(c.abs().eq(1)&&m+4<=Vi)return s=bt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Vi)return s=bt(l,m+4,d).times(.5),s.s=c.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/J+2|0),i=t;i;--i)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/J),n=1,u=c.times(c),s=new l(c),r=c;i!==-1;)if(r=r.times(u),o=s.minus(r.div(n+=2)),r=r.times(u),s=o.plus(r.div(n+=2)),s.d[e]!==void 0)for(i=e;s.d[i]===o.d[i]&&i--;);return t&&(s=s.times(2<<t-1)),re=!0,H(s,l.precision=m,l.rounding=d,!0)};_.isFinite=function(){return!!this.d};_.isInteger=_.isInt=function(){return!!this.d&&qe(this.e/J)>this.d.length-2};_.isNaN=function(){return!this.s};_.isNegative=_.isNeg=function(){return this.s<0};_.isPositive=_.isPos=function(){return this.s>0};_.isZero=function(){return!!this.d&&this.d[0]===0};_.lessThan=_.lt=function(i){return this.cmp(i)<0};_.lessThanOrEqualTo=_.lte=function(i){return this.cmp(i)<1};_.logarithm=_.log=function(i){var e,t,n,r,o,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(i==null)i=new l(10),e=!0;else{if(i=new l(i),t=i.d,i.s<0||!t||!t[0]||i.eq(1))return new l(NaN);e=i.eq(10)}if(t=c.d,c.s<0||!t||!t[0]||c.eq(1))return new l(t&&!t[0]?-1/0:c.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(r=t[0];r%10===0;)r/=10;o=r!==1}if(re=!1,a=m+p,s=Ut(c,a),n=e?Lr(l,a+10):Ut(i,a),u=we(s,n,a,1),_n(u.d,r=m,d))do if(a+=10,s=Ut(c,a),n=e?Lr(l,a+10):Ut(i,a),u=we(s,n,a,1),!o){+ve(u.d).slice(r+1,r+15)+1==1e14&&(u=H(u,m+1,0));break}while(_n(u.d,r+=10,d));return re=!0,H(u,m,d)};_.minus=_.sub=function(i){var e,t,n,r,o,s,a,u,c,l,m,d,p=this,y=p.constructor;if(i=new y(i),!p.d||!i.d)return!p.s||!i.s?i=new y(NaN):p.d?i.s=-i.s:i=new y(i.d||p.s!==i.s?p:NaN),i;if(p.s!=i.s)return i.s=-i.s,p.plus(i);if(c=p.d,d=i.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])i.s=-i.s;else if(c[0])i=new y(p);else return new y(u===3?-0:0);return re?H(i,a,u):i}if(t=qe(i.e/J),l=qe(p.e/J),c=c.slice(),o=l-t,o){for(m=o<0,m?(e=c,o=-o,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/J),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=c.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(c[n]!=d[n]){m=c[n]<d[n];break}o=0}for(m&&(e=c,c=d,d=e,i.s=-i.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>o;){if(c[--n]<d[n]){for(r=n;r&&c[--r]===0;)c[r]=gt-1;--c[r],c[n]+=gt}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(i.d=c,i.e=Nr(c,t),re?H(i,a,u):i):new y(u===3?-0:0)};_.modulo=_.mod=function(i){var e,t=this,n=t.constructor;return i=new n(i),!t.d||!i.s||i.d&&!i.d[0]?new n(NaN):!i.d||t.d&&!t.d[0]?H(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=we(t,i.abs(),0,3,1),e.s*=i.s):e=we(t,i,0,n.modulo,1),e=e.times(i),re=!0,t.minus(e))};_.naturalExponential=_.exp=function(){return Ei(this)};_.naturalLogarithm=_.ln=function(){return Ut(this)};_.negated=_.neg=function(){var i=new this.constructor(this);return i.s=-i.s,H(i)};_.plus=_.add=function(i){var e,t,n,r,o,s,a,u,c,l,m=this,d=m.constructor;if(i=new d(i),!m.d||!i.d)return!m.s||!i.s?i=new d(NaN):m.d||(i=new d(i.d||m.s===i.s?m:NaN)),i;if(m.s!=i.s)return i.s=-i.s,m.minus(i);if(c=m.d,l=i.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(i=new d(m)),re?H(i,a,u):i;if(o=qe(m.e/J),n=qe(i.e/J),c=c.slice(),r=o-n,r){for(r<0?(t=c,r=-r,s=l.length):(t=l,n=o,s=c.length),o=Math.ceil(a/J),s=o>s?o+1:s+1,r>s&&(r=s,t.length=1),t.reverse();r--;)t.push(0);t.reverse()}for(s=c.length,r=l.length,s-r<0&&(r=s,t=l,l=c,c=t),e=0;r;)e=(c[--r]=c[r]+l[r]+e)/gt|0,c[r]%=gt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return i.d=c,i.e=Nr(c,n),re?H(i,a,u):i};_.precision=_.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(Gt+i);return t.d?(e=ys(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};_.round=function(){var i=this,e=i.constructor;return H(new e(i),i.e+1,e.rounding)};_.sine=_.sin=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+Math.max(t.e,t.sd())+J,n.rounding=1,t=qu(n,As(n,t)),n.precision=i,n.rounding=e,H(Nt>2?t.neg():t,i,e,!0)):new n(NaN)};_.squareRoot=_.sqrt=function(){var i,e,t,n,r,o,s=this,a=s.d,u=s.e,c=s.s,l=s.constructor;if(c!==1||!a||!a[0])return new l(!c||c<0&&(!a||a[0])?NaN:a?s:1/0);for(re=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=ve(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=qe((u+1)/2)-(u<0||u%2),c==1/0?e="5e"+u:(e=c.toExponential(),e=e.slice(0,e.indexOf("e")+1)+u),n=new l(e)):n=new l(c.toString()),t=(u=l.precision)+3;;)if(o=n,n=o.plus(we(s,o,t+2,1)).times(.5),ve(o.d).slice(0,t)===(e=ve(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(H(o,u+1,0),o.times(o).eq(s))){n=o;break}t+=4,r=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&(H(n,u+1,1),i=!n.times(n).eq(s));break}return re=!0,H(n,u,l.rounding,i)};_.tangent=_.tan=function(){var i,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(i=n.precision,e=n.rounding,n.precision=i+10,n.rounding=1,t=t.sin(),t.s=1,t=we(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,H(Nt==2||Nt==4?t.neg():t,i,e,!0)):new n(NaN)};_.times=_.mul=function(i){var e,t,n,r,o,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(i=new m(i)).d;if(i.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!i.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?i.s/0:i.s*0);for(t=qe(l.e/J)+qe(i.e/J),u=d.length,c=p.length,u<c&&(o=d,d=p,p=o,s=u,u=c,c=s),o=[],s=u+c,n=s;n--;)o.push(0);for(n=c;--n>=0;){for(e=0,r=u+n;r>n;)a=o[r]+p[n]*d[r-n-1]+e,o[r--]=a%gt|0,e=a/gt|0;o[r]=(o[r]+e)%gt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),i.d=o,i.e=Nr(o,t),re?H(i,m.precision,m.rounding):i};_.toBinary=function(i,e){return Di(this,2,i,e)};_.toDecimalPlaces=_.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:($e(i,0,Xt),e===void 0?e=n.rounding:$e(e,0,8),H(t,i+t.e+1,e))};_.toExponential=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=Kt(n,!0):($e(i,0,Xt),e===void 0?e=r.rounding:$e(e,0,8),n=H(new r(n),i+1,e),t=Kt(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toFixed=function(i,e){var t,n,r=this,o=r.constructor;return i===void 0?t=Kt(r):($e(i,0,Xt),e===void 0?e=o.rounding:$e(e,0,8),n=H(new o(r),i+r.e+1,e),t=Kt(n,!1,i+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};_.toFraction=function(i){var e,t,n,r,o,s,a,u,c,l,m,d,p=this,y=p.d,f=p.constructor;if(!y)return new f(p);if(c=t=new f(1),n=u=new f(0),e=new f(n),o=e.e=ys(y)-p.e-1,s=o%J,e.d[0]=Le(10,s<0?J+s:s),i==null)i=o>0?e:c;else{if(a=new f(i),!a.isInt()||a.lt(c))throw Error(Gt+a);i=a.gt(e)?o>0?e:c:a}for(re=!1,a=new f(ve(y)),l=f.precision,f.precision=o=y.length*J*2;m=we(a,e,0,1,1),r=t.plus(m.times(n)),r.cmp(i)!=1;)t=n,n=r,r=c,c=u.plus(m.times(r)),u=r,r=e,e=a.minus(m.times(r)),a=r;return r=we(i.minus(t),n,0,1,1),u=u.plus(r.times(c)),t=t.plus(r.times(n)),u.s=c.s=p.s,d=we(c,n,o,1).minus(p).abs().cmp(we(u,t,o,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,re=!0,d};_.toHexadecimal=_.toHex=function(i,e){return Di(this,16,i,e)};_.toNearest=function(i,e){var t=this,n=t.constructor;if(t=new n(t),i==null){if(!t.d)return t;i=new n(1),e=n.rounding}else{if(i=new n(i),e===void 0?e=n.rounding:$e(e,0,8),!t.d)return i.s?t:i;if(!i.d)return i.s&&(i.s=t.s),i}return i.d[0]?(re=!1,t=we(t,i,0,e,1).times(i),re=!0,H(t)):(i.s=t.s,t=i),t};_.toNumber=function(){return+this};_.toOctal=function(i,e){return Di(this,8,i,e)};_.toPower=_.pow=function(i){var e,t,n,r,o,s,a=this,u=a.constructor,c=+(i=new u(i));if(!a.d||!i.d||!a.d[0]||!i.d[0])return new u(Le(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,i.eq(1))return H(a,n,o);if(e=qe(i.e/J),e>=i.d.length-1&&(t=c<0?-c:c)<=Eu)return r=bs(u,a,t,n),i.s<0?new u(1).div(r):H(r,n,o);if(s=a.s,s<0){if(e<i.d.length-1)return new u(NaN);if((i.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Le(+a,c),e=t==0||!isFinite(t)?qe(c*(Math.log("0."+ve(a.d))/Math.LN10+a.e+1)):new u(t+"").e,e>u.maxE+1||e<u.minE-1?new u(e>0?s/0:0):(re=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Ei(i.times(Ut(a,n+t)),n),r.d&&(r=H(r,n+5,1),_n(r.d,n,o)&&(e=n+10,r=H(Ei(i.times(Ut(a,e+t)),e),e+5,1),+ve(r.d).slice(n+1,n+15)+1==1e14&&(r=H(r,n+1,0)))),r.s=s,re=!0,u.rounding=o,H(r,n,o))};_.toPrecision=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=Kt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):($e(i,1,Xt),e===void 0?e=r.rounding:$e(e,0,8),n=H(new r(n),i,e),t=Kt(n,i<=n.e||n.e<=r.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};_.toSignificantDigits=_.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):($e(i,1,Xt),e===void 0?e=n.rounding:$e(e,0,8)),H(new n(t),i,e)};_.toString=function(){var i=this,e=i.constructor,t=Kt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};_.truncated=_.trunc=function(){return H(new this.constructor(this),this.e+1,1)};_.valueOf=_.toJSON=function(){var i=this,e=i.constructor,t=Kt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function ve(i){var e,t,n,r=i.length-1,o="",s=i[0];if(r>0){for(o+=s,e=1;e<r;e++)n=i[e]+"",t=J-n.length,t&&(o+=qt(t)),o+=n;s=i[e],n=s+"",t=J-n.length,t&&(o+=qt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function $e(i,e,t){if(i!==~~i||i<e||i>t)throw Error(Gt+i)}function _n(i,e,t,n){var r,o,s,a;for(o=i[0];o>=10;o/=10)--e;return--e<0?(e+=J,r=0):(r=Math.ceil((e+1)/J),e%=J),o=Le(10,J-e),a=i[r]%o|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(i[r+1]/o/100|0)==Le(10,e-2)-1||(a==o/2||a==0)&&(i[r+1]/o/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(i[r+1]/o/1e3|0)==Le(10,e-3)-1,s}function Kr(i,e,t){for(var n,r=[0],o,s=0,a=i.length;s<a;){for(o=r.length;o--;)r[o]*=e;for(r[0]+=_i.indexOf(i.charAt(s++)),n=0;n<r.length;n++)r[n]>t-1&&(r[n+1]===void 0&&(r[n+1]=0),r[n+1]+=r[n]/t|0,r[n]%=t)}return r.reverse()}function Du(i,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/Mr(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),i.precision+=t,e=hn(i,1,e.times(r),new i(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return i.precision-=t,e}var we=function(){function i(n,r,o){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*r+a,n[u]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,r,o,s){var a,u;if(o!=s)u=o>s?1:-1;else for(a=u=0;a<o;a++)if(n[a]!=r[a]){u=n[a]>r[a]?1:-1;break}return u}function t(n,r,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<r[o]?1:0,n[o]=a*s+n[o]-r[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,r,o,s,a,u){var c,l,m,d,p,y,f,b,g,h,w,P,I,T,S,x,R,B,O,D,v=n.constructor,j=n.s==r.s?1:-1,G=n.d,q=r.d;if(!G||!G[0]||!q||!q[0])return new v(!n.s||!r.s||(G?q&&G[0]==q[0]:!q)?NaN:G&&G[0]==0||!q?j*0:j/0);for(u?(p=1,l=n.e-r.e):(u=gt,p=J,l=qe(n.e/p)-qe(r.e/p)),O=q.length,R=G.length,g=new v(j),h=g.d=[],m=0;q[m]==(G[m]||0);m++);if(q[m]>(G[m]||0)&&l--,o==null?(T=o=v.precision,s=v.rounding):a?T=o+(n.e-r.e)+1:T=o,T<0)h.push(1),y=!0;else{if(T=T/p+2|0,m=0,O==1){for(d=0,q=q[0],T++;(m<R||d)&&T--;m++)S=d*u+(G[m]||0),h[m]=S/q|0,d=S%q|0;y=d||m<R}else{for(d=u/(q[0]+1)|0,d>1&&(q=i(q,d,u),G=i(G,d,u),O=q.length,R=G.length),x=O,w=G.slice(0,O),P=w.length;P<O;)w[P++]=0;D=q.slice(),D.unshift(0),B=q[0],q[1]>=u/2&&++B;do d=0,c=e(q,w,O,P),c<0?(I=w[0],O!=P&&(I=I*u+(w[1]||0)),d=I/B|0,d>1?(d>=u&&(d=u-1),f=i(q,d,u),b=f.length,P=w.length,c=e(f,w,b,P),c==1&&(d--,t(f,O<b?D:q,b,u))):(d==0&&(c=d=1),f=q.slice()),b=f.length,b<P&&f.unshift(0),t(w,f,P,u),c==-1&&(P=w.length,c=e(q,w,O,P),c<1&&(d++,t(w,O<P?D:q,P,u))),P=w.length):c===0&&(d++,w=[0]),h[m++]=d,c&&w[0]?w[P++]=G[x]||0:(w=[G[x]],P=1);while((x++<R||w[0]!==void 0)&&T--);y=w[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,ls=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,H(g,a?o+g.e+1:o,s,y)}return g}}();function H(i,e,t,n){var r,o,s,a,u,c,l,m,d,p=i.constructor;e:if(e!=null){if(m=i.d,!m)return i;for(r=1,a=m[0];a>=10;a/=10)r++;if(o=e-r,o<0)o+=J,s=e,l=m[d=0],u=l/Le(10,r-s-1)%10|0;else if(d=Math.ceil((o+1)/J),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,r=1,o%=J,s=o-J+1}else break e;else{for(l=a=m[d],r=1;a>=10;a/=10)r++;o%=J,s=o-J+r,u=s<0?0:l/Le(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Le(10,r-s-1)),c=t<4?(u||n)&&(t==0||t==(i.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(o>0?s>0?l/Le(10,r-s):0:m[d-1])%10&1||t==(i.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=i.e+1,m[0]=Le(10,(J-e%J)%J),i.e=-e||0):m[0]=i.e=0,i;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Le(10,J-o),m[d]=s>0?(l/Le(10,r-s)%Le(10,s)|0)*a:0),c)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(i.e++,m[0]==gt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=gt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return re&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function Kt(i,e,t){if(!i.isFinite())return ws(i);var n,r=i.e,o=ve(i.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+qt(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i.e<0?"e":"e+")+i.e):r<0?(o="0."+qt(-r-1)+o,t&&(n=t-s)>0&&(o+=qt(n))):r>=s?(o+=qt(r+1-s),t&&(n=t-r-1)>0&&(o=o+"."+qt(n))):((n=r+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(o+="."),o+=qt(n))),o}function Nr(i,e){var t=i[0];for(e*=J;t>=10;t/=10)e++;return e}function Lr(i,e,t){if(e>Fu)throw re=!0,t&&(i.precision=t),Error(ms);return H(new i(Cr),e,1,!0)}function bt(i,e,t){if(e>Vi)throw Error(ms);return H(new i(Rr),e,t,!0)}function ys(i){var e=i.length-1,t=e*J+1;if(e=i[e],e){for(;e%10==0;e/=10)t--;for(e=i[0];e>=10;e/=10)t++}return t}function qt(i){for(var e="";i--;)e+="0";return e}function bs(i,e,t,n){var r,o=new i(1),s=Math.ceil(n/J+4);for(re=!1;;){if(t%2&&(o=o.times(e),us(o.d,s)&&(r=!0)),t=qe(t/2),t===0){t=o.d.length-1,r&&o.d[t]===0&&++o.d[t];break}e=e.times(e),us(e.d,s)}return re=!0,o}function as(i){return i.d[i.d.length-1]&1}function gs(i,e,t){for(var n,r=new i(e[0]),o=0;++o<e.length;)if(n=new i(e[o]),n.s)r[t](n)&&(r=n);else{r=n;break}return r}function Ei(i,e){var t,n,r,o,s,a,u,c=0,l=0,m=0,d=i.constructor,p=d.rounding,y=d.precision;if(!i.d||!i.d[0]||i.e>17)return new d(i.d?i.d[0]?i.s<0?0:1/0:1:i.s?i.s<0?0:i:0/0);for(e==null?(re=!1,u=y):u=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(Le(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new d(1),d.precision=u;;){if(o=H(o.times(i),u,1),t=t.times(++l),a=s.plus(we(o,t,u,1)),ve(a.d).slice(0,u)===ve(s.d).slice(0,u)){for(r=m;r--;)s=H(s.times(s),u,1);if(e==null)if(c<3&&_n(s.d,u-n,p,c))d.precision=u+=10,t=o=a=new d(1),l=0,c++;else return H(s,d.precision=y,p,re=!0);else return d.precision=y,s}s=a}}function Ut(i,e){var t,n,r,o,s,a,u,c,l,m,d,p=1,y=10,f=i,b=f.d,g=f.constructor,h=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(re=!1,l=w):l=e,g.precision=l+=y,t=ve(b),n=t.charAt(0),Math.abs(o=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(i),t=ve(f.d),n=t.charAt(0),p++;o=f.e,n>1?(f=new g("0."+t),o++):f=new g(n+"."+t.slice(1))}else return c=Lr(g,l+2,w).times(o+""),f=Ut(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=w,e==null?H(f,w,h,re=!0):f;for(m=f,u=s=f=we(f.minus(1),f.plus(1),l,1),d=H(f.times(f),l,1),r=3;;){if(s=H(s.times(d),l,1),c=u.plus(we(s,new g(r),l,1)),ve(c.d).slice(0,l)===ve(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(Lr(g,l+2,w).times(o+""))),u=we(u,new g(p),l,1),e==null)if(_n(u.d,l-y,h,a))g.precision=l+=y,c=s=f=we(m.minus(1),m.plus(1),l,1),d=H(f.times(f),l,1),r=a=1;else return H(u,g.precision=w,h,re=!0);else return g.precision=w,u;u=c,r+=2}}function ws(i){return String(i.s*i.s/0)}function Fi(i,e){var t,n,r;for((t=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(t<0&&(t=n),t+=+e.slice(n+1),e=e.substring(0,n)):t<0&&(t=e.length),n=0;e.charCodeAt(n)===48;n++);for(r=e.length;e.charCodeAt(r-1)===48;--r);if(e=e.slice(n,r),e){if(r-=n,i.e=t=t-n-1,i.d=[],n=(t+1)%J,t<0&&(n+=J),n<r){for(n&&i.d.push(+e.slice(0,n)),r-=J;n<r;)i.d.push(+e.slice(n,n+=J));e=e.slice(n),n=J-e.length}else n-=r;for(;n--;)e+="0";i.d.push(+e),re&&(i.e>i.constructor.maxE?(i.d=null,i.e=NaN):i.e<i.constructor.minE&&(i.e=0,i.d=[0]))}else i.e=0,i.d=[0];return i}function Wu(i,e){var t,n,r,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),fs.test(e))return Fi(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(vu.test(e))t=16,e=e.toLowerCase();else if(_u.test(e))t=2;else if(Vu.test(e))t=8;else throw Error(Gt+e);for(o=e.search(/p/i),o>0?(u=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=i.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,r=bs(n,new n(t),o,o*2)),c=Kr(e,t,gt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(i.s*0):(i.e=Nr(c,l),i.d=c,re=!1,s&&(i=we(i,r,a*4)),u&&(i=i.times(Math.abs(u)<54?Le(2,u):vn.pow(2,u))),re=!0,i)}function qu(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:hn(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Mr(5,t)),e=hn(i,2,e,e);for(var r,o=new i(5),s=new i(16),a=new i(20);t--;)r=e.times(e),e=e.times(o.plus(r.times(s.times(r).minus(a))));return e}function hn(i,e,t,n,r){var o,s,a,u,c=1,l=i.precision,m=Math.ceil(l/J);for(re=!1,u=t.times(t),a=new i(n);;){if(s=we(a.times(u),new i(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=we(s.times(u),new i(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,c++}return re=!0,s.d.length=m+1,s}function Mr(i,e){for(var t=i;--e;)t*=i;return t}function As(i,e){var t,n=e.s<0,r=bt(i,i.precision,1),o=r.times(.5);if(e=e.abs(),e.lte(o))return Nt=n?4:1,e;if(t=e.divToInt(r),t.isZero())Nt=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(o))return Nt=as(t)?n?2:3:n?4:1,e;Nt=as(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Di(i,e,t,n){var r,o,s,a,u,c,l,m,d,p=i.constructor,y=t!==void 0;if(y?($e(t,1,Xt),n===void 0?n=p.rounding:$e(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=ws(i);else{for(l=Kt(i),s=l.indexOf("."),y?(r=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):r=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Kr(Kt(d),10,r),d.e=d.d.length),m=Kr(l,10,r),o=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?o--:(i=new p(i),i.d=m,i.e=o,i=we(i,d,t,n,0,r),m=i.d,o=i.e,c=ls),s=m[t],a=r/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(i.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(i.s<0?8:7)),m.length=t,c)for(;++m[--t]>r-1;)m[t]=0,t||(++o,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=_i.charAt(m[s]);if(y){if(u>1)if(e==16||e==8){for(s=e==16?4:3,--u;u%s;u++)l+="0";for(m=Kr(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=_i.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>u)for(o-=u;o--;)l+="0";else o<u&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return i.s<0?"-"+l:l}function us(i,e){if(i.length>e)return i.length=e,!0}function Uu(i){return new this(i).abs()}function Gu(i){return new this(i).acos()}function Xu(i){return new this(i).acosh()}function zu(i,e){return new this(i).plus(e)}function Qu(i){return new this(i).asin()}function Yu(i){return new this(i).asinh()}function ju(i){return new this(i).atan()}function Hu(i){return new this(i).atanh()}function Zu(i,e){i=new this(i),e=new this(e);var t,n=this.precision,r=this.rounding,o=n+4;return!i.s||!e.s?t=new this(NaN):!i.d&&!e.d?(t=bt(this,o,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?bt(this,n,r):new this(0),t.s=i.s):!i.d||e.isZero()?(t=bt(this,o,1).times(.5),t.s=i.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(we(i,e,o,1)),e=bt(this,o,1),this.precision=n,this.rounding=r,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(we(i,e,o,1)),t}function $u(i){return new this(i).cbrt()}function Ju(i){return H(i=new this(i),i.e+1,2)}function ec(i,e,t){return new this(i).clamp(e,t)}function tc(i){if(!i||typeof i!="object")throw Error(Or+"Object expected");var e,t,n,r=i.defaults===!0,o=["precision",1,Xt,"rounding",0,8,"toExpNeg",-An,0,"toExpPos",0,An,"maxE",0,An,"minE",-An,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],r&&(this[t]=vi[t]),(n=i[t])!==void 0)if(qe(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Gt+t+": "+n);if(t="crypto",r&&(this[t]=vi[t]),(n=i[t])!==void 0)if(n===!0||n===!1||n===0||n===1)if(n)if(typeof crypto<"u"&&crypto&&(crypto.getRandomValues||crypto.randomBytes))this[t]=!0;else throw Error(ds);else this[t]=!1;else throw Error(Gt+t+": "+n);return this}function nc(i){return new this(i).cos()}function rc(i){return new this(i).cosh()}function hs(i){var e,t,n;function r(o){var s,a,u,c=this;if(!(c instanceof r))return new r(o);if(c.constructor=r,cs(o)){c.s=o.s,re?!o.d||o.e>r.maxE?(c.e=NaN,c.d=null):o.e<r.minE?(c.e=0,c.d=[0]):(c.e=o.e,c.d=o.d.slice()):(c.e=o.e,c.d=o.d?o.d.slice():o.d);return}if(u=typeof o,u==="number"){if(o===0){c.s=1/o<0?-1:1,c.e=0,c.d=[0];return}if(o<0?(o=-o,c.s=-1):c.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;re?s>r.maxE?(c.e=NaN,c.d=null):s<r.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[o]):(c.e=s,c.d=[o]);return}else if(o*0!==0){o||(c.s=NaN),c.e=NaN,c.d=null;return}return Fi(c,o.toString())}else if(u!=="string")throw Error(Gt+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),fs.test(o)?Fi(c,o):Wu(c,o)}if(r.prototype=_,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.EUCLID=9,r.config=r.set=tc,r.clone=hs,r.isDecimal=cs,r.abs=Uu,r.acos=Gu,r.acosh=Xu,r.add=zu,r.asin=Qu,r.asinh=Yu,r.atan=ju,r.atanh=Hu,r.atan2=Zu,r.cbrt=$u,r.ceil=Ju,r.clamp=ec,r.cos=nc,r.cosh=rc,r.div=ic,r.exp=oc,r.floor=sc,r.hypot=ac,r.ln=uc,r.log=cc,r.log10=mc,r.log2=lc,r.max=dc,r.min=pc,r.mod=fc,r.mul=yc,r.pow=bc,r.random=gc,r.round=wc,r.sign=Ac,r.sin=hc,r.sinh=Pc,r.sqrt=kc,r.sub=Tc,r.sum=Ic,r.tan=Bc,r.tanh=xc,r.trunc=Sc,i===void 0&&(i={}),i&&i.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)i.hasOwnProperty(t=n[e++])||(i[t]=this[t]);return r.config(i),r}function ic(i,e){return new this(i).div(e)}function oc(i){return new this(i).exp()}function sc(i){return H(i=new this(i),i.e+1,3)}function ac(){var i,e,t=new this(0);for(re=!1,i=0;i<arguments.length;)if(e=new this(arguments[i++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function cs(i){return i instanceof vn||i&&i.toStringTag===ps||!1}function uc(i){return new this(i).ln()}function cc(i,e){return new this(i).log(e)}function lc(i){return new this(i).log(2)}function mc(i){return new this(i).log(10)}function dc(){return gs(this,arguments,"lt")}function pc(){return gs(this,arguments,"gt")}function fc(i,e){return new this(i).mod(e)}function yc(i,e){return new this(i).mul(e)}function bc(i,e){return new this(i).pow(e)}function gc(i){var e,t,n,r,o=0,s=new this(1),a=[];if(i===void 0?i=this.precision:$e(i,1,Xt),n=Math.ceil(i/J),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)r=e[o],r>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=r%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)r=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),r>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(r%1e7),o+=4);o=n/4}else throw Error(ds);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],i%=J,n&&i&&(r=Le(10,J-i),a[o]=(n/r|0)*r);a[o]===0;o--)a.pop();if(o<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=J)a.shift();for(n=1,r=a[0];r>=10;r/=10)n++;n<J&&(t-=J-n)}return s.e=t,s.d=a,s}function wc(i){return H(i=new this(i),i.e+1,this.rounding)}function Ac(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function hc(i){return new this(i).sin()}function Pc(i){return new this(i).sinh()}function kc(i){return new this(i).sqrt()}function Tc(i,e){return new this(i).sub(e)}function Ic(){var i=0,e=arguments,t=new this(e[i]);for(re=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return re=!0,H(t,this.precision,this.rounding)}function Bc(i){return new this(i).tan()}function xc(i){return new this(i).tanh()}function Sc(i){return H(i=new this(i),i.e+1,1)}_[Symbol.for("nodejs.util.inspect.custom")]=_.toString;_[Symbol.toStringTag]="Decimal";var vn=_.constructor=hs(vi);Cr=new vn(Cr);Rr=new vn(Rr);var L=vn;import{PublicKey as Xi}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Kc}from"@solana/spl-token";import{PublicKey as he,SystemProgram as Ps,SYSVAR_RENT_PUBKEY as Cc}from"@solana/web3.js";function k({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var Wi=[k({pubkey:Kc,isWritable:!1}),k({pubkey:Ps.programId,isWritable:!1}),k({pubkey:Cc,isWritable:!1})];function qi({publicKey:i,transformSol:e}){let t=Ui(i.toString());if(t instanceof he)return e&&t.equals(Oe)?Q:t;if(e&&t.toString()===Oe.toBase58())return Q;if(typeof t=="string"){if(t===he.default.toBase58())return he.default;try{return new he(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function Ui(i){try{return new he(i)}catch{return i}}var _r=new he("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),vr=new he("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),wt=new he("SysvarRent111111111111111111111111111111111"),ks=new he("SysvarC1ock11111111111111111111111111111111"),Pn=new he("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Rc=new he("Sysvar1nstructions1111111111111111111111111"),Gi=Ps.programId,Cd=new he("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Rd=new he("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Ld=new he("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Od=new he("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Nd=new he("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Md=new he("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),_d=new he("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),vd=new he("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Vd=new he("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Ed=new he("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Fd=new he("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),Q=new he("So11111111111111111111111111111111111111112"),Oe=he.default;function it(i){return qi({publicKey:i,transformSol:!0})}import{PublicKey as Lc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ts}from"@solana/spl-token";var zt={chainId:101,address:Lc.default.toBase58(),programId:Ts.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ve={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ts.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};var zi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:o=!1,isToken2022:s=!1}){if(e===Oe.toBase58()||e instanceof Xi&&Oe.equals(e)){this.decimals=Ve.decimals,this.symbol=Ve.symbol,this.name=Ve.name,this.mint=new Xi(Ve.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=r||e.toString().substring(0,6),this.mint=o?Xi.default:qi({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Pe=zi;Pe.WSOL=new zi(F(C({},Ve),{mint:Ve.address}));import Er from"big.js";import Mc from"bn.js";import _c from"decimal.js-light";import Oc from"toformat";var Nc=Oc,Vn=Nc;var Vr=se("module/fraction"),Qi=Vn(Er),En=Vn(_c),vc={[0]:En.ROUND_DOWN,[1]:En.ROUND_HALF_UP,[2]:En.ROUND_UP},Vc={[0]:Er.roundDown,[1]:Er.roundHalfUp,[2]:Er.roundUp},de=class{constructor(e,t=new Mc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new de(this.denominator,this.numerator)}add(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.add(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof de?e:new de(Z(e));return this.denominator.eq(t.denominator)?new de(this.numerator.sub(t.numerator),this.denominator):new de(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof de?e:new de(Z(e));return new de(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Vr.logWithError(`${e} is not an integer.`),e<=0&&Vr.logWithError(`${e} is not positive.`),En.set({precision:e+1,rounding:vc[n]});let r=new En(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return r.toFormat(r.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Vr.logWithError(`${e} is not an integer.`),e<0&&Vr.logWithError(`${e} is negative.`),Qi.DP=e,Qi.RM=Vc[n]||1,new Qi(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Fc=se("Raydium_price"),Je=class extends de{constructor(t){let{baseToken:n,quoteToken:r,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=r,this.scalar=new de(Yi(n.decimals),Yi(r.decimals))}get raw(){return new de(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new Je({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Fc.logWithError("mul token not equals");let n=super.mul(t);return new Je({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,r){return this.adjusted.toSignificant(t,n,r)}toFixed(t=this.quoteToken.decimals,n,r){return this.adjusted.toFixed(t,n,r)}};var ji=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},Fr=ji;Fr.SOL=new ji(zt);import Dc from"bn.js";var Is=new de(new Dc(100)),Ue=class extends de{toSignificant(e=5,t,n){return this.mul(Is).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Is).toFixed(e,t,n)}};var ut=new et(0),xs=new et(1),_p=new et(2),vp=new et(3),Vp=new et(5),Hi=new et(10),Ep=new et(100),Fp=new et(1e3),Dp=new et(1e4),Bs=9007199254740991;function Z(i){let e=se("Raydium_parseBigNumberish");if(i instanceof et)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new et(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Bs||i<=-Bs)&&e.logWithError(`BigNumberish number overflow: ${i}`),new et(String(i))):typeof i=="bigint"?new et(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new et(0))}function Yi(i){return Hi.pow(Z(i))}function Dr(i,e){let t=i.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}var qc=se("Raydium_amount"),Ks=Vn(Wc);function Uc(i,e){let t="0",n="0";if(i.includes(".")){let r=i.split(".");r.length===2?([t,n]=r,n=n.padEnd(e,"0")):qc.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var ye=class extends de{constructor(t,n,r=!0,o){let s=new Wr(0),a=Hi.pow(new Wr(t.decimals));if(r)s=Z(n);else{let u=new Wr(0),c=new Wr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Uc(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=se(o||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,r=0){return super.toSignificant(t,n,r)}toFixed(t=this.token.decimals,n,r=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,r)}toExact(t={groupSeparator:""}){return Ks.DP=this.token.decimals,new Ks(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function Ss(i){return typeof i=="object"&&i!==null&&![Pe,ye,Gc,de,Xc,Je,Ue].some(e=>typeof e=="object"&&i instanceof e)}function Ee(i){return typeof i=="string"?Ui(i):Array.isArray(i)?i.map(e=>Ee(e)):Ss(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ee(t)])):i}import{PublicKey as Wn,sendAndConfirmTransaction as to,Transaction as qn,TransactionMessage as Un,VersionedTransaction as Gn}from"@solana/web3.js";import tl from"axios";var E={CreateAccount:"CreateAccount",InitAccount:"InitAccount",CreateATA:"CreateATA",CloseAccount:"CloseAccount",TransferAmount:"TransferAmount",InitMint:"InitMint",MintTo:"MintTo",InitMarket:"InitMarket",Util1216OwnerClaim:"Util1216OwnerClaim",SetComputeUnitPrice:"SetComputeUnitPrice",SetComputeUnitLimit:"SetComputeUnitLimit",ClmmCreatePool:"ClmmCreatePool",ClmmOpenPosition:"ClmmOpenPosition",ClmmIncreasePosition:"ClmmIncreasePosition",ClmmDecreasePosition:"ClmmDecreasePosition",ClmmClosePosition:"ClmmClosePosition",ClmmSwapBaseIn:"ClmmSwapBaseIn",ClmmSwapBaseOut:"ClmmSwapBaseOut",ClmmInitReward:"ClmmInitReward",ClmmSetReward:"ClmmSetReward",ClmmCollectReward:"ClmmCollectReward",AmmV4Swap:"AmmV4Swap",AmmV4AddLiquidity:"AmmV4AddLiquidity",AmmV4RemoveLiquidity:"AmmV4RemoveLiquidity",AmmV4SimulatePoolInfo:"AmmV4SimulatePoolInfo",AmmV4SwapBaseIn:"AmmV4SwapBaseIn",AmmV4SwapBaseOut:"AmmV4SwapBaseOut",AmmV4CreatePool:"AmmV4CreatePool",AmmV4InitPool:"AmmV4InitPool",AmmV5AddLiquidity:"AmmV5AddLiquidity",AmmV5RemoveLiquidity:"AmmV5RemoveLiquidity",AmmV5SimulatePoolInfo:"AmmV5SimulatePoolInfo",AmmV5SwapBaseIn:"AmmV5SwapBaseIn",AmmV5SwapBaseOut:"AmmV5SwapBaseOut",RouteSwap:"RouteSwap",RouteSwap1:"RouteSwap1",RouteSwap2:"RouteSwap2",FarmV3Deposit:"FarmV3Deposit",FarmV3Withdraw:"FarmV3Withdraw",FarmV3CreateLedger:"FarmV3CreateLedger",FarmV5Deposit:"FarmV5Deposit",FarmV5Withdraw:"FarmV5Withdraw",FarmV5CreateLedger:"FarmV5CreateLedger",FarmV6Deposit:"FarmV6Deposit",FarmV6Withdraw:"FarmV6Withdraw",FarmV6Create:"FarmV6Create",FarmV6Restart:"FarmV6Restart",FarmV6CreatorAddReward:"FarmV6CreatorAddReward",FarmV6CreatorWithdraw:"FarmV6CreatorWithdraw",CpmmCreatePool:"CpmmCreatePool",CpmmAddLiquidity:"CpmmAddLiquidity",CpmmWithdrawLiquidity:"CpmmWithdrawLiquidity",CpmmSwapBaseIn:"CpmmSwapBaseIn",CpmmSwapBaseOut:"CpmmSwapBaseOut"};import{PublicKey as zc,ComputeBudgetProgram as Cs,Transaction as Ls,TransactionMessage as Qc,Keypair as Os,VersionedTransaction as Ns}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Yc}from"@solana/spl-token";var Rs=se("Raydium_txUtil"),Ms=1644;function qr(i){let e=[],t=[];return i.microLamports&&(e.push(Cs.setComputeUnitPrice({microLamports:i.microLamports})),t.push(E.SetComputeUnitPrice)),i.units&&(e.push(Cs.setComputeUnitLimit({units:i.units})),t.push(E.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function kn(i,e){var n,r;let t=e!=null?e:"confirmed";try{return((r=await((n=i.getLatestBlockhash)==null?void 0:n.call(i,{commitment:t})))==null?void 0:r.blockhash)||(await i.getRecentBlockhash(t)).blockhash}catch{return(await i.getRecentBlockhash(t)).blockhash}}function Zi(i,e){i.length<1&&Rs.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&Rs.logWithError(`no signers provided:, ${e.toString()}`);let t=new Ls;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Ms}catch{return!1}}function le(i,e){let[t,n]=zc.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}function Fn({instructions:i,payer:e,signers:t}){return Zi(i,[e,...t])}function Dn({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Os.generate().publicKey.toString()}){let o=new Qc({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Ns(o).serialize()).toString("base64").length<Ms}catch{return!1}}var jc=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i),Hc=i=>{let e=i.serialize({requireAllSignatures:!1,verifySignatures:!1});i instanceof Ns&&(e=jc(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function nn(i){let e=[];return i.forEach(t=>{t instanceof Ls&&(t.recentBlockhash||(t.recentBlockhash=Yc.toBase58()),t.feePayer||(t.feePayer=Os.generate().publicKey)),e.push(Hc(t))}),console.log("simulate tx string:",e),e}import{PublicKey as vs,AddressLookupTableAccount as Ur}from"@solana/web3.js";import{PublicKey as _s}from"@solana/web3.js";import{MINT_SIZE as Zc,TOKEN_PROGRAM_ID as $c,getTransferFeeConfig as Jc,unpackMint as el}from"@solana/spl-token";var $i=se("Raydium_accountInfo_util");async function At(i,e,t){let{batchRequest:n,commitment:r="confirmed",chunkCount:o=100}=C({batchRequest:!1},t),s=Ji(e,o),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=i._buildArgs([m.map(p=>p.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Ji(u,10);a=(await(await Promise.all(c.map(async m=>await i._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&$i.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&$i.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new _s(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>i.getMultipleAccountsInfo(u,r)))}catch(u){u instanceof Error&&$i.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Me(i,e,t){let n=await At(i,e.map(r=>r.pubkey),t);return e.map((r,o)=>F(C({},r),{accountInfo:n[o]}))}async function Tn({connection:i,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await Me(i,e.map(u=>({pubkey:it(u)})),t),r={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<Zc){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=el(u.pubkey,u.accountInfo,(o=u.accountInfo)==null?void 0:o.owner);r[u.pubkey.toString()]=F(C({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||$c,feeConfig:(a=Jc(c))!=null?a:void 0})}return r[_s.default.toBase58()]=r[Q.toBase58()],r}async function eo({connection:i,address:e}){let t=await At(i,[...new Set(e.map(r=>r.toString()))].map(r=>new vs(r))),n={};for(let r=0;r<e.length;r++){let o=t[r],s=e[r];if(!o)continue;let a=new Ur({key:s,state:Ur.deserialize(o.data)});n[s.toString()]=a,Gr[s.toString()]=a}return n}var Gr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new Ur({key:new vs("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:Ur.deserialize(Buffer.from("AQAAAP//////////d49+DAAAAAAAAQZMWvw7GUNJdaccNBVnb57OKakxL2BHLYvhRwVILRsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMGRm/lIRcy/+ytunLDm+e8jOW7xfcSayxDmzpAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkG3fbh7nWP3hhCXbzkbM3athr8TYO5DSf+vfko2KGL/AVKU1D4XciC1hSlVnJ4iilt3x6rq9CmBniISTL07vagBqfVFxksXFEhjMlMPUrxf1ja7gibof1E49vZigAAAAAGp9UXGMd0yShWY5hpHV62i164o5tLbVxzVVshAAAAAIyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZC3BlsePRfEU4nVJ/awTDzVi4bHMaoP21SbbRvAP4KUbIScv+6Yw2LHF/6K0ZjUPibbSWXCirYPGuuVl7zT789IUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2LvDQdRqCgtphMF/imcN7mY5YRx2xE1A3MQ+L4QRaYK9u4GRfZP3LsAd00a+IkCpA22UNQMKdq5BFbJuwuOLqc8zxCTDlqxBG8J0HcxtfogQHDK06ukzfaXiNDKAob1MqBHS9lJxDYCwz8gd5DtFqNSTKG5l1zxIaKpDP/sffi2is1H9aKveyXSu5StXElYRl9SD5As0DHE4N0GLnf84/siiKXVyp4Ez121kLcUui/jLLFZEz/BwZK3Ilf9B9OcsEAeDMKAy2vjGSxQODgBz0QwGA+eP4ZjIjrIAQaXENv31QfLlOdXSRCkaybRniDHF4C8YcwhcvsqrOVuTP4B2Na+9wLdtrB31uz2rtlFI5kahdsnp/d1SrASDInYCtTYtdoke4kX+hoKWcEWM4Tle8pTUkUVv4BxS6fje/EzKBE4Qu9N9LMnrw/JNO0hqMVB4rk/2ou4AB1loQ7FZoPwut2o4KZB+0p9xnbrQKw038qjpHar+PyDwvxBRcu5hpHw3dguezeWv+IwvgW5icu8EGkhGa9AkFPPJT7VMSFb8xowveU=","base64"))})};var Xr=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await tl.get(`https://solanacompass.com/api/fees?cacheFreshTime=${3e5}`)).data,{avg:t}=(n=e==null?void 0:e[15])!=null?n:{};if(!!t)return{units:6e5,microLamports:Math.min(Math.ceil(t*1e6/6e5),25e3)}}addCustomComputeBudget(e){if(e){let{instructions:t,instructionTypes:n}=qr(e);return this.instructions.unshift(...t),this.instructionTypes.unshift(...n),!0}return!1}async calComputeBudget({config:e,defaultIns:t}){try{let n=e||await this.getComputeBudgetConfig();if(this.addCustomComputeBudget(n))return;t&&this.instructions.unshift(...t)}catch{t&&this.instructions.unshift(...t)}}addInstruction({instructions:e=[],endInstructions:t=[],signers:n=[],instructionTypes:r=[],endInstructionTypes:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...r),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==Wn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(C({},t||{})):this.build(t)}build(e){var n;let t=new qn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(r=>r.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async r=>{var c;let{recentBlockHash:o,skipPreflight:s=!0,sendAndConfirm:a}=r||{},u=o!=null?o:await kn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),nn([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await to(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),o=t.filter(l=>l.transaction.instructions.length>0),s=[r,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],u=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await kn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let h of s){let w=await to(this.connection,h,this.signers.find(P=>P.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((w,P)=>(w.recentBlockhash=f,a[P].length&&w.sign(...a[P]),w));nn(g);let h=await this.signAllTransactions(g);if(m){let w=0,P=[],I=async()=>{if(!h[w])return;let T=await this.connection.sendRawTransaction(h[w].serialize(),{skipPreflight:y});P.push({txId:T,status:"sent",signedTx:h[w]}),d==null||d([...P]),w++,this.connection.onSignature(T,S=>{let x=P.findIndex(R=>R.txId===T);x>-1&&(P[x].status=S.err?"error":"success"),d==null||d([...P]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:P.map(T=>T.txId),signedTxs:h}}else{let w=[];for(let P=0;P<h.length;P+=1){let I=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:y});w.push(I)}return{txIds:w,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r,recentBlockhash:o}=y,s=Ke(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=C(C({},this.cluster==="devnet"?{}:Gr),t),u=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let b of u)a[b]===void 0&&c.push(new Wn(b));let l=await eo({connection:this.connection,address:c});for(let[b,g]of Object.entries(l))a[b]=g;let m=r?Wn.default.toBase58():o!=null?o:await kn(this.connection,this.blockhashCommitment),d=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new Gn(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var w;let{skipPreflight:g=!0,sendAndConfirm:h}=b||{};if(nn([p]),(w=this.owner)!=null&&w.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});if(h){let{lastValidBlockHeight:I,blockhash:T}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:T,lastValidBlockHeight:I,signature:P},"confirmed")}return{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),o=t.filter(l=>l.builder.instructions.length>0),s=[r,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],u=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),nn(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let h=await this.connection.sendTransaction(g,{skipPreflight:y}),{lastValidBlockHeight:w,blockhash:P}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:P,lastValidBlockHeight:w,signature:h},"confirmed"),b.push(h)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,h=[],w=async()=>{if(!b[g])return;let P=await this.connection.sendTransaction(b[g],{skipPreflight:y});h.push({txId:P,status:"sent",signedTx:b[g]}),d==null||d([...h]),g++,this.connection.onSignature(P,I=>{let T=h.findIndex(S=>S.txId===P);T>-1&&(h[T].status=I.err?"error":"success"),d==null||d([...h]),I.err||w()},"processed"),this.connection.getSignatureStatus(P)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let h=0;h<b.length;h+=1){let w=await this.connection.sendTransaction(b[h],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Ke(c,["computeBudgetConfig"]),r=t?qr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((m,d)=>F(C({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...r.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Wn(b));if(u.length<12&&Fn({instructions:p,payer:this.feePayer,signers:f})||Fn({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");Fn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new qn().add(...r.instructions,...u)):s.push(new qn().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>o[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>o[p]).filter(p=>p!==void 0);Fn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new qn().add(...r.instructions,...u)):s.push(new qn().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await kn(this.connection,this.blockhashCommitment);if(s.forEach(async(h,w)=>{h.recentBlockhash=b,a[w].length&&h.sign(...a[w])}),nn(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let h=[];for(let w of s){let P=await to(this.connection,w,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});h.push(P)}return{txIds:h,signedTxs:s}}return{txIds:await Promise.all(s.map(async h=>await this.connection.sendRawTransaction(h.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let h=await this.signAllTransactions(s);if(d){let w=0,P=[],I=async()=>{if(!h[w])return;let T=await this.connection.sendRawTransaction(h[w].serialize(),{skipPreflight:f});P.push({txId:T,status:"sent",signedTx:h[w]}),p==null||p([...P]),w++,this.connection.onSignature(T,S=>{let x=P.findIndex(R=>R.txId===T);x>-1&&(P[x].status=S.err?"error":"success"),p==null||p([...P]),S.err||I()},"processed"),this.connection.getSignatureStatus(T)};return await I(),{txIds:P.map(T=>T.txId),signedTxs:h}}else{let w=[];for(let P=0;P<h.length;P+=1){let I=await this.connection.sendRawTransaction(h[P].serialize(),{skipPreflight:f});w.push(I)}return{txIds:w,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,o=Ke(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=C(C({},this.cluster==="devnet"?{}:Gr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let h of a)s[h]===void 0&&u.push(new Wn(h));let c=await eo({connection:this.connection,address:u});for(let[h,w]of Object.entries(c))s[h]=w;let l=t?qr(t):{instructions:[],instructionTypes:[]},m=await kn(this.connection,this.blockhashCommitment),d=this.signers.reduce((h,w)=>F(C({},h),{[w.publicKey.toBase58()]:w}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(h=>{let w=[...f,h],P=t?[...l.instructions,...w]:w;if(f.length<12&&Dn({instructions:P,payer:this.feePayer,lookupTableAddressAccount:s})||Dn({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(h);else{if(f.length===0)throw Error("item ins too big");let I={};for(let T of[...new Set(a)])s[T]!==void 0&&(I[T]=s[T]);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let T=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Gn(T))}else{let T=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Gn(T))}y.push(Array.from(new Set(f.map(T=>T.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(T=>d[T]).filter(T=>T!==void 0)),f=[h]}}),f.length>0){let w=[...new Set(f.map(P=>P.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(P=>d[P]).filter(P=>P!==void 0);if(t&&Dn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let P=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new Gn(P))}else{let P=new Un({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new Gn(P))}y.push(w)}return(g=this.owner)!=null&&g.signer&&y.forEach(h=>{h.some(w=>w.publicKey.equals(this.owner.publicKey))||h.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async h=>{var S;let{sequentially:w,onTxUpdate:P,recentBlockHash:I,skipPreflight:T=!0}=h||{};if(p.map(async(x,R)=>{y[R].length&&x.sign(y[R]),I&&(x.message.recentBlockhash=I)}),nn(p),(S=this.owner)!=null&&S.isKeyPair){if(w){let x=[];for(let R of p){let B=await this.connection.sendTransaction(R,{skipPreflight:T}),{lastValidBlockHeight:O,blockhash:D}=await this.connection.getLatestBlockhash({commitment:this.blockhashCommitment});await this.connection.confirmTransaction({blockhash:D,lastValidBlockHeight:O,signature:B},"confirmed"),x.push(B)}return{txIds:x,signedTxs:p}}return{txIds:await Promise.all(p.map(async x=>await this.connection.sendTransaction(x,{skipPreflight:T}))),signedTxs:p}}if(this.signAllTransactions){let x=await this.signAllTransactions(p);if(w){let R=0,B=[],O=async()=>{if(!x[R])return;let D=await this.connection.sendTransaction(x[R],{skipPreflight:T});B.push({txId:D,status:"sent",signedTx:x[R]}),P==null||P([...B]),R++,this.connection.onSignature(D,v=>{let j=B.findIndex(G=>G.txId===D);j>-1&&(B[j].status=v.err?"error":"success"),P==null||P([...B]),v.err||O()},"processed"),this.connection.getSignatureStatus(D)};return O(),{txIds:[],signedTxs:x}}else{let R=[];for(let B=0;B<x.length;B+=1){let O=await this.connection.sendTransaction(x[B],{skipPreflight:T});R.push(O)}return{txIds:R,signedTxs:x}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:o||{}}}};var ht=class{constructor(e){this._owner=e}get publicKey(){return ht.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return ht.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return ht.isKeyPair(this._owner)}get isPublicKey(){return ht.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!ht.isKeyPair(e)}};function Ji(i,e=1,t=[]){let n=[...i];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}import{PublicKey as ue}from"@solana/web3.js";var Vs=new ue("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Es=new ue("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),zn=new ue("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Zf=new ue("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),$f=new ue("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),no=new ue("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Fs=new ue("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Jf=new ue("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Ds=new ue("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Ws=new ue("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ey=new ue("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ty=new ue("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),nl=new ue("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),rl=new ue("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),il=new ue("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),ol=new ue("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),qs=new ue("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ny=new ue("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),ry=new ue("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),sl=new ue("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),al=new ue("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),ul=new ue("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Qn={IDO_PROGRAM_ID_V1:nl,IDO_PROGRAM_ID_V2:rl,IDO_PROGRAM_ID_V3:il,IDO_PROGRAM_ID_V4:ol};var iy={SERUM_MARKET:ue.default,OPENBOOK_MARKET:new ue("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:ue.default,FarmV3:new ue("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new ue("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new ue("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new ue("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new ue("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new ue("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),Router:new ue("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:sl,CREATE_CPMM_POOL_AUTH:al,CREATE_CPMM_POOL_FEE_ACC:ul,FEE_DESTINATION_ID:new ue("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR")};import{PublicKey as cl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ll}from"@solana/spl-token";function ke(i,e,t){return le([i.toBuffer(),(t!=null?t:ll).toBuffer(),e.toBuffer()],new cl("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import Pt from"bn.js";var Yn=1e4;function be(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let r=F(C({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<r.newerTransferFee.epoch?r.olderTransferFee:r.newerTransferFee,s=new Pt(o.maximumFee.toString()),a=t.epoch<r.newerTransferFee.epoch?(Number(r.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===Yn){let u=new Pt(o.maximumFee.toString());return{amount:i.add(u),fee:u,expirationTime:a}}else{let u=Qt(i.mul(new Pt(Yn)),new Pt(Yn-o.transferFeeBasisPoints)),c=new Pt(o.maximumFee.toString()),l=u.sub(i).gt(c)?i.add(c):u,m=Qt(l.mul(new Pt(o.transferFeeBasisPoints)),new Pt(Yn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Qt(i.mul(new Pt(o.transferFeeBasisPoints)),new Pt(Yn)),c=u.gt(s)?s:u;return{amount:i,fee:c,expirationTime:a}}}function kt(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function Qt(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new Pt(0))?t.add(new Pt(1)):t}var Ce={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles"},Ry=C({},Ce);var Us="ray_tab_hash",ro="ray_req_hash",ml=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(Us);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(Us,i)),i},zr=async n=>{var r=n,{logCount:i=1e3,removeLastLog:e}=r,t=Ke(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(ro)||"[]").slice(0,i-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(F(C({},t),{time:Date.now(),session:ml()}));try{localStorage.setItem(ro,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let u=JSON.stringify(t.data).substring(0,100);o[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(ro,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return zr(F(C({},t),{logCount:i,removeLastLog:!0}))}};var Qr=se("Raydium_Api"),io=new Map;var Yr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=r||1e3,this.api=Gs.create({baseURL:this.urlConfigs.BASE_HOST||Ce.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Qr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Qr.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:u,status:c}=s,{method:l,baseURL:m,url:d}=a;return n&&zr({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Qr.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${c}`),u},s=>{let{config:a,response:u={}}=s,{status:c}=u,{method:l,baseURL:m,url:d}=a;return n&&zr({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Qr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Ce.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Ce.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Ce.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await Gs.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(r=>r.numSlots);return n.reduce((r,o)=>r+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Ce.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Ce.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Ce.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Ce.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Ce.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:r="desc",page:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Ce.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${r}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Ce.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>io.has(s)?(n.push(io.get(s)),!1):!0),o=[];return r.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Ce.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),o.forEach(a=>{io.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:r="all",sort:o="default",order:s="desc",page:a=1}=e,[u,c]=[t&&it(t).toBase58(),n&&n!=="undefined"?it(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Ce.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${r}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Ce.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Ce.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Ce.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Ce.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Ce.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Ce.JITO})).data}};var jr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Xs="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as bo,TOKEN_PROGRAM_ID as Ht,AccountLayout as Sn,TOKEN_2022_PROGRAM_ID as Dl}from"@solana/spl-token";import{PublicKey as ni,SystemProgram as Wl}from"@solana/web3.js";var oo=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ie=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=se(t)}createTxBuilder(e){return this.scope.checkOwner(),new Xr({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(oo(e))}logInfo(...e){this.logger.info(oo(e))}logAndCreateError(...e){let t=oo(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Ml,createCloseAccountInstruction as _l,createTransferInstruction as vl,TOKEN_PROGRAM_ID as xn}from"@solana/spl-token";import{PublicKey as Vl,SystemProgram as El}from"@solana/web3.js";import Fl from"bn.js";import{PublicKey as oa,Keypair as Rl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ll}from"@solana/spl-token";import Ol from"bn.js";import{PublicKey as Tl}from"@solana/web3.js";import Hs,{isBN as Zs}from"bn.js";import{bits as dl,BitStructure as mb,blob as pl,Blob as db,cstr as pb,f32 as fb,f32be as yb,f64 as bb,f64be as gb,greedy as wb,Layout as fl,ns64 as Ab,ns64be as hb,nu64 as yl,nu64be as Pb,offset as kb,s16 as Tb,s16be as Ib,s24 as Bb,s24be as xb,s32 as bl,s32be as Sb,s40 as Kb,s40be as Cb,s48 as Rb,s48be as Lb,s8 as Ob,seq as gl,struct as Nb,Structure as wl,u16 as Al,u16be as Mb,u24 as _b,u24be as vb,u32 as hl,u32be as Vb,u40 as Eb,u40be as Fb,u48 as Db,u48be as Wb,u8 as Pl,UInt as kl,union as qb,Union as Ub,unionLayoutDiscriminator as Gb,utf8 as Xb}from"@solana/buffer-layout";var Hr=fl,zs=wl;var so=kl;var Qs=Pl,Mt=Al;var ao=hl;var Ys=yl;var Fe=bl;var js=gl;var pe=pl;var uo=dl;var rn=class extends Hr{constructor(t,n,r){super(t,r);this.blob=pe(t),this.signed=n}decode(t,n=0){let r=new Hs(this.blob.decode(t,n),10,"le");return this.signed?r.fromTwos(this.span*8).clone():r}encode(t,n,r=0){return typeof t=="number"&&(t=new Hs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},Zr=class extends Hr{constructor(t){super(8,t);this._lower=uo(ao(),!1),this._upper=uo(ao(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let r=this._lower.decode(t,n),o=this._upper.decode(t,n+this._lower.span);return C(C({},r),o)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function W(i){return new so(1,i)}function Ge(i){return new so(4,i)}function A(i){return new rn(8,!1,i)}function $(i){return new rn(16,!1,i)}function $s(i){return new rn(1,!0,i)}function In(i){return new rn(8,!0,i)}function Js(i){return new rn(16,!0,i)}var $r=class extends Hr{constructor(t,n,r,o){super(t.span,o);this.layout=t,this.decoder=n,this.encoder=r}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,r){return this.layout.encode(this.encoder(t),n,r)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(i){return new $r(pe(32),e=>new Tl(e),e=>e.toBuffer(),i)}function Xe(i){return new $r(Qs(),Il,Bl,i)}function Il(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function Bl(i){return i?1:0}var co=class extends zs{decode(e,t){return super.decode(e,t)}};function V(i,e,t){return new co(i,e,t)}function X(i,e,t){let n,r=typeof e=="number"?e:Zs(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Zs(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return js(i,r,t)}var Bn=V([K("mint"),K("owner"),A("amount"),Ge("delegateOption"),K("delegate"),W("state"),Ge("isNativeOption"),A("isNative"),A("delegatedAmount"),Ge("closeAuthorityOption"),K("closeAuthority")]);function xl(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function lo(i,...e){if(!xl(i))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(i.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${i.length}`)}function mo(i,e=!0){if(i.destroyed)throw new Error("Hash instance has been destroyed");if(e&&i.finished)throw new Error("Hash#digest() has already been called")}function ea(i,e){lo(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var ei=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),Tt=(i,e)=>i<<32-e|i>>>e;var sg=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Sl(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function po(i){return typeof i=="string"&&(i=Sl(i)),lo(i),i}var Jr=class{clone(){return this._cloneInto()}},ag={}.toString;function ta(i){let e=n=>i().update(po(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function Kl(i,e,t,n){if(typeof i.setBigUint64=="function")return i.setBigUint64(e,t,n);let r=BigInt(32),o=BigInt(4294967295),s=Number(t>>r&o),a=Number(t&o),u=n?4:0,c=n?0:4;i.setUint32(e+u,s,n),i.setUint32(e+c,a,n)}var na=(i,e,t)=>i&e^~i&t,ra=(i,e,t)=>i&e^i&t^e&t,ti=class extends Jr{constructor(e,t,n,r){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=ei(this.buffer)}update(e){mo(this);let{view:t,buffer:n,blockLen:r}=this;e=po(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(r-this.pos,o-s);if(a===r){let u=ei(e);for(;r<=o-s;s+=r)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===r&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){mo(this),ea(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>r-s&&(this.process(n,0),s=0);for(let m=s;m<r;m++)t[m]=0;Kl(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=ei(e),u=this.outputLen;if(u%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let c=u/4,l=this.get();if(c>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<c;m++)a.setUint32(4*m,l[m],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:r,finished:o,destroyed:s,pos:a}=this;return e.length=r,e.pos=a,e.finished=o,e.destroyed=s,r%t&&e.buffer.set(n),e}};var Cl=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Yt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),jt=new Uint32Array(64),fo=class extends ti{constructor(){super(64,32,8,!1),this.A=Yt[0]|0,this.B=Yt[1]|0,this.C=Yt[2]|0,this.D=Yt[3]|0,this.E=Yt[4]|0,this.F=Yt[5]|0,this.G=Yt[6]|0,this.H=Yt[7]|0}get(){let{A:e,B:t,C:n,D:r,E:o,F:s,G:a,H:u}=this;return[e,t,n,r,o,s,a,u]}set(e,t,n,r,o,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=r|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=u|0}process(e,t){for(let m=0;m<16;m++,t+=4)jt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=jt[m-15],p=jt[m-2],y=Tt(d,7)^Tt(d,18)^d>>>3,f=Tt(p,17)^Tt(p,19)^p>>>10;jt[m]=f+jt[m-7]+y+jt[m-16]|0}let{A:n,B:r,C:o,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=Tt(a,6)^Tt(a,11)^Tt(a,25),p=l+d+na(a,u,c)+Cl[m]+jt[m]|0,f=(Tt(n,2)^Tt(n,13)^Tt(n,22))+ra(n,r,o)|0;l=c,c=u,u=a,a=s+p|0,s=o,o=r,r=n,n=p+f|0}n=n+this.A|0,r=r+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,u=u+this.F|0,c=c+this.G|0,l=l+this.H|0,this.set(n,r,o,s,a,u,c,l)}roundClean(){jt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ia=ta(()=>new fo);var Ig=se("Raydium_Util");function sa({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:o,account:s}of t.value){let a=Bn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:ke(i,u,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),r.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:oa.default,amount:new Ol(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function tt({fromPublicKey:i,programId:e=Ll}){let t=Rl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Nl(i,t,e),seed:t}}function Nl(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ia(n);return new oa(r)}function yo(i){let{mint:e,tokenAccount:t,owner:n,programId:r=xn}=i;return Ml(t,e,n,r)}function Ct(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:o=xn}=i;return _l(e,t,r,n,o)}async function _t(i){let{connection:e,amount:t,commitment:n,payer:r,owner:o,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(Bn.span,n),u=Z(t).add(new Fl(a)),c=tt({fromPublicKey:r,programId:xn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[El.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:Bn.span,programId:xn}),yo({mint:new Vl(Ve.address),tokenAccount:c.publicKey,owner:o,programId:xn})],instructionTypes:[E.CreateAccount,E.InitAccount],endInstructionTypes:s?[]:[E.CloseAccount],endInstructions:s?[]:[Ct({tokenAccount:c.publicKey,payer:r,owner:o})]}}function jn({source:i,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:o=xn}){return vl(i,e,t,BigInt(String(n)),r,o)}var Hn=class extends Ie{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:r}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=r||[],this._clientOwnedToken=!!(n||r)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}updateTokenAccount({tokenAccounts:t,tokenAccountRawInfos:n}){return t&&(this._tokenAccounts=t),n&&(this._tokenAccountRawInfos=n),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=void 0,this._clientOwnedToken=!0,this}addAccountChangeListener(t){return this._accountListener.push(t),this}removeAccountChangeListener(t){return this._accountListener=this._accountListener.filter(n=>n!==t),this}getAssociatedTokenAccount(t,n){return ke(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=C(C({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Ht},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Dl},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=sa({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Ht,associatedOnly:r=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,u)=>a.amount.lt(u.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:u}=a;if(u&&(!r||r&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new ni(t.tokenProgram||Ht),m=this.getAssociatedTokenAccount(n,new ni(l)),d=(a?[]:this.tokenAccountRawInfos).filter(h=>h.accountInfo.mint.equals(n)&&(!o||h.pubkey.equals(m))).sort((h,w)=>h.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(r===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let h=bo(s,m,s,n,l);if(c){let w=await this.scope.connection.getAccountInfo(m);if(w===null)(y=p.instructions)==null||y.push(h),p.instructionTypes.push(E.CreateATA);else if(!(w.owner.equals(l)&&Sn.decode(w.data).mint.equals(n)&&Sn.decode(w.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(h),p.instructionTypes.push(E.CreateATA);if(n.equals(Q)&&r.amount){let w=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(f=r.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),r.amount&&(p.instructions.push(jn({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:Ht})),p.instructionTypes.push(E.TransferAmount))}return u||(p.endInstructions.push(Ct({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:m,instructionParams:p}}else{let h=tt({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Sn.span),P=Wl.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:h.seed,newAccountPubkey:h.publicKey,lamports:w+Number((g=(b=r.amount)==null?void 0:b.toString())!=null?g:0),space:Sn.span,programId:l});return p.instructions.push(P,yo({mint:n,tokenAccount:h.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(E.CreateAccount),p.instructionTypes.push(E.InitAccount),u||(p.endInstructions.push(Ct({owner:s,payer:r.payer||s,tokenAccount:h.publicKey,programId:l})),p.endInstructionTypes.push(E.CloseAccount)),{account:h.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Ht,autoUnwrapWSOLToSOL:r}){var u;await this.fetchWalletTokenAccounts();let o=(u=this.scope.account.tokenAccounts.find(({mint:c})=>(c==null?void 0:c.toBase58())===t.toBase58()))==null?void 0:u.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let c=this.getAssociatedTokenAccount(t,n),l=await bo(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[E.CreateATA],o=c}return r&&Q.toBase58()===t.toBase58()&&(a.endInstructions=[Ct({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[E.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:o,programId:s=Ht,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new ni(Q).equals(o)){let p=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return C({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=bo(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(Ht)&&Sn.decode(f.data).mint.equals(o)&&Sn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[E.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=Ht,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new ni(Q))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=Ke(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:r}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=m,p=Ke(m,["tokenAccount"]);u=d,c.addInstruction(p)}return C({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as im}from"@solana/spl-token";import{PublicKey as fe,SystemProgram as om}from"@solana/web3.js";import{PublicKey as ca}from"@solana/web3.js";var go=V([W("instruction")]),wo=V([W("instruction")]),ql=V([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),$("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),A("rewardType"),X(A(),15,"padding")]),Ul=V([A("state"),A("nonce"),K("lpVault"),K("rewardVault"),K(),K(),A(),A(),A("totalReward"),$("perShareReward"),A("lastSlot"),A("perSlotReward")]),Gl=V([A("state"),A("nonce"),K("lpVault"),K("rewardVaultA"),A("totalRewardA"),$("perShareRewardA"),A("perSlotRewardA"),W("option"),K("rewardVaultB"),pe(7),A("totalRewardB"),$("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),K()]),Xl=V([A(),A("state"),A("nonce"),A("validRewardTokenNum"),$("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),K("lpMint"),K("lpVault"),X(ql,5,"rewardInfos"),K("creator"),K(),X(A(),32,"padding")]),zl=new Proxy(Ul,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return F(C({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(i,e,t)}}),Ql=new Proxy(Gl,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return F(C({},r),{version:5,rewardInfos:[{rewardVault:r.rewardVaultA,totalReward:r.totalRewardA,perSlotReward:r.perSlotRewardA,perShareReward:r.perShareRewardA},{rewardVault:r.rewardVaultB,totalReward:r.totalRewardB,perSlotReward:r.perSlotRewardB,perShareReward:r.perShareRewardB}]})}:Reflect.get(i,e,t)}}),ri=new Proxy(Xl,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return F(C({},r),{version:6,rewardInfos:r.rewardInfos.map(o=>{var s;return F(C({},o),{rewardType:((s=Object.entries(Zt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),Yl=V([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Ao=V([W("instruction"),A("nonce"),X(Yl,5,"rewardTimeInfo")]),ho=V([W("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Po=V([W("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),nw=V([A("state"),K("id"),K("owner"),A("deposited"),X(A(),1,"rewardDebts")]),ko=V([A("state"),K("id"),K("owner"),A("deposited"),X($(),1,"rewardDebts"),A(""),A("voteLockedBalance"),X(A(),15)]),rw=V([A("state"),K("id"),K("owner"),A("deposited"),X(A(),2,"rewardDebts")]),aa=V([A("state"),K("id"),K("owner"),A("deposited"),X($(),2,"rewardDebts"),X(A(),17)]),ua=V([A(),A("state"),K("id"),K("owner"),A("deposited"),X($(),5,"rewardDebts"),X(A(),16)]),ot=V([W("instruction"),A("amount")]),jl=V([K("mint"),K("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),$s("digitShift"),X(W(),7,"reserved1"),X(A(),7,"reserved2")]),Hl=V([pe(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),X(W(),32,"reserved1"),X(jl,4,"votingMints"),In("timeOffset"),W("bump"),X(W(),7,"reserved2"),X(A(),11,"reserved3")]),Zl=V([In("startTime"),In("endTime"),W("kind"),X(W(),15,"reserved")]),$l=V([X(Zl,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Xe("isUsed"),Xe("allowClawback"),W("votingMintConfigIdx"),X(W(),29,"reserved")]),Jl=V([pe(8),K("voterAuthority"),K("registrar"),X($l,32,"deposits"),W("voterBump"),W("voterWweightRecordBump"),X(W(),94,"reserved")]);var mw=se("Raydium_farm_config"),la=new ca("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ma=new ca("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var da={3:ko,5:aa,6:ua},To=i=>[3,5,6].indexOf(i)!==-1,Io=i=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=i,r=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${r}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${r}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${r}`}};return(s=o[e])==null?void 0:s.call(o)},Zt={"Standard SPL":0,"Option tokens":1},ct={[Vs.toString()]:3,[Es.toString()]:5,[zn.toString()]:6};import{PublicKey as me,SystemProgram as ya,SYSVAR_RENT_PUBKEY as nm,SYSVAR_CLOCK_PUBKEY as ii,TransactionInstruction as It}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as qw,TOKEN_PROGRAM_ID as $t,ASSOCIATED_TOKEN_PROGRAM_ID as Uw}from"@solana/spl-token";import ba from"bn.js";import em from"bn.js";var tm=se("Raydium.farm.util");function Zn({programId:i,poolId:e,mint:t,type:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return r}function lt({programId:i,poolId:e,owner:t,version:n}){let{publicKey:r}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return r}var pa=({programId:i,poolId:e})=>le([e.toBuffer()],i);function fa(i){return{isSet:new em(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(Zt[i.rewardType])}}function Bo(i){return Z(i.endTime).sub(Z(i.openTime)).mul(Z(i.perSecond))}function $n(i){let e=da[i];return e||tm.logWithError("invalid version",i),e}var rm=se("Raydium_farm_instruction"),nA={voterStakeRegistryCreateVoter:Buffer.from([6,24,245,52,243,255,148,25]),voterStakeRegistryCreateDepositEntry:Buffer.from([185,131,167,186,159,125,19,67]),voterStakeRegistryDeposit:Buffer.from([242,35,198,137,82,225,242,182]),voterStakeRegistryWithdraw:Buffer.from([183,18,70,156,148,109,161,34]),voterStakeRegistryUpdateVoterWeightRecord:Buffer.from([45,185,3,36,109,190,115,169])};function Jn(i){let{version:e,id:t,ledger:n,programId:r,owner:o}=i,s={3:9,5:10}[e];s||rm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(go.span);go.encode({instruction:s},a);let u=[k({pubkey:t}),k({pubkey:n}),k({pubkey:o,isWritable:!1}),k({pubkey:ya.programId,isWritable:!1}),k({pubkey:nm,isWritable:!1})];return{instruction:new It({programId:r,keys:u,data:a}),instructionType:E.FarmV3CreateLedger}}function ga(i){var n;let e=Buffer.alloc(Ao.span);Ao.encode({instruction:0,nonce:new ba(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...Wi,k({pubkey:i.farmId}),k({pubkey:i.farmAuthority,isWritable:!1}),k({pubkey:i.lpVault}),k({pubkey:i.lpMint,isWritable:!1}),k({pubkey:i.lockVault}),k({pubkey:i.lockMint,isWritable:!1}),k({pubkey:(n=i.lockUserAccount)!=null?n:Oe}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let r of i.rewardInfo)t.push(k({pubkey:r.rewardMint,isWritable:!1}),k({pubkey:r.rewardVault}),k({pubkey:r.userRewardToken}));return{instruction:new It({programId:i.programId,keys:t,data:e}),instructionType:E.FarmV6Create}}function wa(i){let e=Buffer.alloc(wo.span);wo.encode({instruction:5},e);let t=[k({pubkey:$t,isWritable:!1}),k({pubkey:i.id}),k({pubkey:i.authority,isWritable:!1}),k({pubkey:i.lpVault,isWritable:!1}),k({pubkey:i.rewardVault}),k({pubkey:i.userRewardToken}),k({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new It({programId:i.programId,keys:t,data:e}),instructionType:E.FarmV6CreatorWithdraw}}function xo({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let o=Buffer.alloc(ho.span);ho.encode({instruction:3,rewardReopenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardPerSecond:Z(r.perSecond)},o);let s=[k({pubkey:$t,isWritable:!1}),k({pubkey:n.id}),k({pubkey:n.lpVault,isWritable:!1}),k({pubkey:e}),k({pubkey:t}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new It({programId:n.programId,keys:s,data:o})}function So({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let o=Buffer.alloc(Po.span);Po.encode({instruction:4,isSet:new ba(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(Zt[r.rewardType])},o);let s=[...Wi,k({pubkey:t.id}),k({pubkey:t.authority,isWritable:!1}),k({pubkey:r.mint,isWritable:!1}),k({pubkey:n}),k({pubkey:e}),k({pubkey:i,isWritable:!1,isSigner:!0})];return new It({programId:t.programId,keys:s,data:o})}function er(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new me(e.programId),new me(e.id)],c=lt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:2,amount:Z(s)},l);let m=[k({pubkey:$t,isWritable:!1}),k({pubkey:u}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:new me(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new me(t.rewardInfos[d].vault)})),m.push(k({pubkey:r[d]}));return new It({programId:a,keys:m,data:l})}function tr(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:12,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:r[p]})),d.push(k({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function nr(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function Aa(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(ot.span);ot.encode({instruction:10,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function ha(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new me(e.programId),new me(e.id)],l=lt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(ot.span);ot.encode({instruction:11,amount:Z(s)},m);let d=[k({pubkey:c}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:l}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n}),k({pubkey:new me(t.lpVault)}),k({pubkey:r[0]}),k({pubkey:new me(t.rewardInfos[0].vault)}),k({pubkey:ii,isWritable:!1}),k({pubkey:$t,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(k({pubkey:r[p]})),d.push(k({pubkey:new me(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(k({pubkey:p}));return new It({programId:u,keys:d,data:m})}function Pa(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new me(e.programId),new me(e.id)],c=lt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(ot.span);ot.encode({instruction:1,amount:Z(s)},l);let m=[k({pubkey:$t,isWritable:!1}),k({pubkey:ya.programId,isWritable:!1}),k({pubkey:u}),k({pubkey:new me(t.authority),isWritable:!1}),k({pubkey:new me(t.lpVault)}),k({pubkey:c}),k({pubkey:o,isWritable:!1,isSigner:!0}),k({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(k({pubkey:new me(t.rewardInfos[d].vault)})),m.push(k({pubkey:r[d]}));return new It({programId:a,keys:m,data:l})}var rr=class extends Ie{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Oe)){let n=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Bo(F(C({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:r=zn,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new fe(e.lpMint.address),lockInfo:{lockMint:la,lockVault:ma},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=tt({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(ri.span);u.addInstruction({instructions:[om.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:ri.span,programId:a.programId})]});let{publicKey:d,nonce:p}=pa({programId:new fe(a.programId),poolId:l.publicKey}),y=Zn({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(Zt[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(fa(I));let{rewardPubKey:T,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:c});S&&u.addInstruction(S),T||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let x=I.mint.equals(Oe)?new fe(Ve.address):I.mint;b.push({rewardMint:x,rewardVault:Zn({programId:a.programId,poolId:l.publicKey,mint:x,type:"rewardVault"}),userRewardToken:T})}let{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({mint:new fe(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});h&&u.addInstruction(h),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:w,instructionType:P}=ga({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[w],instructionTypes:[P]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:r}){var b;let o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.openTime>=n.endTime&&this.logAndCreateError("start time error","newRewardInfo",n);let u=t||this.scope.ownerPubKey,c=n.mint.equals(Oe)?new fe(Ve.address):n.mint,l=a.rewardInfos.findIndex(g=>new fe(g.mint.address).equals(c)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",c);let d=(b=m.vault)!=null?b:Oe,p=this.createTxBuilder(),{rewardPubKey:y,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:n,payer:u});return f&&p.addInstruction(f),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[xo({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[E.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),a={id:s.id,rewardInfos:e.rewardInfos,lpVault:s.lpVault,programId:s.programId};n.forEach(m=>{m.openTime>=m.endTime&&this.logAndCreateError("start time error","newRewardInfo",m)});let u=t||this.scope.ownerPubKey,c=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Oe)?new fe(Ve.address):m.mint,p=a.rewardInfos.findIndex(w=>new fe(w.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Oe,{rewardPubKey:b,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:u});g&&c.addInstruction(g),b||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let h=xo({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[E.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:o}=e,s=ct[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Oe)?new fe(Ve.address):r.mint,m=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:r,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),r.mint=l,c.addInstruction({instructions:[So({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[E.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:o}=e,s=ct[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ee((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of r){let m=l.mint.equals(Oe)?new fe(Ve.address):l.mint,d=Zn({programId:new fe(n.programId),poolId:new fe(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:y}=await this._getUserRewardInfo({rewardInfo:l,payer:u});y&&c.addInstruction(y),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let f=So({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(C({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[E.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:r,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:u=!1,userAuxiliaryLedgers:c,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=ct[d];To(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new fe(n.programId),new fe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=lt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let w={};for(let v of this.scope.account.tokenAccounts)if(a){let j=ke(this.scope.ownerPubKey,v.mint,v.programId).publicKey;v.publicKey&&j.equals(v.publicKey)&&(w[v.mint.toString()]=v.publicKey)}else w[v.mint.toString()]=v.publicKey;let P=b.lpMint,I=w[P.address];I||this.logAndCreateError("you don't have any lp","lp zero",w);let T=[];for(let v of m){let j=s&&v.mint.address===Q.toString(),G=w[v.mint.address];if(!G){let{account:q,instructionParams:je}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new fe(v.mint.address),notUseTokenAccount:j,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!j,associatedOnly:j?!1:a,checkCreateATAOwner:u});G=q,je&&h.addInstruction(je)}w[v.mint.address]=G,T.push(G)}let S,x=await this.scope.connection.getAccountInfo(g);if(x&&(S=$n(p).decode(x.data)),n.programId!==zn.toString()&&!S){let{instruction:v,instructionType:j}=Jn({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[v],instructionTypes:[j]})}let R=Io({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:T});R&&this.logAndCreateError(R);let B={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:T,userAuxiliaryLedgers:c==null?void 0:c.map(v=>new fe(v))},O=p===6?Pa(B):p===5?ha(B):Aa(B),D={3:E.FarmV3Deposit,5:E.FarmV5Deposit,6:E.FarmV6Deposit};return h.addInstruction({instructions:[O],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:r,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:l,computeBudgetConfig:m}=e,{rewardInfos:d}=n;this.scope.availability.removeFarm===!1&&this.logAndCreateError("farm withdraw feature disabled in your region");let p=ct[n.programId];To(p)||this.logAndCreateError("invalid farm program:",n.programId);let y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],f=this.createTxBuilder();f.addCustomComputeBudget(m);let b={};for(let R of this.scope.account.tokenAccounts)if(u){let B=ke(this.scope.ownerPubKey,R.mint).publicKey;R.publicKey&&B.equals(R.publicKey)&&(b[R.mint.toString()]=R.publicKey)}else b[R.mint.toString()]=R.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let R=lt({programId:new fe(n.programId),poolId:new fe(n.id),owner:this.scope.ownerPubKey,version:p}),B=await this.scope.connection.getAccountInfo(R);if(B)$n(p).decode(B.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:O,instructionType:D}=Jn({id:new fe(y.id),programId:new fe(y.programId),version:p,ledger:R,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[O],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:B})}let g=y.lpMint.address,h=s&&g===Q.toString(),w=b[g.toString()];if(!w){let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new fe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});w=R,B&&f.addInstruction(B)}b[g.toString()]=w;let P=[];for(let R of d){let B=s&&R.mint.address===Q.toString(),O=b[R.mint.address];if(!O){let{account:D,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new fe(R.mint.address),notUseTokenAccount:B,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!B,associatedOnly:B?!1:u,checkCreateATAOwner:c});O=D,v&&f.addInstruction(v)}b[R.mint.address]=O,P.push(O)}let I=Io({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:P});I&&this.logAndCreateError(I);let T={amount:Z(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:P,userAuxiliaryLedgers:l==null?void 0:l.map(R=>new fe(R))},S=p===6?er(T):p===5?tr(T):nr(T),x={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ee((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=ct[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Oe.toString()?new fe(Ve.address):t),a=r.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Oe,c=this.createTxBuilder(),l;if(t.equals(Oe)){let y=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Bo(F(C({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new L(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=y.addresses.newAccount,c.addInstruction(y)}else{let y=await this.scope.account.getCreatedTokenAccount({mint:t});y===null?(l=await this.scope.account.getAssociatedTokenAccount(t),c.addInstruction({instructions:[im(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[E.CreateATA]})):l=y}let{instruction:m,instructionType:d}=wa({programId:r.programId,id:r.id,authority:r.authority,lpVault:r.lpVault,rewardVault:u,userRewardToken:l,owner:this.scope.ownerPubKey});return c.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:r,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(o){let f=ke(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(C({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,w=ct[f],P=b.address,I=n&&P===Q.toString(),T=m[P];if(!T){let{account:D,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new fe(P),notUseTokenAccount:I,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:o,checkCreateATAOwner:s});T=D,v&&l.addInstruction(v)}m[P.toString()]=T;let S=[];for(let D of g){let v=n&&D.mint.address===Q.toString(),j=m[D.mint.address];if(!j){let{account:G,instructionParams:q}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new fe(D.mint.address),notUseTokenAccount:v,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!v,associatedOnly:v?!1:o,checkCreateATAOwner:s});j=G,q&&l.addInstruction(q)}m[D.mint.address]=j,S.push(j)}let x=p[h],R={amount:ut,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:T,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new fe(D))},B=w===6?er(R):w===5?tr(R):nr(R),O={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};l.addInstruction({instructions:[B],instructionTypes:[O[w]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as Qe}from"@solana/web3.js";import{AccountLayout as qm,NATIVE_MINT as tu,TOKEN_PROGRAM_ID as Rn}from"@solana/spl-token";var BA=V([Ge("mintAuthorityOption"),K("mintAuthority"),A("supply"),W("decimals"),W("isInitialized"),Ge("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as CA}from"@solana/web3.js";import{MintLayout as LA,TOKEN_PROGRAM_ID as NA}from"@solana/spl-token";var oi=i=>new Pe({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name}),ir=r=>{var o=r,{amount:i,isRaw:e,name:t}=o,n=Ke(o,["amount","isRaw","name"]);return new ye(new Pe({mint:it(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),i,e,t)};var He=r=>{var o=r,{address:i,programId:e,decimals:t}=o,n=Ke(o,["address","programId","decimals"]);return C({chainId:101,address:it(i).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},Jt=i=>i?F(C({},i),{transferFeeConfigAuthority:i.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:i.withdrawWithheldAuthority.toBase58(),withheldAmount:i.withheldAmount.toString(),olderTransferFee:F(C({},i.olderTransferFee),{epoch:i.olderTransferFee.epoch.toString(),maximumFee:i.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(C({},i.newerTransferFee),{epoch:i.newerTransferFee.epoch.toString(),maximumFee:i.newerTransferFee.maximumFee.toString()})}):void 0;import{TOKEN_PROGRAM_ID as sr,ASSOCIATED_TOKEN_PROGRAM_ID as Am}from"@solana/spl-token";import{PublicKey as Rt,TransactionInstruction as Cn,SystemProgram as hm,SYSVAR_RENT_PUBKEY as ih}from"@solana/web3.js";var Ko=V([W("instruction"),A("amountIn"),A("minAmountOut")]),Co=V([W("instruction"),A("maxAmountIn"),A("amountOut")]),jA=V([W("instruction"),W("nonce")]),sm=V([W("instruction"),W("nonce"),A("startTime")]),si=V([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),$("swapBaseInAmount"),$("swapQuoteOutAmount"),A("swapBase2QuoteFee"),$("swapQuoteInAmount"),$("swapBaseOutAmount"),A("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),A("lpReserve"),X(A(),3,"padding")]),HA=V([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),$("swapBaseInAmount"),$("swapQuoteOutAmount"),$("swapQuoteInAmount"),$("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),X(A(),64,"padding")]),Ro=V([W("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide")]),Lo=V([W("instruction"),A("amountIn")]);var ka=V([A("fee")]);import{PublicKey as am}from"@solana/web3.js";var Kn=new am("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),sn=5e4,um=V([A("x"),A("y"),A("price")]),cm=V([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),X(um,sn,"DataElement")]);function lm(i,e){return[0,sn-2]}function mm(i){return[0,sn-2]}function dm(i){return[0,sn-2]}function pm(i,e,t){let[n,r]=lm(e,t),o=n,s=r,a=0,u=e*i.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=sn-2)return[a,a,!1];let c=i.DataElement[a].x*i.multiplier/i.DataElement[a].y,l=i.DataElement[a-1].x*i.multiplier/i.DataElement[a-1].y,m=i.DataElement[a+1].x*i.multiplier/i.DataElement[a+1].y;if(u===c)return[a,a,!0];if(u===l)return[a-1,a-1,!0];if(u===m)return[a+1,a+1,!0];if(u<l)s=a-1;else{if(u>l&&u<c)return[a-1,a,!0];if(u>c&&u<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function Oo(i,e,t){let[n,r,o]=pm(i,e,t);if(!o)return 0;if(n===r){let s=i.DataElement[n].x;return e*i.multiplier/s}else{let s=i.DataElement[n].x,a=i.DataElement[n].y,u=i.DataElement[r].x,c=i.DataElement[r].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*i.multiplier*l/p}}function on(i,e,t){return e*i.multiplier/t}function Ta(i,e,t){return e*t/i.multiplier}function fm(i,e){let[t,n]=mm(e),r=t,o=n,s=0,a=e;for(;r<o;){if(s=Math.floor((o+r)/2),s<=0||s>sn-2)return[s,s,!1];let u=i.DataElement[s].x,c=i.DataElement[s-1].x,l=i.DataElement[s+1].x;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<c)o=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];r=s+1}}return[s,s,!1]}function ym(i,e){let[t,n]=dm(e),r=t,o=n,s=0,a=e;for(;r<=o;){if(s=Math.floor((o+r)/2),s<=0||s>=sn-2)return[s,s,!1];let u=i.DataElement[s].y,c=i.DataElement[s-1].y,l=i.DataElement[s+1].y;if(a===u)return[s,s,!0];if(a===c)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)r=s+1;else{if(a<c&&a>u)return[s-1,s,!0];if(a<u&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Ia(i,e,t,n){let r=n?e+t:e-t,[o,s,a]=fm(i,r);if(!a)return[0,0,!1,a];if(o===s)return[i.DataElement[s].price,i.DataElement[s].y,!1,a];{let u=i.DataElement[o].x,c=i.DataElement[s].x,l=i.DataElement[o].price,m=i.DataElement[s].price,d=i.DataElement[o].y,p=i.DataElement[s].y;if(e>=u&&e<=c)return n?[m,p,!0,a]:[l,d,!0,a];{let y,f;return n?(y=l+(m-l)*(e-u)/(c-u),f=d-(r-u)*i.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-r)*i.multiplier/l),[y,f,!1,a]}}}function bm(i,e,t,n){let r=n?e-t:e+t,[o,s,a]=ym(i,r);if(!a)return[0,0,!1,a];if(o===s)return[i.DataElement[s].price,i.DataElement[s].x,!1,a];{let u=i.DataElement[o].x,c=i.DataElement[s].x,l=i.DataElement[o].price,m=i.DataElement[s].price,d=i.DataElement[o].y,p=i.DataElement[s].y;if(e>=p&&e<=d)return n?[m,c,!0,a]:[l,u,!0,a];{let y,f;return n?(y=l+(m-l)*(d-e)/(d-p),f=u+m*(d-r)/i.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(r-p)/i.multiplier),[y,f,!1,a]}}}function gm(i,e){let t=Ia(i,e,0,!1);return t[3]?t[0]:0}function Ba(i,e,t,n){let r=Oo(i,e,t),o=on(i,e,r),s=on(i,t,r),a=on(i,n,r),u=!0,[c,l,m,d]=Ia(i,o,a,u);if(!d)return 0;if(m)return n*i.multiplier/c;{let p=s-l;return Ta(i,p,r)}}function xa(i,e,t,n){let r=Oo(i,e,t),o=on(i,e,r),s=on(i,t,r),a=on(i,n,r),u=!1,[c,l,m,d]=bm(i,s,a,u);if(!d)return 0;if(m)return n*c/i.multiplier;{let p=o-l;return Ta(i,p,r)}}function wm(i){let e=cm.decode(i);return{accountType:e.accountType.toNumber(),status:e.status.toNumber(),multiplier:e.multiplier.toNumber(),validDataCount:e.validDataCount.toNumber(),DataElement:e.DataElement.map(t=>({x:t.x.toNumber(),y:t.y.toNumber(),price:t.price.toNumber()}))}}function Sa(i,e,t,n){let r=gm(i,on(i,e,Oo(i,e,t)))/i.multiplier;return n?r:1/r}var or=class{constructor({connection:e}){this._layoutData={accountType:0,status:0,multiplier:0,validDataCount:0,DataElement:[]};this.connection=e}get stableModelData(){return this._layoutData}async initStableModelLayout(){if(this._layoutData.validDataCount===0&&this.connection){let e=await this.connection.getAccountInfo(Kn);e&&(this._layoutData=wm(e==null?void 0:e.data))}}};var Ka=se("Raydium_liquidity_instruction");function Ca(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:o,fixedSide:s}=i,a=Buffer.alloc(Ro.span);Ro.encode({instruction:3,baseAmountIn:Z(r),quoteAmountIn:Z(o),fixedSide:s==="base"?ut:xs},a);let u=[k({pubkey:sr,isWritable:!1}),k({pubkey:new Rt(e.id)}),k({pubkey:new Rt(t.authority),isWritable:!1}),k({pubkey:new Rt(t.openOrders),isWritable:!1}),k({pubkey:new Rt(t.targetOrders)}),k({pubkey:new Rt(e.lpMint.address)}),k({pubkey:new Rt(t.vault.A)}),k({pubkey:new Rt(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(k({pubkey:Kn})),u.push(k({pubkey:new Rt(e.marketId),isWritable:!1}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:new Rt(t.marketEventQueue),isWritable:!1})),new Cn({programId:new Rt(e.programId),keys:u,data:a})}function No(i){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=i,o=Ee(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Lo.span);Lo.encode({instruction:4,amountIn:Z(r)},a);let u=[k({pubkey:sr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.mintLp.address}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return s===5?u.push(k({pubkey:Kn})):(u.push(k({pubkey:o.id})),u.push(k({pubkey:o.id}))),u.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:n.lpTokenAccount}),k({pubkey:n.baseTokenAccount}),k({pubkey:n.quoteTokenAccount}),k({pubkey:n.owner,isWritable:!1,isSigner:!0}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks})),new Cn({programId:o.programId,keys:u,data:a})}return new Cn({programId:o.programId,keys:[]})}function Ra({programId:i,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:r,coinMint:o,pcMint:s,coinVault:a,pcVault:u,withdrawQueue:c,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:y,userCoinVault:f,userPcVault:b,userLpVault:g,nonce:h,openTime:w,coinAmount:P,pcAmount:I,ammConfigId:T,feeDestinationId:S}){let x=V([W("instruction"),W("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),R=[{pubkey:sr,isSigner:!1,isWritable:!1},{pubkey:Am,isSigner:!1,isWritable:!1},{pubkey:hm.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:T,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],B=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:w,coinAmount:P,pcAmount:I},B),{instruction:new Cn({keys:R,programId:i,data:B}),instructionType:E.AmmV4CreatePool}}function Pm({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n},r){let o=Ee(i),s=Buffer.alloc(Ko.span);Ko.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[k({pubkey:sr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders})];return r===4&&a.push(k({pubkey:o.targetOrders})),a.push(k({pubkey:o.vault.A}),k({pubkey:o.vault.B})),r===5&&a.push(k({pubkey:Kn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1})),new Cn({programId:o.programId,keys:a,data:s})}function km({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n},r){let o=Ee(i),s=Buffer.alloc(Co.span);Co.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[k({pubkey:sr,isWritable:!1}),k({pubkey:o.id}),k({pubkey:o.authority,isWritable:!1}),k({pubkey:o.openOrders}),k({pubkey:o.targetOrders}),k({pubkey:o.vault.A}),k({pubkey:o.vault.B})];return r===5&&a.push(k({pubkey:Kn})),a.push(k({pubkey:o.marketProgramId,isWritable:!1}),k({pubkey:o.marketId}),k({pubkey:o.marketBids}),k({pubkey:o.marketAsks}),k({pubkey:o.marketEventQueue}),k({pubkey:o.marketBaseVault}),k({pubkey:o.marketQuoteVault}),k({pubkey:o.marketAuthority,isWritable:!1}),k({pubkey:e.tokenAccountIn}),k({pubkey:e.tokenAccountOut}),k({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Cn({programId:o.programId,keys:a,data:s})}function ai(i){let{poolKeys:e,version:t,userKeys:n,amountIn:r,amountOut:o,fixedSide:s}=i;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return Pm(F(C({},a),{amountIn:r,minAmountOut:o}),t);if(s==="out")return km(F(C({},a),{maxAmountIn:r,amountOut:o}),t);Ka.logWithError("invalid params","params",i)}throw Ka.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{ASSOCIATED_TOKEN_PROGRAM_ID as ja,TOKEN_2022_PROGRAM_ID as en,TOKEN_PROGRAM_ID as De}from"@solana/spl-token";import{Keypair as Wo,PublicKey as U,SystemProgram as pr,TransactionInstruction as xt}from"@solana/web3.js";import Ha from"bn.js";import Om from"bn.js";function ui(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function Mo(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function _o(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function ar(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function La(i,e){return ar(i,e)?null:Mo(i,e)}function Oa(i,e){return ar(i,e)?null:_o(i,e)}var wh=Buffer.from("amm_config","utf8"),Tm=Buffer.from("pool","utf8"),Im=Buffer.from("pool_vault","utf8"),Bm=Buffer.from("pool_reward_vault","utf8"),Na=Buffer.from("position","utf8"),xm=Buffer.from("tick_array","utf8"),Sm=Buffer.from("operation","utf8"),Km=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Cm=Buffer.from("observation","utf8");function Ma(i,e,t,n){return le([Tm,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function vo(i,e,t){return le([Im,e.toBuffer(),t.toBuffer()],i)}function _a(i,e,t){return le([Bm,e.toBuffer(),t.toBuffer()],i)}function ge(i,e,t){return le([xm,e.toBuffer(),ui(t)],i)}function an(i,e,t,n){return le([Na,e.toBuffer(),ui(t),ui(n)],i)}function mt(i,e){return le([Na,e.toBuffer()],i)}function ci(i){return le([Buffer.from("metadata","utf8"),Pn.toBuffer(),i.toBuffer()],Pn)}function ur(i){return le([Sm],i)}function nt(i,e){return le([Km,e.toBuffer()],i)}function va(i,e){return le([Cm,e.toBuffer()],i)}import dt from"bn.js";var Be=new dt(0),st=new dt(1),vt=new dt(-1),at=new dt(1).shln(64),li=new dt(1).shln(128),Vo=at.sub(st),cr=64,Va=li.subn(1),ze=-443636,Ze=-ze,pt=new dt("4295048016"),ft=new dt("79226673521066979257578248091"),mi=new dt("4295048017"),di=new dt("79226673521066979257578248090"),Ea=16,Fa="59543866431248",Da="184467440737095516",Wa="15793534762490258745",pi=new dt(10).pow(new dt(6));var qa={tvl:0,volumeQuote:0,mintAmountA:0,mintAmountB:0,rewardDefaultInfos:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,day:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},week:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},month:{volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[0]},pooltype:[]},Ph=new dt("18446744073700000000");var Rm=15,ae=class{static async getTickArrays(e,t,n,r,o,s,a){let u=[],c=Y.getTickArrayStartIndexByTick(r,o),l=Y.getInitializedTickArrayInRange(s,a,o,c,Math.floor(Rm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=ge(t,n,l[p]);u.push(y)}let m=(await At(e,u)).map(p=>p!==null?lr.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(C({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,r,o,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,r,o,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Y.getNextTickArrayStartIndex(c,o,s),this.checkIsValidStartIndex(c,o))throw new Error("No enough initialized tickArray");let l=n[c];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,u,c]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}}static nextInitializedTickArray(e,t,n,r,o){let s=Math.floor(e/ae.tickCount(t)),a=n?Y.searchLowBitFromStart(r,o,s-1,1,t):Y.searchHightBitFromStart(r,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,r){let o;if(r){let a=Ne-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a-1}}else{let a=0;for(;a<Ne;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=ge(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,o,s){let a=Y.getTickArrayStartIndexByTick(r,o),u=Math.floor((r-a)/o),c=n[a];if(c==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;u>=0;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u-1}else for(u=u+1;u<Ne;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=ge(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:c.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>Ze)return!1;let n=Y.getTickArrayStartIndexByTick(ze,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ne*e}};import oe from"bn.js";import{PublicKey as Bt}from"@solana/web3.js";import Ae from"bn.js";var Eo=14,Vt=class{static maxTickInTickarrayBitmap(e){return e*Ne*un}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(r+=1);let o=n*r;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,r){if(!ae.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=r?t-ae.tickCount(n):t+ae.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Ne,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(r){let l=e.shln(1024-c-1),m=La(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(c),m=Oa(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-ae.tickCount(n)}}}},mr=class{static getBitmapOffset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Vt.maxTickInTickarrayBitmap(t),r=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&r--,r}static getBitmap(e,t,n){let r=this.getBitmapOffset(e,t);return e<0?{offset:r,tickarrayBitmap:n.negativeTickArrayBitmap[r]}:{offset:r,tickarrayBitmap:n.positiveTickArrayBitmap[r]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:r}=this.extensionTickBoundary(t);if(e>=r&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;if(Ze<=t)throw Error(`extensionTickBoundary check error: ${Ze}, ${t}`);if(n<=ze)throw Error(`extensionTickBoundary check error: ${n}, ${ze}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:r}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(r).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let o=ae.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,r);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,r){let{minValue:o,maxValue:s}=Vt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=Y.mergeTickArrayBitmap(e).shln(un-1-a),c=ar(512,u)?null:Mo(512,u);if(c!==null){let l=t-c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=Y.mergeTickArrayBitmap(e).shrn(a),c=ar(512,u)?null:_o(512,u);if(c!==null){let l=t+c*ae.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-ae.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Vt.maxTickInTickarrayBitmap(t),r=Math.floor(n/ae.tickCount(t));return e<0&&n!=0&&(r=un-r),r}};import Lt from"bn.js";var dr=class{static getfeeGrowthInside(e,t,n){let r=new Lt(0),o=new Lt(0);e.tickCurrent>=t.tick?(r=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(r=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Lt(0),a=new Lt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let u=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=ne.wrappingSubU128(ne.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,r){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,at),u=t.tokenFeesOwedA.add(a),c=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,at),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,r){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,r),a=ne.mulDivFloor(ne.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,at),u=t.tokenFeesOwedA.add(a),c=ne.mulDivFloor(ne.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,at),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,r){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ne.wrappingSubU128(u,c.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,at),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,r){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,r,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ne.wrappingSubU128(u,c.growthInsideLastX64),m=ne.mulDivFloor(l,t.liquidity,at),d=c.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,r){let o=[];for(let s=0;s<r.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return o}static getRewardGrowthInsideV2(e,t,n,r){let o=[];for(let s=0;s<r.length;s++){let a=new Lt(0);t.liquidityGross.eqn(0)?a=r[s].rewardGrowthGlobalX64:e<t.tick?a=r[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Lt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(ne.wrappingSubU128(ne.wrappingSubU128(r[s].rewardGrowthGlobalX64,a),u))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:r,add:o,epochInfo:s}){var b,g,h,w;let a=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),u=te.getSqrtPriceX64FromTick(t.tickLower),c=te.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+r:1-r,m=ce.getAmountsFromLiquidity(a,u,c,n,o),[d,p]=[be(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),be(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[be(new Lt(new L(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),be(new Lt(new L(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:kt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as Ua}from"@solana/spl-token";var xe=class{static getOutputAmountAndRemainAccounts(e,t,n,r,o,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,l,o,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(vt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,r,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");try{let f=this.preInitializedTickArrayStartIndex(e,s);if(f.isExist){let{publicKey:b}=ge(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=cn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(vt),c,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=xe.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?mr.checkTickArrayIsInit(ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=ge(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=ge(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/ae.tickCount(e.tickSpacing)),r=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return r.length>0?{isExist:!0,nextStartIndex:r[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=ae.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:o}=Vt.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=mr.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<ze||t>Ze)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:r,rewardInfos:o}){var a,u,c;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(C({},m),{perSecond:ne.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Bt(d)});if(p.tokenMint.equals(Bt.default))continue;if(n<=p.openTime.toNumber()||r.eq(Be)){s.push(p);continue}let y=new Ae(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ne.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=ne.mulDivFloor(f,p.emissionsPerSecondX64,at),w=p.rewardTotalEmissioned.add(h);s.push(F(C({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let o of t){let s=Y.getTickArrayStartIndexByTick(o,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=Vt.maxTickInTickarrayBitmap(e),n=-t;return t>Ze&&(t=ae.getArrayStartIndex(Ze,e)+ae.tickCount(e)),n<ze&&(n=ae.getArrayStartIndex(ze,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!ae.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/ae.tickCount(t)*un}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await Me(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of r)s.accountInfo!==null&&(o[s.pubkey.toString()]=Xa.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let r={},o=[];for(let u of t){let c=Y.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Y.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=ge(u.programId,u.id,m);o.push({pubkey:d}),r[d.toString()]=u.id}}let s=await Me(e,o,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=r[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=lr.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=F(C({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:r=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let u=0;u<e.length;u++){let c=e[u];c!==null&&(s.find(l=>l.equals(c.state.programId))||s.push(c.state.programId))}if(n){let u=n.tokenAccounts.map(d=>d.accountInfo.mint),c=[];for(let d of u)for(let p of s)c.push(mt(p,d).publicKey);let l=await At(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=fi.decode(d.data),y=p.poolId.toString(),f=e.find(x=>x.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=Y._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:P}=ce.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(h.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:h.price,amountA:w,amountB:P,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(x=>F(C({},x),{pendingReward:new Ae(0)})),leverage:I,tokenFeeAmountA:new Ae(0),tokenFeeAmountB:new Ae(0)}];let T=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Y.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=T,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(o){let d=Object.values(m),p=await At(t,d,{batchRequest:r}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=lr.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let h=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,P=y[m[h].toString()],I=y[m[w].toString()],T=P.ticks[Y.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[Y.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:R}=await dr.GetPositionFees(f,g,T,S),B=await dr.GetPositionRewards(f,g,T,S);g.tokenFeeAmountA=x.gte(new Ae(0))?x:new Ae(0),g.tokenFeeAmountB=R.gte(new Ae(0))?R:new Ae(0);for(let O=0;O<B.length;O++)g.rewardInfos[O].pendingReward=B[O].gte(new Ae(0))?B[O]:new Ae(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:o,slippage:s,priceLimit:a=new L(0),catchLiquidityInsufficient:u=!1}){var D;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new L(0))?c=l?pt.add(new Ae(1)):ft.sub(new Ae(1)):c=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=be(o,m,r,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:h}=xe.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:Be),c,u),w=be(f,d,r,!1),P=te.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?P:new L(1).div(P),T=f.mul(new Ae(Math.floor((1-s)*1e10))).div(new Ae(1e10)),S=be(T,d,r,!1),x=l?e.currentPrice:new L(1).div(e.currentPrice),R=new L(I).sub(x).abs(),B=x,O=new Ue(new L(R).mul(10**15).toFixed(0),new L(B).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:kt(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:O,fee:h,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:o,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=r.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Pe(F(C({},c),{mint:c.address,isToken2022:c.programId===Ua.toBase58()})),new Pe(F(C({},l),{mint:l.address,isToken2022:l.programId===Ua.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:h,executionPrice:w,priceImpact:P,fee:I,remainingAccounts:T,executionPriceX64:S}=xe.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Bt(c.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),x=F(C({},y),{amount:new ye(m,y.amount),fee:y.fee===void 0?void 0:new ye(m,y.fee)}),R=F(C({},f),{amount:new ye(d,f.amount),fee:f.fee===void 0?void 0:new ye(d,f.fee)}),B=F(C({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),O=new Je({baseToken:m,denominator:new Ae(10).pow(new Ae(20+m.decimals)),quoteToken:d,numerator:h.mul(new L(10**(20+d.decimals))).toFixed(0)}),D=new Je({baseToken:m,denominator:new Ae(10).pow(new Ae(20+m.decimals)),quoteToken:d,numerator:w.mul(new L(10**(20+d.decimals))).toFixed(0)}),v=new ye(m,I);return{allTrade:p,realAmountIn:x,amountOut:R,minAmountOut:B,expirationTime:g,currentPrice:O,executionPrice:D,priceImpact:P,fee:v,remainingAccounts:T,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountOut:o,slippage:s,priceLimit:a=new L(0)}){var B;let u=n.toBase58()===e.mintA.address,c={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new L(0))?l=u?ft.sub(new Ae(1)):pt.add(new Ae(1)):l=te.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=be(o,c[n.toString()],r,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=xe.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((B=m.fee)!=null?B:Be),l),b=u?e.mintB.address:e.mintA.address,g=be(d,c[b],r,!1),h=te.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),w=u?h:new L(1).div(h),P=d.mul(new Ae(Math.floor((1+s)*1e10))).div(new Ae(1e10)),I=be(P,c[b],r,!0),T=u?e.currentPrice:new L(1).div(e.currentPrice),S=new L(w).sub(T).abs(),x=T,R=new Ue(new L(S).mul(10**15).toFixed(0),new L(x).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:kt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:R,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let o=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:r,baseIn:!0}).price.toNumber(),u=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-u,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[((y=o.rewardApr[0])!=null?y:0)*p,((f=o.rewardApr[1])!=null?f:0)*p,((b=o.rewardApr[2])!=null?b:0)*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:r,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=r[it(e.mintA.address).toString()],d=r[it(e.mintB.address).toString()],p=e.mintA.decimals,y=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let f=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),b=te.getSqrtPriceX64FromTick(s),g=te.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:w}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:P,amountSlippageB:I}=ce.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),T=new L(h.toString()).div(new L(10).pow(p)).mul(m.value).add(new L(w.toString()).div(new L(10).pow(y)).mul(d.value)),S=new L(P.toString()).div(new L(10).pow(p)).mul(m.value).add(new L(I.toString()).div(new L(10).pow(y)).mul(d.value)),x=new L(1).div(T.add(S)),B=new L(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),O=3600*24*365,D=e.rewardDefaultInfos.map(v=>{var q,je;let j=v.mint.decimals,G=r[v.mint.address];return u<((q=v.startTime)!=null?q:0)||u>((je=v.endTime)!=null?je:0)||!v.perSecond||!G||j===void 0?0:new L(G.value).mul(new L(v.perSecond).mul(O)).div(new L(10).pow(j)).mul(x).mul(100).toNumber()});return{feeApr:B,rewardsApr:D,apr:B+D.reduce((v,j)=>v+j,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:r,amount:o,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,h;let l=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),m=te.getSqrtPriceX64FromTick(n),d=te.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=be(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Ae(new L(y.amount.sub((h=y.fee)!=null?h:Be).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ce.getLiquidityFromTokenAmountA(m,d,f,!a):new Ae(0);else if(l.lte(d)){let w=ce.getLiquidityFromTokenAmountA(l,d,f,!a),P=ce.getLiquidityFromTokenAmountB(m,l,f);b=t?w:P}else b=t?new Ae(0):ce.getLiquidityFromTokenAmountB(m,d,f);return xe.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:r,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:r,liquidity:o,slippage:s,add:a}){var b,g,h,w;let u=te.getSqrtPriceX64FromTick(n),c=te.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ce.getAmountsFromLiquidity(te.priceToSqrtPriceX64(new L(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[d,p]=[be(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),be(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[be(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),be(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:kt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let r=t.filter(u=>!n[u.id]).map(u=>new Bt(u.id));(await At(e,r)).forEach((u,c)=>{!u||(n[r[c].toBase58()]=ln.decode(u.data))});let s=t.map(u=>nt(new Bt(u.programId),new Bt(u.id)).publicKey),a=await xe.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>F(C({},u),{[c.id]:F(C({},n[c.id]),{id:new Bt(c.id),version:6,programId:new Bt(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:F(C({},c.config),{id:new Bt(c.config.id),fundOwner:""}),currentPrice:new L(c.price),exBitmapInfo:a[nt(new Bt(c.programId),new Bt(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber()})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Fo={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function Ga(i){return F(C({},i),{type:"Concentrated",programId:i.programId.toString(),id:i.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:i.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:i.ammConfig.tradeFeeRate,openTime:i.startTime.toString(),tvl:0,day:Fo,week:Fo,month:Fo,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,config:F(C({},i.ammConfig),{id:i.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ne=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),o=r.div(n);return r.mod(n).eq(Be)||(o=o.add(st)),o}static mulDivFloor(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Be))throw new Error("division by 0");return e.mul(t).add(n.sub(st)).div(n)}static x64ToDecimal(e,t){return new L(e.toString()).div(L.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new oe(e.mul(L.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(li).sub(t).mod(li)}};function _e(i,e){return Do(i.mul(e),64,256)}function Lm(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function Do(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var te=class{static sqrtPriceX64ToPrice(e,t,n){return ne.x64ToDecimal(e).pow(2).mul(L.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ne.decimalToX64(e.mul(L.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,r){if(!e.gt(Be))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Be))throw new Error("liquidity must greater than 0");return r?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,r){if(n.eq(Be))return e;let o=t.shln(cr);if(r){let s=o,a=o.add(n.mul(e));return a.gte(s)?ne.mulDivCeil(s,e,a):ne.mulDivRoundingUp(s,st,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return ne.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let o=n.shln(cr);if(r)return e.add(o.div(t));{let s=ne.mulDivRoundingUp(o,st,t);if(!e.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountBRoundingDown sqrtPriceX64 must gt amountDivLiquidity");return e.sub(s)}}static getSqrtPriceX64FromTick(e){if(!Number.isInteger(e))throw new Error("tick must be integer");if(e<ze||e>Ze)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new oe("18445821805675395072"):new oe("18446744073709551616");return(t&2)!=0&&(n=_e(n,new oe("18444899583751176192"))),(t&4)!=0&&(n=_e(n,new oe("18443055278223355904"))),(t&8)!=0&&(n=_e(n,new oe("18439367220385607680"))),(t&16)!=0&&(n=_e(n,new oe("18431993317065453568"))),(t&32)!=0&&(n=_e(n,new oe("18417254355718170624"))),(t&64)!=0&&(n=_e(n,new oe("18387811781193609216"))),(t&128)!=0&&(n=_e(n,new oe("18329067761203558400"))),(t&256)!=0&&(n=_e(n,new oe("18212142134806163456"))),(t&512)!=0&&(n=_e(n,new oe("17980523815641700352"))),(t&1024)!=0&&(n=_e(n,new oe("17526086738831433728"))),(t&2048)!=0&&(n=_e(n,new oe("16651378430235570176"))),(t&4096)!=0&&(n=_e(n,new oe("15030750278694412288"))),(t&8192)!=0&&(n=_e(n,new oe("12247334978884435968"))),(t&16384)!=0&&(n=_e(n,new oe("8131365268886854656"))),(t&32768)!=0&&(n=_e(n,new oe("3584323654725218816"))),(t&65536)!=0&&(n=_e(n,new oe("696457651848324352"))),(t&131072)!=0&&(n=_e(n,new oe("26294789957507116"))),(t&262144)!=0&&(n=_e(n,new oe("37481735321082"))),e>0&&(n=Va.div(n)),n}static getTickFromPrice(e,t,n){return te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(ft)||e.lt(pt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new oe(t-64),r=Lm(n,32,128),o=new oe("8000000000000000","hex"),s=0,a=new oe(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new oe(0))&&s<Ea;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(o.mul(y)),o=o.shrn(1),s+=1}let c=a.shrn(32),m=r.add(c).mul(new oe(Fa)),d=Do(m.sub(new oe(Da)),64,128).toNumber(),p=Do(m.add(new oe(Wa)),64,128).toNumber();return d==p?d:te.getSqrtPriceX64FromTick(p).lte(e)?p:d}},mn=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=te.getTickFromSqrtPriceX64(te.priceToSqrtPriceX64(e,n,r))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,r){let o=mn.getTickWithPriceAndTickspacing(e,t,n,r),s=te.getSqrtPriceX64FromTick(o);return te.sqrtPriceX64ToPrice(s,n,r)}},ce=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(cr),s=t.sub(e);return r?ne.mulDivRoundingUp(ne.mulDivCeil(o,s,t),st,e):ne.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Be))throw new Error("sqrtPriceX64A must greater than 0");return r?ne.mulDivCeil(n,t.sub(e),at):ne.mulDivFloor(n,t.sub(e),at)}static getLiquidityFromTokenAmountA(e,t,n,r){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return r?ne.mulDivRoundingUp(a,st,Vo):a.shrn(cr)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ne.mulDivFloor(n,Vo,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ce.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ce.getLiquidityFromTokenAmountA(e,n,r,!1),a=ce.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ce.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ce.getTokenAmountAFromLiquidity(t,n,r,o),amountB:new oe(0)};if(e.lt(n)){let s=ce.getTokenAmountAFromLiquidity(e,n,r,o),a=ce.getTokenAmountBFromLiquidity(t,e,r,o);return{amountA:s,amountB:a}}else return{amountA:new oe(0),amountB:ce.getTokenAmountBFromLiquidity(t,n,r,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,o,s,a){let{amountA:u,amountB:c}=ce.getAmountsFromLiquidity(e,t,n,r,s),l=o?1+a:1-a,m=new oe(new L(u.toString()).mul(l).toFixed(0)),d=new oe(new L(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:r,slippage:o,add:s,epochInfo:a,amountAddFee:u}){var h,w,P,I;let c=te.priceToSqrtPriceX64(new L(e.price),e.mintA.decimals,e.mintB.decimals),l=te.getSqrtPriceX64FromTick(t),m=te.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=ce.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[be(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),be(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,u)],[b,g]=[be(new oe(new L(p.amountA.toString()).mul(d).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,u),be(new oe(new L(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:kt(y.expirationTime,f.expirationTime)}}},cn=class{static swapCompute(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(Be))throw new Error("amountSpecified must not be 0");if(y||(y=s?pt.add(st):ft.sub(st)),s){if(y.lt(pt))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(y.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(y.gt(ft))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(Be),g={amountSpecifiedRemaining:d,amountCalculated:Be,sqrtPriceX64:m,tick:c>p?Math.min(p+ae.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new oe(0)},h=p,w=n[p],P=0,I=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Be)&&!g.sqrtPriceX64.eq(y);){P>10;let T={};T.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(w,g.tick,l,s,I),x=S||null,R=null;if(!(x!=null&&x.liquidityGross.gtn(0))){let O=xe.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:o},h,s);if(!O.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}h=O.nextStartIndex;let{publicKey:D}=ge(e,t,h);R=D,w=n[h];try{x=Y.firstInitializedTick(w,s)}catch{throw Error("not found next tick info")}}T.tickNext=x.tick,T.initialized=x.liquidityGross.gtn(0),p!==h&&R&&(g.accounts.push(R),p=h),T.tickNext<ze?T.tickNext=ze:T.tickNext>Ze&&(T.tickNext=Ze),T.sqrtPriceNextX64=te.getSqrtPriceX64FromTick(T.tickNext);let B;if(s&&T.sqrtPriceNextX64.lt(y)||!s&&T.sqrtPriceNextX64.gt(y)?B=y:B=T.sqrtPriceNextX64,[g.sqrtPriceX64,T.amountIn,T.amountOut,T.feeAmount]=cn.swapStepCompute(g.sqrtPriceX64,B,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(T.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(T.amountIn.add(T.feeAmount)),g.amountCalculated=g.amountCalculated.sub(T.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(T.amountOut),g.amountCalculated=g.amountCalculated.add(T.amountIn.add(T.feeAmount))),g.sqrtPriceX64.eq(T.sqrtPriceNextX64)){if(T.initialized){let O=x.liquidityNet;s&&(O=O.mul(vt)),g.liquidity=ce.addDelta(g.liquidity,O)}I=T.tickNext!=g.tick&&!s&&w.startTickIndex===T.tickNext,g.tick=s?T.tickNext-1:T.tickNext}else if(g.sqrtPriceX64!=T.sqrtPriceStartX64){let O=te.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=O!=g.tick&&!s&&w.startTickIndex===O,g.tick=O}++P}try{let{nextStartIndex:T,isExist:S}=ae.nextInitializedTickArray(g.tick,l,s,r,o);S&&p!==T&&(g.accounts.push(ge(e,t,T).publicKey),p=T)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Be,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,r,o){let s={sqrtPriceX64Next:new oe(0),amountIn:new oe(0),amountOut:new oe(0),feeAmount:new oe(0)},a=e.gte(t),u=r.gte(Be);if(u){let l=ne.mulDivFloor(r,pi.sub(new oe(o.toString())),pi);s.amountIn=a?ce.getTokenAmountAFromLiquidity(t,e,n,!0):ce.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ce.getTokenAmountBFromLiquidity(t,e,n,!1):ce.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(vt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=te.getNextSqrtPriceX64FromOutput(e,n,r.mul(vt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ce.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ce.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ce.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ce.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(vt))&&(s.amountOut=r.mul(vt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=ne.mulDivCeil(s.amountIn,new oe(o),pi.sub(new oe(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ne=60,un=512,Y=class{static getTickArrayAddressByTick(e,t,n,r){let o=Y.getTickArrayStartIndexByTick(n,r),{publicKey:s}=ge(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Ne)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=ae.tickCount(t),r=e/n;return e<0&&e%n!=0?r=Math.ceil(r)-1:r=Math.floor(r),r}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*ae.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ne,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Ne,o=Math.floor(t/r)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*r}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Ne:e+t*Ne}static mergeTickArrayBitmap(e){let t=new Om(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,r,o){let s=Math.floor(r/(n*Ne));return[...Y.searchLowBitFromStart(e,t,s-1,o,n),...Y.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,un,n)}static getAllInitializedTickArrayInfo(e,t,n,r,o){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,r,o);for(let u of a){let{publicKey:c}=ge(e,t,u);s.push({tickArrayStartIndex:u,tickArrayAddress:c})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,r,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Y.mergeTickArrayBitmap(c)),a=[];for(;n>=-7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n--,a.length===r)break}let u=ae.tickCount(o);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,r,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Y.mergeTickArrayBitmap(c)),a=[];for(;n<7680;){let c=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[c].testn(l)&&a.push(n),n++,a.length===r)break}let u=ae.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<ze||e>Ze}static nextInitTick(e,t,n,r,o){if(ae.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(r)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(o||(a=a+1);a<Ne;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ne-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ne;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n+1}}throw Error(`firstInitializedTick check error: ${e} - ${t}`)}static _getTickPriceLegacy({poolInfo:e,tick:t,baseIn:n}){let r=te.getSqrtPriceX64FromTick(t),o=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new L(1).div(o),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new L(1).div(t),o=mn.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(o),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new L(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=te.getSqrtPriceX64FromTick(t),o=te.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new L(1).div(o),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new L(1).div(t),o=mn.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=te.getSqrtPriceX64FromTick(o),a=te.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new L(1).div(a)}}};var za=V([pe(8),W("bump"),Mt("index"),K(""),Ge("protocolFeeRate"),Ge("tradeFeeRate"),Mt("tickSpacing"),X(A(),8,"")]),Nm=V([Ge("blockTimestamp"),In("tickCumulative"),X(A(),4)]),Qa=V([pe(8),Xe("initialized"),A("recentEpoch"),Mt("observationIndex"),K("poolId"),X(Nm,100,"observations"),X(A(),4)]),Mm=V([W("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),$("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),$("rewardGrowthGlobalX64")]),ln=V([pe(8),W("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),W("mintDecimalsA"),W("mintDecimalsB"),Mt("tickSpacing"),$("liquidity"),$("sqrtPriceX64"),Fe("tickCurrent"),Ge(),$("feeGrowthGlobalX64A"),$("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),$("swapInAmountTokenA"),$("swapOutAmountTokenB"),$("swapInAmountTokenB"),$("swapOutAmountTokenA"),W("status"),X(W(),7,""),X(Mm,3,"rewardInfos"),X(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),X(A(),15*4-3,"padding")]),_m=V([$("growthInsideLastX64"),A("rewardAmountOwed")]),fi=V([pe(8),W("bump"),K("nftMint"),K("poolId"),Fe("tickLower"),Fe("tickUpper"),$("liquidity"),$("feeGrowthInsideLastX64A"),$("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),X(_m,3,"rewardInfos"),X(A(),8,"")]),CP=V([pe(8),W("bump"),K("poolId"),Fe("tickLowerIndex"),Fe("tickUpperIndex"),$("liquidity"),$("feeGrowthInsideLastX64A"),$("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),X($(),3,"rewardGrowthInside"),X(A(),8,"")]),vm=V([Fe("tick"),Js("liquidityNet"),$("liquidityGross"),$("feeGrowthOutsideX64A"),$("feeGrowthOutsideX64B"),X($(),3,"rewardGrowthsOutsideX64"),X(Ge(),13,"")]),lr=V([pe(8),K("poolId"),Fe("startTickIndex"),X(vm,Ne,"ticks"),W("initializedTickCount"),X(W(),115,"")]),Ya=V([pe(329),X(K(),100,"whitelistMints")]),Xa=V([pe(8),K("poolId"),X(X(A(),8),Eo,"positiveTickArrayBitmap"),X(X(A(),8),Eo,"negativeTickArrayBitmap")]);Qa.span;var Za=se("Raydium_Clmm"),St={createPool:[233,146,209,142,207,104,64,188],initReward:[95,135,192,196,242,129,230,68],setRewardEmissions:[112,52,167,75,32,201,211,137],openPosition:[77,184,74,214,112,86,241,199],closePosition:[123,134,81,0,49,68,98,98],increaseLiquidity:[133,29,89,223,69,238,176,10],decreaseLiquidity:[58,127,188,62,79,82,196,96],swap:[43,4,237,11,26,201,30,98],collectReward:[18,237,166,197,34,16,213,144]},Te=class{static createPoolInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=V([$("sqrtPriceX64"),A("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...St.createPool,...g]);return new xt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:r,mintB:o,ammConfigId:s,initialPriceX64:a,startTime:u}=e,[c,l]=[new U(r.address),new U(o.address)],{publicKey:m}=Ma(t,s,c,l),{publicKey:d}=va(t,m),{publicKey:p}=vo(t,m,c),{publicKey:y}=vo(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,c,p,new U(r.programId||De),l,y,new U(o.programId||De),nt(t,m).publicKey,a,u)];return{signers:[],instructions:f,instructionTypes:[E.CreateAccount,E.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w,P,I,T,S,x,R,B){let O=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),$("liquidity"),A("amountMaxA"),A("amountMaxB"),Xe("withMetadata"),W("optionBaseFlag"),Xe("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:ja,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],j=Buffer.alloc(O.span);O.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:I,liquidity:T,amountMaxA:S,amountMaxB:x,withMetadata:R==="create",baseFlag:!1,optionBaseFlag:0},j);let G=Buffer.from([...St.openPosition,...j]);return new xt({keys:v,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Wo.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(d,p,f),{publicKey:h}=ge(d,p,b),{publicKey:w}=ke(n.wallet,y,De),{publicKey:P}=ci(y),{publicKey:I}=mt(d,y),{publicKey:T}=an(d,p,r,o),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,w,P,T,g,h,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,o,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:P,personalPosition:I,protocolPosition:T}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new U(e.programId),new U(e.id)],y;if(l)y=new U((await l(1))[0]);else{let x=Wo.generate();m.push(x),y=x.publicKey}let f=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(d,p,f),{publicKey:h}=ge(d,p,b),{publicKey:w}=ke(n.wallet,y,De),{publicKey:P}=ci(y),{publicKey:I}=mt(d,y),{publicKey:T}=an(d,p,r,o),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,w,P,T,g,h,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),r,o,f,b,c,s,a,u,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?nt(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:P,personalPosition:I,protocolPosition:T},instructions:[S],signers:m,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w,P,I,T,S,x,R,B){let O=V([Fe("tickLowerIndex"),Fe("tickUpperIndex"),Fe("tickArrayLowerStartIndex"),Fe("tickArrayUpperStartIndex"),$("liquidity"),A("amountMaxA"),A("amountMaxB"),Xe("withMetadata"),W("optionBaseFlag"),Xe("baseFlag")]),D=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:wt,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:ja,isSigner:!1,isWritable:!1},{pubkey:Pn,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],j=Buffer.alloc(O.span);O.encode({tickLowerIndex:h,tickUpperIndex:w,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:I,liquidity:new Ha(0),amountMaxA:S==="MintA"?x:R,amountMaxB:S==="MintA"?R:x,withMetadata:T==="create",baseFlag:S==="MintA",optionBaseFlag:1},j);let G=Buffer.from([...St.openPosition,...j]);return new xt({keys:v,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new U((await l(1))[0]);else{let x=Wo.generate();d.push(x),m=x.publicKey}let[p,y]=[new U(e.programId),new U(e.id)],f=Y.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=ge(p,y,f),{publicKey:h}=ge(p,y,b),{publicKey:w}=ke(n.wallet,m,De),{publicKey:P}=ci(m),{publicKey:I}=mt(p,m),{publicKey:T}=an(p,y,r,o),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,w,P,T,g,h,I,n.tokenAccountA,n.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(t.mintA.address),new U(t.mintB.address),r,o,f,b,s,a,u,c,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?nt(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:w,metadataAccount:P,personalPosition:I,protocolPosition:T},instructions:[S],signers:d,instructionTypes:[E.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,o){let s=V([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...St.closePosition,...u]);return new xt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let o=new U(e.programId),{publicKey:s}=ke(n.wallet,r.nftMint,De),{publicKey:a}=mt(o,r.nftMint),u=[];return u.push(this.closePositionInstruction(o,n.wallet,r.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[E.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h){let w=V([$("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Xe("baseFlag")]),P=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...P],T=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ge(u,c,l),{publicKey:p}=ge(u,c,m),{publicKey:y}=ke(r.wallet,n.nftMint,De),{publicKey:f}=mt(u,n.nftMint),{publicKey:b}=an(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?nt(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,base:o,baseAmount:s,otherAmountMax:a}){let[u,c]=[new U(e.programId),new U(e.id)],l=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=ge(u,c,l),{publicKey:p}=ge(u,c,m),{publicKey:y}=ke(r.wallet,n.nftMint,De),{publicKey:f}=mt(u,n.nftMint),{publicKey:b}=an(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),o,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?nt(u,c).publicKey:void 0)],signers:[],instructionTypes:[E.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h){let w=V([$("liquidity"),A("amountMaxA"),A("amountMaxB"),W("optionBaseFlag"),Xe("baseFlag")]),P=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...P],T=Buffer.alloc(w.span);w.encode({liquidity:new Ha(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},T);let S=Buffer.from([...St.increaseLiquidity,...T]);return new xt({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w){let P=V([$("liquidity"),A("amountMinA"),A("amountMinB")]),I=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[],...f.map(R=>[{pubkey:R.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:R.rewardMint,isSigner:!1,isWritable:!1}]).flat()],T=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:_r,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(P.span);P.encode({liquidity:b,amountMinA:g,amountMinB:h},S);let x=Buffer.from([...St.decreaseLiquidity,...S]);return new xt({keys:T,programId:e,data:x})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:o,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new U(e.programId),new U(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=ge(c,l,m),{publicKey:y}=ge(c,l,d),{publicKey:f}=ke(r.wallet,n.nftMint,u),{publicKey:b}=mt(c,n.nftMint),{publicKey:g}=an(c,l,n.tickLower,n.tickUpper),h=[];for(let P=0;P<e.rewardDefaultInfos.length;P++)h.push({poolRewardVault:new U(t.rewardInfos[P].vault),ownerRewardVault:r.rewardAccounts[P],rewardMint:new U(e.rewardDefaultInfos[P].mint.address)});let w=[];return w.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new U(t.vault.A),new U(t.vault.B),new U(e.mintA.address),new U(e.mintB.address),h,o,s,a,xe.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?nt(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[E.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g){let h=V([A("amount"),A("otherAmountThreshold"),$("sqrtPriceLimitX64"),Xe("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:_r,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],I=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let T=Buffer.from([...St.swap,...I]);return new xt({keys:P,programId:e,data:T})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===o.toString(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountA:r.tokenAccountB,b?r.tokenAccountB:r.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,nt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:r,outputMint:o,amountOut:s,amountInMax:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new U(e.programId),new U(e.id)],[d,p]=[new U(t.vault.A),new U(t.vault.B)],[y,f]=[new U(e.mintA.address),new U(e.mintB.address)],b=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,r.wallet,m,new U(e.config.id),b?r.tokenAccountB:r.tokenAccountA,b?r.tokenAccountA:r.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,c,n,s,a,u,!1,nt(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[E.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=V([A("openTime"),A("endTime"),$("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:pr.programId,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...St.initReward,...f]);return new xt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new U(e.programId),new U(e.id)],a=_a(o,s,r.mint).publicKey,u=ur(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new U(e.config.id),n.tokenAccount,r.programId,r.mint,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[E.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=V([W("rewardIndex"),$("emissionsPerSecondX64"),A("openTime"),A("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...St.setRewardEmissions,...f]);return new xt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new U(e.programId),new U(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===r.mint.toString()&&(a=d,u=new U(t.rewardInfos[d].vault),c=new U(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&Za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=ur(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new U(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[E.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,o,s,a){let u=V([W("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:De,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:_r,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...St.collectReward,...l]);return new xt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[o,s]=[new U(e.programId),new U(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new U(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&Za.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,u,r,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[E.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}};import{PublicKey as Fm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Dm}from"@solana/spl-token";import{PublicKey as Vm}from"@solana/web3.js";import $a from"bn.js";var qo=new $a(25),yi=new $a(1e4);var Em=se("Raydium_liquidity_serum");function Ja({programId:i,marketId:e}){let t=[e.toBuffer()],n=0,r;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));r=Vm.createProgramAddressSync(o,i)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:r,nonce:n}}throw Em.logWithError("unable to find a viable program address nonce","params",{programId:i,marketId:e}),new Error("unable to find a viable program address nonce")}import lk from"bn.js";function bi({programId:i}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function dn({name:i,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function Wm({programId:i,marketId:e}){let{publicKey:t}=le([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function Go({programId:i}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function eu({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=dn({name:"amm_associated_seed",programId:a,marketId:t}),l=dn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Go({programId:a}),p=dn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=dn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=dn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Wm({programId:a,marketId:t}),g=dn({name:"target_associated_seed",programId:a,marketId:t}),h=dn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=Ja({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:r,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:i,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:h,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:w,lookupTableAccount:Fm.default,configId:bi({programId:a})}}var Uo={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},gi=i=>{let e={},t=Dm.toBase58();return Object.keys(i).map(n=>{let r=i[n],[o,s]=[r.baseMint.toBase58(),r.quoteMint.toBase58()];e[n]={id:n,version:4,status:r.status.toNumber(),programId:r.programId.toBase58(),mintA:He({address:o,programId:t,decimals:r.baseDecimal.toNumber()}),mintB:He({address:s,programId:t,decimals:r.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:r.poolPrice.toNumber(),mintAmountA:new L(r.mintAAmount.toString()).div(10**r.baseDecimal.toNumber()).toNumber(),mintAmountB:new L(r.mintBAmount.toString()).div(10**r.quoteDecimal.toNumber()).toNumber(),baseReserve:r.baseReserve,quoteReserve:r.quoteReserve,feeRate:new L(r.tradeFeeNumerator.toString()).div(r.tradeFeeDenominator.toString()).toNumber(),openTime:r.poolOpenTime.toString(),tvl:0,day:Uo,week:Uo,month:Uo,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:r.marketId.toBase58(),configId:bi({programId:r.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:He({address:r.lpMint.toBase58(),programId:t,decimals:Math.min(r.baseDecimal.toNumber(),r.quoteDecimal.toNumber())})}}),e};import We from"bn.js";var fr=class extends Ie{constructor(t){super(t);this.stableLayout=new or({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:r,baseIn:o}){let s=new We(new L(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=oi(t[o?"mintB":"mintA"]),[u,c]=[new We(new L(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new We(new L(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new We(new L(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,L.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${r.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=ut;s.isZero()||(d=m==="base"?Dr(s.mul(c),u):Dr(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Dr(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let f=new Ue(new We(1)).add(r).mul(d).quotient,b=new ye(a,d),g=new ye(a,f);return this.logDebug("anotherAmount:",b.toFixed(),"maxAnotherAmount:",g.toFixed()),{anotherAmount:b,maxAnotherAmount:g,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:r,amountInA:o,amountInB:s,fixedSide:a,config:u,txVersion:c,computeBudgetConfig:l}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",o,"amountInB:",s),(o.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:o.toFixed(),amountInB:s.toFixed()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[y,f]=[o.token,s.token],b=await m.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1}),g=await m.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1});!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let h=await m.getCreatedTokenAccount({mint:new Qe(n.lpMint.address)}),w=[y,f],P=[b,g],I=[o.raw,s.raw],T=o.token.mint.toBase58()===n.mintA.address?"base":"quote",S="base";["quote","base"].includes(T)||this.logAndCreateError("invalid fixedSide","fixedSide",a),T==="quote"?(w.reverse(),P.reverse(),I.reverse(),S=a==="a"?"quote":"base"):T==="base"&&(S=a==="a"?"base":"quote");let[x,R]=w,[B,O]=P,[D,v]=I,j=r!=null?r:await this.getAmmPoolKeys(n.id),G=this.createTxBuilder(),Ot=await m.handleTokenAccount({side:"in",amount:D,mint:x.mint,tokenAccount:B,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:q}=Ot,je=Ke(Ot,["tokenAccount"]);G.addInstruction(je);let wn=await m.handleTokenAccount({side:"in",amount:v,mint:R.mint,tokenAccount:O,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:bn}=wn,tn=Ke(wn,["tokenAccount"]);G.addInstruction(tn);let xr=await m.handleTokenAccount({side:"out",amount:0,mint:new Qe(n.lpMint.address),tokenAccount:h,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:Dt}=xr,gn=Ke(xr,["tokenAccount"]);return G.addInstruction(gn),G.addInstruction({instructions:[Ca({poolInfo:n,poolKeys:j,userKeys:{baseTokenAccount:q,quoteTokenAccount:bn,lpTokenAccount:Dt,owner:this.scope.ownerPubKey},baseAmountIn:D,quoteAmountIn:v,fixedSide:S})],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5AddLiquidity:E.AmmV4AddLiquidity],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),G.addCustomComputeBudget(l),c===0&&await G.buildV0(),G.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:r,amountIn:o,config:s,txVersion:a,computeBudgetConfig:u}=t,c=r!=null?r:await this.getAmmPoolKeys(n.id),[l,m,d]=[new Qe(n.mintA.address),new Qe(n.mintB.address),new Qe(n.lpMint.address)];this.logDebug("amountIn:",o),o.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",o.toString());let{account:p}=this.scope,y=await p.getCreatedTokenAccount({mint:d,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",p.tokenAccounts);let f=await p.getCreatedTokenAccount({mint:l}),b=await p.getCreatedTokenAccount({mint:m}),g=this.createTxBuilder(),{bypassAssociatedCheck:h,checkCreateATAOwner:w}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},s),x=await p.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:h,checkCreateATAOwner:w}),{tokenAccount:P}=x,I=Ke(x,["tokenAccount"]);g.addInstruction(I);let R=await p.handleTokenAccount({side:"out",amount:0,mint:m,tokenAccount:b,bypassAssociatedCheck:h,checkCreateATAOwner:w}),{tokenAccount:T}=R,S=Ke(R,["tokenAccount"]);return g.addInstruction(S),g.addInstruction({instructions:[No({poolInfo:n,poolKeys:c,userKeys:{lpTokenAccount:y,baseTokenAccount:P,quoteTokenAccount:T,owner:this.scope.ownerPubKey},amountIn:o})],lookupTableAddress:c.lookupTableAccount?[c.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity]}),g.addCustomComputeBudget(u),a===0?await g.buildV0():g.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Rn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(c);let g={};for(let q of this.scope.account.tokenAccountRawInfos)(g[q.accountInfo.mint.toString()]===void 0||ke(this.scope.ownerPubKey,q.accountInfo.mint,Rn).publicKey.equals(q.pubkey))&&(g[q.accountInfo.mint.toString()]=q.pubkey);let h=g[t.lpMint.address];if(h===void 0)throw Error("find lp account error in trade accounts");let w=r.add(a!=null?a:new We(0)),P=t.mintA.address===Pe.WSOL.mint.toString(),I=t.mintB.address===Pe.WSOL.mint.toString(),{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),T===void 0)throw new Error("base token account not found");let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(R||{}),x===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=T,g[t.mintB.address]=x,s!==void 0&&!(a!=null&&a.isZero())){let q=ct[s.programId],je=lt({programId:new Qe(s.programId),poolId:new Qe(s.id),owner:this.scope.ownerPubKey,version:q}),bn,tn=await this.scope.connection.getAccountInfo(je);if(tn&&(bn=$n(q).decode(tn.data)),q!==6&&!bn){let{instruction:Wt,instructionType:Ni}=Jn({id:new Qe(s.id),programId:new Qe(s.programId),version:q,ledger:je,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Wt],instructionTypes:[Ni]})}let Dt=[];for(let Wt of s.rewardInfos){let Ni=Wt.mint.address===Pe.WSOL.mint.toString();if(g[Wt.mint.address])Dt.push(g[Wt.mint.address]);else{let{account:es,instructionParams:ts}=await this.scope.account.getOrCreateTokenAccount({mint:new Qe(Wt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Ni,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});es||this.logAndCreateError("farm reward account not found:",Wt.mint.address),ts&&b.addInstruction(ts),Dt.push(es)}}let gn=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ot={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:gn,lpAccount:h,rewardAccounts:Dt},wn=ct[s.programId],xr=wn===6?er(Ot):wn===5?tr(Ot):nr(Ot),Cu={3:E.FarmV3Withdraw,5:E.FarmV5Withdraw,6:E.FarmV6Withdraw};b.addInstruction({instructions:[xr],instructionTypes:[Cu[wn]]})}let B=await this.getAmmPoolKeys(t.id),O=No({poolInfo:t,poolKeys:B,userKeys:{lpTokenAccount:h,baseTokenAccount:T,quoteTokenAccount:x,owner:this.scope.ownerPubKey},amountIn:w});b.addInstruction({instructions:[O],instructionTypes:[t.pooltype.includes("StablePool")?E.AmmV5RemoveLiquidity:E.AmmV4RemoveLiquidity],lookupTableAddress:B.lookupTableAccount?[B.lookupTableAccount]:[]});let[D,v]=t.mintA.address===n.mintA.address?[T,x]:[x,T],j=await this.scope.clmm.getClmmPoolKeys(n.id),G=await Te.openPositionFromBaseInstructions(F(C({poolInfo:n,poolKeys:j,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:v},withMetadata:"create"},o),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...G.instructions],signers:G.signers,instructionTypes:[...G.instructionTypes],lookupTableAddress:j.lookupTableAccount?[j.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:r,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=c.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=c.useSOLBalance&&r.mint.equals(tu),h=c.useSOLBalance&&o.mint.equals(tu),w=this.createTxBuilder(),{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});w.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:b,amount:a}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:l,checkCreateATAOwner:m});if(w.addInstruction(S||{}),P===void 0||T===void 0)throw Error("you don't has some token account");let x=eu({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:o.mint,baseDecimals:r.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),R={programId:t,ammId:x.id,ammAuthority:x.authority,ammOpenOrders:x.openOrders,lpMint:x.lpMint,coinMint:x.baseMint,pcMint:x.quoteMint,coinVault:x.baseVault,pcVault:x.quoteVault,withdrawQueue:x.withdrawQueue,ammTargetOrders:x.targetOrders,poolTempLp:x.lpVault,marketProgramId:x.marketProgramId,marketId:x.marketId,ammConfigId:x.configId,feeDestinationId:y},{instruction:B,instructionType:O}=Ra(F(C({},R),{userWallet:this.scope.ownerPubKey,userCoinVault:P,userPcVault:T,userLpVault:ke(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[B],instructionTypes:[O]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:R}})}async getCreatePoolFee({programId:t}){let n=bi({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return ka.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:o,slippage:s}){let[a,u]=[r.toString(),o.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,h=t.version===4,w;if(h)w=new L(f.toString()).div(10**g).div(new L(y.toString()).div(10**b));else{let v=Sa(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);p==="quote"?w=new L(1e6).div(v*1e6):w=new L(v*1e6).div(1e6)}let P=n,I=new We(0),T=new We(0);if(!P.isZero())if(h){T=Qt(P.mul(qo),yi);let v=P.sub(T),j=y.add(v);I=f.mul(v).div(j)}else{T=P.mul(new We(2)).div(new We(1e4));let v=P.sub(T);p==="quote"?I=new We(Ba(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),v.toNumber())):I=new We(xa(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),v.toNumber()))}let S=new We(new L(I.toString()).mul(1-s).toFixed(0)),x=I,R=S,B=new L(I.toString()).div(new L(P.sub(T).toString()).toFixed(0));!P.isZero()&&!I.isZero()&&(B=new L(I.toString()).div(10**g).div(new L(P.sub(T).toString()).div(10**b)));let O=w.sub(B).div(w).mul(100);return{amountOut:x,minAmountOut:R,currentPrice:w,executionPrice:B,priceImpact:O,fee:T}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:r,mintOut:o,slippage:s}){let{baseReserve:a,quoteReserve:u}=t;r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",u.toString());let c=r.toString()===t.mintA.address,[l,m]=c?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new L(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,u],p=c?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new L(f.toString()).div(10**t[c?"mintB":"mintA"].decimals).div(new L(y.toString()).div(10**t[c?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new L(1).div(b).toString()} ${l.symbol||l.address}`);let g=new We(0),h=n;if(!h.isZero()){h.gt(f)&&(h=f.sub(new We(1)));let R=f.sub(h);g=y.mul(h).div(R).mul(yi).div(yi.sub(qo))}let w=new We(new L(g.toString()).mul(1+s).toFixed(0)),P=g,I=w;this.logDebug("amountIn:",new L(P.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new L(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let T=null;!g.isZero()&&!h.isZero()&&(T=new L(h.toString()).div(10**m.decimals).div(new L(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${T.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new L(1).div(T).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(P.toString()),x=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${x.toString()}%`),{amountIn:P,maxAmountIn:I,currentPrice:b,executionPrice:T,priceImpact:x}}async swap({poolInfo:t,poolKeys:n,amountIn:r,amountOut:o,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===Q.toBase58(),h=y&&b.address===Q.toBase58(),{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(P||{}),w||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:w,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Rn,mint:new Qe(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:d});m.addInstruction(T||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:h,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),x=4;return t.pooltype.includes("StablePool")&&(x=5),m.addInstruction({instructions:[ai({version:x,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:r,amountOut:o,fixedSide:a})],instructionTypes:[x===4?E.AmmV4SwapBaseIn:E.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let r=await Me(this.scope.connection,t.map(l=>({pubkey:new Qe(l)})),n),o={},s=[];for(let l=0;l<t.length;l++){let m=r[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=si.decode(m.accountInfo.data);o[String(t[l])]=F(C({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Me(this.scope.connection,s.map(l=>({pubkey:new Qe(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new We(qm.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(o)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=F(C({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new L(p.toString()).div(new L(10).pow(m.quoteDecimal.toString())).div(new L(d.toString()).div(new L(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),r=gi({[t]:n}),o=r[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[r[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:o,poolKeys:s[0]}}};import{PublicKey as ie}from"@solana/web3.js";import rt from"bn.js";import{AccountLayout as nu,TOKEN_PROGRAM_ID as ru}from"@solana/spl-token";var yr=class extends Ie{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var w;let{programId:t,owner:n=((w=this.scope.owner)==null?void 0:w.publicKey)||ie.default,mint1:r,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new rt(new ie(r.address).toBuffer()).gt(new rt(new ie(o.address).toBuffer()))?[o,r,new L(1).div(a)]:[r,o,a],g=te.priceToSqrtPriceX64(b,y.decimals,f.decimals),h=await Te.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:u,forerunCreate:!m&&l});return p.addInstruction(h),p.addCustomComputeBudget(c),p.versionBuild({txVersion:d,extInfo:{address:F(C({},h.address),{programId:t.toString(),id:h.address.poolId.toString(),mintA:y,mintB:f,openTime:u.toString(),vault:{A:h.address.mintAVault.toString(),B:h.address.mintBVault.toString()},rewardInfos:[],config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}}),mockPoolInfo:C({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:h.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]}},qa),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:r,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",getEphemeralSigners:d,computeBudgetConfig:p,txVersion:y}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Q.toString(),w=n.useSOLBalance&&e.mintB.address===Q.toString(),[P,I]=s==="MintA"?[a,u]:[u,a],{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||P.isZero()?{payer:this.scope.ownerPubKey,amount:P}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});T&&(b=T),f.addInstruction(S||{});let{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(R||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let B=t||await this.getClmmPoolKeys(e.id),O=await Te.openPositionFromBaseInstructions({poolInfo:e,poolKeys:B,ownerInfo:F(C({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:r,tickUpper:o,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(O),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:C({},O.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:r,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,h=n.useSOLBalance&&e.mintA.address===Q.toBase58(),w=n.useSOLBalance&&e.mintB.address===Q.toBase58(),{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});P&&(b=P),f.addInstruction(I||{});let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});T&&(g=T),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let x=t||await this.getClmmPoolKeys(e.id),R=await Te.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,amountMaxB:o,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(R),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:R.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,amountMaxA:o,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===Q.toString(),g=u.useSOLBalance&&t.mintB.address===Q.toString(),{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});h&&(y=h),p.addInstruction(w||{});let{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});P&&(f=P),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let T=n!=null?n:await this.getClmmPoolKeys(t.id),S=Te.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:T,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:o,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:r,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,y,f=a.useSOLBalance&&t.mintA.address===Q.toString(),b=a.useSOLBalance&&t.mintB.address===Q.toString(),{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(r==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?o:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(r==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});w&&(y=w),d.addInstruction(P||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),T=Te.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:o,otherAmountMax:s});return d.addInstruction(T),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:T.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:r,ownerInfo:o,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=o.useSOLBalance&&t.mintA.address===Q.toString(),f=o.useSOLBalance&&t.mintB.address===Q.toString(),b,g,{account:h,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=h,w&&p.addInstruction(w);let{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=P,I&&p.addInstruction(I);let T=[];for(let B of t.rewardDefaultInfos){let O=o.useSOLBalance&&B.mint.address===Q.toString(),D;if(B.mint.address===t.mintA.address)D=b;else if(B.mint.address===t.mintB.address)D=g;else{let{account:v,instructionParams:j}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(B.mint.programId),mint:new ie(B.mint.address),notUseTokenAccount:O,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!O,associatedOnly:O?!1:c,checkCreateATAOwner:l});D=v,j&&p.addInstruction(j)}T.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),x=await Te.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:r,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:T},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:x.instructions,instructionTypes:[E.ClmmDecreasePosition]});let R=C({},x.address);if(o.closePosition){let B=await Te.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:r});p.addInstruction({endInstructions:B.instructions,endInstructionTypes:B.instructionTypes}),R=C(C({},R),B.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:R}})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:r}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let o=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Te.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return o.addInstruction(a).versionBuild({txVersion:r,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.address.toString()===Q.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(n.mint.address),mint:new ie(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new L(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:o});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Te.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new ie(n.mint.programId),mint:new ie(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of r)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of r){let d=n.useSOLBalance&&m.mint.address===Q.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new L(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Te.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new ie(m.mint.programId),mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});l=C(C({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let u=this.createTxBuilder(),c=t.useSOLBalance&&n.mint.equals(Q),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new L(n.perSecond.sub(n.endTime-n.openTime).toFixed(0)).gte(n.perSecond.sub(n.endTime-n.openTime))?n.perSecond.sub(n.endTime-n.openTime).toFixed(0):n.perSecond.sub(n.endTime-n.openTime).add(1).toFixed(0))}:void 0,associatedOnly:c?!1:r,checkCreateATAOwner:o});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Te.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ne.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:r,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of r){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===Q.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(m.mint.programId),mint:new ie(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new L(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Te.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new ie(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ne.decimalToX64(m.perSecond)}});c.addInstruction(b),l=C(C({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),u=t.useSOLBalance&&n.equals(Q),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(s.mint.programId),mint:n,notUseTokenAccount:u,owner:this.scope.ownerPubKey,skipCloseAccount:!u,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:u?!1:r,checkCreateATAOwner:o});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Te.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:c},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let u of n){let c=e.rewardDefaultInfos.find(f=>f.mint.address===u.toString());if(!c){this.logAndCreateError("reward mint error","not found reward mint",u);continue}let l=t.useSOLBalance&&u.equals(Q),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(c.mint.programId),mint:u,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:r,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Te.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=C(C({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:r,amountOutMin:o,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=u.useSOLBalance&&e.mintA.address===Q.toBase58(),g=u.useSOLBalance&&e.mintB.address===Q.toBase58(),h;!s||s.equals(new L(0))?h=f?pt.add(new rt(1)):ft.sub(new rt(1)):h=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}(!w||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:P,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Te.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:P},inputMint:new ie(n),amountIn:r,amountOutMin:o,sqrtPriceLimitX64:h,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:r,amountInMax:o,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=u.useSOLBalance&&e.mintA.address===Q.toBase58(),g=u.useSOLBalance&&e.mintB.address===Q.toBase58(),h;!s||s.equals(new L(0))?h=n.toString()===e.mintB.address?pt.add(new rt(1)):ft.sub(new rt(1)):h=te.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?o:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=T,S&&y.addInstruction(S)}let P;if(!P){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=T,S&&y.addInstruction(S)}(!w||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:P,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Te.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:P},outputMint:new ie(n),amountOut:r,amountInMax:o,sqrtPriceLimitX64:h,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,ownerInfo:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,programId:s,txVersion:a,computeBudgetConfig:u}){let c={};for(let m of this.scope.account.tokenAccountRawInfos)r?ke(this.scope.ownerPubKey,m.accountInfo.mint,s).publicKey.equals(m.pubkey)&&(c[m.accountInfo.mint.toString()]=m.pubkey):c[m.accountInfo.mint.toString()]=m.pubkey;let l=this.createTxBuilder();for(let m of Object.values(e)){if(t[m.id]===void 0||!t[m.id].find(w=>!w.liquidity.isZero()||w.rewardInfos.find(P=>!P.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===Q.toString(),y=n.useSOLBalance&&d.mintB.address===Q.toString(),f=c[d.mintA.address];if(!f){let{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new ie(d.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:r,checkCreateATAOwner:o});f=w,P&&l.addInstruction(P)}let b=c[d.mintB.address];if(!b){let{account:w,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new ie(d.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:y?!1:r,checkCreateATAOwner:o});b=w,P&&l.addInstruction(P)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let w of d.rewardDefaultInfos){let P=n.useSOLBalance&&w.mint.address===Q.toString(),I=c[w.mint.address];if(!I){let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(w.mint.programId),mint:new ie(w.mint.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:r});I=T,S&&l.addInstruction(S)}c[w.mint.address]=I,g.push(I)}let h=await this.getClmmPoolKeys(d.id);for(let w of t[m.id]){let P=Te.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:w,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new rt(0),amountMinA:new rt(0),amountMinB:new rt(0)});l.addInstruction(P)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(ur(e).publicKey);return t?Ya.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new rt(1))).map(s=>mt(new ie(e),s.accountInfo.mint).publicKey),r=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return r.forEach(s=>{if(!s)return;let a=fi.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Me(this.scope.connection,e.map(o=>({pubkey:new ie(o)})),t),r={};for(let o=0;o<e.length;o++){let s=n[o];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[o]));let a=ln.decode(s.accountInfo.data),u=te.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();r[String(e[o])]=F(C({},a),{currentPrice:u,programId:s.accountInfo.owner})}return r}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),r=await Me(this.scope.connection,Array.from(n).map(u=>({pubkey:new ie(u)}))),o={};r.forEach(u=>{!u.accountInfo||(o[u.pubkey.toBase58()]=za.decode(u.accountInfo.data))});let s=await xe.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:He({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||ru.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?Jt((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:He({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||ru.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?Jt((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:F(C({},o[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await xe.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),r=await Tn({connection:this.scope.connection,mints:Array.from(n).map(m=>new ie(m))}),{computeClmmPoolInfo:o,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:r}),a=await Me(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=Ga(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(nu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(nu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=F(C({},o[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},rewardInfos:[],config:u.config});return{poolInfo:u,poolKeys:c,computePoolInfo:o[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as xi,TOKEN_PROGRAM_ID as Et,AccountLayout as ed}from"@solana/spl-token";import zo from"bn.js";import ou from"bn.js";var Xo=new ou(1e6);function Um(i,e,t){return i.mul(e).add(t).sub(new ou(1)).div(t)}function iu(i,e,t){return i.mul(e).div(t)}var wi=class{static tradingFee(e,t){return Um(e,t,Xo)}static protocolFee(e,t){return iu(e,t,Xo)}static fundFee(e,t){return iu(e,t,Xo)}};import br from"bn.js";function Ai(i,e){if(e.isZero())throw Error("divisor is zero");return i.mod(e)}function Gm(i,e){if(e.isZero())throw Error("rhs is zero");let t=i.div(e);if(t.isZero())throw Error("quotient is zero");let n=Ai(i,e);return n.gt(Ln)&&(t=t.add(new br(1)),e=i.div(t),n=Ai(i,t),n.gt(Ln)&&(e=e.add(new br(1)))),[t,e]}var Ln=new br(0),hi=class{static swapWithoutFees(e,t,n){let r=t.mul(n),o=t.add(e),[s,a]=Gm(r,o),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,r,o){let s=e.mul(n).div(t),a=e.mul(r).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return Ai(e.mul(n),t).gt(Ln)&&s.gt(Ln)&&(s=s.add(new br(1))),Ai(e.mul(r),t).gt(Ln)&&a.gt(Ln)&&(a=a.add(new br(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Pi from"decimal.js-light";var ki=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,r){let o=wi.tradingFee(e,r),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:u}=hi.swapWithoutFees(s,t,n),c=a.add(o);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:o}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:r,quoteReserve:o,outputMint:s,outputAmount:a}){let[u,c,l,m,d]=t.address===s.toString()?[r,o,e.decimals,t.decimals,e.address]:[o,r,t.decimals,e.decimals,t.address],p=new Pi(c.toString()).div(10**m).div(new Pi(u.toString()).div(10**l)),y=a.gte(c)?c.sub(new zo(1)):a,f=c.sub(y),b=Qt(u.mul(y),f),g=Qt(b.mul(new zo(1e6)),new zo(1e6).sub(n)),h=g.sub(b),w=new Pi(y.toString()).div(10**m).div(new Pi(g.toString()).div(10**l)),P=p.isZero()?0:w.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:h,priceImpact:P}}};var Xm=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),qT=Buffer.from("amm_config","utf8"),zm=Buffer.from("pool","utf8"),Qm=Buffer.from("pool_lp_mint","utf8"),Ym=Buffer.from("pool_vault","utf8"),jm=Buffer.from("observation","utf8");function On(i){return le([Xm],i)}function Hm(i,e,t,n){return le([zm,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Zm(i,e){return le([Qm,e.toBuffer()],i)}function su(i,e,t){return le([Ym,e.toBuffer(),t.toBuffer()],i)}function Ti(i,e){return le([jm,e.toBuffer()],i)}function au({programId:i,configId:e,mintA:t,mintB:n}){let r=On(i).publicKey,o=Hm(i,e,t,n).publicKey,s=Zm(i,o).publicKey,a=su(i,o,t).publicKey,u=su(i,o,n).publicKey,c=Ti(i,o).publicKey;return{poolId:o,configId:e,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as gr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Qo,TOKEN_2022_PROGRAM_ID as uu,ASSOCIATED_TOKEN_PROGRAM_ID as $m}from"@solana/spl-token";var Jm=se("Raydium_cpmm"),wr={initialize:[175,175,109,31,13,152,155,237],deposit:[242,35,198,137,82,225,242,182],withdraw:[183,18,70,156,148,109,161,34],swapBaseInput:[143,190,90,218,196,30,51,222],swapBaseOutput:[55,217,98,86,163,74,180,173]};function cu(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,w){let P=V([A("amountMaxA"),A("amountMaxB"),A("openTime")]),I=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:$m,isSigner:!1,isWritable:!1},{pubkey:Gi,isSigner:!1,isWritable:!1},{pubkey:wt,isSigner:!1,isWritable:!1}],T=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:h,openTime:w},T),new gr({keys:I,programId:i,data:Buffer.from([...wr.initialize,...T])})}function lu(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=V([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:uu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(f.span);return Jm.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new gr({keys:b,programId:i,data:Buffer.from([...wr.deposit,...g])})}function mu(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=V([A("lpAmount"),A("amountMinA"),A("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:Qo,isSigner:!1,isWritable:!1},{pubkey:uu,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:vr,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new gr({keys:b,programId:i,data:Buffer.from([...wr.withdraw,...g])})}function Ii(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=V([A("amountIn"),A("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},h),new gr({keys:g,programId:i,data:Buffer.from([...wr.swapBaseInput,...h])})}function du(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=V([A("amountInMax"),A("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0}],h=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},h),new gr({keys:g,programId:i,data:Buffer.from([...wr.swapBaseOutput,...h])})}import Re from"bn.js";var pu=V([pe(8),W("bump"),Xe("disableCreatePool"),Mt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),K("protocolOwner"),K("fundOwner"),X(A(),16)]),Bi=V([pe(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),W("bump"),W("status"),W("lpDecimals"),W("mintDecimalA"),W("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),X(A(),32)]);var Ar=class extends Ie{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Me(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),r={},o=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Bi.decode(d.accountInfo.data);r[String(e[m])]=F(C({},p),{programId:d.accountInfo.owner}),o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await Me(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=pu.decode(y.data)}}let u={},c=await Me(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new Re(ed.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(r)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(C({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new L(y.toString()).div(new L(10).pow(d.mintDecimalB)).div(new L(p.toString()).div(new L(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,r)=>{var u,c,l,m;let o=e[r],[s,a]=[o.mintA.toBase58(),o.mintB.toBase58()];return F(C({},n),{[r]:F(C({},o),{id:new z(r),configInfo:o.configInfo,version:7,authority:On(o.programId).publicKey,mintA:He({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?Jt((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:He({address:a,decimals:o.mintDecimalB,programId:o.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?Jt((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Tn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),r=He({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?Jt(n[t.mintA.toBase58()].feeConfig):void 0}}),o=He({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?Jt(n[t.mintB.toBase58()].feeConfig):void 0}}),s=He({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:r,mintB:o,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new L(t.vaultAAmount.toString()).div(10**r.decimals).toNumber(),mintAmountB:new L(t.vaultBAmount.toString()).div(10**o.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:r,mintB:o,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:On(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(m){var d=m,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,feeConfig:u,computeBudgetConfig:c}=d,l=Ke(d,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var v,j,G;let p=r.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),y=new Re(new z(l.mintA.address).toBuffer()).lte(new Re(new z(l.mintB.address).toBuffer())),[f,b]=y?[l.mintA,l.mintB]:[l.mintB,l.mintA],[g,h]=y?[l.mintAAmount,l.mintBAmount]:[l.mintBAmount,l.mintAAmount],w=r.useSOLBalance&&f.address===xi.toBase58(),P=r.useSOLBalance&&b.address===xi.toBase58(),[I,T]=[new z(f.address),new z(b.address)],S=this.createTxBuilder(),{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({mint:I,tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:w?{payer:p,amount:g}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:o,checkCreateATAOwner:s});S.addInstruction(R||{});let{account:B,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({mint:new z(b.address),tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:p,amount:h}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:o,checkCreateATAOwner:s});if(S.addInstruction(O||{}),x===void 0||B===void 0)throw Error("you don't has some token account");let D=au({programId:e,configId:new z(u.id),mintA:I,mintB:T});return S.addInstruction({instructions:[cu(e,this.scope.ownerPubKey,new z(u.id),D.authority,D.poolId,I,T,D.lpMint,x,B,ke(this.scope.ownerPubKey,D.lpMint).publicKey,D.vaultA,D.vaultB,t,new z((j=f.programId)!=null?j:Et),new z((G=b.programId)!=null?G:Et),D.observationId,g,h,n)],instructionTypes:[E.CpmmCreatePool]}),S.addCustomComputeBudget(c),S.versionBuild({txVersion:a,extInfo:{address:F(C({},D),{mintA:f,mintB:b,programId:e,poolFeeAccount:t,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:r,baseIn:o,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),r.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:r.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(C({},t),{lpAmount:new L(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Ue(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new L(r.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),h=g.amount,w=t.mintA.address===xi.toString(),P=t.mintB.address===xi.toString(),I=this.createTxBuilder(),[T,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:x,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||(o?r:h).isZero()?{payer:this.scope.ownerPubKey,amount:o?r:h}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(R||{});let{account:B,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o?h:r).isZero()?{payer:this.scope.ownerPubKey,amount:o?h:r}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(O||{}),!x&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),je=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:v}=je,j=Ke(je,["tokenAccount"]);I.addInstruction(j);let G=n!=null?n:await this.getCpmmPoolKeys(t.id),q=new Ue(new Re(1)).sub(s);return I.addInstruction({instructions:[lu(new z(t.programId),this.scope.ownerPubKey,new z(G.authority),new z(t.id),v,x,B,new z(G.vault.A),new z(G.vault.B),T,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:q.mul(f).quotient,o?b.amount:h,o?h:b.amount)],instructionTypes:[E.CpmmAddLiquidity],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var v,j;let{poolInfo:t,poolKeys:n,lpAmount:r,slippage:o,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Ue(new Re(1)).sub(o),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(r.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(r.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[be(l,t.mintA.extensions.feeConfig,d,!1),be(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,h]=[new z(t.mintA.address),new z(t.mintB.address)],w=g.equals(Q),P=h.equals(Q),I,T,{account:S,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});I=S,x&&b.addInstruction(x);let{account:R,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});T=R,B&&b.addInstruction(B),(!I||!T)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let O=await f.getCreatedTokenAccount({mint:new z(t.lpMint.address)});O||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[mu(new z(t.programId),this.scope.ownerPubKey,new z(D.authority),new z(t.id),O,I,T,new z(D.vault.A),new z(D.vault.B),g,h,new z(t.lpMint.address),r,l.sub((v=p.fee)!=null?v:new Re(0)),m.sub((j=y.fee)!=null?j:new Re(0)))],instructionTypes:[E.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var R,B,O,D,v,j;let{poolInfo:t,poolKeys:n,baseIn:r,fixedOut:o,inputAmount:s,swapResult:a,slippage:u=0,config:c,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=C({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},c),f=this.createTxBuilder(),[b,g]=[new z(t.mintA.address),new z(t.mintB.address)];o?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Re((1+u)*1e4)).div(new Re(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Re((1-u)*1e4)).div(new Re(1e4));let h=t.mintA.address===Q.toBase58(),w=t.mintB.address===Q.toBase58(),{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new z((R=t.mintA.programId)!=null?R:Et),owner:this.scope.ownerPubKey,createInfo:h||!r?{payer:this.scope.ownerPubKey,amount:r?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:T,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((B=t.mintB.programId)!=null?B:Et),owner:this.scope.ownerPubKey,createInfo:w||r?{payer:this.scope.ownerPubKey,amount:r?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!P||!T)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:P,mintBTokenAcc:T,mintAUseSOLBalance:h,mintBUseSOLBalance:w,associatedOnly:y});let x=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[o?du(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?P:T,r?T:P,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((v=t[r?"mintA":"mintB"].programId)!=null?v:Et),new z((j=t[r?"mintB":"mintA"].programId)!=null?j:Et),r?b:g,r?g:b,Ti(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Ii(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(x.config.id),new z(t.id),r?P:T,r?T:P,new z(x.vault[r?"A":"B"]),new z(x.vault[r?"B":"A"]),new z((O=t[r?"mintA":"mintB"].programId)!=null?O:Et),new z((D=t[r?"mintB":"mintA"].programId)!=null?D:Et),r?b:g,r?g:b,Ti(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[o?E.CpmmSwapBaseOut:E.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:r}){let o=n.toString()===e.mintB.address,s=ki.swap(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new L(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new Re((1-r)*1e4)).div(new Re(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:r,slippage:o,epochInfo:s,baseIn:a}){var h,w,P,I,T,S,x,R;let u=1-Number(o.toSignificant())/100,c=new Re(new L(r).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=be(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((h=l.fee)!=null?h:new Re(0)),d=new Re(new L(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,L.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(P=(w=l.fee)==null?void 0:w.toString())!=null?P:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:ut,fee:void 0,expirationTime:void 0};if(!m.isZero()){let B=td(y,t,n,d);this.logDebug("lpAmountData:",{amountA:B.amountA.toString(),amountB:B.amountB.toString()}),f=be(B[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Ue(new Re(1)).add(o),g=be(b.mul(f.amount.sub((I=f.fee)!=null?I:new Re(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(S=(T=f.fee)==null?void 0:T.toString())!=null?S:0,"maxAnotherAmount:",g.amount.toString(),"maxAnotherAmountFee:",(R=(x=g.fee)==null?void 0:x.toString())!=null?R:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:g,liquidity:y}}};function td(i,e,t,n){let r=i.mul(e).div(n);!r.isZero()&&!i.mul(e).mod(n).isZero()&&(r=r.add(new Re(1)));let o=i.mul(t).div(n);return!o.isZero()&&!i.mul(t).mod(n).isZero()&&(o=o.add(new Re(1))),{amountA:r,amountB:o}}import{PublicKey as fn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Se,TOKEN_2022_PROGRAM_ID as Ci,createTransferInstruction as Au}from"@solana/spl-token";import Ri from"bn.js";import{TOKEN_PROGRAM_ID as nd,TOKEN_2022_PROGRAM_ID as rd,ASSOCIATED_TOKEN_PROGRAM_ID as id}from"@solana/spl-token";import{PublicKey as ee,TransactionInstruction as od,SystemProgram as sd}from"@solana/web3.js";import pn from"bn.js";function ad(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){var T;let f=[],b=[k({pubkey:nd,isWritable:!1}),k({pubkey:rd,isWritable:!1}),k({pubkey:id,isWritable:!1}),k({pubkey:sd.programId,isWritable:!1}),k({pubkey:e,isSigner:!0})];b.push(k({pubkey:t})),b.push(k({pubkey:r}));let g=[u,c],h=[l,m],w=[o,s,a];for(let S=0;S<g.length;S++){let x=g[S],R=w[S]===x.mintA.address;if(b.push(k({pubkey:new ee(x.programId),isWritable:!1})),S===g.length-1?b.push(k({pubkey:r})):b.push(k({pubkey:n})),b.push(k({pubkey:new ee(w[S])})),b.push(k({pubkey:new ee(w[S+1])})),x.version===6){let B=h[S];b.push(k({pubkey:new ee(B.config.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(R?B.vault.A:B.vault.B)})),b.push(k({pubkey:new ee(R?B.vault.B:B.vault.A)})),b.push(k({pubkey:new ee(x.observationId)})),b.push(k({pubkey:vr})),b.push(k({pubkey:nt(new ee(x.programId),new ee(x.id)).publicKey})),f.push(ud(x.sqrtPriceX64.toString(),R));for(let O of(T=y[S])!=null?T:[])b.push(k({pubkey:new ee(O)}))}else if(x.version===5){let B=h[S];b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.authority),isWritable:!1})),b.push(k({pubkey:new ee(B.marketProgramId)})),b.push(k({pubkey:new ee(B.marketAuthority)})),b.push(k({pubkey:Ds,isWritable:!1})),b.push(k({pubkey:new ee(B.openOrders)})),b.push(k({pubkey:new ee(B.vault.A)})),b.push(k({pubkey:new ee(B.vault.B)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.marketId)})),b.push(k({pubkey:new ee(B.marketBids)})),b.push(k({pubkey:new ee(B.marketAsks)})),b.push(k({pubkey:new ee(B.marketEventQueue)})),b.push(k({pubkey:new ee(B.marketBaseVault)})),b.push(k({pubkey:new ee(B.marketQuoteVault)}))}else if(x.version===4){let B=h[S],O=x.status!==1;b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(B.authority),isWritable:!1})),b.push(k({pubkey:new ee(O?B.id:B.marketProgramId)})),b.push(k({pubkey:new ee(O?B.id:B.marketAuthority)})),b.push(k({pubkey:new ee(O?B.id:B.openOrders)})),b.push(k({pubkey:new ee(B.vault.A)})),b.push(k({pubkey:new ee(B.vault.B)})),b.push(k({pubkey:new ee(O?B.id:B.marketId)})),b.push(k({pubkey:new ee(O?B.id:B.marketBids)})),b.push(k({pubkey:new ee(O?B.id:B.marketAsks)})),b.push(k({pubkey:new ee(O?B.id:B.marketEventQueue)})),b.push(k({pubkey:new ee(O?B.id:B.marketBaseVault)})),b.push(k({pubkey:new ee(O?B.id:B.marketQuoteVault)}))}else if(x.version===7){let B=h[S];b.push(k({pubkey:new ee(B.authority)})),b.push(k({pubkey:new ee(B.config.id)})),b.push(k({pubkey:new ee(B.id)})),b.push(k({pubkey:new ee(R?B.vault.A:B.vault.B)})),b.push(k({pubkey:new ee(R?B.vault.B:B.vault.A)})),b.push(k({pubkey:new ee(x.observationId)}))}else throw Error("pool type error")}let P=V([W("insId"),A("amountIn"),A("amountOut"),X($(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(P.span);return P.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new od({keys:b,programId:i,data:I})}function ud(i,e){if(i)if(e){let t=new pn(i).div(new pn(25));return t.gt(mi)?t:mi}else{let t=new pn(i).mul(new pn(25));return t.lt(di)?t:di}else return e?mi:di}function fu({routeProgram:i,ownerInfo:e,inputMint:t,swapInfo:n}){var r,o,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ee(m),p=t.equals(d.mintA.address)?pt.add(st):ft.sub(st);return Te.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(r=n.minAmountOut.fee)==null?void 0:r.raw)!=null?o:new pn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Ii(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new ee(m[d?"mintA":"mintB"].address),new ee(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?E.CpmmSwapBaseIn:E.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[ai({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new pn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?E.AmmV5SwapBaseIn:E.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[ad(i,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new pn(0)),n.remainingAccounts)],instructionTypes:[E.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var yu={[no.toBase58()]:3},bu={3:no};var Yo=V([pe(5),pe(8),K("ownAddress"),A("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),K("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),pe(7)]),gu={3:Yo};import{PublicKey as wu}from"@solana/web3.js";var Si=se("Serum"),Ki=class{static getProgramId(e){let t=bu[e];return t||Si.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=yu[t];return n||Si.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=gu[e];return t||Si.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],r=0,o;for(;r<100;){try{let s=n.concat(Buffer.from([r]),Buffer.alloc(7));o=wu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;r++;continue}return{publicKey:o,nonce:r}}return Si.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:wu.default,nonce:r}}};var Ft=new Ri(0),hr=class extends Ie{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(Q));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:r=1}=e,o=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<o.length;c++)u.gte(o[c].amount)?(s.addInstruction({instructions:[Ct({tokenAccount:o[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(o[c].amount)):(s.addInstruction({instructions:[Ct({tokenAccount:o[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),jn({destination:a.addresses.newAccount,source:o[c].publicKey,amount:u,owner:this.scope.ownerPubKey,tokenProgram:n}));return s.versionBuild({txVersion:r})}async wrapWSol(e,t,n){let r=await this.getWSolAccounts(),o=this.createTxBuilder(),s=await _t({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return o.addInstruction(s),r.length&&o.addInstruction({instructions:[jn({destination:r[0].publicKey,source:s.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[Ct({tokenAccount:s.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),o.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:r,routeProgram:o,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(Q),m=c.amount.token.mint.equals(Q),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Ci:Se,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?Ci:Se);else{let{account:P,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Ci:Se,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=P,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[Ct({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Se})],endInstructionTypes:[E.CloseAccount]});let g;if(e.routeType==="route"){let P=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?Ci:Se)}let h=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=fu({routeProgram:o,inputMint:d,swapInfo:F(C({},e),{poolInfo:[...e.poolInfoList],poolKey:h,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let P=this.createTxBuilder();P.addInstruction({instructions:[Au(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]}),P.addInstruction(w);let{transactions:I}=s===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[Au(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[E.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:r,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:r,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=Fs,clmm:n=Ws,cpmm:r=qs}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:si.offsetOf("baseMint"),length:64}}),s=V([K("baseMint"),K("quoteMint")]),a=o.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),u=V([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:ln.span}],dataSlice:{offset:ln.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(r,{dataSlice:{offset:Bi.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:r,cpmmPools:o}){e=e.toString()===fn.default.toString()?Q:e,t=t.toString()===fn.default.toString()?Q:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Se,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&u[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let r=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let o=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=gi(o),a={};Object.values(s).forEach(f=>{r.delete(f.mintA.address),a[f.mintA.address]={address:new fn(f.mintA.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},r.delete(f.mintB.address),a[f.mintB.address]={address:new fn(f.mintB.address),programId:Se,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Se)?(r.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(b),f.mintProgramB.equals(Se)?(r.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):r.add(g)}),console.log("fetching mints info, total: ",r.size);let c=await Tn({connection:this.scope.connection,mints:Array.from(r).map(f=>new fn(f))});a=C(C({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(C({},f),{[b]:F(C({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:o,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:r,simulateCache:o,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,h,w,P,I,T,S,x,R;let m=l===void 0?new Ri(0):e.raw.mul(new Ri(l.feeBps.toNumber())).div(new Ri(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(C({},t),{address:it(t.address).toString()}),b=[];for(let B of n)try{b.push(F(C({},this.computeAmountOut({itemPool:B,tickCache:s,simulateCache:o,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(O){this.logDebug("direct error",B.version,B.id.toString(),O.message)}this.logDebug("direct done");for(let[B,O]of Object.entries(r)){let D={chainId:101,address:B,programId:O.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:O.mDecimals,tags:[],extensions:{}},v=O.in.map(G=>{try{return{pool:G,data:this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:o,chainTime:u,epochInfo:c,slippage:a,outputToken:D,amountIn:p})}}catch(q){this.logDebug("route in error",G.version,G.id.toString(),q.message);return}}).sort((G,q)=>{var tn,Dt,gn,Ot;let je=G===void 0?Ft:G.data.amountOut.amount.raw.sub((Dt=(tn=G.data.amountOut.fee)==null?void 0:tn.raw)!=null?Dt:Ft),bn=q===void 0?Ft:q.data.amountOut.amount.raw.sub((Ot=(gn=q.data.amountOut.fee)==null?void 0:gn.raw)!=null?Ot:Ft);return je.lt(bn)?1:-1})[0];if(v===void 0)continue;let j=new ye(oi(D),v.data.amountOut.amount.raw.sub((h=(g=v.data.amountOut.fee)==null?void 0:g.raw)!=null?h:Ft));for(let G of O.out)try{let q=this.computeAmountOut({itemPool:G,tickCache:s,simulateCache:o,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:j});b.push(F(C({},q),{allTrade:!!(v.data.allTrade&&q.allTrade),amountIn:v.data.amountIn,amountOut:q.amountOut,minAmountOut:q.minAmountOut,currentPrice:void 0,executionPrice:new L(new Je({baseToken:v.data.amountIn.amount.token,denominator:v.data.amountIn.amount.raw,quoteToken:q.amountOut.amount.token,numerator:q.amountOut.amount.raw.sub((P=(w=q.amountOut.fee)==null?void 0:w.raw)!=null?P:Ft)}).toFixed()),priceImpact:new L(v.data.priceImpact.add(q.priceImpact).toFixed()),fee:[v.data.fee[0],q.fee[0]],routeType:"route",poolInfoList:[v.pool,G],remainingAccounts:[v.data.remainingAccounts[0],q.remainingAccounts[0]],minMiddleAmountFee:(I=q.amountOut.fee)!=null&&I.raw?new ye(v.data.amountOut.amount.token,((S=(T=v.data.amountOut.fee)==null?void 0:T.raw)!=null?S:Ft).add((R=(x=q.amountOut.fee)==null?void 0:x.raw)!=null?R:Ft)):void 0,middleToken:v.data.amountOut.amount.token,poolReady:v.data.poolReady&&q.poolReady,poolType:[v.data.poolType,q.poolType],feeConfig:y,expirationTime:kt(v.data.expirationTime,q.expirationTime)}))}catch(q){this.logDebug("route out error",G.version,G.id.toString(),q.message)}}return b.filter(B=>(B.allTrade||this.logDebug(`pool ${B.poolInfoList.map(O=>O.id.toString()).join(",")} filter out since not all trade`),B.allTrade)).sort((B,O)=>B.amountOut.amount.raw.sub(O.amountOut.amount.raw).gt(Ft)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:r,epochInfo:o,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:h,executionPriceX64:w}=xe.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:o,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new L(y.toFixed()),executionPrice:new L(f.toFixed()),priceImpact:new L(b.toFixed()),fee:[g],remainingAccounts:[h],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<r,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:kt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ir(F(C({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ir(F(C({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<r,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:ir(F(C({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:ir(F(C({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<r,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let r=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(r.size>0){let c=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(r)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=await this.scope.liquidity.getRpcPoolInfos(Array.from(r));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Me(this.scope.connection,Array.from(s).map(l=>({pubkey:new fn(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=Yo.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Ki.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(C({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=C({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:Go({programId:new fn(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:On(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:He({address:c.mintLp.toBase58(),programId:Se.toBase58(),decimals:c.lpDecimals}),config:F(C({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{TOKEN_PROGRAM_ID as cd}from"@solana/spl-token";import{PublicKey as ld,Transaction as jo,TransactionInstruction as md}from"@solana/web3.js";import hu from"bn.js";var Ye=class extends Ie{static getPdaPoolId(e,t){return le([Ye.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return le([Ye.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new hu(r).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:r,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>Ye.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ye.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ye.getPdaOwnerId(t,m,r,l).publicKey));let u=await At(e,[...s,...a]),c=[];for(let l=0;l<u.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],y=a[l],f=u[d],b=u[n.length+l];if(!(f&&b)||f.data.length!==Ye.POOL_LAYOUT.span||b.data.length!==Ye.OWNER_LAYOUT.span)continue;let g=Ye.POOL_LAYOUT.decode(f.data),h=Ye.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),P=g.endTime.toNumber(),I=h.tokenInfo.map(x=>x.debtAmount.gt(new hu(0))).filter(x=>!x).length!==3,T=o>w&&o<P&&g.status===1,S=I&&T;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:Ye.VERSION_PROJECT[m],openTime:w,endTime:P,canClaim:S,canClaimErrorType:I?T?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,R)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[R].debtAmount.add(h.tokenInfo[R].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,o=[];for(let u of e.tokenInfo){let{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:u.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:u.mintAddress.equals(Pe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(Pe.WSOL.mint),associatedOnly:u.mintAddress.equals(Pe.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[Ye.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:r,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),r=t.wallet||this.scope.ownerPubKey,o={};for(let c of e){let l=[];for(let m of c.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Pe.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(Pe.WSOL.mint),associatedOnly:m.mintAddress.equals(Pe.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Ye.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:r,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return Zi(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new jo().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new jo().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new jo().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=V([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(u=>({pubkey:u,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:u})=>({pubkey:u,isSigner:!1,isWritable:!0})),{pubkey:cd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(r.span);r.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new md({keys:o,programId:e,data:a})}},yt=Ye;yt.CLAIMED_NUM=3,yt.POOL_LAYOUT=V([pe(8),W("bump"),W("status"),A("openTime"),A("endTime"),K("ammId"),X(V([W("mintDecimals"),K("mintAddress"),K("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),Ye.CLAIMED_NUM,"tokenInfo"),X(A(),10,"padding")]),yt.OWNER_LAYOUT=V([pe(8),W("bump"),W("version"),K("poolId"),K("owner"),A("lpAmount"),X(V([K("mintAddress"),A("debtAmount"),A("claimedAmount")]),Ye.CLAIMED_NUM,"tokenInfo"),X(A(),4,"padding")]),yt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new ld(e)),yt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},yt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Pr}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Bu}from"@solana/spl-token";import kr from"bn.js";import{TransactionInstruction as pd,SYSVAR_RENT_PUBKEY as fd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pu}from"@solana/spl-token";import{createInitializeAccountInstruction as ku}from"@solana/spl-token";import{SystemProgram as yn,Transaction as Tu}from"@solana/web3.js";function dd(i="accountFlags"){let e=new Zr(i);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var Ho=V([pe(5),dd("accountFlags"),K("ownAddress"),A("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),K("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),pe(7)]);function yd({programId:i,marketInfo:e}){let t=V([W("version"),Ge("instruction"),A("baseLotSize"),A("quoteLotSize"),Mt("feeRateBps"),A("vaultSignerNonce"),A("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:fd,isSigner:!1,isWritable:!1}].concat(e.authority?{pubkey:e.authority,isSigner:!1,isWritable:!1}:[]).concat(e.authority&&e.pruneAuthority?{pubkey:e.pruneAuthority,isSigner:!1,isWritable:!1}:[]),r=Buffer.alloc(t.span);return t.encode({version:0,instruction:0,baseLotSize:e.baseLotSize,quoteLotSize:e.quoteLotSize,feeRateBps:e.feeRateBps,vaultSignerNonce:e.vaultSignerNonce,quoteDustThreshold:e.quoteDustThreshold},r),new pd({keys:n,programId:i,data:r})}async function Iu({connection:i,wallet:e,marketInfo:t}){var s,a,u,c,l,m,d,p;let n=new Tu,r=await i.getMinimumBalanceForRentExemption(165);n.add(yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:Pu}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:Pu}),ku(t.baseVault.publicKey,t.baseMint,t.vaultOwner),ku(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Tu;return o.add(yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(Ho.span),space:Ho.span,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:(c=t.eventQueueSpace)!=null?c:262144+12,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await i.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),yn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await i.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),yd({programId:t.programId,marketInfo:{id:t.id.publicKey,requestQueue:t.requestQueue.publicKey,eventQueue:t.eventQueue.publicKey,bids:t.bids.publicKey,asks:t.asks.publicKey,baseVault:t.baseVault.publicKey,quoteVault:t.quoteVault.publicKey,baseMint:t.baseMint,quoteMint:t.quoteMint,baseLotSize:t.baseLotSize,quoteLotSize:t.quoteLotSize,feeRateBps:t.feeRateBps,vaultSignerNonce:t.vaultSignerNonce,quoteDustThreshold:t.quoteDustThreshold}})),[{transaction:n,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.InitAccount,E.InitAccount]},{transaction:o,signer:[],instructionTypes:[E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.CreateAccount,E.InitMarket]}]}var Nn=class extends Ie{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:o,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,txVersion:c,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=tt({fromPublicKey:m,programId:o}),p=tt({fromPublicKey:m,programId:o}),y=tt({fromPublicKey:m,programId:o}),f=tt({fromPublicKey:m,programId:o}),b=tt({fromPublicKey:m,programId:o}),g=tt({fromPublicKey:m,programId:Bu}),h=tt({fromPublicKey:m,programId:Bu}),w=0,P=new kr(100);function I(){let D=new kr(0);for(;;)try{return{vaultOwner:Pr.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new kr(25555)))throw Error("find vault owner error")}}let{vaultOwner:T,vaultSignerNonce:S}=I(),x=new kr(Math.round(10**e.decimals*n)),R=new kr(Math.round(n*10**t.decimals*r));if(x.eq(ut))throw Error("lot size is too small");if(R.eq(ut))throw Error("tick size or lot size is too small");let B=await Iu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:h,vaultOwner:T,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:w,quoteDustThreshold:P,vaultSignerNonce:S,baseLotSize:x,quoteLotSize:R,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u}}),O=this.createTxBuilder();O.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});for await(let D of B.slice(1,B.length))O.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return c===0?O.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new Pr(e.mint),quoteMin:new Pr(t.mint)}}):O.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:h.publicKey,baseMint:new Pr(e.mint),quoteMin:new Pr(t.mint)}})}};import{PublicKey as Ir}from"@solana/web3.js";import{TransactionInstruction as xu,SYSVAR_CLOCK_PUBKEY as gd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Su}from"@solana/spl-token";var bd=V([W("instruction"),Ys("amount")]),Tr=V([W("instruction")]);function Li({programId:i},e){let t=[{pubkey:Su,isSigner:!1,isWritable:!1},{pubkey:ks,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,o])=>({pubkey:o,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Tr.span);return Tr.encode({instruction:2},n),new xu({keys:t,programId:i,data:n})}function Zo(i){let{poolConfig:e,userKeys:t,side:n}=i,r=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Tr.span);Tr.encode({instruction:2},s);let a=[{pubkey:Su,isWritable:!1,isSigner:!1},{pubkey:gd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new xu({programId:e.programId,keys:a,data:s})}import Ku from"bn.js";var wd={[Qn.IDO_PROGRAM_ID_V1.toString()]:1,[Qn.IDO_PROGRAM_ID_V2.toString()]:2,[Qn.IDO_PROGRAM_ID_V3.toString()]:3,[Qn.IDO_PROGRAM_ID_V4.toString()]:4},Mn=class extends Ie{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:o}){let s=this.createTxBuilder(),a=wd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ee(t),[c,l]=[!new Ku(e.coin).isZero(),!new Ku(e.pc).isZero()],m=u.projectInfo.mint.address.equals(Q),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.projectInfo.mint.programId,mint:u.projectInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!m,notUseTokenAccount:m,associatedOnly:m?!1:n,checkCreateATAOwner:r});!d&&c&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),c&&p&&s.addInstruction(p);let y=u.buyInfo.mint.address.equals(Q),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.buyInfo.mint.programId,mint:u.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,notUseTokenAccount:y,associatedOnly:y?!1:n,checkCreateATAOwner:r});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&b&&s.addInstruction(b),(!d||!f)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...c?[Li({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Ir(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Li({programId:new Ir(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Ir(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Li({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Ir(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:u.id,programId:u.programId,authority:u.authority,baseVault:u.projectInfo.vault,quoteVault:u.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:f,ledgerAccount:new Ir(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[Zo(F(C({},g),{side:"base"}))]:[],...l?[Zo(F(C({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as Ad}from"@solana/web3.js";import{MintLayout as hd,TOKEN_2022_PROGRAM_ID as $o,TOKEN_PROGRAM_ID as Jo}from"@solana/spl-token";var Br=class extends Ie{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(zt.address,zt),this._mintGroup.official.add(zt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,F(C({},c),{priority:-1}))}),o.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,F(C({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?$o.toBase58():Jo.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(C({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?$o.toBase58():Jo.toBase58(),tags:c.freezeAuthority?[...c.tags||[],"hasFreeze"]:c.tags})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(C({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?$o.toBase58():Jo.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),r=this._tokenMap.get(n);if(r)return r;if(n.toLocaleUpperCase()==="SOL")return zt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(C({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new Ad(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=hd.decode(s.data),u=n.toString().substring(0,6),c={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:u,name:u,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,c),c}};var Oi=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=r?new ht(r):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=se("Raydium"),this.farm=new rr({scope:this,moduleName:"Raydium_Farm"}),this.account=new Hn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new fr({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Br({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new hr({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new yr({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ar({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new yt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Nn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Mn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Pd({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:o,logRequests:s,urlConfigs:a}=t,u=new Yr({cluster:n,timeout:r,urlConfigs:a,logCount:o,logRequests:s}),c=new Oi(F(C({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(jr);return this._owner.publicKey}setOwner(e){return this._owner=e?new ht(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Xs);return this._connection}setConnection(e){return this._connection=e,this}get signAllTransactions(){return this._signAllTransactions}setSignAllTransactions(e){return this._signAllTransactions=e,this}checkOwner(){if(!this.owner)throw this.logger.error(jr),new Error(jr)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(r=>F(C({},r),{mintAuthority:r.mint_authority||void 0,freezeAuthority:r.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{Oi as Raydium};
|
|
2
2
|
/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
|
|
3
3
|
//# sourceMappingURL=raydium.mjs.map
|