@raydium-io/raydium-sdk-v2 0.0.26-alpha → 0.0.28-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.
Files changed (90) hide show
  1. package/lib/api/api.d.ts +1 -1
  2. package/lib/api/index.d.ts +1 -1
  3. package/lib/api/type.d.ts +1 -1
  4. package/lib/common/accountInfo.d.ts +1 -1
  5. package/lib/common/bignumber.d.ts +1 -1
  6. package/lib/common/fractionUtil.d.ts +1 -1
  7. package/lib/common/index.d.ts +1 -1
  8. package/lib/common/transfer.d.ts +1 -1
  9. package/lib/common/txTool/txTool.d.ts +1 -1
  10. package/lib/common/txTool/txUtils.d.ts +1 -1
  11. package/lib/common/utility.d.ts +1 -1
  12. package/lib/index.d.ts +3 -3
  13. package/lib/index.js +1 -1
  14. package/lib/index.js.map +1 -1
  15. package/lib/index.mjs +1 -1
  16. package/lib/index.mjs.map +1 -1
  17. package/lib/module/amount.d.ts +1 -1
  18. package/lib/module/fraction.d.ts +1 -1
  19. package/lib/module/index.d.ts +1 -1
  20. package/lib/module/percent.d.ts +1 -1
  21. package/lib/module/price.d.ts +1 -1
  22. package/lib/raydium/account/account.d.ts +3 -3
  23. package/lib/raydium/account/index.d.ts +1 -1
  24. package/lib/raydium/account/instruction.d.ts +1 -1
  25. package/lib/raydium/account/types.d.ts +1 -1
  26. package/lib/raydium/account/util.d.ts +1 -1
  27. package/lib/raydium/clmm/clmm.d.ts +3 -3
  28. package/lib/raydium/clmm/index.d.ts +3 -3
  29. package/lib/raydium/clmm/instrument.d.ts +2 -2
  30. package/lib/raydium/clmm/layout.d.ts +5 -5
  31. package/lib/raydium/clmm/type.d.ts +2 -2
  32. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  33. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  38. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  39. package/lib/raydium/cpmm/cpmm.js +1 -1
  40. package/lib/raydium/cpmm/cpmm.js.map +1 -1
  41. package/lib/raydium/cpmm/cpmm.mjs +1 -1
  42. package/lib/raydium/cpmm/cpmm.mjs.map +1 -1
  43. package/lib/raydium/cpmm/index.d.ts +1 -1
  44. package/lib/raydium/cpmm/type.d.ts +1 -1
  45. package/lib/raydium/farm/config.d.ts +1 -1
  46. package/lib/raydium/farm/farm.d.ts +3 -3
  47. package/lib/raydium/farm/index.d.ts +1 -1
  48. package/lib/raydium/farm/instruction.d.ts +1 -1
  49. package/lib/raydium/farm/layout.d.ts +1 -1
  50. package/lib/raydium/farm/type.d.ts +1 -1
  51. package/lib/raydium/farm/util.d.ts +1 -1
  52. package/lib/raydium/ido/ido.d.ts +3 -3
  53. package/lib/raydium/ido/index.d.ts +3 -3
  54. package/lib/raydium/ido/instruction.d.ts +1 -1
  55. package/lib/raydium/ido/type.d.ts +1 -1
  56. package/lib/raydium/index.d.ts +3 -3
  57. package/lib/raydium/index.js +1 -1
  58. package/lib/raydium/index.js.map +1 -1
  59. package/lib/raydium/index.mjs +1 -1
  60. package/lib/raydium/index.mjs.map +1 -1
  61. package/lib/raydium/liquidity/index.d.ts +1 -1
  62. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  63. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  64. package/lib/raydium/liquidity/type.d.ts +1 -1
  65. package/lib/raydium/liquidity/utils.d.ts +1 -1
  66. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  67. package/lib/raydium/marketV2/index.d.ts +3 -3
  68. package/lib/raydium/moduleBase.d.ts +3 -3
  69. package/lib/raydium/raydium.d.ts +3 -3
  70. package/lib/raydium/raydium.js +1 -1
  71. package/lib/raydium/raydium.js.map +1 -1
  72. package/lib/raydium/raydium.mjs +1 -1
  73. package/lib/raydium/raydium.mjs.map +1 -1
  74. package/lib/raydium/token/constant.d.ts +1 -1
  75. package/lib/raydium/token/index.d.ts +1 -1
  76. package/lib/raydium/token/token.d.ts +3 -3
  77. package/lib/raydium/token/type.d.ts +1 -1
  78. package/lib/raydium/token/utils.d.ts +1 -1
  79. package/lib/raydium/tradeV2/index.d.ts +2 -2
  80. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  81. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  82. package/lib/raydium/tradeV2/type.d.ts +2 -2
  83. package/lib/raydium/type.d.ts +1 -1
  84. package/lib/raydium/utils1216/index.d.ts +3 -3
  85. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  86. package/lib/{raydium-d75706f4.d.ts → raydium-a8b6c65a.d.ts} +2 -2
  87. package/lib/{type-83523f5f.d.ts → type-3b373344.d.ts} +3 -3
  88. package/lib/{type-6fd96950.d.ts → type-502bbda1.d.ts} +1 -1
  89. package/package.json +1 -1
  90. package/src/raydium/cpmm/cpmm.ts +2 -2
@@ -1,3 +1,3 @@
1
- var Na=Object.defineProperty,_a=Object.defineProperties;var Ma=Object.getOwnPropertyDescriptors;var tr=Object.getOwnPropertySymbols;var mo=Object.prototype.hasOwnProperty,po=Object.prototype.propertyIsEnumerable;var lo=(i,e,t)=>e in i?Na(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,O=(i,e)=>{for(var t in e||(e={}))mo.call(e,t)&&lo(i,t,e[t]);if(tr)for(var t of tr(e))po.call(e,t)&&lo(i,t,e[t]);return i},W=(i,e)=>_a(i,Ma(e));var we=(i,e)=>{var t={};for(var n in i)mo.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&tr)for(var n of tr(i))e.indexOf(n)<0&&po.call(i,n)&&(t[n]=i[n]);return t};import{merge as lm}from"lodash";import lc from"axios";import{get as fo,set as Ea}from"lodash";import bo from"dayjs";import Va from"dayjs/plugin/utc";bo.extend(Va);var Yr=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 bo().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},yo={},Fa={};function oe(i){let e=fo(yo,i);if(!e){let t=fo(Fa,i);e=new Yr({name:i,logLevel:t}),Ea(yo,i,e)}return e}import{PublicKey as ju}from"@solana/web3.js";import Hu from"bn.js";import Xu from"big.js";import fr from"bn.js";import Ye from"bn.js";var tn=9e15,Ot=1e9,jr="0123456789abcdef",rr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ir="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Hr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-tn,maxE:tn,crypto:!1},ho,It,Z=!0,sr="[DecimalError] ",Rt=sr+"Invalid argument: ",Po=sr+"Precision limit exceeded",ko=sr+"crypto unavailable",To="[object Decimal]",_e=Math.floor,xe=Math.pow,va=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Da=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Wa=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Io=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,rt=1e7,j=7,qa=9007199254740991,Ua=rr.length-1,Qr=ir.length-1,K={toStringTag:To};K.absoluteValue=K.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),G(i)};K.ceil=function(){return G(new this.constructor(this),this.e+1,2)};K.clampedTo=K.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(Rt+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new r(n)};K.comparedTo=K.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};K.cosine=K.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=Ga(n,Co(n,t)),n.precision=i,n.rounding=e,G(It==2||It==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};K.cubeRoot=K.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(Z=!1,o=l.s*xe(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=Le(l.d),i=l.e,(o=(i-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=xe(t,1/3),i=_e((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=de(c.plus(l).times(a),c.plus(u),s+2,1),Le(a.d).slice(0,s)===(t=Le(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(G(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")&&(G(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return Z=!0,G(n,i,m.rounding,e)};K.decimalPlaces=K.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-_e(this.e/j))*j,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};K.dividedBy=K.div=function(i){return de(this,new this.constructor(i))};K.dividedToIntegerBy=K.divToInt=function(i){var e=this,t=e.constructor;return G(de(e,new t(i),0,1,1),t.precision,t.rounding)};K.equals=K.eq=function(i){return this.cmp(i)===0};K.floor=function(){return G(new this.constructor(this),this.e+1,3)};K.greaterThan=K.gt=function(i){return this.cmp(i)>0};K.greaterThanOrEqualTo=K.gte=function(i){var e=this.cmp(i);return e==1||e===0};K.hyperbolicCosine=K.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/ur(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),o=nn(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 G(o,s.precision=t,s.rounding=n,!0)};K.hyperbolicSine=K.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=nn(o,2,r,r,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,r=r.times(1/ur(5,i)),r=nn(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,G(r,e,t,!0)};K.hyperbolicTangent=K.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,de(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};K.inverseCosine=K.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()?nt(t,r,o):new t(0):new t(NaN):e.isZero()?nt(t,r+4,o).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),i=nt(t,r+4,o).times(.5),t.precision=r,t.rounding=o,i.minus(e))};K.inverseHyperbolicCosine=K.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,Z=!1,t=t.times(t).minus(1).sqrt().plus(t),Z=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};K.inverseHyperbolicSine=K.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,Z=!1,t=t.times(t).plus(1).sqrt().plus(t),Z=!0,n.precision=i,n.rounding=e,t.ln())};K.inverseHyperbolicTangent=K.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?G(new o(r),i,e,!0):(o.precision=t=n-r.e,r=de(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)};K.inverseSine=K.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=nt(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)))};K.inverseTangent=K.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<=Qr)return s=nt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Qr)return s=nt(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(Z=!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)),Z=!0,G(s,l.precision=m,l.rounding=d,!0)};K.isFinite=function(){return!!this.d};K.isInteger=K.isInt=function(){return!!this.d&&_e(this.e/j)>this.d.length-2};K.isNaN=function(){return!this.s};K.isNegative=K.isNeg=function(){return this.s<0};K.isPositive=K.isPos=function(){return this.s>0};K.isZero=function(){return!!this.d&&this.d[0]===0};K.lessThan=K.lt=function(i){return this.cmp(i)<0};K.lessThanOrEqualTo=K.lte=function(i){return this.cmp(i)<1};K.logarithm=K.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(Z=!1,a=m+p,s=Lt(c,a),n=e?or(l,a+10):Lt(i,a),u=de(s,n,a,1),bn(u.d,r=m,d))do if(a+=10,s=Lt(c,a),n=e?or(l,a+10):Lt(i,a),u=de(s,n,a,1),!o){+Le(u.d).slice(r+1,r+15)+1==1e14&&(u=G(u,m+1,0));break}while(bn(u.d,r+=10,d));return Z=!0,G(u,m,d)};K.minus=K.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 Z?G(i,a,u):i}if(t=_e(i.e/j),l=_e(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]=rt-1;--c[r],c[n]+=rt}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=ar(c,t),Z?G(i,a,u):i):new y(u===3?-0:0)};K.modulo=K.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]?G(new n(t),n.precision,n.rounding):(Z=!1,n.modulo==9?(e=de(t,i.abs(),0,3,1),e.s*=i.s):e=de(t,i,0,n.modulo,1),e=e.times(i),Z=!0,t.minus(e))};K.naturalExponential=K.exp=function(){return Zr(this)};K.naturalLogarithm=K.ln=function(){return Lt(this)};K.negated=K.neg=function(){var i=new this.constructor(this);return i.s=-i.s,G(i)};K.plus=K.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)),Z?G(i,a,u):i;if(o=_e(m.e/j),n=_e(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)/rt|0,c[r]%=rt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return i.d=c,i.e=ar(c,n),Z?G(i,a,u):i};K.precision=K.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(Rt+i);return t.d?(e=xo(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};K.round=function(){var i=this,e=i.constructor;return G(new e(i),i.e+1,e.rounding)};K.sine=K.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=za(n,Co(n,t)),n.precision=i,n.rounding=e,G(It>2?t.neg():t,i,e,!0)):new n(NaN)};K.squareRoot=K.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(Z=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=Le(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=_e((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(de(s,o,t+2,1)).times(.5),Le(o.d).slice(0,t)===(e=Le(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(G(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")&&(G(n,u+1,1),i=!n.times(n).eq(s));break}return Z=!0,G(n,u,l.rounding,i)};K.tangent=K.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=de(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,G(It==2||It==4?t.neg():t,i,e,!0)):new n(NaN)};K.times=K.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=_e(l.e/j)+_e(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%rt|0,e=a/rt|0;o[r]=(o[r]+e)%rt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),i.d=o,i.e=ar(o,t),Z?G(i,m.precision,m.rounding):i};K.toBinary=function(i,e){return Jr(this,2,i,e)};K.toDecimalPlaces=K.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:(ze(i,0,Ot),e===void 0?e=n.rounding:ze(e,0,8),G(t,i+t.e+1,e))};K.toExponential=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=pt(n,!0):(ze(i,0,Ot),e===void 0?e=r.rounding:ze(e,0,8),n=G(new r(n),i+1,e),t=pt(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};K.toFixed=function(i,e){var t,n,r=this,o=r.constructor;return i===void 0?t=pt(r):(ze(i,0,Ot),e===void 0?e=o.rounding:ze(e,0,8),n=G(new o(r),i+r.e+1,e),t=pt(n,!1,i+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};K.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=xo(y)-p.e-1,s=o%j,e.d[0]=xe(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(Rt+a);i=a.gt(e)?o>0?e:c:a}for(Z=!1,a=new f(Le(y)),l=f.precision,f.precision=o=y.length*j*2;m=de(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=de(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=de(c,n,o,1).minus(p).abs().cmp(de(u,t,o,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,Z=!0,d};K.toHexadecimal=K.toHex=function(i,e){return Jr(this,16,i,e)};K.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:ze(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]?(Z=!1,t=de(t,i,0,e,1).times(i),Z=!0,G(t)):(i.s=t.s,t=i),t};K.toNumber=function(){return+this};K.toOctal=function(i,e){return Jr(this,8,i,e)};K.toPower=K.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(xe(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,i.eq(1))return G(a,n,o);if(e=_e(i.e/j),e>=i.d.length-1&&(t=c<0?-c:c)<=qa)return r=Bo(u,a,t,n),i.s<0?new u(1).div(r):G(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=xe(+a,c),e=t==0||!isFinite(t)?_e(c*(Math.log("0."+Le(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):(Z=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Zr(i.times(Lt(a,n+t)),n),r.d&&(r=G(r,n+5,1),bn(r.d,n,o)&&(e=n+10,r=G(Zr(i.times(Lt(a,e+t)),e),e+5,1),+Le(r.d).slice(n+1,n+15)+1==1e14&&(r=G(r,n+1,0)))),r.s=s,Z=!0,u.rounding=o,G(r,n,o))};K.toPrecision=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=pt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(ze(i,1,Ot),e===void 0?e=r.rounding:ze(e,0,8),n=G(new r(n),i,e),t=pt(n,i<=n.e||n.e<=r.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};K.toSignificantDigits=K.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):(ze(i,1,Ot),e===void 0?e=n.rounding:ze(e,0,8)),G(new n(t),i,e)};K.toString=function(){var i=this,e=i.constructor,t=pt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};K.truncated=K.trunc=function(){return G(new this.constructor(this),this.e+1,1)};K.valueOf=K.toJSON=function(){var i=this,e=i.constructor,t=pt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function Le(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+=Ct(t)),o+=n;s=i[e],n=s+"",t=j-n.length,t&&(o+=Ct(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function ze(i,e,t){if(i!==~~i||i<e||i>t)throw Error(Rt+i)}function bn(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=xe(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)==xe(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)==xe(10,e-3)-1,s}function nr(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]+=jr.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 Ga(i,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/ur(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),i.precision+=t,e=nn(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 de=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,A,T,k,I,B,x,C,_,V,H,D=n.constructor,ee=n.s==r.s?1:-1,te=n.d,re=r.d;if(!te||!te[0]||!re||!re[0])return new D(!n.s||!r.s||(te?re&&te[0]==re[0]:!re)?NaN:te&&te[0]==0||!re?ee*0:ee/0);for(u?(p=1,l=n.e-r.e):(u=rt,p=j,l=_e(n.e/p)-_e(r.e/p)),V=re.length,C=te.length,g=new D(ee),h=g.d=[],m=0;re[m]==(te[m]||0);m++);if(re[m]>(te[m]||0)&&l--,o==null?(I=o=D.precision,s=D.rounding):a?I=o+(n.e-r.e)+1:I=o,I<0)h.push(1),y=!0;else{if(I=I/p+2|0,m=0,V==1){for(d=0,re=re[0],I++;(m<C||d)&&I--;m++)B=d*u+(te[m]||0),h[m]=B/re|0,d=B%re|0;y=d||m<C}else{for(d=u/(re[0]+1)|0,d>1&&(re=i(re,d,u),te=i(te,d,u),V=re.length,C=te.length),x=V,A=te.slice(0,V),T=A.length;T<V;)A[T++]=0;H=re.slice(),H.unshift(0),_=re[0],re[1]>=u/2&&++_;do d=0,c=e(re,A,V,T),c<0?(k=A[0],V!=T&&(k=k*u+(A[1]||0)),d=k/_|0,d>1?(d>=u&&(d=u-1),f=i(re,d,u),b=f.length,T=A.length,c=e(f,A,b,T),c==1&&(d--,t(f,V<b?H:re,b,u))):(d==0&&(c=d=1),f=re.slice()),b=f.length,b<T&&f.unshift(0),t(A,f,T,u),c==-1&&(T=A.length,c=e(re,A,V,T),c<1&&(d++,t(A,V<T?H:re,T,u))),T=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[T++]=te[x]||0:(A=[te[x]],T=1);while((x++<C||A[0]!==void 0)&&I--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,ho=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,G(g,a?o+g.e+1:o,s,y)}return g}}();function G(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/xe(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/xe(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%xe(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/xe(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]=xe(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=xe(10,j-o),m[d]=s>0?(l/xe(10,r-s)%xe(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]==rt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=rt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return Z&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function pt(i,e,t){if(!i.isFinite())return Ko(i);var n,r=i.e,o=Le(i.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Ct(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i.e<0?"e":"e+")+i.e):r<0?(o="0."+Ct(-r-1)+o,t&&(n=t-s)>0&&(o+=Ct(n))):r>=s?(o+=Ct(r+1-s),t&&(n=t-r-1)>0&&(o=o+"."+Ct(n))):((n=r+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(o+="."),o+=Ct(n))),o}function ar(i,e){var t=i[0];for(e*=j;t>=10;t/=10)e++;return e}function or(i,e,t){if(e>Ua)throw Z=!0,t&&(i.precision=t),Error(Po);return G(new i(rr),e,1,!0)}function nt(i,e,t){if(e>Qr)throw Error(Po);return G(new i(ir),e,t,!0)}function xo(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 Ct(i){for(var e="";i--;)e+="0";return e}function Bo(i,e,t,n){var r,o=new i(1),s=Math.ceil(n/j+4);for(Z=!1;;){if(t%2&&(o=o.times(e),wo(o.d,s)&&(r=!0)),t=_e(t/2),t===0){t=o.d.length-1,r&&o.d[t]===0&&++o.d[t];break}e=e.times(e),wo(e.d,s)}return Z=!0,o}function go(i){return i.d[i.d.length-1]&1}function So(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 Zr(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?(Z=!1,u=y):u=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(xe(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new d(1),d.precision=u;;){if(o=G(o.times(i),u,1),t=t.times(++l),a=s.plus(de(o,t,u,1)),Le(a.d).slice(0,u)===Le(s.d).slice(0,u)){for(r=m;r--;)s=G(s.times(s),u,1);if(e==null)if(c<3&&bn(s.d,u-n,p,c))d.precision=u+=10,t=o=a=new d(1),l=0,c++;else return G(s,d.precision=y,p,Z=!0);else return d.precision=y,s}s=a}}function Lt(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,A=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?(Z=!1,l=A):l=e,g.precision=l+=y,t=Le(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=Le(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=or(g,l+2,A).times(o+""),f=Lt(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?G(f,A,h,Z=!0):f;for(m=f,u=s=f=de(f.minus(1),f.plus(1),l,1),d=G(f.times(f),l,1),r=3;;){if(s=G(s.times(d),l,1),c=u.plus(de(s,new g(r),l,1)),Le(c.d).slice(0,l)===Le(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(or(g,l+2,A).times(o+""))),u=de(u,new g(p),l,1),e==null)if(bn(u.d,l-y,h,a))g.precision=l+=y,c=s=f=de(m.minus(1),m.plus(1),l,1),d=G(f.times(f),l,1),r=a=1;else return G(u,g.precision=A,h,Z=!0);else return g.precision=A,u;u=c,r+=2}}function Ko(i){return String(i.s*i.s/0)}function $r(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),Z&&(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 Xa(i,e){var t,n,r,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Io.test(e))return $r(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(Da.test(e))t=16,e=e.toLowerCase();else if(va.test(e))t=2;else if(Wa.test(e))t=8;else throw Error(Rt+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=Bo(n,new n(t),o,o*2)),c=nr(e,t,rt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(i.s*0):(i.e=ar(c,l),i.d=c,Z=!1,s&&(i=de(i,r,a*4)),u&&(i=i.times(Math.abs(u)<54?xe(2,u):gn.pow(2,u))),Z=!0,i)}function za(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:nn(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/ur(5,t)),e=nn(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 nn(i,e,t,n,r){var o,s,a,u,c=1,l=i.precision,m=Math.ceil(l/j);for(Z=!1,u=t.times(t),a=new i(n);;){if(s=de(a.times(u),new i(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=de(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 Z=!0,s.d.length=m+1,s}function ur(i,e){for(var t=i;--e;)t*=i;return t}function Co(i,e){var t,n=e.s<0,r=nt(i,i.precision,1),o=r.times(.5);if(e=e.abs(),e.lte(o))return It=n?4:1,e;if(t=e.divToInt(r),t.isZero())It=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(o))return It=go(t)?n?2:3:n?4:1,e;It=go(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Jr(i,e,t,n){var r,o,s,a,u,c,l,m,d,p=i.constructor,y=t!==void 0;if(y?(ze(t,1,Ot),n===void 0?n=p.rounding:ze(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=Ko(i);else{for(l=pt(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=nr(pt(d),10,r),d.e=d.d.length),m=nr(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=de(i,d,t,n,0,r),m=i.d,o=i.e,c=ho),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+=jr.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=nr(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=jr.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 wo(i,e){if(i.length>e)return i.length=e,!0}function Ya(i){return new this(i).abs()}function ja(i){return new this(i).acos()}function Ha(i){return new this(i).acosh()}function Qa(i,e){return new this(i).plus(e)}function Za(i){return new this(i).asin()}function $a(i){return new this(i).asinh()}function Ja(i){return new this(i).atan()}function eu(i){return new this(i).atanh()}function tu(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=nt(this,o,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?nt(this,n,r):new this(0),t.s=i.s):!i.d||e.isZero()?(t=nt(this,o,1).times(.5),t.s=i.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(de(i,e,o,1)),e=nt(this,o,1),this.precision=n,this.rounding=r,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(de(i,e,o,1)),t}function nu(i){return new this(i).cbrt()}function ru(i){return G(i=new this(i),i.e+1,2)}function iu(i,e,t){return new this(i).clamp(e,t)}function ou(i){if(!i||typeof i!="object")throw Error(sr+"Object expected");var e,t,n,r=i.defaults===!0,o=["precision",1,Ot,"rounding",0,8,"toExpNeg",-tn,0,"toExpPos",0,tn,"maxE",0,tn,"minE",-tn,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],r&&(this[t]=Hr[t]),(n=i[t])!==void 0)if(_e(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Rt+t+": "+n);if(t="crypto",r&&(this[t]=Hr[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(ko);else this[t]=!1;else throw Error(Rt+t+": "+n);return this}function su(i){return new this(i).cos()}function au(i){return new this(i).cosh()}function Lo(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,Ao(o)){c.s=o.s,Z?!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++;Z?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 $r(c,o.toString())}else if(u!=="string")throw Error(Rt+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),Io.test(o)?$r(c,o):Xa(c,o)}if(r.prototype=K,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=ou,r.clone=Lo,r.isDecimal=Ao,r.abs=Ya,r.acos=ja,r.acosh=Ha,r.add=Qa,r.asin=Za,r.asinh=$a,r.atan=Ja,r.atanh=eu,r.atan2=tu,r.cbrt=nu,r.ceil=ru,r.clamp=iu,r.cos=su,r.cosh=au,r.div=uu,r.exp=cu,r.floor=lu,r.hypot=mu,r.ln=du,r.log=pu,r.log10=yu,r.log2=fu,r.max=bu,r.min=gu,r.mod=wu,r.mul=Au,r.pow=hu,r.random=Pu,r.round=ku,r.sign=Tu,r.sin=Iu,r.sinh=xu,r.sqrt=Bu,r.sub=Su,r.sum=Ku,r.tan=Cu,r.tanh=Lu,r.trunc=Ru,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 uu(i,e){return new this(i).div(e)}function cu(i){return new this(i).exp()}function lu(i){return G(i=new this(i),i.e+1,3)}function mu(){var i,e,t=new this(0);for(Z=!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 Z=!0,new this(1/0);t=e}return Z=!0,t.sqrt()}function Ao(i){return i instanceof gn||i&&i.toStringTag===To||!1}function du(i){return new this(i).ln()}function pu(i,e){return new this(i).log(e)}function fu(i){return new this(i).log(2)}function yu(i){return new this(i).log(10)}function bu(){return So(this,arguments,"lt")}function gu(){return So(this,arguments,"gt")}function wu(i,e){return new this(i).mod(e)}function Au(i,e){return new this(i).mul(e)}function hu(i,e){return new this(i).pow(e)}function Pu(i){var e,t,n,r,o=0,s=new this(1),a=[];if(i===void 0?i=this.precision:ze(i,1,Ot),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(ko);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],i%=j,n&&i&&(r=xe(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 ku(i){return G(i=new this(i),i.e+1,this.rounding)}function Tu(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function Iu(i){return new this(i).sin()}function xu(i){return new this(i).sinh()}function Bu(i){return new this(i).sqrt()}function Su(i,e){return new this(i).sub(e)}function Ku(){var i=0,e=arguments,t=new this(e[i]);for(Z=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return Z=!0,G(t,this.precision,this.rounding)}function Cu(i){return new this(i).tan()}function Lu(i){return new this(i).tanh()}function Ru(i){return G(i=new this(i),i.e+1,1)}K[Symbol.for("nodejs.util.inspect.custom")]=K.toString;K[Symbol.toStringTag]="Decimal";var gn=K.constructor=Lo(Hr);rr=new gn(rr);ir=new gn(ir);var E=gn;import{PublicKey as ii}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ou}from"@solana/spl-token";import{PublicKey as ye,SystemProgram as Ro,SYSVAR_RENT_PUBKEY as Nu}from"@solana/web3.js";function P({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var ei=[P({pubkey:Ou,isWritable:!1}),P({pubkey:Ro.programId,isWritable:!1}),P({pubkey:Nu,isWritable:!1})];function ti({publicKey:i,transformSol:e}){let t=ni(i.toString());if(t instanceof ye)return e&&t.equals(Be)?$:t;if(e&&t.toString()===Be.toBase58())return $;if(typeof t=="string"){if(t===ye.default.toBase58())return ye.default;try{return new ye(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ni(i){try{return new ye(i)}catch{return i}}var cr=new ye("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Oo=new ye("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),it=new ye("SysvarRent111111111111111111111111111111111"),No=new ye("SysvarC1ock11111111111111111111111111111111"),rn=new ye("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),_u=new ye("Sysvar1nstructions1111111111111111111111111"),_o=Ro.programId,hm=new ye("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Pm=new ye("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),km=new ye("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Tm=new ye("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Im=new ye("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),xm=new ye("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Bm=new ye("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Sm=new ye("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Km=new ye("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Cm=new ye("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Lm=new ye("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),$=new ye("So11111111111111111111111111111111111111112"),Be=ye.default;function ri(i){return ti({publicKey:i,transformSol:!0})}import{PublicKey as Mu}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mo}from"@solana/spl-token";var Nt={chainId:101,address:Mu.default.toBase58(),programId:Mo.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Re={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Mo.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 oi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:o=!1,isToken2022:s=!1}){if(e===Be.toBase58()||e instanceof ii&&Be.equals(e)){this.decimals=Re.decimals,this.symbol=Re.symbol,this.name=Re.name,this.mint=new ii(Re.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?ii.default:ti({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ae=oi;Ae.WSOL=new oi(W(O({},Re),{mint:Re.address}));import mr from"big.js";import Fu from"bn.js";import vu from"decimal.js-light";import Eu from"toformat";var Vu=Eu,wn=Vu;var lr=oe("module/fraction"),si=wn(mr),An=wn(vu),Du={[0]:An.ROUND_DOWN,[1]:An.ROUND_HALF_UP,[2]:An.ROUND_UP},Wu={[0]:mr.roundDown,[1]:mr.roundHalfUp,[2]:mr.roundUp},le=class{constructor(e,t=new Fu(1)){this.numerator=Y(e),this.denominator=Y(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new le(this.denominator,this.numerator)}add(e){let t=e instanceof le?e:new le(Y(e));return this.denominator.eq(t.denominator)?new le(this.numerator.add(t.numerator),this.denominator):new le(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof le?e:new le(Y(e));return this.denominator.eq(t.denominator)?new le(this.numerator.sub(t.numerator),this.denominator):new le(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof le?e:new le(Y(e));return new le(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof le?e:new le(Y(e));return new le(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||lr.logWithError(`${e} is not an integer.`),e<=0&&lr.logWithError(`${e} is not positive.`),An.set({precision:e+1,rounding:Du[n]});let r=new An(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)||lr.logWithError(`${e} is not an integer.`),e<0&&lr.logWithError(`${e} is negative.`),si.DP=e,si.RM=Wu[n]||1,new si(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Uu=oe("Raydium_price"),$e=class extends le{constructor(t){let{baseToken:n,quoteToken:r,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=r,this.scalar=new le(ai(n.decimals),ai(r.decimals))}get raw(){return new le(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Uu.logWithError("mul token not equals");let n=super.mul(t);return new $e({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 ui=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},dr=ui;dr.SOL=new ui(Nt);import Gu from"bn.js";var Eo=new le(new Gu(100)),He=class extends le{toSignificant(e=5,t,n){return this.mul(Eo).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eo).toFixed(e,t,n)}};var qe=new Ye(0),Fo=new Ye(1),Bd=new Ye(2),Sd=new Ye(3),Kd=new Ye(5),ci=new Ye(10),Cd=new Ye(100),Ld=new Ye(1e3),Rd=new Ye(1e4),Vo=9007199254740991;function Y(i){let e=oe("Raydium_parseBigNumberish");if(i instanceof Ye)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new Ye(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Vo||i<=-Vo)&&e.logWithError(`BigNumberish number overflow: ${i}`),new Ye(String(i))):typeof i=="bigint"?new Ye(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new Ye(0))}function ai(i){return ci.pow(Y(i))}function pr(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 zu=oe("Raydium_amount"),Do=wn(Xu);function Yu(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")):zu.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var be=class extends le{constructor(t,n,r=!0,o){let s=new fr(0),a=ci.pow(new fr(t.decimals));if(r)s=Y(n);else{let u=new fr(0),c=new fr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Yu(n.toString(),t.decimals);u=Y(l),c=Y(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=oe(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 be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(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 Do.DP=this.token.decimals,new Do(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function vo(i){return typeof i=="object"&&i!==null&&![Ae,be,ju,le,Hu,$e,He].some(e=>typeof e=="object"&&i instanceof e)}function Ue(i){return typeof i=="string"?ni(i):Array.isArray(i)?i.map(e=>Ue(e)):vo(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ue(t)])):i}import{PublicKey as kn,sendAndConfirmTransaction as fi,Transaction as Tn,TransactionMessage as In,VersionedTransaction as xn}from"@solana/web3.js";import tc from"axios";var M={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 Qu,ComputeBudgetProgram as Wo,Transaction as Uo,TransactionMessage as Zu,Keypair as Go,VersionedTransaction as Xo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as $u}from"@solana/spl-token";var qo=oe("Raydium_txUtil"),zo=1644;function yr(i){let e=[],t=[];return i.microLamports&&(e.push(Wo.setComputeUnitPrice({microLamports:i.microLamports})),t.push(M.SetComputeUnitPrice)),i.units&&(e.push(Wo.setComputeUnitLimit({units:i.units})),t.push(M.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function on(i){var e,t;try{return((t=await((e=i.getLatestBlockhash)==null?void 0:e.call(i)))==null?void 0:t.blockhash)||(await i.getRecentBlockhash()).blockhash}catch{return(await i.getRecentBlockhash()).blockhash}}function li(i,e){i.length<1&&qo.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&qo.logWithError(`no signers provided:, ${e.toString()}`);let t=new Uo;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<zo}catch{return!1}}function ue(i,e){let[t,n]=Qu.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}function hn({instructions:i,payer:e,signers:t}){return li(i,[e,...t])}function Pn({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Go.generate().publicKey.toString()}){let o=new Zu({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xo(o).serialize()).toString("base64").length<zo}catch{return!1}}var Ju=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i);function Gt(i){let e=[];return i.forEach(t=>{t instanceof Uo&&(t.recentBlockhash||(t.recentBlockhash=$u.toBase58()),t.feePayer||(t.feePayer=Go.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Xo&&(n=Ju(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as Yo,AddressLookupTableAccount as gr}from"@solana/web3.js";import{PublicKey as ec}from"@solana/web3.js";import{getTransferFeeConfig as wp,unpackMint as Ap}from"@solana/spl-token";var mi=oe("Raydium_accountInfo_util");async function ft(i,e,t){let{batchRequest:n,commitment:r="confirmed"}=O({batchRequest:!1},t),o=di(e,100),s=new Array(o.length).fill([]);if(n){let a=o.map(l=>{let m=i._buildArgs([l.map(d=>d.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=di(a,10);s=(await(await Promise.all(u.map(async l=>await i._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:d,executable:p,lamports:y,owner:f,rentEpoch:b}=m;return d.length!==2&&d[1]!=="base64"&&mi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(d[0],"base64"),executable:p,lamports:y,owner:new ec(f),rentEpoch:b}}return null})))}else try{s=await Promise.all(o.map(a=>i.getMultipleAccountsInfo(a,r)))}catch(a){a instanceof Error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${a.message}`)}return s.flat()}async function br(i,e,t){let n=await ft(i,e.map(r=>r.pubkey),t);return e.map((r,o)=>W(O({},r),{accountInfo:n[o]}))}async function pi({connection:i,address:e}){let t=await ft(i,[...new Set(e.map(r=>r.toString()))].map(r=>new Yo(r))),n={};for(let r=0;r<e.length;r++){let o=t[r],s=e[r];if(!o)continue;let a=new gr({key:s,state:gr.deserialize(o.data)});n[s.toString()]=a,wr[s.toString()]=a}return n}var wr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new gr({key:new Yo("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:gr.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 Ar=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}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 tc.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}=yr(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!==kn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){let t=new Tn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async()=>{var r;let n=await on(this.connection);if(t.recentBlockhash=n,this.signers.length&&t.sign(...this.signers),Gt([t]),(r=this.owner)!=null&&r.isKeyPair)return{txId:await fi(this.connection,t,this.signers.find(o=>o.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer]),signedTx:t};if(this.signAllTransactions){let o=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(o[0].serialize(),{skipPreflight:!0}),signedTx:o[0]}}throw new Error("please connect wallet first")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),o=t.filter(c=>c.transaction.instructions.length>0),s=[r,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async c=>{var p;let{sequentially:l,onTxUpdate:m}=c||{},d=await on(this.connection);if((p=this.owner)!=null&&p.isKeyPair)return{txIds:await await Promise.all(s.map(async(y,f)=>(y.recentBlockhash=d,await fi(this.connection,y,a[f].find(b=>b.publicKey.equals(this.owner.publicKey))?a[f]:[...a[f],this.owner.signer])))),signedTxs:s};if(this.signAllTransactions){let y=s.map((b,g)=>(b.recentBlockhash=d,a[g].length&&b.sign(...a[g]),b));Gt(y);let f=await this.signAllTransactions(y);if(l){let b=0,g=[],h=async()=>{if(!f[b])return;let A=await this.connection.sendRawTransaction(f[b].serialize(),{skipPreflight:!0});g.push({txId:A,status:"sent",signedTx:f[b]}),m==null||m([...g]),b++,this.connection.onSignature(A,T=>{let k=g.findIndex(I=>I.txId===A);k>-1&&(g[k].status=T.err?"error":"success"),m==null||m([...g]),T.err||h()},"processed"),this.connection.getSignatureStatus(A)};return await h(),{txIds:g.map(A=>A.txId),signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let h=await this.connection.sendRawTransaction(f[g].serialize(),{skipPreflight:!0});b.push(h)}return{txIds:b,signedTxs:f}}}throw new Error("please connect wallet first")},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){let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=d,o=we(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=O(O({},wr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let p of a)s[p]===void 0&&u.push(new kn(p));let c=await pi({connection:this.connection,address:u});for(let[p,y]of Object.entries(c))s[p]=y;let l=new In({payerKey:this.feePayer,recentBlockhash:r?kn.default.toBase58():await on(this.connection),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),m=new xn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async()=>{var p;if(Gt([m]),(p=this.owner)!=null&&p.isKeyPair){this.signers.find(g=>g.publicKey.equals(this.owner.publicKey))||m.sign([this.owner.signer]);let y=await this.connection.sendTransaction(m,{skipPreflight:!0}),{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash();return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:y},"confirmed"),{txId:y,signedTx:m}}if(this.signAllTransactions){let y=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(y[0],{skipPreflight:!0}),signedTx:y[0]}}throw new Error("please connect wallet first")},extInfo:o||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),o=t.filter(c=>c.builder.instructions.length>0),s=[r,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return s.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var d;Gt(s);let{sequentially:l,onTxUpdate:m}=c||{};if((d=this.owner)!=null&&d.isKeyPair){let{lastValidBlockHeight:p,blockhash:y}=await this.connection.getLatestBlockhash();return s.forEach((f,b)=>{a[b].find(g=>g.publicKey.equals(this.owner.publicKey))||f.sign([this.owner.signer])}),{txIds:await Promise.all(s.map(async f=>{let b=await this.connection.sendTransaction(f);return await this.connection.confirmTransaction({blockhash:y,lastValidBlockHeight:p,signature:b},"confirmed"),b})),signedTxs:s}}if(this.signAllTransactions){let p=await this.signAllTransactions(s);if(l){let y=0,f=[],b=async()=>{if(!p[y])return;let g=await this.connection.sendTransaction(p[y],{skipPreflight:!0});f.push({txId:g,status:"sent",signedTx:p[y]}),m==null||m([...f]),y++,this.connection.onSignature(g,h=>{let A=f.findIndex(T=>T.txId===g);A>-1&&(f[A].status=h.err?"error":"success"),m==null||m([...f]),h.err||b()},"processed"),this.connection.getSignatureStatus(g)};return b(),{txIds:[],signedTxs:p}}else{let y=[];for(let f=0;f<p.length;f+=1){let b=await this.connection.sendTransaction(p[f],{skipPreflight:!0});y.push(b)}return{txIds:y,signedTxs:p}}}throw new Error("please connect wallet first")},extInfo:n||{}}}async sizeCheckBuild(e){let c=e||{},{computeBudgetConfig:t}=c,n=we(c,["computeBudgetConfig"]),r=t?yr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((l,m)=>W(O({},l),{[m.publicKey.toBase58()]:m}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(l=>{let m=[...u,l],d=t?[...r.instructions,...m]:m,y=[...new Set(m.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new kn(f));if(u.length<12&&hn({instructions:d,payer:this.feePayer,signers:y})||hn({instructions:m,payer:this.feePayer,signers:y}))u.push(l);else{if(u.length===0)throw Error("item ins too big");hn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:y})?s.push(new Tn().add(...r.instructions,...u)):s.push(new Tn().add(...u)),a.push(Array.from(new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>o[f]).filter(f=>f!==void 0)),u=[l]}}),u.length>0){let m=[...new Set(u.map(d=>d.keys.filter(p=>p.isSigner).map(p=>p.pubkey.toString())).flat()).values()].map(d=>o[d]).filter(d=>d!==void 0);hn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:m.map(d=>d.publicKey)})?s.push(new Tn().add(...r.instructions,...u)):s.push(new Tn().add(...u)),a.push(m)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d}=l||{},p=await on(this.connection);if(s.forEach(async(f,b)=>{f.recentBlockhash=p,a[b].length&&f.sign(...a[b])}),Gt(s),(y=this.owner)!=null&&y.isKeyPair)return{txIds:await Promise.all(s.map(async(f,b)=>await fi(this.connection,f,a[b].find(g=>g.publicKey.equals(this.owner.publicKey))?a[b]:[...a[b],this.owner.signer]))),signedTxs:s};if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(m){let b=0,g=[],h=async()=>{if(!f[b])return;let A=await this.connection.sendRawTransaction(f[b].serialize(),{skipPreflight:!0});g.push({txId:A,status:"sent",signedTx:f[b]}),d==null||d([...g]),b++,this.connection.onSignature(A,T=>{let k=g.findIndex(I=>I.txId===A);k>-1&&(g[k].status=T.err?"error":"success"),d==null||d([...g]),T.err||h()},"processed"),this.connection.getSignatureStatus(A)};return await h(),{txIds:g.map(A=>A.txId),signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let h=await this.connection.sendRawTransaction(f[g].serialize(),{skipPreflight:!0});b.push(h)}return{txIds:b,signedTxs:f}}}throw new Error("please connect wallet first")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,o=we(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=O(O({},wr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let g of a)s[g]===void 0&&u.push(new kn(g));let c=await pi({connection:this.connection,address:u});for(let[g,h]of Object.entries(c))s[g]=h;let l=t?yr(t):{instructions:[],instructionTypes:[]},m=await on(this.connection),d=this.signers.reduce((g,h)=>W(O({},g),{[h.publicKey.toBase58()]:h}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let h=[...f,g],A=t?[...l.instructions,...h]:h;if(f.length<12&&Pn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||Pn({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let T={};for(let k of[...new Set(a)])s[k]!==void 0&&(T[k]=s[k]);if(t&&Pn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new xn(k))}else{let k=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new xn(k))}y.push(Array.from(new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(k=>d[k]).filter(k=>k!==void 0)),f=[g]}}),f.length>0){let h=[...new Set(f.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat()).values()].map(A=>d[A]).filter(A=>A!==void 0);if(t&&Pn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let A=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new xn(A))}else{let A=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new xn(A))}y.push(h)}return{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var T;let{sequentially:h,onTxUpdate:A}=g||{};if(p.map(async(k,I)=>{y[I].length&&k.sign(y[I])}),Gt(p),(T=this.owner)!=null&&T.isKeyPair){let{lastValidBlockHeight:k,blockhash:I}=await this.connection.getLatestBlockhash();return p.forEach((B,x)=>{y[x].find(C=>C.publicKey.equals(this.owner.publicKey))||B.sign([this.owner.signer])}),{txIds:await Promise.all(p.map(async B=>{let x=await this.connection.sendTransaction(B);return await this.connection.confirmTransaction({blockhash:I,lastValidBlockHeight:k,signature:x},"confirmed"),x})),signedTxs:p}}if(this.signAllTransactions){let k=await this.signAllTransactions(p);if(h){let I=0,B=[],x=async()=>{if(!k[I])return;let C=await this.connection.sendTransaction(k[I],{skipPreflight:!0});B.push({txId:C,status:"sent",signedTx:k[I]}),A==null||A([...B]),I++,this.connection.onSignature(C,_=>{let V=B.findIndex(H=>H.txId===C);V>-1&&(B[V].status=_.err?"error":"success"),A==null||A([...B]),_.err||x()},"processed"),this.connection.getSignatureStatus(C)};return x(),{txIds:[],signedTxs:k}}else{let I=[];for(let B=0;B<k.length;B+=1){let x=await this.connection.sendTransaction(k[B],{skipPreflight:!0});I.push(x)}return{txIds:I,signedTxs:k}}}throw new Error("please connect wallet first")},extInfo:o||{}}}};var ot=class{constructor(e){this._owner=e}get publicKey(){return ot.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return ot.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return ot.isKeyPair(this._owner)}get isPublicKey(){return ot.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!ot.isKeyPair(e)}};function di(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 Te}from"@solana/web3.js";var jo=new Te("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Ho=new Te("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Bn=new Te("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Wp=new Te("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),qp=new Te("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Up=new Te("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Qo=new Te("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Gp=new Te("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Xp=new Te("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),zp=new Te("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),nc=new Te("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),rc=new Te("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),ic=new Te("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),oc=new Te("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Yp=new Te("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),jp=new Te("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Hp=new Te("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Qp=new Te("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Zp=new Te("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),$p=new Te("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Sn={IDO_PROGRAM_ID_V1:nc,IDO_PROGRAM_ID_V2:rc,IDO_PROGRAM_ID_V3:ic,IDO_PROGRAM_ID_V4:oc};import{PublicKey as sc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ac}from"@solana/spl-token";function ge(i,e,t){return ue([i.toBuffer(),(t!=null?t:ac).toBuffer(),e.toBuffer()],new sc("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import st from"bn.js";var Kn=1e4;function Se(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let r=W(O({},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 st(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===Kn){let u=new st(o.maximumFee.toString());return{amount:i.add(u),fee:u,expirationTime:a}}else{let u=Cn(i.mul(new st(Kn)),new st(Kn-o.transferFeeBasisPoints)),c=new st(o.maximumFee.toString()),l=u.sub(i).gt(c)?i.add(c):u,m=Cn(l.mul(new st(o.transferFeeBasisPoints)),new st(Kn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Cn(i.mul(new st(o.transferFeeBasisPoints)),new st(Kn)),c=u.gt(s)?s:u;return{amount:i,fee:c,expirationTime:a}}}function Xt(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function Cn(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new st(0))?t.add(new st(1)):t}var Me={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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"},xf=O({},Me);var Zo="ray_tab_hash",bi="ray_req_hash",uc=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(Zo);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(Zo,i)),i},hr=async n=>{var r=n,{logCount:i=1e3,removeLastLog:e}=r,t=we(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(bi)||"[]").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(W(O({},t),{time:Date.now(),session:uc()}));try{localStorage.setItem(bi,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(bi,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return hr(W(O({},t),{logCount:i,removeLastLog:!0}))}};var Pr=oe("Raydium_Api"),gi=new Map;var kr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=r||1e3,this.api=lc.create({baseURL:this.urlConfigs.BASE_HOST||Me.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Pr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Pr.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&&hr({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Pr.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&&hr({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Pr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Me.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Me.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await this.api.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 this.api.get(this.urlConfigs.CHAIN_TIME||Me.CHAIN_TIME)}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Me.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Me.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Me.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Me.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||Me.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||Me.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>gi.has(s)?(n.push(gi.get(s)),!1):!0),o=[];return r.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Me.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),o.forEach(a=>{gi.set(a.id,a)})),n.concat(o)}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Me.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Me.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Me.CHECK_AVAILABILITY)).data}};var Tr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",$o="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ki,TOKEN_PROGRAM_ID as Et,AccountLayout as un,TOKEN_2022_PROGRAM_ID as vc}from"@solana/spl-token";import{PublicKey as Rr,SystemProgram as Dc}from"@solana/web3.js";var wi=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),he=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=oe(t)}createTxBuilder(e){return this.scope.checkOwner(),new Ar({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,owner:this.scope.owner,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(wi(e))}logInfo(...e){this.logger.info(wi(e))}logAndCreateError(...e){let t=wi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Nc,createCloseAccountInstruction as _c,createTransferInstruction as Mc,TOKEN_PROGRAM_ID as an}from"@solana/spl-token";import{PublicKey as Ec,SystemProgram as Vc}from"@solana/web3.js";import Fc from"bn.js";import{PublicKey as ds,Keypair as Cc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Lc}from"@solana/spl-token";import Rc from"bn.js";import{PublicKey as kc}from"@solana/web3.js";import rs,{isBN as is}from"bn.js";import{bits as mc,BitStructure as ry,blob as dc,Blob as iy,cstr as oy,f32 as sy,f32be as ay,f64 as uy,f64be as cy,greedy as ly,Layout as pc,ns64 as my,ns64be as dy,nu64 as fc,nu64be as py,offset as fy,s16 as yy,s16be as by,s24 as gy,s24be as wy,s32 as yc,s32be as Ay,s40 as hy,s40be as Py,s48 as ky,s48be as Ty,s8 as Iy,seq as bc,struct as xy,Structure as gc,u16 as wc,u16be as By,u24 as Sy,u24be as Ky,u32 as Ac,u32be as Cy,u40 as Ly,u40be as Ry,u48 as Oy,u48be as Ny,u8 as hc,UInt as Pc,union as _y,Union as My,unionLayoutDiscriminator as Ey,utf8 as Vy}from"@solana/buffer-layout";var Ir=pc,Jo=gc;var Ai=Pc;var es=hc,yt=wc;var hi=Ac;var ts=fc;var Oe=yc;var ns=bc;var fe=dc;var Pi=mc;var zt=class extends Ir{constructor(t,n,r){super(t,r);this.blob=fe(t),this.signed=n}decode(t,n=0){let r=new rs(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 rs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},xr=class extends Ir{constructor(t){super(8,t);this._lower=Pi(hi(),!1),this._upper=Pi(hi(),!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 O(O({},r),o)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function F(i){return new Ai(1,i)}function Ge(i){return new Ai(4,i)}function w(i){return new zt(8,!1,i)}function X(i){return new zt(16,!1,i)}function os(i){return new zt(1,!0,i)}function Sr(i){return new zt(8,!0,i)}function ss(i){return new zt(16,!0,i)}var Br=class extends Ir{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 S(i){return new Br(fe(32),e=>new kc(e),e=>e.toBuffer(),i)}function Ee(i){return new Br(es(),Tc,Ic,i)}function Tc(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function Ic(i){return i?1:0}var ki=class extends Jo{decode(e,t){return super.decode(e,t)}};function N(i,e,t){return new ki(i,e,t)}function q(i,e,t){let n,r=typeof e=="number"?e:is(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=is(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 ns(i,r,t)}var sn=N([S("mint"),S("owner"),w("amount"),Ge("delegateOption"),S("delegate"),F("state"),Ge("isNativeOption"),w("isNative"),w("delegatedAmount"),Ge("closeAuthorityOption"),S("closeAuthority")]);function xc(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function Ti(i,...e){if(!xc(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 Ii(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 as(i,e){Ti(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Cr=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),at=(i,e)=>i<<32-e|i>>>e;var $y=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Bc(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function xi(i){return typeof i=="string"&&(i=Bc(i)),Ti(i),i}var Kr=class{clone(){return this._cloneInto()}},Jy={}.toString;function us(i){let e=n=>i().update(xi(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function Sc(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 cs=(i,e,t)=>i&e^~i&t,ls=(i,e,t)=>i&e^i&t^e&t,Lr=class extends Kr{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=Cr(this.buffer)}update(e){Ii(this);let{view:t,buffer:n,blockLen:r}=this;e=xi(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=Cr(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){Ii(this),as(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;Sc(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=Cr(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 Kc=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]),_t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Mt=new Uint32Array(64),Bi=class extends Lr{constructor(){super(64,32,8,!1),this.A=_t[0]|0,this.B=_t[1]|0,this.C=_t[2]|0,this.D=_t[3]|0,this.E=_t[4]|0,this.F=_t[5]|0,this.G=_t[6]|0,this.H=_t[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)Mt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Mt[m-15],p=Mt[m-2],y=at(d,7)^at(d,18)^d>>>3,f=at(p,17)^at(p,19)^p>>>10;Mt[m]=f+Mt[m-7]+y+Mt[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=at(a,6)^at(a,11)^at(a,25),p=l+d+cs(a,u,c)+Kc[m]+Mt[m]|0,f=(at(n,2)^at(n,13)^at(n,22))+ls(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(){Mt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ms=us(()=>new Bi);var bb=oe("Raydium_Util");function ps({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:o,account:s}of t.value){let a=sn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:ge(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:ds.default,amount:new Rc(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ve({fromPublicKey:i,programId:e=Lc}){let t=Cc.generate().publicKey.toBase58().slice(0,32);return{publicKey:Oc(i,t,e),seed:t}}function Oc(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ms(n);return new ds(r)}function Si(i){let{mint:e,tokenAccount:t,owner:n,programId:r=an}=i;return Nc(t,e,n,r)}function xt(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:o=an}=i;return _c(e,t,r,n,o)}async function bt(i){let{connection:e,amount:t,commitment:n,payer:r,owner:o,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(sn.span,n),u=Y(t).add(new Fc(a)),c=Ve({fromPublicKey:r,programId:an});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Vc.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:sn.span,programId:an}),Si({mint:new Ec(Re.address),tokenAccount:c.publicKey,owner:o,programId:an})],instructionTypes:[M.CreateAccount,M.InitAccount],endInstructionTypes:s?[]:[M.CloseAccount],endInstructions:s?[]:[xt({tokenAccount:c.publicKey,payer:r,owner:o})]}}function Ln({source:i,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:o=an}){return Mc(i,e,t,BigInt(String(n)),r,o)}var Rn=class extends he{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;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 ge(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=O(O({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Et},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:vc},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=ps({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),"confirmed"),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Et,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)return r&&s.equals(u),u}}async getOrCreateTokenAccount(t){var y,f,b;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new Rr(t.tokenProgram||Et),m=this.getAssociatedTokenAccount(n,new Rr(l)),d=(a?[]:this.tokenAccountRawInfos).filter(g=>g.accountInfo.mint.equals(n)&&(!o||g.pubkey.equals(m))).sort((g,h)=>g.accountInfo.amount.lt(h.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 g=Ki(s,m,s,n,l);if(c){let h=await this.scope.connection.getAccountInfo(m);if(h===null)(y=p.instructions)==null||y.push(g),p.instructionTypes.push(M.CreateATA);else if(!(h.owner.equals(l)&&un.decode(h.data).mint.equals(n)&&un.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(g),p.instructionTypes.push(M.CreateATA);if(n.equals($)&&r.amount){let h=await bt({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(...h.instructions||[]),p.endInstructions.push(...h.endInstructions||[]),p.instructionTypes.push(...h.instructionTypes||[]),p.endInstructionTypes.push(...h.endInstructionTypes||[]),r.amount&&(p.instructions.push(Ln({source:h.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:Et})),p.instructionTypes.push(M.TransferAmount))}return u||(p.endInstructions.push(xt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(M.CloseAccount)),{account:m,instructionParams:p}}else if(n.equals($)){let g=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(b=r.amount)!=null?b:0,skipCloseAccount:u});return p.instructions.push(...g.instructions||[]),p.endInstructions.push(...g.endInstructions||[]),p.signers.push(...g.signers||[]),p.instructionTypes.push(...g.instructionTypes||[]),p.endInstructionTypes.push(...g.endInstructionTypes||[]),{account:g.addresses.newAccount,instructionParams:p}}else{let g=Ve({fromPublicKey:s,programId:l}),h=await this.scope.connection.getMinimumBalanceForRentExemption(un.span),A=Dc.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:g.seed,newAccountPubkey:g.publicKey,lamports:h,space:un.span,programId:l});return p.instructions.push(A,Si({mint:n,tokenAccount:g.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(M.CreateAccount),p.instructionTypes.push(M.InitAccount),u||(p.endInstructions.push(xt({owner:s,payer:r.payer||s,tokenAccount:g.publicKey,programId:l})),p.endInstructionTypes.push(M.CloseAccount)),{account:g.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Et,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 Ki(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[M.CreateATA],o=c}return r&&$.toBase58()===t.toBase58()&&(a.endInstructions=[xt({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[M.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:o,programId:s=Et,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new Rr($).equals(o)){let p=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=Ki(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(Et)&&un.decode(f.data).mint.equals(o)&&un.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:[M.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=Et,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new Rr($))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=we(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=we(m,["tokenAccount"]);u=d,c.addInstruction(p)}return O({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as rl}from"@solana/spl-token";import{PublicKey as pe,SystemProgram as il}from"@solana/web3.js";import{PublicKey as bs}from"@solana/web3.js";var Ci=N([F("instruction")]),Li=N([F("instruction")]),Wc=N([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),X("accRewardPerShare"),S("rewardVault"),S("rewardMint"),S("rewardSender"),w("rewardType"),q(w(),15,"padding")]),qc=N([w("state"),w("nonce"),S("lpVault"),S("rewardVault"),S(),S(),w(),w(),w("totalReward"),X("perShareReward"),w("lastSlot"),w("perSlotReward")]),Uc=N([w("state"),w("nonce"),S("lpVault"),S("rewardVaultA"),w("totalRewardA"),X("perShareRewardA"),w("perSlotRewardA"),F("option"),S("rewardVaultB"),fe(7),w("totalRewardB"),X("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),S()]),Gc=N([w(),w("state"),w("nonce"),w("validRewardTokenNum"),X("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),S("lpMint"),S("lpVault"),q(Wc,5,"rewardInfos"),S("creator"),S(),q(w(),32,"padding")]),Xc=new Proxy(qc,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return W(O({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(i,e,t)}}),zc=new Proxy(Uc,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return W(O({},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)}}),Or=new Proxy(Gc,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return W(O({},r),{version:6,rewardInfos:r.rewardInfos.map(o=>{var s;return W(O({},o),{rewardType:((s=Object.entries(Vt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),Yc=N([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ri=N([F("instruction"),w("nonce"),q(Yc,5,"rewardTimeInfo")]),Oi=N([F("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Ni=N([F("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),jb=N([w("state"),S("id"),S("owner"),w("deposited"),q(w(),1,"rewardDebts")]),_i=N([w("state"),S("id"),S("owner"),w("deposited"),q(X(),1,"rewardDebts"),w(""),w("voteLockedBalance"),q(w(),15)]),Hb=N([w("state"),S("id"),S("owner"),w("deposited"),q(w(),2,"rewardDebts")]),fs=N([w("state"),S("id"),S("owner"),w("deposited"),q(X(),2,"rewardDebts"),q(w(),17)]),ys=N([w(),w("state"),S("id"),S("owner"),w("deposited"),q(X(),5,"rewardDebts"),q(w(),16)]),Qe=N([F("instruction"),w("amount")]),jc=N([S("mint"),S("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),os("digitShift"),q(F(),7,"reserved1"),q(w(),7,"reserved2")]),Hc=N([fe(8),S("governanceProgramId"),S("realm"),S("realmGoverningTokenMint"),S("realmAuthority"),q(F(),32,"reserved1"),q(jc,4,"votingMints"),Sr("timeOffset"),F("bump"),q(F(),7,"reserved2"),q(w(),11,"reserved3")]),Qc=N([Sr("startTime"),Sr("endTime"),F("kind"),q(F(),15,"reserved")]),Zc=N([q(Qc,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Ee("isUsed"),Ee("allowClawback"),F("votingMintConfigIdx"),q(F(),29,"reserved")]),$c=N([fe(8),S("voterAuthority"),S("registrar"),q(Zc,32,"deposits"),F("voterBump"),F("voterWweightRecordBump"),q(F(),94,"reserved")]);var rg=oe("Raydium_farm_config"),gs=new bs("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ws=new bs("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var As={3:_i,5:fs,6:ys},Mi=i=>[3,5,6].indexOf(i)!==-1,Ei=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)},Vt={"Standard SPL":0,"Option tokens":1},ut={[jo.toString()]:3,[Ho.toString()]:5,[Bn.toString()]:6};import{PublicKey as ce,SystemProgram as ks,SYSVAR_RENT_PUBKEY as tl,SYSVAR_CLOCK_PUBKEY as Nr,TransactionInstruction as ct}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as _g,TOKEN_PROGRAM_ID as Ft,ASSOCIATED_TOKEN_PROGRAM_ID as Mg}from"@solana/spl-token";import Ts from"bn.js";import Jc from"bn.js";var el=oe("Raydium.farm.util");function On({programId:i,poolId:e,mint:t,type:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return r}function gt({programId:i,poolId:e,owner:t,version:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return r}var hs=({programId:i,poolId:e})=>ue([e.toBuffer()],i);function Ps(i){return{isSet:new Jc(1),rewardPerSecond:Y(i.perSecond),rewardOpenTime:Y(i.openTime),rewardEndTime:Y(i.endTime),rewardType:Y(Vt[i.rewardType])}}function Vi(i){return Y(i.endTime).sub(Y(i.openTime)).mul(Y(i.perSecond))}function Fi(i){let e=As[i];return e||el.logWithError("invalid version",i),e}var nl=oe("Raydium_farm_instruction"),jg={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 Is(i){let{version:e,id:t,ledger:n,programId:r,owner:o}=i,s={3:9,5:10}[e];s||nl.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ci.span);Ci.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:o,isWritable:!1}),P({pubkey:ks.programId,isWritable:!1}),P({pubkey:tl,isWritable:!1})];return{instruction:new ct({programId:r,keys:u,data:a}),instructionType:M.FarmV3CreateLedger}}function xs(i){var n;let e=Buffer.alloc(Ri.span);Ri.encode({instruction:0,nonce:new Ts(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...ei,P({pubkey:i.farmId}),P({pubkey:i.farmAuthority,isWritable:!1}),P({pubkey:i.lpVault}),P({pubkey:i.lpMint,isWritable:!1}),P({pubkey:i.lockVault}),P({pubkey:i.lockMint,isWritable:!1}),P({pubkey:(n=i.lockUserAccount)!=null?n:Be}),P({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let r of i.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new ct({programId:i.programId,keys:t,data:e}),instructionType:M.FarmV6Create}}function Bs(i){let e=Buffer.alloc(Li.span);Li.encode({instruction:5},e);let t=[P({pubkey:Ft,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.lpVault,isWritable:!1}),P({pubkey:i.rewardVault}),P({pubkey:i.userRewardToken}),P({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new ct({programId:i.programId,keys:t,data:e}),instructionType:M.FarmV6CreatorWithdraw}}function vi({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let o=Buffer.alloc(Oi.span);Oi.encode({instruction:3,rewardReopenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardPerSecond:Y(r.perSecond)},o);let s=[P({pubkey:Ft,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:i,isWritable:!1,isSigner:!0})];return new ct({programId:n.programId,keys:s,data:o})}function Di({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let o=Buffer.alloc(Ni.span);Ni.encode({instruction:4,isSet:new Ts(1),rewardPerSecond:Y(r.perSecond),rewardOpenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardType:Y(Vt[r.rewardType])},o);let s=[...ei,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:i,isWritable:!1,isSigner:!0})];return new ct({programId:t.programId,keys:s,data:o})}function Nn(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new ce(e.programId),new ce(e.id)],c=gt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(Qe.span);Qe.encode({instruction:2,amount:Y(s)},l);let m=[P({pubkey:Ft,isWritable:!1}),P({pubkey:u}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:new ce(t.lpVault)}),P({pubkey:c}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new ct({programId:a,keys:m,data:l})}function _n(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:12,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Mn(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Ss(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:10,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Ks(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Cs(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new ce(e.programId),new ce(e.id)],c=gt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(Qe.span);Qe.encode({instruction:1,amount:Y(s)},l);let m=[P({pubkey:Ft,isWritable:!1}),P({pubkey:ks.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:new ce(t.lpVault)}),P({pubkey:c}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new ct({programId:a,keys:m,data:l})}var En=class extends he{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Be)){let n=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Vi(W(O({},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=Bn,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new pe(e.lpMint.address),lockInfo:{lockMint:gs,lockVault:ws},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ve({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(Or.span);u.addInstruction({instructions:[il.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:Or.span,programId:a.programId})]});let{publicKey:d,nonce:p}=hs({programId:new pe(a.programId),poolId:l.publicKey}),y=On({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let T of a.rewardInfos){T.openTime>=T.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",T.openTime.toString()),isNaN(Vt[T.rewardType])&&this.logAndCreateError("rewardType error",T.rewardType),Number(T.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",T.perSecond),f.push(Ps(T));let{rewardPubKey:k,newInstruction:I}=await this._getUserRewardInfo({rewardInfo:T,payer:c});I&&u.addInstruction(I),k||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=T.mint.equals(Be)?new pe(Re.address):T.mint;b.push({rewardMint:B,rewardVault:On({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:k})}let g=await this.scope.account.getCreatedTokenAccount({mint:a.lockInfo.lockMint});g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:A}=xs({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:[h],instructionTypes:[A]}).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=ut[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ue((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(Be)?new pe(Re.address):n.mint,l=a.rewardInfos.findIndex(g=>new pe(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:Be,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:[vi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[M.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let o=ut[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ue((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(Be)?new pe(Re.address):m.mint,p=a.rewardInfos.findIndex(A=>new pe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Be,{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=vi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[M.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:o}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ue((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Be)?new pe(Re.address):r.mint,m=On({programId:new pe(n.programId),poolId:new pe(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:[Di({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[M.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:o}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ue((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(Be)?new pe(Re.address):l.mint,d=On({programId:new pe(n.programId),poolId:new pe(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=Di({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:W(O({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[M.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=ut[d];Mi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new pe(n.programId),new pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=gt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let D of this.scope.account.tokenAccounts)if(a){let ee=ge(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&ee.equals(D.publicKey)&&(A[D.mint.toString()]=D.publicKey)}else A[D.mint.toString()]=D.publicKey;let T=b.lpMint,k=A[T.address];k||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let D of m){let ee=s&&D.mint.address===$.toString(),te=A[D.mint.address];if(!te){let{account:re,instructionParams:tt}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(D.mint.address),notUseTokenAccount:ee,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!ee,associatedOnly:ee?!1:a,checkCreateATAOwner:u});te=re,tt&&h.addInstruction(tt)}A[D.mint.address]=te,I.push(te)}let B,x=await this.scope.connection.getAccountInfo(g);if(x&&(B=Fi(p).decode(x.data)),n.programId!==Bn.toString()&&!B){let{instruction:D,instructionType:ee}=Is({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[ee]})}let C=Ei({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:I});C&&this.logAndCreateError(C);let _={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:k,rewardAccounts:I,userAuxiliaryLedgers:c==null?void 0:c.map(D=>new pe(D))},V=p===6?Cs(_):p===5?Ks(_):Ss(_),H={3:M.FarmV3Deposit,5:M.FarmV5Deposit,6:M.FarmV6Deposit};return h.addInstruction({instructions:[V],instructionTypes:[H[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=ut[n.programId];Mi(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 C of this.scope.account.tokenAccounts)if(u){let _=ge(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&_.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=gt({programId:new pe(n.programId),poolId:new pe(n.id),owner:this.scope.ownerPubKey,version:p}),_=await this.scope.connection.getAccountInfo(C);_||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:_}),Fi(p).decode(_.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===$.toString(),A=b[g.toString()];if(!A){let{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=C,_&&f.addInstruction(_)}b[g.toString()]=A;let T=[];for(let C of d){let _=s&&C.mint.address===$.toString(),V=b[C.mint.address];if(!V){let{account:H,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(C.mint.address),notUseTokenAccount:_,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!_,associatedOnly:_?!1:u,checkCreateATAOwner:c});V=H,D&&f.addInstruction(D)}b[C.mint.address]=V,T.push(V)}let k=Ei({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:T});k&&this.logAndCreateError(k);let I={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new pe(C))},B=p===6?Nn(I):p===5?_n(I):Mn(I),x={3:M.FarmV3Withdraw,5:M.FarmV5Withdraw,6:M.FarmV6Withdraw};return f.addInstruction({instructions:[B],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ue((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=ut[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Be.toString()?new pe(Re.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:Be,c=this.createTxBuilder(),l;if(t.equals(Be)){let y=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Vi(W(O({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new E(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:[rl(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[M.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Bs({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=ge(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)=>W(O({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],T=b.address,k=n&&T===$.toString(),I=m[T];if(!I){let{account:H,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(T),notUseTokenAccount:k,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:o,checkCreateATAOwner:s});I=H,D&&l.addInstruction(D)}m[T.toString()]=I;let B=[];for(let H of g){let D=n&&H.mint.address===$.toString(),ee=m[H.mint.address];if(!ee){let{account:te,instructionParams:re}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(H.mint.address),notUseTokenAccount:D,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:o,checkCreateATAOwner:s});ee=te,re&&l.addInstruction(re)}m[H.mint.address]=ee,B.push(ee)}let x=p[h],C={amount:qe,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:I,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(H=>new pe(H))},_=A===6?Nn(C):A===5?_n(C):Mn(C),V={3:M.FarmV3Withdraw,5:M.FarmV5Withdraw,6:M.FarmV6Withdraw};l.addInstruction({instructions:[_],instructionTypes:[V[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as je}from"@solana/web3.js";import{NATIVE_MINT as ma,TOKEN_PROGRAM_ID as Dr}from"@solana/spl-token";var gw=N([Ge("mintAuthorityOption"),S("mintAuthority"),w("supply"),F("decimals"),F("isInitialized"),Ge("freezeAuthorityOption"),S("freezeAuthority")]);import{PublicKey as Pw}from"@solana/web3.js";import{MintLayout as Tw,TOKEN_PROGRAM_ID as xw}from"@solana/spl-token";var _r=i=>new Ae({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name});import{TOKEN_PROGRAM_ID as Mr,ASSOCIATED_TOKEN_PROGRAM_ID as wl}from"@solana/spl-token";import{PublicKey as wt,TransactionInstruction as ln,SystemProgram as Vs,SYSVAR_RENT_PUBKEY as Hw}from"@solana/web3.js";var Wi=N([F("instruction"),w("amountIn"),w("minAmountOut")]),qi=N([F("instruction"),w("maxAmountIn"),w("amountOut")]),vw=N([F("instruction"),F("nonce")]),ol=N([F("instruction"),F("nonce"),w("startTime")]),Dw=N([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),X("swapBaseInAmount"),X("swapQuoteOutAmount"),w("swapBase2QuoteFee"),X("swapQuoteInAmount"),X("swapBaseOutAmount"),w("swapQuote2BaseFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("withdrawQueue"),S("lpVault"),S("owner"),w("lpReserve"),q(w(),3,"padding")]),Ww=N([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),X("swapBaseInAmount"),X("swapQuoteOutAmount"),X("swapQuoteInAmount"),X("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("modelDataAccount"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("owner"),q(w(),64,"padding")]),Ui=N([F("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Gi=N([F("instruction"),w("amountIn")]);var Ls=N([w("fee")]);import{PublicKey as sl}from"@solana/web3.js";var cn=new sl("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),jt=5e4,al=N([w("x"),w("y"),w("price")]),ul=N([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),q(al,jt,"DataElement")]);function cl(i,e){return[0,jt-2]}function ll(i){return[0,jt-2]}function ml(i){return[0,jt-2]}function dl(i,e,t){let[n,r]=cl(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>=jt-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 Xi(i,e,t){let[n,r,o]=dl(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 Yt(i,e,t){return e*i.multiplier/t}function Rs(i,e,t){return e*t/i.multiplier}function pl(i,e){let[t,n]=ll(e),r=t,o=n,s=0,a=e;for(;r<o;){if(s=Math.floor((o+r)/2),s<=0||s>jt-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 fl(i,e){let[t,n]=ml(e),r=t,o=n,s=0,a=e;for(;r<=o;){if(s=Math.floor((o+r)/2),s<=0||s>=jt-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 Os(i,e,t,n){let r=n?e+t:e-t,[o,s,a]=pl(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 yl(i,e,t,n){let r=n?e-t:e+t,[o,s,a]=fl(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 bl(i,e){let t=Os(i,e,0,!1);return t[3]?t[0]:0}function Ns(i,e,t,n){let r=Xi(i,e,t),o=Yt(i,e,r),s=Yt(i,t,r),a=Yt(i,n,r),u=!0,[c,l,m,d]=Os(i,o,a,u);if(!d)return 0;if(m)return n*i.multiplier/c;{let p=s-l;return Rs(i,p,r)}}function _s(i,e,t,n){let r=Xi(i,e,t),o=Yt(i,e,r),s=Yt(i,t,r),a=Yt(i,n,r),u=!1,[c,l,m,d]=yl(i,s,a,u);if(!d)return 0;if(m)return n*c/i.multiplier;{let p=o-l;return Rs(i,p,r)}}function gl(i){let e=ul.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 Ms(i,e,t,n){let r=bl(i,Yt(i,e,Xi(i,e,t)))/i.multiplier;return n?r:1/r}var Vn=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(cn);e&&(this._layoutData=gl(e==null?void 0:e.data))}}};var Es=oe("Raydium_liquidity_instruction");function Fs(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:o,fixedSide:s}=i,a=Buffer.alloc(Ui.span);Ui.encode({instruction:3,baseAmountIn:Y(r),quoteAmountIn:Y(o),fixedSide:s==="base"?qe:Fo},a);let u=[P({pubkey:Mr,isWritable:!1}),P({pubkey:new wt(e.id)}),P({pubkey:new wt(t.authority),isWritable:!1}),P({pubkey:new wt(t.openOrders),isWritable:!1}),P({pubkey:new wt(t.targetOrders)}),P({pubkey:new wt(e.lpMint.address)}),P({pubkey:new wt(t.vault.A)}),P({pubkey:new wt(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:cn})),u.push(P({pubkey:new wt(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new wt(t.marketEventQueue),isWritable:!1})),new ln({programId:new wt(e.programId),keys:u,data:a})}function zi(i){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=i,o=Ue(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Gi.span);Gi.encode({instruction:4,amountIn:Y(r)},a);let u=[P({pubkey:Mr,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders}),P({pubkey:o.targetOrders}),P({pubkey:o.mintLp.address}),P({pubkey:o.vault.A}),P({pubkey:o.vault.B})];return s===5?u.push(P({pubkey:cn})):(u.push(P({pubkey:o.id})),u.push(P({pubkey:o.id}))),u.push(P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId}),P({pubkey:o.marketBaseVault}),P({pubkey:o.marketQuoteVault}),P({pubkey:o.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:o.marketEventQueue}),P({pubkey:o.marketBids}),P({pubkey:o.marketAsks})),new ln({programId:o.programId,keys:u,data:a})}return new ln({programId:o.programId,keys:[]})}function vs({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:A,coinAmount:T,pcAmount:k,ammConfigId:I,feeDestinationId:B}){let x=N([F("instruction"),F("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),C=[{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:wl,isSigner:!1,isWritable:!1},{pubkey:Vs.programId,isSigner:!1,isWritable:!1},{pubkey:it,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:I,isSigner:!1,isWritable:!1},{pubkey:B,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}],_=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:A,coinAmount:T,pcAmount:k},_),{instruction:new ln({keys:C,programId:i,data:_}),instructionType:M.AmmV4CreatePool}}function Al({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n},r){let o=Ue(i),s=Buffer.alloc(Wi.span);Wi.encode({instruction:9,amountIn:Y(t),minAmountOut:Y(n)},s);let a=[P({pubkey:Mr,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders})];return r===4&&a.push(P({pubkey:o.targetOrders})),a.push(P({pubkey:o.vault.A}),P({pubkey:o.vault.B})),r===5&&a.push(P({pubkey:cn})),a.push(P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId}),P({pubkey:o.marketBids}),P({pubkey:o.marketAsks}),P({pubkey:o.marketEventQueue}),P({pubkey:o.marketBaseVault}),P({pubkey:o.marketQuoteVault}),P({pubkey:o.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new ln({programId:o.programId,keys:a,data:s})}function hl({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n},r){let o=Ue(i),s=Buffer.alloc(qi.span);qi.encode({instruction:11,maxAmountIn:Y(t),amountOut:Y(n)},s);let a=[P({pubkey:Vs.programId,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders}),P({pubkey:o.targetOrders}),P({pubkey:o.vault.A}),P({pubkey:o.vault.B})];return r===5&&a.push(P({pubkey:cn})),a.push(P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId}),P({pubkey:o.marketBids}),P({pubkey:o.marketAsks}),P({pubkey:o.marketEventQueue}),P({pubkey:o.marketBaseVault}),P({pubkey:o.marketQuoteVault}),P({pubkey:o.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new ln({programId:o.programId,keys:a,data:s})}function Ds(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 Al(W(O({},a),{amountIn:r,minAmountOut:o}),t);if(s==="out")return hl(W(O({},a),{maxAmountIn:r,amountOut:o}),t);Es.logWithError("invalid params","params",i)}throw Es.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as Ne,TOKEN_2022_PROGRAM_ID as qt,ASSOCIATED_TOKEN_PROGRAM_ID as ra}from"@solana/spl-token";import{PublicKey as v,TransactionInstruction as lt,SystemProgram as mn,Keypair as eo}from"@solana/web3.js";import ia from"bn.js";import Cl from"bn.js";function Er(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function Yi(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function ji(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function Fn(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function Ws(i,e){return Fn(i,e)?null:Yi(i,e)}function qs(i,e){return Fn(i,e)?null:ji(i,e)}var cA=Buffer.from("amm_config","utf8"),Pl=Buffer.from("pool","utf8"),kl=Buffer.from("pool_vault","utf8"),Tl=Buffer.from("pool_reward_vault","utf8"),Us=Buffer.from("position","utf8"),Il=Buffer.from("tick_array","utf8"),xl=Buffer.from("operation","utf8"),Bl=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Gs(i,e,t,n){return ue([Pl,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Hi(i,e,t){return ue([kl,e.toBuffer(),t.toBuffer()],i)}function Xs(i,e,t){return ue([Tl,e.toBuffer(),t.toBuffer()],i)}function me(i,e,t){return ue([Il,e.toBuffer(),Er(t)],i)}function Ht(i,e,t,n){return ue([Us,e.toBuffer(),Er(t),Er(n)],i)}function At(i,e){return ue([Us,e.toBuffer()],i)}function Vr(i){return ue([Buffer.from("metadata","utf8"),rn.toBuffer(),i.toBuffer()],rn)}function vn(i){return ue([xl],i)}function ht(i,e){return ue([Bl,e.toBuffer()],i)}import Pt from"bn.js";var Ie=new Pt(0),kt=new Pt(1),Bt=new Pt(-1),Ze=new Pt(1).shln(64),Fr=new Pt(1).shln(128),Qi=Ze.sub(kt),Dn=64,zs=Fr.subn(1),Fe=-443636,Xe=-Fe,vt=new Pt("4295048016"),Dt=new Pt("79226673521066979257578248091"),Ys=16,js="59543866431248",Hs="184467440737095516",Qs="15793534762490258745",vr=new Pt(10).pow(new Pt(6));var Zs={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:[]},dA=new Pt("18446744073700000000");var Sl=15,se=class{static async getTickArrays(e,t,n,r,o,s,a){let u=[],c=U.getTickArrayStartIndexByTick(r,o),l=U.getInitializedTickArrayInRange(s,a,o,c,Math.floor(Sl/2));for(let p=0;p<l.length;p++){let{publicKey:y}=me(t,n,l[p]);u.push(y)}let m=(await ft(e,u)).map(p=>p!==null?Wn.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=W(O({},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=U.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/se.tickCount(t)),a=n?U.searchLowBitFromStart(r,o,s-1,1,t):U.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=Ke-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<Ke;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=me(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,o,s){let a=U.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<Ke;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=me(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(U.checkIsOutOfBoundary(e)){if(e>Xe)return!1;let n=U.getTickArrayStartIndexByTick(Fe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ke*e}};import ne from"bn.js";import{PublicKey as Wt}from"@solana/web3.js";import Pe from"bn.js";var Zi=14,St=class{static maxTickInTickarrayBitmap(e){return e*Ke*Qt}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(!se.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=r?t-se.tickCount(n):t+se.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Ke,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=Ws(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=qs(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-se.tickCount(n)}}}},qn=class{static getBitmapOffset(e,t){if(!se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=St.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=St.maxTickInTickarrayBitmap(e),n=-t;if(Xe<=t)throw Error(`extensionTickBoundary check error: ${Xe}, ${t}`);if(n<=Fe)throw Error(`extensionTickBoundary check error: ${n}, ${Fe}`);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:U.mergeTickArrayBitmap(r).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let o=se.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}=St.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=U.mergeTickArrayBitmap(e).shln(Qt-1-a),c=Fn(512,u)?null:Yi(512,u);if(c!==null){let l=t-c*se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=U.mergeTickArrayBitmap(e).shrn(a),c=Fn(512,u)?null:ji(512,u);if(c!==null){let l=t+c*se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-se.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%St.maxTickInTickarrayBitmap(t),r=Math.floor(n/se.tickCount(t));return e<0&&n!=0&&(r=Qt-r),r}};import Tt from"bn.js";var Un=class{static getfeeGrowthInside(e,t,n){let r=new Tt(0),o=new Tt(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 Tt(0),a=new Tt(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=Q.wrappingSubU128(Q.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=Q.wrappingSubU128(Q.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=Q.mulDivFloor(Q.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,Ze),u=t.tokenFeesOwedA.add(a),c=Q.mulDivFloor(Q.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,Ze),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=Q.mulDivFloor(Q.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,Ze),u=t.tokenFeesOwedA.add(a),c=Q.mulDivFloor(Q.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,Ze),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=Q.wrappingSubU128(u,c.growthInsideLastX64),m=Q.mulDivFloor(l,t.liquidity,Ze),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=Q.wrappingSubU128(u,c.growthInsideLastX64),m=Q.mulDivFloor(l,t.liquidity,Ze),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 Tt(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 Tt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(Q.wrappingSubU128(Q.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 Tt(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 Tt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(Q.wrappingSubU128(Q.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,A;let a=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),u=J.getSqrtPriceX64FromTick(t.tickLower),c=J.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+r:1-r,m=ae.getAmountsFromLiquidity(a,u,c,n,o),[d,p]=[Se(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Se(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Se(new Tt(new E(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),Se(new Tt(new E(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as $s}from"@solana/spl-token";var ve=class{static getOutputAmountAndRemainAccounts(e,t,n,r,o){let s=n.toBase58()===e.mintA.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Zt.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,c,o);return a.push(...d),{expectedAmountOut:m.mul(Bt),remainingAccounts:a,executionPrice:p,feeAmount:y}}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}=me(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Zt.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(Bt),c,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=ve.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?qn.checkTickArrayIsInit(se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):U.checkTickArrayIsInitialized(U.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=me(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=me(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/se.tickCount(e.tickSpacing)),r=t?U.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):U.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=se.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:o}=St.nextInitializedTickArrayStartIndex(U.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=qn.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Fe||t>Xe)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=W(O({},m),{perSecond:Q.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Wt(d)});if(p.tokenMint.equals(Wt.default))continue;if(n<=p.openTime.toNumber()||r.eq(Ie)){s.push(p);continue}let y=new Pe(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=Q.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=Q.mulDivFloor(f,p.emissionsPerSecondX64,Ze),A=p.rewardTotalEmissioned.add(h);s.push(W(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let o of t){let s=U.getTickArrayStartIndexByTick(o,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=St.maxTickInTickarrayBitmap(e),n=-t;return t>Xe&&(t=se.getArrayStartIndex(Xe,e)+se.tickCount(e)),n<Fe&&(n=se.getArrayStartIndex(Fe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/se.tickCount(t)*Qt}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await br(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of r)s.accountInfo!==null&&(o[s.pubkey.toString()]=ta.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=U.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=U.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=me(u.programId,u.id,m);o.push({pubkey:d}),r[d.toString()]=u.id}}let s=await br(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=Wn.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=W(O({},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(At(p,d).publicKey);let l=await ft(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=ea.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=U._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=U._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:T}=ae.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),k=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:A,amountB:T,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=>W(O({},x),{pendingReward:new Pe(0)})),leverage:k,tokenFeeAmountA:new Pe(0),tokenFeeAmountB:new Pe(0)}];let I=await U.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),B=await U.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=I,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}if(o){let d=Object.values(m),p=await ft(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]=Wn.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}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,T=y[m[h].toString()],k=y[m[A].toString()],I=T.ticks[U.getTickOffsetInArray(g.tickLower,f.tickSpacing)],B=k.ticks[U.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:C}=await Un.GetPositionFees(f,g,I,B),_=await Un.GetPositionRewards(f,g,I,B);g.tokenFeeAmountA=x.gte(new Pe(0))?x:new Pe(0),g.tokenFeeAmountB=C.gte(new Pe(0))?C:new Pe(0);for(let V=0;V<_.length;V++)g.rewardInfos[V].pendingReward=_[V].gte(new Pe(0))?_[V]:new Pe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:o,slippage:s,priceLimit:a=new E(0)}){var _;let u,c=n.toBase58()===e.mintA.address,[l,m]=c?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new E(0))?u=c?vt.add(new Pe(1)):Dt.sub(new Pe(1)):u=J.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let d=Se(o,l,r,!1),{expectedAmountOut:p,remainingAccounts:y,executionPrice:f,feeAmount:b}=ve.getOutputAmountAndRemainAccounts(e,t,n,d.amount.sub((_=d.fee)!=null?_:Ie),u),g=Se(p,m,r,!1),h=J.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),A=c?h:new E(1).div(h),T=p.mul(new Pe(Math.floor((1-s)*1e10))).div(new Pe(1e10)),k=Se(T,m,r,!1),I=c?e.currentPrice:new E(1).div(e.currentPrice),B=new E(A).sub(I).abs(),x=I,C=new He(new E(B).mul(10**15).toFixed(0),new E(x).mul(10**15).toFixed(0));return{realAmountIn:d,amountOut:g,minAmountOut:k,expirationTime:Xt(d.expirationTime,g.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:C,fee:b,remainingAccounts:y}}static async computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:o,epochInfo:s}){let a=r.address===e.mintB.address,[u,c]=a?[e.mintA,e.mintB]:[e.mintB,e.mintA],[l,m]=[new Ae(W(O({},u),{mint:u.address,isToken2022:u.programId===$s.toBase58()})),new Ae(W(O({},c),{mint:c.address,isToken2022:c.programId===$s.toBase58()}))],{realAmountIn:d,amountOut:p,minAmountOut:y,expirationTime:f,currentPrice:b,executionPrice:g,priceImpact:h,fee:A,remainingAccounts:T}=await ve.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Wt(u.address),amountIn:n,slippage:o,epochInfo:s}),k=W(O({},d),{amount:new be(l,d.amount),fee:d.fee===void 0?void 0:new be(l,d.fee)}),I=W(O({},p),{amount:new be(m,p.amount),fee:p.fee===void 0?void 0:new be(m,p.fee)}),B=W(O({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),x=new $e({baseToken:l,denominator:new Pe(10).pow(new Pe(20+l.decimals)),quoteToken:m,numerator:b.mul(new E(10**(20+m.decimals))).toFixed(0)}),C=new $e({baseToken:l,denominator:new Pe(10).pow(new Pe(20+l.decimals)),quoteToken:m,numerator:g.mul(new E(10**(20+m.decimals))).toFixed(0)}),_=new be(l,A);return{realAmountIn:k,amountOut:I,minAmountOut:B,expirationTime:f,currentPrice:x,executionPrice:C,priceImpact:h,fee:_,remainingAccounts:T}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let o=e[t],s=U.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=U.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[ri(e.mintA.address).toString()],d=r[ri(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=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),b=J.getSqrtPriceX64FromTick(s),g=J.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ae.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:k}=ae.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),I=new E(h.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(A.toString()).div(new E(10).pow(y)).mul(d.value)),B=new E(T.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(k.toString()).div(new E(10).pow(y)).mul(d.value)),x=B.div(I.add(B)).div(B),_=new E(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),V=3600*24*365,H=e.rewardDefaultInfos.map(D=>{var re,tt;let ee=D.mint.decimals,te=r[D.mint.address];return u<((re=D.startTime)!=null?re:0)||u>((tt=D.endTime)!=null?tt:0)||!D.perSecond||!te||ee===void 0?0:new E(te.value).mul(new E(D.perSecond).mul(V)).div(new E(10).pow(ee)).mul(x).mul(100).toNumber()});return{feeApr:_,rewardsApr:H,apr:_+H.reduce((D,ee)=>D+ee,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=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),m=J.getSqrtPriceX64FromTick(n),d=J.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=Se(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Pe(new E(y.amount.sub((h=y.fee)!=null?h:Ie).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ae.getLiquidityFromTokenAmountA(m,d,f,!a):new Pe(0);else if(l.lte(d)){let A=ae.getLiquidityFromTokenAmountA(l,d,f,!a),T=ae.getLiquidityFromTokenAmountB(m,l,f);b=t?A:T}else b=t?new Pe(0):ae.getLiquidityFromTokenAmountB(m,d,f);return ve.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,A;let u=J.getSqrtPriceX64FromTick(n),c=J.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ae.getAmountsFromLiquidity(J.priceToSqrtPriceX64(new E(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[d,p]=[Se(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Se(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Se(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),Se(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Xt(d.expirationTime,p.expirationTime)}}static async fetchComputeClmmInfo({owner:e,connection:t,poolInfo:n}){let r=await t.getAccountInfo(new Wt(n.id));if(!r)throw new Error(`pool not found ${n.id}`);let o=Js.decode(r.data),s=ht(e,new Wt(n.id)).publicKey,a=await ve.fetchExBitmaps({connection:t,exBitmapAddress:[s],batchRequest:!1});return W(O({},o),{id:new Wt(n.id),programId:new Wt(n.programId),mintA:n.mintA,mintB:n.mintB,ammConfig:W(O({},n.config),{id:new Wt(n.config.id),fundOwner:""}),currentPrice:new E(n.price),exBitmapInfo:a[s.toBase58()],startTime:o.startTime.toNumber()})}};var Q=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),o=r.div(n);return r.mod(n).eq(Ie)||(o=o.add(kt)),o}static mulDivFloor(e,t,n){if(n.eq(Ie))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Ie))throw new Error("division by 0");return e.mul(t).add(n.sub(kt)).div(n)}static x64ToDecimal(e,t){return new E(e.toString()).div(E.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ne(e.mul(E.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Fr).sub(t).mod(Fr)}};function Ce(i,e){return $i(i.mul(e),64,256)}function Kl(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function $i(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var J=class{static sqrtPriceX64ToPrice(e,t,n){return Q.x64ToDecimal(e).pow(2).mul(E.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return Q.decimalToX64(e.mul(E.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(Ie))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ie))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(Ie))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ie))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(Ie))return e;let o=t.shln(Dn);if(r){let s=o,a=o.add(n.mul(e));return a.gte(s)?Q.mulDivCeil(s,e,a):Q.mulDivRoundingUp(s,kt,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 Q.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let o=n.shln(Dn);if(r)return e.add(o.div(t));{let s=Q.mulDivRoundingUp(o,kt,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<Fe||e>Xe)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ne("18445821805675395072"):new ne("18446744073709551616");return(t&2)!=0&&(n=Ce(n,new ne("18444899583751176192"))),(t&4)!=0&&(n=Ce(n,new ne("18443055278223355904"))),(t&8)!=0&&(n=Ce(n,new ne("18439367220385607680"))),(t&16)!=0&&(n=Ce(n,new ne("18431993317065453568"))),(t&32)!=0&&(n=Ce(n,new ne("18417254355718170624"))),(t&64)!=0&&(n=Ce(n,new ne("18387811781193609216"))),(t&128)!=0&&(n=Ce(n,new ne("18329067761203558400"))),(t&256)!=0&&(n=Ce(n,new ne("18212142134806163456"))),(t&512)!=0&&(n=Ce(n,new ne("17980523815641700352"))),(t&1024)!=0&&(n=Ce(n,new ne("17526086738831433728"))),(t&2048)!=0&&(n=Ce(n,new ne("16651378430235570176"))),(t&4096)!=0&&(n=Ce(n,new ne("15030750278694412288"))),(t&8192)!=0&&(n=Ce(n,new ne("12247334978884435968"))),(t&16384)!=0&&(n=Ce(n,new ne("8131365268886854656"))),(t&32768)!=0&&(n=Ce(n,new ne("3584323654725218816"))),(t&65536)!=0&&(n=Ce(n,new ne("696457651848324352"))),(t&131072)!=0&&(n=Ce(n,new ne("26294789957507116"))),(t&262144)!=0&&(n=Ce(n,new ne("37481735321082"))),e>0&&(n=zs.div(n)),n}static getTickFromPrice(e,t,n){return J.getTickFromSqrtPriceX64(J.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Dt)||e.lt(vt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ne(t-64),r=Kl(n,32,128),o=new ne("8000000000000000","hex"),s=0,a=new ne(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new ne(0))&&s<Ys;){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 ne(js)),d=$i(m.sub(new ne(Hs)),64,128).toNumber(),p=$i(m.add(new ne(Qs)),64,128).toNumber();return d==p?d:J.getSqrtPriceX64FromTick(p).lte(e)?p:d}},$t=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=J.getTickFromSqrtPriceX64(J.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=$t.getTickWithPriceAndTickspacing(e,t,n,r),s=J.getSqrtPriceX64FromTick(o);return J.sqrtPriceX64ToPrice(s,n,r)}},ae=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(Ie))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(Dn),s=t.sub(e);return r?Q.mulDivRoundingUp(Q.mulDivCeil(o,s,t),kt,e):Q.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Ie))throw new Error("sqrtPriceX64A must greater than 0");return r?Q.mulDivCeil(n,t.sub(e),Ze):Q.mulDivFloor(n,t.sub(e),Ze)}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?Q.mulDivRoundingUp(a,kt,Qi):a.shrn(Dn)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),Q.mulDivFloor(n,Qi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ae.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ae.getLiquidityFromTokenAmountA(e,n,r,!1),a=ae.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ae.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ae.getTokenAmountAFromLiquidity(t,n,r,o),amountB:new ne(0)};if(e.lt(n)){let s=ae.getTokenAmountAFromLiquidity(e,n,r,o),a=ae.getTokenAmountBFromLiquidity(t,e,r,o);return{amountA:s,amountB:a}}else return{amountA:new ne(0),amountB:ae.getTokenAmountBFromLiquidity(t,n,r,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,o,s,a){let{amountA:u,amountB:c}=ae.getAmountsFromLiquidity(e,t,n,r,s),l=o?1+a:1-a,m=new ne(new E(u.toString()).mul(l).toFixed(0)),d=new ne(new E(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,A,T,k;let c=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),l=J.getSqrtPriceX64FromTick(t),m=J.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=ae.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[Se(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),Se(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[Se(new ne(new E(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,u),Se(new ne(new E(p.amountB.toString()).mul(d).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Xt(y.expirationTime,f.expirationTime)}}},Zt=class{static swapCompute(e,t,n,r,o,s,a,u,c,l,m,d,p,y){if(d.eq(Ie))throw new Error("amountSpecified must not be 0");if(y||(y=s?vt.add(kt):Dt.sub(kt)),s){if(y.lt(vt))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(Dt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let f=d.gt(Ie),b={amountSpecifiedRemaining:d,amountCalculated:Ie,sqrtPriceX64:m,tick:c>p?Math.min(p+se.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new ne(0)},g=p,h=n[p],A=0,T=!s&&h.startTickIndex===b.tick;for(;!b.amountSpecifiedRemaining.eq(Ie)&&!b.sqrtPriceX64.eq(y);){if(A>10)throw Error("liquidity limit");let k={};k.sqrtPriceStartX64=b.sqrtPriceX64;let I=U.nextInitTick(h,b.tick,l,s,T),B=I||null,x=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let _=ve.nextInitializedTickArrayStartIndex({tickCurrent:b.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:o},g,s);if(!_.isExist)throw Error("swapCompute LiquidityInsufficient");g=_.nextStartIndex;let{publicKey:V}=me(e,t,g);x=V,h=n[g],B=U.firstInitializedTick(h,s)}k.tickNext=B.tick,k.initialized=B.liquidityGross.gtn(0),p!==g&&x&&(b.accounts.push(x),p=g),k.tickNext<Fe?k.tickNext=Fe:k.tickNext>Xe&&(k.tickNext=Xe),k.sqrtPriceNextX64=J.getSqrtPriceX64FromTick(k.tickNext);let C;if(s&&k.sqrtPriceNextX64.lt(y)||!s&&k.sqrtPriceNextX64.gt(y)?C=y:C=k.sqrtPriceNextX64,[b.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=Zt.swapStepCompute(b.sqrtPriceX64,C,b.liquidity,b.amountSpecifiedRemaining,a),b.feeAmount=b.feeAmount.add(k.feeAmount),f?(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),b.amountCalculated=b.amountCalculated.sub(k.amountOut)):(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.add(k.amountOut),b.amountCalculated=b.amountCalculated.add(k.amountIn.add(k.feeAmount))),b.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let _=B.liquidityNet;s&&(_=_.mul(Bt)),b.liquidity=ae.addDelta(b.liquidity,_)}T=k.tickNext!=b.tick&&!s&&h.startTickIndex===k.tickNext,b.tick=s?k.tickNext-1:k.tickNext}else if(b.sqrtPriceX64!=k.sqrtPriceStartX64){let _=J.getTickFromSqrtPriceX64(b.sqrtPriceX64);T=_!=b.tick&&!s&&h.startTickIndex===_,b.tick=_}++A}try{let{nextStartIndex:k,isExist:I}=se.nextInitializedTickArray(b.tick,l,s,r,o);I&&p!==k&&(b.accounts.push(me(e,t,k).publicKey),p=k)}catch{}return{amountCalculated:b.amountCalculated,feeAmount:b.feeAmount,sqrtPriceX64:b.sqrtPriceX64,liquidity:b.liquidity,tickCurrent:b.tick,accounts:b.accounts}}static swapStepCompute(e,t,n,r,o){let s={sqrtPriceX64Next:new ne(0),amountIn:new ne(0),amountOut:new ne(0),feeAmount:new ne(0)},a=e.gte(t),u=r.gte(Ie);if(u){let l=Q.mulDivFloor(r,vr.sub(new ne(o.toString())),vr);s.amountIn=a?ae.getTokenAmountAFromLiquidity(t,e,n,!0):ae.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=J.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ae.getTokenAmountBFromLiquidity(t,e,n,!1):ae.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(Bt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=J.getNextSqrtPriceX64FromOutput(e,n,r.mul(Bt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ae.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ae.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ae.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ae.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(Bt))&&(s.amountOut=r.mul(Bt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=Q.mulDivCeil(s.amountIn,new ne(o),vr.sub(new ne(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ke=60,Qt=512,U=class{static getTickArrayAddressByTick(e,t,n,r){let o=U.getTickArrayStartIndexByTick(n,r),{publicKey:s}=me(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=U.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Ke)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=se.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)*se.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ke,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Ke,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*Ke:e+t*Ke}static mergeTickArrayBitmap(e){let t=new Cl(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*Ke));return[...U.searchLowBitFromStart(e,t,s-1,o,n),...U.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return U.searchHightBitFromStart(e,t,0,Qt,n)}static getAllInitializedTickArrayInfo(e,t,n,r,o){let s=[],a=U.getAllInitializedTickArrayStartIndex(n,r,o);for(let u of a){let{publicKey:c}=me(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=>U.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=se.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=>U.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=se.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Fe||e>Xe}static nextInitTick(e,t,n,r,o){if(se.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<Ke;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ke-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ke;){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=J.getSqrtPriceX64FromTick(t),o=J.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new E(1).div(t),o=$t.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=J.getSqrtPriceX64FromTick(o),a=J.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=J.getSqrtPriceX64FromTick(t),o=J.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new E(1).div(t),o=$t.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=J.getSqrtPriceX64FromTick(o),a=J.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}};var hh=N([fe(8),F("bump"),yt("index"),S(""),Ge("protocolFeeRate"),Ge("tradeFeeRate"),yt("tickSpacing"),q(w(),8,"")]),Ll=N([Ge("blockTimestamp"),X("sqrtPriceX64"),X("cumulativeTimePriceX64"),q(X(),1,"")]),Ji=N([fe(8),Ee("initialized"),S("poolId"),q(Ll,1e3,"observations"),q(X(),5,"")]),Rl=N([F("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),X("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),S("tokenMint"),S("tokenVault"),S("creator"),X("rewardGrowthGlobalX64")]),Js=N([fe(8),F("bump"),S("ammConfig"),S("creator"),S("mintA"),S("mintB"),S("vaultA"),S("vaultB"),S("observationId"),F("mintDecimalsA"),F("mintDecimalsB"),yt("tickSpacing"),X("liquidity"),X("sqrtPriceX64"),Oe("tickCurrent"),yt("observationIndex"),yt("observationUpdateDuration"),X("feeGrowthGlobalX64A"),X("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),X("swapInAmountTokenA"),X("swapOutAmountTokenB"),X("swapInAmountTokenB"),X("swapOutAmountTokenA"),F("status"),q(F(),7,""),q(Rl,3,"rewardInfos"),q(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),q(w(),15*4-3,"padding")]),Ol=N([X("growthInsideLastX64"),w("rewardAmountOwed")]),ea=N([fe(8),F("bump"),S("nftMint"),S("poolId"),Oe("tickLower"),Oe("tickUpper"),X("liquidity"),X("feeGrowthInsideLastX64A"),X("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(Ol,3,"rewardInfos"),q(w(),8,"")]),Ph=N([fe(8),F("bump"),S("poolId"),Oe("tickLowerIndex"),Oe("tickUpperIndex"),X("liquidity"),X("feeGrowthInsideLastX64A"),X("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(X(),3,"rewardGrowthInside"),q(w(),8,"")]),Nl=N([Oe("tick"),ss("liquidityNet"),X("liquidityGross"),X("feeGrowthOutsideX64A"),X("feeGrowthOutsideX64B"),q(X(),3,"rewardGrowthsOutsideX64"),q(Ge(),13,"")]),Wn=N([fe(8),S("poolId"),Oe("startTickIndex"),q(Nl,Ke,"ticks"),F("initializedTickCount"),q(F(),115,"")]),na=N([fe(329),q(S(),100,"whitelistMints")]),ta=N([fe(8),S("poolId"),q(q(w(),8),Zi,"positiveTickArrayBitmap"),q(q(w(),8),Zi,"negativeTickArrayBitmap")]);var oa=oe("Raydium_Clmm"),mt={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]},ke=class{static createPoolInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=N([X("sqrtPriceX64"),w("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:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:mn.programId,isSigner:!1,isWritable:!1},{pubkey:it,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...mt.createPool,...g]);return new lt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:o,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ve({fromPublicKey:r,programId:n}),[d,p]=[new v(o.address),new v(s.address)],y=[mn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Ji.span),space:Ji.span,programId:n})],{publicKey:f}=Gs(n,a,d,p),{publicKey:b}=Hi(n,f,d),{publicKey:g}=Hi(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new v(o.programId||Ne),p,g,new v(s.programId||Ne),ht(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[M.CreateAccount,M.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,A,T,k,I,B,x,C,_){let V=N([Oe("tickLowerIndex"),Oe("tickUpperIndex"),Oe("tickArrayLowerStartIndex"),Oe("tickArrayUpperStartIndex"),X("liquidity"),w("amountMaxA"),w("amountMaxB"),Ee("withMetadata"),F("optionBaseFlag"),Ee("baseFlag")]),H=[..._?[{pubkey:_,isSigner:!1,isWritable:!0}]:[]],D=[{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:it,isSigner:!1,isWritable:!1},{pubkey:mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],ee=Buffer.alloc(V.span);V.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:k,liquidity:I,amountMaxA:B,amountMaxB:x,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},ee);let te=Buffer.from([...mt.openPosition,...ee]);return new lt({keys:D,programId:e,data:te})}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 v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=eo.generate();m.push(x),y=x.publicKey}let f=U.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=U.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=me(d,p,f),{publicKey:h}=me(d,p,b),{publicKey:A}=ge(n.wallet,y,Ne),{publicKey:T}=Vr(y),{publicKey:k}=At(d,y),{publicKey:I}=Ht(d,p,r,o),B=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,h,k,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),r,o,f,b,s,a,u,c);return{signers:m,instructions:[B],instructionTypes:[M.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:T,personalPosition:k,protocolPosition:I}}}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 v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=eo.generate();m.push(x),y=x.publicKey}let f=U.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=U.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=me(d,p,f),{publicKey:h}=me(d,p,b),{publicKey:A}=ge(n.wallet,y,Ne),{publicKey:T}=Vr(y),{publicKey:k}=At(d,y),{publicKey:I}=Ht(d,p,r,o),B=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,h,k,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),r,o,f,b,c,s,a,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ht(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:T,personalPosition:k,protocolPosition:I},instructions:[B],signers:m,instructionTypes:[M.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,A,T,k,I,B,x,C,_){let V=N([Oe("tickLowerIndex"),Oe("tickUpperIndex"),Oe("tickArrayLowerStartIndex"),Oe("tickArrayUpperStartIndex"),X("liquidity"),w("amountMaxA"),w("amountMaxB"),Ee("withMetadata"),F("optionBaseFlag"),Ee("baseFlag")]),H=[..._?[{pubkey:_,isSigner:!1,isWritable:!0}]:[]],D=[{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:it,isSigner:!1,isWritable:!1},{pubkey:mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],ee=Buffer.alloc(V.span);V.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:k,liquidity:new ia(0),amountMaxA:B==="MintA"?x:C,amountMaxB:B==="MintA"?C:x,withMetadata:I==="create",baseFlag:B==="MintA",optionBaseFlag:1},ee);let te=Buffer.from([...mt.openPosition,...ee]);return new lt({keys:D,programId:e,data:te})}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 v((await l(1))[0]);else{let x=eo.generate();d.push(x),m=x.publicKey}let[p,y]=[new v(e.programId),new v(e.id)],f=U.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=U.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=me(p,y,f),{publicKey:h}=me(p,y,b),{publicKey:A}=ge(n.wallet,m,Ne),{publicKey:T}=Vr(m),{publicKey:k}=At(p,m),{publicKey:I}=Ht(p,y,r,o),B=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,T,I,g,h,k,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),r,o,f,b,s,a,u,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ht(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:T,personalPosition:k,protocolPosition:I},instructions:[B],signers:d,instructionTypes:[M.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,o){let s=N([]),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:mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...mt.closePosition,...u]);return new lt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let o=new v(e.programId),{publicKey:s}=ge(n.wallet,r.nftMint,Ne),{publicKey:a}=At(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:[M.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 A=N([X("liquidity"),w("amountMaxA"),w("amountMaxB"),F("optionBaseFlag"),Ee("baseFlag")]),T=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],k=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let B=Buffer.from([...mt.increaseLiquidity,...I]);return new lt({keys:k,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=U.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=U.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=me(u,c,l),{publicKey:p}=me(u,c,m),{publicKey:y}=ge(r.wallet,n.nftMint,Ne),{publicKey:f}=At(u,n.nftMint),{publicKey:b}=Ht(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ht(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[M.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 v(e.programId),new v(e.id)],l=U.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=U.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=me(u,c,l),{publicKey:p}=me(u,c,m),{publicKey:y}=ge(r.wallet,n.nftMint,Ne),{publicKey:f}=At(u,n.nftMint),{publicKey:b}=Ht(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 v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ht(u,c).publicKey:void 0)],signers:[],instructionTypes:[M.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 A=N([X("liquidity"),w("amountMaxA"),w("amountMaxB"),F("optionBaseFlag"),Ee("baseFlag")]),T=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],k=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:new ia(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let B=Buffer.from([...mt.increaseLiquidity,...I]);return new lt({keys:k,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let T=N([X("liquidity"),w("amountMinA"),w("amountMinB")]),k=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:h},B);let x=Buffer.from([...mt.decreaseLiquidity,...B]);return new lt({keys:I,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 v(e.programId),new v(e.id)],m=U.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=U.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=me(c,l,m),{publicKey:y}=me(c,l,d),{publicKey:f}=ge(r.wallet,n.nftMint,u),{publicKey:b}=At(c,n.nftMint),{publicKey:g}=Ht(c,l,n.tickLower,n.tickUpper),h=[];for(let T=0;T<e.rewardDefaultInfos.length;T++)h.push({poolRewardVault:new v(t.rewardInfos[T].vault),ownerRewardVault:r.rewardAccounts[T],rewardMint:new v(e.rewardDefaultInfos[T].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),h,o,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ht(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[M.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=N([w("amount"),w("otherAmountThreshold"),X("sqrtPriceLimitX64"),Ee("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],T=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],k=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},k);let I=Buffer.from([...mt.swap,...k]);return new lt({keys:T,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,inputMint:r,amountIn:o,amountOutMin:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,d]=[new v(t.vault.A),new v(t.vault.B)],[p,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountA:n.tokenAccountB,f?n.tokenAccountB:n.tokenAccountA,f?m:d,f?d:m,f?p:y,f?y:p,u,m,o,s,a,!0,ht(c,l).publicKey)];return{signers:[],instructions:b,instructionTypes:[M.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=N([w("openTime"),w("endTime"),X("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:mn.programId,isSigner:!1,isWritable:!1},{pubkey:it,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Y(l),endTime:Y(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...mt.initReward,...f]);return new lt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new v(e.programId),new v(e.id)],a=Xs(o,s,r.mint).publicKey,u=vn(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new v(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:[M.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=N([F("rewardIndex"),X("emissionsPerSecondX64"),w("openTime"),w("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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,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:Y(l),endTime:Y(m)},f);let b=Buffer.from([...mt.setRewardEmissions,...f]);return new lt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new v(e.programId),new v(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 v(t.rewardInfos[d].vault),c=new v(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&oa.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=vn(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new v(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[M.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,o,s,a){let u=N([F("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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...mt.collectReward,...l]);return new lt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[o,s]=[new v(e.programId),new v(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new v(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&oa.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:[M.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:o,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,d]=[new v(t.vault.A),new v(t.vault.B)],[p,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,o,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[M.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as El}from"@solana/web3.js";import{PublicKey as _l}from"@solana/web3.js";import sa from"bn.js";var aa=new sa(25),ua=new sa(1e4);var Ml=oe("Raydium_liquidity_serum");function ca({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=_l.createProgramAddressSync(o,i)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:r,nonce:n}}throw Ml.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 nP from"bn.js";function to({programId:i}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function Jt({name:i,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function Vl({programId:i,marketId:e}){let{publicKey:t}=ue([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function Fl({programId:i}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function la({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=Jt({name:"amm_associated_seed",programId:a,marketId:t}),l=Jt({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Fl({programId:a}),p=Jt({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Jt({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Jt({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Vl({programId:a,marketId:t}),g=Jt({name:"target_associated_seed",programId:a,marketId:t}),h=Jt({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=ca({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:A,lookupTableAccount:El.default,configId:to({programId:a})}}import De from"bn.js";var Gn=class extends he{constructor(t){super(t);this.stableLayout=new Vn({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 De(new E(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=_r(t[o?"mintB":"mintA"]),[u,c]=[new De(new E(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new De(new E(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new De(new E(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,E.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()}%`);let m=o?"base":"quote";this.logDebug("input side:",m);let d=qe;s.isZero()||(d=m==="base"?pr(s.mul(c),u):pr(s.mul(u),c));let p=pr(s.mul(l),new De(m==="base"?t.mintAmountA:t.mintAmountB).mul(new De(10).pow(new De(t[m==="base"?"mintA":"mintB"].decimals)))),f=new He(new De(1)).add(r).mul(d).quotient,b=new be(a,d),g=new be(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,amountInA:r,amountInB:o,fixedSide:s,config:a,txVersion:u,computeBudgetConfig:c}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",o),(r.isZero()||o.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:o.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:d}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[p,y]=[r.token,o.token],f=await l.getCreatedTokenAccount({mint:p.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),h=[p,y],A=[f,b],T=[r.raw,o.raw],k=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(k)||this.logAndCreateError("invalid fixedSide","fixedSide",s),k==="quote"?(h.reverse(),A.reverse(),T.reverse(),I=s==="a"?"quote":"base"):k==="base"&&(I=s==="a"?"base":"quote");let[B,x]=h,[C,_]=A,[V,H]=T,D=await this.getAmmPoolKeys(n.id),ee=this.createTxBuilder(),Kt=await l.handleTokenAccount({side:"in",amount:V,mint:B.mint,tokenAccount:C,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:te}=Kt,re=we(Kt,["tokenAccount"]);ee.addInstruction(re);let er=await l.handleTokenAccount({side:"in",amount:H,mint:x.mint,tokenAccount:_,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:tt}=er,fn=we(er,["tokenAccount"]);ee.addInstruction(fn);let yn=await l.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:Xr}=yn,zr=we(yn,["tokenAccount"]);return ee.addInstruction(zr),ee.addInstruction({instructions:[Fs({poolInfo:n,poolKeys:D,userKeys:{baseTokenAccount:te,quoteTokenAccount:tt,lpTokenAccount:Xr,owner:this.scope.ownerPubKey},baseAmountIn:V,quoteAmountIn:H,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?M.AmmV5AddLiquidity:M.AmmV4AddLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),ee.addCustomComputeBudget(c),u===0&&await ee.buildV0(),ee.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:r,config:o,txVersion:s,computeBudgetConfig:a}=t,u=await this.getAmmPoolKeys(n.id),[c,l,m]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",r),r.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",r.toString());let{account:d}=this.scope,p=await d.getCreatedTokenAccount({mint:m,associatedOnly:!1});p||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",d.tokenAccounts);let y=await d.getCreatedTokenAccount({mint:c}),f=await d.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:h}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),B=await d.handleTokenAccount({side:"out",amount:0,mint:c,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:A}=B,T=we(B,["tokenAccount"]);b.addInstruction(T);let x=await d.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:k}=x,I=we(x,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[zi({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:p,baseTokenAccount:A,quoteTokenAccount:k,owner:this.scope.ownerPubKey},amountIn:r})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?M.AmmV5RemoveLiquidity:M.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,tokenProgram:m=Dr,checkCreateATAOwner:d=!0,getEphemeralSigners:p,txVersion:y}){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 f=this.createTxBuilder();f.addCustomComputeBudget(c);let b={};for(let te of this.scope.account.tokenAccountRawInfos)(b[te.accountInfo.mint.toString()]===void 0||ge(this.scope.ownerPubKey,te.accountInfo.mint,Dr).publicKey.equals(te.pubkey))&&(b[te.accountInfo.mint.toString()]=te.pubkey);let g=b[t.lpMint.address];if(g===void 0)throw Error("find lp account error in trade accounts");let h=r.add(a!=null?a:new De(0)),A=t.mintA.address===Ae.WSOL.mint.toString(),T=t.mintB.address===Ae.WSOL.mint.toString(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dr,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!0,checkCreateATAOwner:d});if(f.addInstruction(I||{}),k===void 0)throw new Error("base token account not found");let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dr,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:d});if(f.addInstruction(x||{}),B===void 0)throw new Error("quote token account not found");if(b[t.mintA.address]=k,b[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let te=[];for(let Kt of s.rewardInfos){let er=Kt.mint.address===Ae.WSOL.mint.toString();if(b[Kt.mint.address])te.push(b[Kt.mint.address]);else{let{account:yn,instructionParams:co}=await this.scope.account.getOrCreateTokenAccount({mint:new je(Kt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!er,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:d});yn||this.logAndCreateError("farm reward account not found:",Kt.mint.address),co&&f.addInstruction(co),te.push(yn)}}let re=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],tt={amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:re,lpAccount:g,rewardAccounts:te},fn=ut[s.programId],Xr=fn===6?Nn(tt):fn===5?_n(tt):Mn(tt),zr={3:M.FarmV3Withdraw,5:M.FarmV5Withdraw,6:M.FarmV6Withdraw};f.addInstruction({instructions:[Xr],instructionTypes:[zr[fn]]})}let C=await this.getAmmPoolKeys(t.id),_=zi({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:g,baseTokenAccount:k,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:h});f.addInstruction({instructions:[_],instructionTypes:[t.pooltype.includes("StablePool")?M.AmmV5RemoveLiquidity:M.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[V,H]=t.mintA.address===n.mintA.address?[k,B]:[B,k],D=await this.scope.clmm.getClmmPoolKeys(t.id),ee=await ke.openPositionFromBaseInstructions(W(O({poolInfo:n,poolKeys:D,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:V,tokenAccountB:H},withMetadata:"create"},o),{base:u,getEphemeralSigners:p}));return f.addInstruction({instructions:[...ee.instructions],signers:ee.signers,instructionTypes:[...ee.instructionTypes],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),y===0?f.sizeCheckBuildV0():f.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 H;let b=c.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),g=c.useSOLBalance&&r.mint.equals(ma),h=c.useSOLBalance&&o.mint.equals(ma),A=this.createTxBuilder(),{account:T,instructionParams:k}=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});A.addInstruction(k||{});let{account:I,instructionParams:B}=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(A.addInstruction(B||{}),T===void 0||I===void 0)throw Error("you don't has some token account");let x=la({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:o.mint,baseDecimals:r.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),C={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:_,instructionType:V}=vs(W(O({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:I,userLpVault:ge(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[_],instructionTypes:[V]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=to({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Ls.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:o,slippage:s}){if(r!==t.mintA.address&&r!==t.mintA.address)throw new Error("toke not match");if(o!==t.mintB.address&&o!==t.mintB.address)throw new Error("toke not match");let{baseReserve:a,quoteReserve:u}=t,c=[a,u],l=r==t.mintA.address?"base":"quote";l==="quote"&&c.reverse();let[m,d]=c,p=t.programId===Qo.toBase58(),y;if(p)y=new E(d.toString()).div(m.toString());else{let x=Ms(this.stableLayout.stableModelData,a.toNumber(),u.toNumber(),!1);l==="quote"?y=new E(1e6).div(x*1e6):y=new E(x*1e6).div(1e6)}let f=n,b=new De(0),g=new De(0);if(!f.isZero())if(p){g=Cn(f.mul(aa),ua);let x=f.sub(g),C=m.add(x);b=d.mul(x).div(C)}else{g=f.mul(new De(2)).div(new De(1e4));let x=f.sub(g);l==="quote"?b=new De(Ns(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber())):b=new De(_s(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber()))}let h=new De(new E(b.toString()).mul(1-s).toFixed(0)),A=b,T=h,k=new E(b.toString()).div(new E(f.sub(g).toString()).toFixed(0));!f.isZero()&&!b.isZero()&&(k=new E(b.toString()).div(f.sub(g).toString()));let I=y.sub(k).div(y).mul(100);return{amountOut:A,minAmountOut:T,currentPrice:y,executionPrice:k,priceImpact:I,fee:g}}async swap({poolInfo:t,amountIn:n,amountOut:r,inputMint:o,fixedSide:s,txVersion:a,computeBudgetConfig:u}){let c=this.createTxBuilder(),[l,m]=o===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],d=await this.scope.account.getCreatedTokenAccount({mint:new je(l.address),programId:new je(l.programId),associatedOnly:!1}),p=await this.scope.account.getCreatedTokenAccount({mint:new je(m.address),programId:new je(m.programId),associatedOnly:!1}),T=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new je(l.address),tokenAccount:d,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=T,f=we(T,["tokenAccount"]);c.addInstruction(f);let k=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new je(m.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=k,g=we(k,["tokenAccount"]);c.addInstruction(g);let h=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),c.addInstruction({instructions:[Ds({version:A,poolKeys:h,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:r,fixedSide:s})],instructionTypes:[A===4?M.AmmV4SwapBaseIn:M.AmmV5SwapBaseIn]}),c.addCustomComputeBudget(u),c.versionBuild({txVersion:a})}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";var Xn=class extends he{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||ie.default,mint1:r,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(o.address).toBuffer()))?[o,r,new E(1).div(a)]:[r,o,a],b=J.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:W(O({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:f.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:[]}},Zs),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===$.toString(),A=n.useSOLBalance&&e.mintB.address===$.toString(),[T,k]=s==="MintA"?[a,u]:[u,a],{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});I&&(b=I),f.addInstruction(B||{});let{account:x,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let _=t||await this.getClmmPoolKeys(e.id),V=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:_,ownerInfo:W(O({},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(V),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:V.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,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===$.toBase58(),h=n.useSOLBalance&&e.mintB.address===$.toBase58(),{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(T||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});k&&(b=k),y.addInstruction(I||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id);console.log(123123444,B);let x=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,amountMaxB:o,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:r,amountMaxB:o,liquidity: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===$.toString(),b=a.useSOLBalance&&t.mintB.address===$.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?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let k=await this.getClmmPoolKeys(t.id),I=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:k,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},liquidity:s,amountMaxA:r,amountMaxB:o});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.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===$.toString(),b=a.useSOLBalance&&t.mintB.address===$.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?{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:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let k=await this.getClmmPoolKeys(t.id),I=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:k,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:o,otherAmountMax:s});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:r,amountMinA:o,amountMinB:s,liquidity:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let d=this.createTxBuilder(),p=r.useSOLBalance&&t.mintA.address===$.toString(),y=r.useSOLBalance&&t.mintB.address===$.toString(),f,b,{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!p,associatedOnly:p?!1:u,checkCreateATAOwner:c});f=g,h&&d.addInstruction(h);let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:c});b=A,T&&d.addInstruction(T);let k=[];for(let C of t.rewardDefaultInfos){let _=r.useSOLBalance&&C.mint.address===$.toString(),V;if(C.mint.address===t.mintA.address)V=f;else if(C.mint.address===t.mintB.address)V=b;else{let{account:H,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(C.mint.programId),mint:new ie(C.mint.address),notUseTokenAccount:_,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!_,associatedOnly:_?!1:u,checkCreateATAOwner:c});V=H,D&&d.addInstruction(D)}k.push(V)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),B=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:k},liquidity:a,amountMinA:o,amountMinB:s});d.addInstruction({instructions:B.instructions,instructionTypes:[M.ClmmDecreasePosition]});let x=O({},B.address);if(r.closePosition){let C=await ke.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});d.addInstruction({endInstructions:C.instructions,endInstructionTypes:C.instructionTypes}),x=O(O({},x),C.address)}return d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:x}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),o=await this.getClmmPoolKeys(e.id),s=ke.closePositionInstructions({poolInfo:e,poolKeys:o,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return r.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.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()===$.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 dt(new E(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=ke.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:Q.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let u=this.createTxBuilder(),c={};for(let l of n){let m=t.useSOLBalance&&l.mint.address===$.toString(),d=l.perSecond.mul(l.endTime-l.openTime),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(l.mint.programId),mint:new ie(l.mint.address),notUseTokenAccount:!!m,skipCloseAccount:!m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:m?!1:r,checkCreateATAOwner:o});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=ke.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new ie(l.mint.programId),mint:new ie(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:Q.decimalToX64(l.perSecond)}});c=O(O({},c),b.address),u.addInstruction(b)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}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($),{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 dt(new E(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=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:Q.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){let u=this.createTxBuilder(),c={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let m=t.useSOLBalance&&l.mint.address===$.toString(),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(l.mint.programId),mint:new ie(l.mint.address),notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:r,checkCreateATAOwner:o});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=ke.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:new ie(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:Q.decimalToX64(l.perSecond)}});u.addInstruction(f),c=O(O({},c),f.address)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}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($),{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=ke.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($),{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=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=O(O({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:r,priceLimit:o,ownerInfo:s,remainingAccounts:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,txVersion:l}){let m=this.createTxBuilder(),d=s.useSOLBalance&&e.mintA.address===$.toBase58(),p=s.useSOLBalance&&e.mintB.address===$.toBase58(),y;!o||o.equals(new E(0))?y=t.toString()===e.mintA.address?vt.add(new dt(1)):Dt.sub(new dt(1)):y=J.priceToSqrtPriceX64(o,e.mintA.decimals,e.mintB.decimals);let f;if(!f){let{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:u,checkCreateATAOwner:c});f=h,A&&m.addInstruction(A)}let b;if(!b){let{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:u,checkCreateATAOwner:c});b=h,A&&m.addInstruction(A)}(!f||!b)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let g=await this.getClmmPoolKeys(e.id);return m.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},inputMint:new ie(t),amountIn:n,amountOutMin:r,sqrtPriceLimitX64:y,remainingAccounts:a})),m.versionBuild({txVersion:l})}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?ge(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(A=>!A.liquidity.isZero()||A.rewardInfos.find(T=>!T.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===$.toString(),y=n.useSOLBalance&&d.mintB.address===$.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:T}=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=A,T&&l.addInstruction(T)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:T}=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=A,T&&l.addInstruction(T)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let T=n.useSOLBalance&&A.mint.address===$.toString(),k=c[A.mint.address];if(!k){let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:T?!1:r});k=I,B&&l.addInstruction(B)}c[A.mint.address]=k,g.push(k)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let T=ke.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(T)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(vn(e).publicKey);return t?na.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as qr,TOKEN_PROGRAM_ID as Ut,AccountLayout as Ta}from"@solana/spl-token";var vl=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Dl=Buffer.from("amm_config","utf8"),Wl=Buffer.from("pool","utf8"),ql=Buffer.from("pool_lp_mint","utf8"),Ul=Buffer.from("pool_vault","utf8"),Gl=Buffer.from("observation","utf8");function Xl(i){return ue([vl],i)}function zl(i,e){return ue([Dl,Hl(e)],i)}function Yl(i,e,t,n){return ue([Wl,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function jl(i,e){return ue([ql,e.toBuffer()],i)}function da(i,e,t){return ue([Ul,e.toBuffer(),t.toBuffer()],i)}function Wr(i,e){return ue([Gl,e.toBuffer()],i)}function Hl(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function pa({programId:i,mintA:e,mintB:t}){let n=zl(i,0).publicKey,r=Xl(i).publicKey,o=Yl(i,n,e,t).publicKey,s=jl(i,o).publicKey,a=da(i,o,e).publicKey,u=da(i,o,t).publicKey,c=Wr(i,o).publicKey;return{poolId:o,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as zn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as no,TOKEN_2022_PROGRAM_ID as ya,ASSOCIATED_TOKEN_PROGRAM_ID as Ql}from"@solana/spl-token";var fa=oe("Raydium_Cpmm_ins"),Yn={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 ba(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let T=N([w("amountMaxA"),w("amountMaxB"),w("openTime")]),k=[{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:no,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ql,isSigner:!1,isWritable:!1},{pubkey:_o,isSigner:!1,isWritable:!1},{pubkey:it,isSigner:!1,isWritable:!1}],I=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:h,openTime:A},I),new zn({keys:k,programId:i,data:Buffer.from([...Yn.initialize,...I])})}function ga(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){fa.info(123123,{mintA:c.toBase58(),mintB:l.toBase58(),lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()});let f=N([w("lpAmount"),w("amountMaxA"),w("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:no,isSigner:!1,isWritable:!1},{pubkey:ya,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 fa.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new zn({keys:b,programId:i,data:Buffer.from([...Yn.deposit,...g])})}function wa(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=N([w("lpAmount"),w("amountMinA"),w("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:no,isSigner:!1,isWritable:!1},{pubkey:ya,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Oo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new zn({keys:b,programId:i,data:Buffer.from([...Yn.withdraw,...g])})}function Aa(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=N([w("amountIn"),w("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 zn({keys:g,programId:i,data:Buffer.from([...Yn.swapBaseInput,...h])})}function ha(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=N([w("amountInMax"),w("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 zn({keys:g,programId:i,data:Buffer.from([...Yn.swapBaseOutput,...h])})}import Je from"bn.js";var Pa=N([fe(8),F("bump"),Ee("disableCreatePool"),yt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),S("protocolOwner"),S("fundOwner"),q(w(),16)]),ka=N([fe(8),S("configId"),S("poolCreator"),S("vaultA"),S("vaultB"),S("mintLp"),S("mintA"),S("mintB"),S("mintProgramA"),S("mintProgramB"),S("observationId"),F("bump"),F("status"),F("lpDecimals"),F("mintDecimalA"),F("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),q(w(),32)]);var jn=class extends he{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){let n=await this.scope.connection.getAccountInfo(new z(e));if(!n)throw new Error(`pool not found: ${e}`);let r=ka.decode(n.data),[o,s]=await this.scope.connection.getMultipleAccountsInfo([r.vaultA,r.vaultB]);if(!o)throw new Error(`pool vaultA info not found: ${r.vaultA.toBase58()}`);if(!s)throw new Error(`pool vaultB info not found: ${r.vaultB.toBase58()}`);let a;if(t){let u=await this.scope.connection.getAccountInfo(r.configId);u&&(a=Pa.decode(u.data))}return W(O({},r),{baseReserve:new Je(Ta.decode(o.data).amount.toString()).sub(r.protocolFeesMintA).sub(r.fundFeesMintA),quoteReserve:new Je(Ta.decode(s.data).amount.toString()).sub(r.protocolFeesMintB).sub(r.fundFeesMintB),configInfo:a})}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=we(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var H,D,ee;let d=r.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),p=new Je(new z(c.mintA.address).toBuffer()).lte(new Je(new z(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=r.useSOLBalance&&y.address===qr.toBase58(),A=r.useSOLBalance&&f.address===qr.toBase58(),[T,k]=[new z(y.address),new z(f.address)],I=this.createTxBuilder(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:o,checkCreateATAOwner:s});I.addInstruction(x||{});let{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:o,checkCreateATAOwner:s});if(I.addInstruction(_||{}),B===void 0||C===void 0)throw Error("you don't has some token account");let V=pa({programId:e,mintA:T,mintB:k});return I.addInstruction({instructions:[ba(e,this.scope.ownerPubKey,V.configId,V.authority,V.poolId,T,k,V.lpMint,B,C,ge(this.scope.ownerPubKey,V.lpMint).publicKey,V.vaultA,V.vaultB,t,new z((D=y.programId)!=null?D:Ut),new z((ee=f.programId)!=null?ee:Ut),V.observationId,b,g,n)],instructionTypes:[M.CpmmCreatePool]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:a,extInfo:{address:W(O({},V),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:r,slippage:o,computeBudgetConfig:s,config:a,txVersion:u}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:c}=this.scope,{bypassAssociatedCheck:l,checkCreateATAOwner:m}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),d=await this.getRpcPoolInfo(t.id),{liquidity:p,anotherAmount:y}=this.computePairAmount({poolInfo:W(O({},t),{mintAmountA:new E(d.baseReserve.toString()).div(10**t.mintA.decimals).toNumber(),mintAmountB:new E(d.quoteReserve.toString()).div(10**t.mintB.decimals).toNumber(),lpAmount:new E(d.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),slippage:o,baseIn:r,amount:new E(n.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),f=y.raw,b=t.mintA.address===qr.toString(),g=t.mintB.address===qr.toString(),h=this.createTxBuilder(),[A,T]=[new z(t.mintA.address),new z(t.mintB.address)],{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:b||(r?n:f).isZero()?{payer:this.scope.ownerPubKey,amount:r?n:f}:void 0,skipCloseAccount:!b,notUseTokenAccount:b,associatedOnly:!1,checkCreateATAOwner:m});h.addInstruction(I||{});let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||(r?f:n).isZero()?{payer:this.scope.ownerPubKey,amount:r?f:n}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:!1,checkCreateATAOwner:m});h.addInstruction(x||{}),!k&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",c.tokenAccounts);let C=await c.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),D=await c.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:C,bypassAssociatedCheck:l,checkCreateATAOwner:m}),{tokenAccount:_}=D,V=we(D,["tokenAccount"]);h.addInstruction(V);let H=await this.getCpmmPoolKeys(t.id);return h.addInstruction({instructions:[ga(new z(t.programId),this.scope.ownerPubKey,new z(H.authority),new z(t.id),_,k,B,new z(H.vault.A),new z(H.vault.B),A,T,new z(t.lpMint.address),p,r?n:f,r?f:n)],instructionTypes:[M.CpmmAddLiquidity],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),h.addCustomComputeBudget(s),h.versionBuild({txVersion:u})}async withdrawLiquidity(e){let{poolInfo:t,lpAmount:n,slippage:r,computeBudgetConfig:o,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new He(new Je(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[c,l]=[a.mul(n.mul(u.baseReserve).div(u.lpAmount)).quotient,a.mul(n.mul(u.quoteReserve).div(u.lpAmount)).quotient],{account:m}=this.scope,d=this.createTxBuilder(),[p,y]=[new z(t.mintA.address),new z(t.mintB.address)],f=p.equals($),b=y.equals($),g,h,{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=A,T&&d.addInstruction(T);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:!b,checkCreateATAOwner:!1});h=k,I&&d.addInstruction(I),(!g||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let B=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)});B||this.logAndCreateError("cannot found lp token account","tokenAccounts",m.tokenAccounts);let x=await this.getCpmmPoolKeys(t.id);return d.addInstruction({instructions:[wa(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(t.id),B,g,h,new z(x.vault.A),new z(x.vault.B),p,y,new z(t.lpMint.address),n,c,l)],instructionTypes:[M.CpmmWithdrawLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]}),d.addCustomComputeBudget(o),d.versionBuild({txVersion:s})}async swap(e){var T,k,x,C,_,V;let{poolInfo:t,baseIn:n,swapResult:r,config:o,computeBudgetConfig:s,txVersion:a}=e,{bypassAssociatedCheck:u,checkCreateATAOwner:c}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),l=this.createTxBuilder(),[m,d]=[new z(t.mintA.address),new z(t.mintB.address)],p=await this.scope.account.getCreatedTokenAccount({programId:new z((T=t.mintA.programId)!=null?T:Ut),mint:m,associatedOnly:!1}),y=await this.scope.account.getCreatedTokenAccount({programId:new z((k=t.mintB.programId)!=null?k:Ut),mint:d,associatedOnly:!1}),I=await this.scope.account.handleTokenAccount({side:n?"in":"out",amount:n?r.sourceAmountSwapped:r.destinationAmountSwapped,mint:m,tokenAccount:p,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:f}=I,b=we(I,["tokenAccount"]);l.addInstruction(b);let B=await this.scope.account.handleTokenAccount({side:n?"out":"in",amount:n?r.destinationAmountSwapped:r.sourceAmountSwapped,mint:d,tokenAccount:y,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:g}=B,h=we(B,["tokenAccount"]);l.addInstruction(h),!f&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let A=await this.getCpmmPoolKeys(t.id);return l.addInstruction({instructions:[n?Aa(new z(t.programId),this.scope.ownerPubKey,new z(A.authority),new z(A.id),new z(t.id),f,g,new z(A.vault.A),new z(A.vault.B),new z((x=t.mintA.programId)!=null?x:Ut),new z((C=t.mintB.programId)!=null?C:Ut),m,d,Wr(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped):ha(new z(t.programId),this.scope.ownerPubKey,new z(A.authority),new z(A.id),new z(t.id),g,f,new z(A.vault.B),new z(A.vault.A),new z((_=t.mintB.programId)!=null?_:Ut),new z((V=t.mintA.programId)!=null?V:Ut),d,m,Wr(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped)],instructionTypes:[n?M.CpmmSwapBaseIn:M.CpmmSwapBaseOut]}),l.addCustomComputeBudget(s),l.versionBuild({txVersion:a})}computePairAmount({poolInfo:e,amount:t,slippage:n,baseIn:r}){let o=new Je(new E(t).mul(10**e[r?"mintA":"mintB"].decimals).toFixed(0)),s=_r(e[r?"mintB":"mintA"]),[a,u]=[new Je(new E(e.mintAmountA).mul(10**e.mintA.decimals).toString()),new Je(new E(e.mintAmountB).mul(10**e.mintB.decimals).toString())],c=new Je(new E(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,E.ROUND_DOWN));this.logDebug("baseReserve:",a.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?e.mintA.symbol:e.mintB.symbol,"amountIn:",o.toString(),"anotherToken:",r?e.mintB.symbol:e.mintA.symbol,"slippage:",`${n.toSignificant()}%`);let l=r?"base":"quote";this.logDebug("input side:",l);let m=o.mul(c).div(l==="base"?a:u),d=qe;o.isZero()||(d=Zl(m,a,u,c)[r?"amountB":"amountA"]);let y=new He(new Je(1)).add(n).mul(d).quotient,f=new be(s,d),b=new be(s,y);return this.logDebug("anotherAmount:",f.toFixed(),"maxAnotherAmount:",b.toFixed()),{anotherAmount:f,maxAnotherAmount:b,liquidity:m}}};function Zl(i,e,t,n){let r=i.mul(e).div(n);!r.isZero()&&!i.mul(e).mod(n).isZero()&&(r=r.add(new Je(1)));let o=i.mul(t).div(n);return!o.isZero()&&!i.mul(t).mod(n).isZero()&&(o=o.add(new Je(1))),{amountA:r,amountB:o}}var Hn=class extends he{constructor(e){super(e)}static getAddLiquidityDefaultPool({addLiquidityPools:e,poolInfosCache:t}){if(e.length===0)return;if(e.length===1||(e.sort((r,o)=>o.version-r.version),e[0].version!==e[1].version))return e[0];let n=e.filter(r=>r.version===e[0].version);return n.sort((r,o)=>this.comparePoolSize(r,o,t)),n[0]}static comparePoolSize(e,t,n){let r=n[e.id],o=n[t.id];return r===void 0?1:o===void 0?-1:e.baseMint===t.baseMint?r.baseReserve.sub(o.baseReserve).gte(qe)?-1:1:r.baseReserve.sub(o.quoteReserve).gte(qe)?-1:1}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals($));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}=e,r=await this.getWSolAccounts(),o=this.createTxBuilder();o.addCustomComputeBudget(e.computeBudgetConfig);let s=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});o.addInstruction(s);let a=Y(t);for(let u=0;u<r.length;u++)a.gte(r[u].amount)?(o.addInstruction({instructions:[xt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),a.sub(r[u].amount)):(o.addInstruction({instructions:[xt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),Ln({destination:s.addresses.newAccount,source:r[u].publicKey,amount:a,owner:this.scope.ownerPubKey,tokenProgram:n}));return o.build()}async wrapWSol(e,t){let n=await this.getWSolAccounts(),r=this.createTxBuilder(),o=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return r.addInstruction(o),n.length&&r.addInstruction({instructions:[Ln({destination:n[0].publicKey,source:o.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[xt({tokenAccount:o.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),r.build()}};import{TOKEN_PROGRAM_ID as $l}from"@solana/spl-token";import{PublicKey as Jl,Transaction as ro,TransactionInstruction as em}from"@solana/web3.js";import Ia from"bn.js";var We=class extends he{static getPdaPoolId(e,t){return ue([We.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ue([We.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Ia(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=>We.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<We.VERSION_PROJECT.length;l++)a.push(...s.map(m=>We.getPdaOwnerId(t,m,r,l).publicKey));let u=await ft(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!==We.POOL_LAYOUT.span||b.data.length!==We.OWNER_LAYOUT.span)continue;let g=We.POOL_LAYOUT.decode(f.data),h=We.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),T=g.endTime.toNumber(),k=h.tokenInfo.map(x=>x.debtAmount.gt(new Ia(0))).filter(x=>!x).length!==3,I=o>A&&o<T&&g.status===1,B=k&&I;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:We.VERSION_PROJECT[m],openTime:A,endTime:T,canClaim:B,canClaimErrorType:k?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,C)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[C].debtAmount.add(h.tokenInfo[C].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(Ae.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(Ae.WSOL.mint),associatedOnly:u.mintAddress.equals(Ae.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[We.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(Ae.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(Ae.WSOL.mint),associatedOnly:m.mintAddress.equals(Ae.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[We.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 li(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ro().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ro().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ro().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=N([]),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:$l,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 em({keys:o,programId:e,data:a})}},et=We;et.CLAIMED_NUM=3,et.POOL_LAYOUT=N([fe(8),F("bump"),F("status"),w("openTime"),w("endTime"),S("ammId"),q(N([F("mintDecimals"),S("mintAddress"),S("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),We.CLAIMED_NUM,"tokenInfo"),q(w(),10,"padding")]),et.OWNER_LAYOUT=N([fe(8),F("bump"),F("version"),S("poolId"),S("owner"),w("lpAmount"),q(N([S("mintAddress"),w("debtAmount"),w("claimedAmount")]),We.CLAIMED_NUM,"tokenInfo"),q(w(),4,"padding")]),et.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Jl(e)),et.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},et.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as oo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ca}from"@solana/spl-token";import Qn from"bn.js";import{TransactionInstruction as nm,SYSVAR_RENT_PUBKEY as rm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xa}from"@solana/spl-token";import{createInitializeAccountInstruction as Ba}from"@solana/spl-token";import{SystemProgram as en,Transaction as Sa}from"@solana/web3.js";function tm(i="accountFlags"){let e=new xr(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 io=N([fe(5),tm("accountFlags"),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function im({programId:i,marketInfo:e}){let t=N([F("version"),Ge("instruction"),w("baseLotSize"),w("quoteLotSize"),yt("feeRateBps"),w("vaultSignerNonce"),w("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:rm,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 nm({keys:n,programId:i,data:r})}async function Ka({connection:i,wallet:e,marketInfo:t}){let n=new Sa,r=await i.getMinimumBalanceForRentExemption(165);n.add(en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:xa}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:xa}),Ba(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Ba(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Sa;return o.add(en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(io.span),space:io.span,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await i.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await i.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),im({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:[M.CreateAccount,M.CreateAccount,M.InitAccount,M.InitAccount]},{transaction:o,signer:[],instructionTypes:[M.CreateAccount,M.CreateAccount,M.CreateAccount,M.CreateAccount,M.CreateAccount,M.InitMarket]}]}var dn=class extends he{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:o,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ve({fromPublicKey:u,programId:o}),l=Ve({fromPublicKey:u,programId:o}),m=Ve({fromPublicKey:u,programId:o}),d=Ve({fromPublicKey:u,programId:o}),p=Ve({fromPublicKey:u,programId:o}),y=Ve({fromPublicKey:u,programId:Ca}),f=Ve({fromPublicKey:u,programId:Ca}),b=0,g=new Qn(100);function h(){let _=new Qn(0);for(;;)try{return{vaultOwner:oo.createProgramAddressSync([c.publicKey.toBuffer(),_.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:_}}catch{if(_.iaddn(1),_.gt(new Qn(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:T}=h(),k=new Qn(Math.round(10**e.decimals*n)),I=new Qn(Math.round(n*10**t.decimals*r));if(k.eq(qe))throw Error("lot size is too small");if(I.eq(qe))throw Error("tick size or lot size is too small");let B=await Ka({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:T,baseLotSize:k,quoteLotSize:I}}),x=this.createTxBuilder();x.addCustomComputeBudget(a),x.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});let C=[];for await(let _ of B.slice(1,B.length)){let V=this.createTxBuilder();V.addCustomComputeBudget(a),V.addInstruction({instructions:_.transaction.instructions,signers:_.signer,instructionTypes:_.instructionTypes});let H=await V.versionBuild({txVersion:s});C.push(H)}return x.versionMultiBuild({extraPreBuildData:C,extInfo:{address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new oo(e.mint),quoteMin:new oo(t.mint)}},txVersion:s})}};import{PublicKey as $n}from"@solana/web3.js";import{PublicKey as WT,TransactionInstruction as La,SYSVAR_CLOCK_PUBKEY as sm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ra}from"@solana/spl-token";var om=N([F("instruction"),ts("amount")]),Zn=N([F("instruction")]);function Ur({programId:i},e){let t=[{pubkey:Ra,isSigner:!1,isWritable:!1},{pubkey:No,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,o])=>({pubkey:o,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Zn.span);return Zn.encode({instruction:2},n),new La({keys:t,programId:i,data:n})}function so(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(Zn.span);Zn.encode({instruction:2},s);let a=[{pubkey:Ra,isWritable:!1,isSigner:!1},{pubkey:sm,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 La({programId:e.programId,keys:a,data:s})}import Oa from"bn.js";var am={[Sn.IDO_PROGRAM_ID_V1.toString()]:1,[Sn.IDO_PROGRAM_ID_V2.toString()]:2,[Sn.IDO_PROGRAM_ID_V3.toString()]:3,[Sn.IDO_PROGRAM_ID_V4.toString()]:4},pn=class extends he{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:o}){let s=this.createTxBuilder(),a=am[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ue(t),[c,l]=[!new Oa(e.coin).isZero(),!new Oa(e.pc).isZero()],m=u.projectInfo.mint.address.equals($),{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($),{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?[Ur({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new $n(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Ur({programId:new $n(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new $n(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Ur({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new $n(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 $n(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[so(W(O({},g),{side:"base"}))]:[],...l?[so(W(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as um}from"@solana/web3.js";import{MintLayout as cm,TOKEN_2022_PROGRAM_ID as ao,TOKEN_PROGRAM_ID as uo}from"@solana/spl-token";var Jn=class extends he{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._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:o,blacklist:s}=await this.scope.fetchV3TokenList(n),a=await this.scope.fetchJupTokenList(r,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._tokenMap.set(Nt.address,Nt),this._mintGroup.official.add(Nt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,W(O({},u),{priority:-1}))}),o.forEach(u=>{var c;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"raydium",priority:2,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?ao.toBase58():uo.toBase58()})),this._mintGroup.official.add(u.address))}),a.forEach(u=>{var c;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"jupiter",priority:1,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?ao.toBase58():uo.toBase58()})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ao.toBase58():uo.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}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 Nt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,W(O({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new um(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=cm.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 Gr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u}=e;this._connection=t,this.cluster=n,this._owner=r?new ot(r):void 0,this._signAllTransactions=e.signAllTransactions,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=oe("Raydium"),this.farm=new En({scope:this,moduleName:"Raydium_Farm"}),this.account=new Rn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Gn({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Jn({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Hn({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Xn({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new jn({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new et({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new dn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new pn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let c=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:c,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){let t=lm({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:o,logRequests:s,urlConfigs:a}=t,u=new kr({cluster:n,timeout:r,urlConfigs:a,logCount:o,logRequests:s}),c=new Gr(W(O({},t),{api:u}));return await c.fetchAvailabilityStatus(e.disableFeatureCheck),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Tr);return this._owner.publicKey}setOwner(e){return this._owner=e?new ot(e):void 0,this}get connection(){if(!this._connection)throw new Error($o);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(Tr),new Error(Tr)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let r=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=W(O({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:r}}),this.apiData.jupTokenList[e].data}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{Gr as Raydium};
1
+ var Na=Object.defineProperty,_a=Object.defineProperties;var Ma=Object.getOwnPropertyDescriptors;var tr=Object.getOwnPropertySymbols;var mo=Object.prototype.hasOwnProperty,po=Object.prototype.propertyIsEnumerable;var lo=(i,e,t)=>e in i?Na(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t,O=(i,e)=>{for(var t in e||(e={}))mo.call(e,t)&&lo(i,t,e[t]);if(tr)for(var t of tr(e))po.call(e,t)&&lo(i,t,e[t]);return i},W=(i,e)=>_a(i,Ma(e));var we=(i,e)=>{var t={};for(var n in i)mo.call(i,n)&&e.indexOf(n)<0&&(t[n]=i[n]);if(i!=null&&tr)for(var n of tr(i))e.indexOf(n)<0&&po.call(i,n)&&(t[n]=i[n]);return t};import{merge as lm}from"lodash";import lc from"axios";import{get as fo,set as Ea}from"lodash";import bo from"dayjs";import Va from"dayjs/plugin/utc";bo.extend(Va);var Yr=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 bo().utc().format("YYYY/MM/DD HH:mm:ss UTC")}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}},yo={},Fa={};function oe(i){let e=fo(yo,i);if(!e){let t=fo(Fa,i);e=new Yr({name:i,logLevel:t}),Ea(yo,i,e)}return e}import{PublicKey as ju}from"@solana/web3.js";import Hu from"bn.js";import Xu from"big.js";import fr from"bn.js";import Ye from"bn.js";var tn=9e15,Ot=1e9,jr="0123456789abcdef",rr="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",ir="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Hr={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-tn,maxE:tn,crypto:!1},ho,It,Z=!0,sr="[DecimalError] ",Rt=sr+"Invalid argument: ",Po=sr+"Precision limit exceeded",ko=sr+"crypto unavailable",To="[object Decimal]",_e=Math.floor,xe=Math.pow,va=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,Da=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Wa=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Io=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,rt=1e7,j=7,qa=9007199254740991,Ua=rr.length-1,Qr=ir.length-1,K={toStringTag:To};K.absoluteValue=K.abs=function(){var i=new this.constructor(this);return i.s<0&&(i.s=1),G(i)};K.ceil=function(){return G(new this.constructor(this),this.e+1,2)};K.clampedTo=K.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(Rt+e);return t=n.cmp(i),t<0?i:n.cmp(e)>0?e:new r(n)};K.comparedTo=K.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};K.cosine=K.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=Ga(n,Co(n,t)),n.precision=i,n.rounding=e,G(It==2||It==3?t.neg():t,i,e,!0)):new n(1):new n(NaN)};K.cubeRoot=K.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(Z=!1,o=l.s*xe(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=Le(l.d),i=l.e,(o=(i-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=xe(t,1/3),i=_e((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=de(c.plus(l).times(a),c.plus(u),s+2,1),Le(a.d).slice(0,s)===(t=Le(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!r&&t=="4999"){if(!r&&(G(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")&&(G(n,i+1,1),e=!n.times(n).times(n).eq(l));break}return Z=!0,G(n,i,m.rounding,e)};K.decimalPlaces=K.dp=function(){var i,e=this.d,t=NaN;if(e){if(i=e.length-1,t=(i-_e(this.e/j))*j,i=e[i],i)for(;i%10==0;i/=10)t--;t<0&&(t=0)}return t};K.dividedBy=K.div=function(i){return de(this,new this.constructor(i))};K.dividedToIntegerBy=K.divToInt=function(i){var e=this,t=e.constructor;return G(de(e,new t(i),0,1,1),t.precision,t.rounding)};K.equals=K.eq=function(i){return this.cmp(i)===0};K.floor=function(){return G(new this.constructor(this),this.e+1,3)};K.greaterThan=K.gt=function(i){return this.cmp(i)>0};K.greaterThanOrEqualTo=K.gte=function(i){var e=this.cmp(i);return e==1||e===0};K.hyperbolicCosine=K.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/ur(4,i)).toString()):(i=16,e="2.3283064365386962890625e-10"),o=nn(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 G(o,s.precision=t,s.rounding=n,!0)};K.hyperbolicSine=K.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=nn(o,2,r,r,!0);else{i=1.4*Math.sqrt(n),i=i>16?16:i|0,r=r.times(1/ur(5,i)),r=nn(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,G(r,e,t,!0)};K.hyperbolicTangent=K.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,de(t.sinh(),t.cosh(),n.precision=i,n.rounding=e)):new n(t.s)};K.inverseCosine=K.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()?nt(t,r,o):new t(0):new t(NaN):e.isZero()?nt(t,r+4,o).times(.5):(t.precision=r+6,t.rounding=1,e=e.asin(),i=nt(t,r+4,o).times(.5),t.precision=r,t.rounding=o,i.minus(e))};K.inverseHyperbolicCosine=K.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,Z=!1,t=t.times(t).minus(1).sqrt().plus(t),Z=!0,n.precision=i,n.rounding=e,t.ln()):new n(t)};K.inverseHyperbolicSine=K.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,Z=!1,t=t.times(t).plus(1).sqrt().plus(t),Z=!0,n.precision=i,n.rounding=e,t.ln())};K.inverseHyperbolicTangent=K.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?G(new o(r),i,e,!0):(o.precision=t=n-r.e,r=de(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)};K.inverseSine=K.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=nt(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)))};K.inverseTangent=K.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<=Qr)return s=nt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=Qr)return s=nt(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(Z=!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)),Z=!0,G(s,l.precision=m,l.rounding=d,!0)};K.isFinite=function(){return!!this.d};K.isInteger=K.isInt=function(){return!!this.d&&_e(this.e/j)>this.d.length-2};K.isNaN=function(){return!this.s};K.isNegative=K.isNeg=function(){return this.s<0};K.isPositive=K.isPos=function(){return this.s>0};K.isZero=function(){return!!this.d&&this.d[0]===0};K.lessThan=K.lt=function(i){return this.cmp(i)<0};K.lessThanOrEqualTo=K.lte=function(i){return this.cmp(i)<1};K.logarithm=K.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(Z=!1,a=m+p,s=Lt(c,a),n=e?or(l,a+10):Lt(i,a),u=de(s,n,a,1),bn(u.d,r=m,d))do if(a+=10,s=Lt(c,a),n=e?or(l,a+10):Lt(i,a),u=de(s,n,a,1),!o){+Le(u.d).slice(r+1,r+15)+1==1e14&&(u=G(u,m+1,0));break}while(bn(u.d,r+=10,d));return Z=!0,G(u,m,d)};K.minus=K.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 Z?G(i,a,u):i}if(t=_e(i.e/j),l=_e(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]=rt-1;--c[r],c[n]+=rt}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=ar(c,t),Z?G(i,a,u):i):new y(u===3?-0:0)};K.modulo=K.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]?G(new n(t),n.precision,n.rounding):(Z=!1,n.modulo==9?(e=de(t,i.abs(),0,3,1),e.s*=i.s):e=de(t,i,0,n.modulo,1),e=e.times(i),Z=!0,t.minus(e))};K.naturalExponential=K.exp=function(){return Zr(this)};K.naturalLogarithm=K.ln=function(){return Lt(this)};K.negated=K.neg=function(){var i=new this.constructor(this);return i.s=-i.s,G(i)};K.plus=K.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)),Z?G(i,a,u):i;if(o=_e(m.e/j),n=_e(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)/rt|0,c[r]%=rt;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return i.d=c,i.e=ar(c,n),Z?G(i,a,u):i};K.precision=K.sd=function(i){var e,t=this;if(i!==void 0&&i!==!!i&&i!==1&&i!==0)throw Error(Rt+i);return t.d?(e=xo(t.d),i&&t.e+1>e&&(e=t.e+1)):e=NaN,e};K.round=function(){var i=this,e=i.constructor;return G(new e(i),i.e+1,e.rounding)};K.sine=K.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=za(n,Co(n,t)),n.precision=i,n.rounding=e,G(It>2?t.neg():t,i,e,!0)):new n(NaN)};K.squareRoot=K.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(Z=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=Le(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=_e((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(de(s,o,t+2,1)).times(.5),Le(o.d).slice(0,t)===(e=Le(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!r&&e=="4999"){if(!r&&(G(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")&&(G(n,u+1,1),i=!n.times(n).eq(s));break}return Z=!0,G(n,u,l.rounding,i)};K.tangent=K.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=de(t,new n(1).minus(t.times(t)).sqrt(),i+10,0),n.precision=i,n.rounding=e,G(It==2||It==4?t.neg():t,i,e,!0)):new n(NaN)};K.times=K.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=_e(l.e/j)+_e(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%rt|0,e=a/rt|0;o[r]=(o[r]+e)%rt|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),i.d=o,i.e=ar(o,t),Z?G(i,m.precision,m.rounding):i};K.toBinary=function(i,e){return Jr(this,2,i,e)};K.toDecimalPlaces=K.toDP=function(i,e){var t=this,n=t.constructor;return t=new n(t),i===void 0?t:(ze(i,0,Ot),e===void 0?e=n.rounding:ze(e,0,8),G(t,i+t.e+1,e))};K.toExponential=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=pt(n,!0):(ze(i,0,Ot),e===void 0?e=r.rounding:ze(e,0,8),n=G(new r(n),i+1,e),t=pt(n,!0,i+1)),n.isNeg()&&!n.isZero()?"-"+t:t};K.toFixed=function(i,e){var t,n,r=this,o=r.constructor;return i===void 0?t=pt(r):(ze(i,0,Ot),e===void 0?e=o.rounding:ze(e,0,8),n=G(new o(r),i+r.e+1,e),t=pt(n,!1,i+n.e+1)),r.isNeg()&&!r.isZero()?"-"+t:t};K.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=xo(y)-p.e-1,s=o%j,e.d[0]=xe(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(Rt+a);i=a.gt(e)?o>0?e:c:a}for(Z=!1,a=new f(Le(y)),l=f.precision,f.precision=o=y.length*j*2;m=de(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=de(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=de(c,n,o,1).minus(p).abs().cmp(de(u,t,o,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,Z=!0,d};K.toHexadecimal=K.toHex=function(i,e){return Jr(this,16,i,e)};K.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:ze(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]?(Z=!1,t=de(t,i,0,e,1).times(i),Z=!0,G(t)):(i.s=t.s,t=i),t};K.toNumber=function(){return+this};K.toOctal=function(i,e){return Jr(this,8,i,e)};K.toPower=K.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(xe(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,o=u.rounding,i.eq(1))return G(a,n,o);if(e=_e(i.e/j),e>=i.d.length-1&&(t=c<0?-c:c)<=qa)return r=Bo(u,a,t,n),i.s<0?new u(1).div(r):G(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=xe(+a,c),e=t==0||!isFinite(t)?_e(c*(Math.log("0."+Le(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):(Z=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),r=Zr(i.times(Lt(a,n+t)),n),r.d&&(r=G(r,n+5,1),bn(r.d,n,o)&&(e=n+10,r=G(Zr(i.times(Lt(a,e+t)),e),e+5,1),+Le(r.d).slice(n+1,n+15)+1==1e14&&(r=G(r,n+1,0)))),r.s=s,Z=!0,u.rounding=o,G(r,n,o))};K.toPrecision=function(i,e){var t,n=this,r=n.constructor;return i===void 0?t=pt(n,n.e<=r.toExpNeg||n.e>=r.toExpPos):(ze(i,1,Ot),e===void 0?e=r.rounding:ze(e,0,8),n=G(new r(n),i,e),t=pt(n,i<=n.e||n.e<=r.toExpNeg,i)),n.isNeg()&&!n.isZero()?"-"+t:t};K.toSignificantDigits=K.toSD=function(i,e){var t=this,n=t.constructor;return i===void 0?(i=n.precision,e=n.rounding):(ze(i,1,Ot),e===void 0?e=n.rounding:ze(e,0,8)),G(new n(t),i,e)};K.toString=function(){var i=this,e=i.constructor,t=pt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()&&!i.isZero()?"-"+t:t};K.truncated=K.trunc=function(){return G(new this.constructor(this),this.e+1,1)};K.valueOf=K.toJSON=function(){var i=this,e=i.constructor,t=pt(i,i.e<=e.toExpNeg||i.e>=e.toExpPos);return i.isNeg()?"-"+t:t};function Le(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+=Ct(t)),o+=n;s=i[e],n=s+"",t=j-n.length,t&&(o+=Ct(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function ze(i,e,t){if(i!==~~i||i<e||i>t)throw Error(Rt+i)}function bn(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=xe(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)==xe(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)==xe(10,e-3)-1,s}function nr(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]+=jr.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 Ga(i,e){var t,n,r;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),r=(1/ur(4,t)).toString()):(t=16,r="2.3283064365386962890625e-10"),i.precision+=t,e=nn(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 de=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,A,T,k,I,B,x,C,_,V,H,D=n.constructor,ee=n.s==r.s?1:-1,te=n.d,re=r.d;if(!te||!te[0]||!re||!re[0])return new D(!n.s||!r.s||(te?re&&te[0]==re[0]:!re)?NaN:te&&te[0]==0||!re?ee*0:ee/0);for(u?(p=1,l=n.e-r.e):(u=rt,p=j,l=_e(n.e/p)-_e(r.e/p)),V=re.length,C=te.length,g=new D(ee),h=g.d=[],m=0;re[m]==(te[m]||0);m++);if(re[m]>(te[m]||0)&&l--,o==null?(I=o=D.precision,s=D.rounding):a?I=o+(n.e-r.e)+1:I=o,I<0)h.push(1),y=!0;else{if(I=I/p+2|0,m=0,V==1){for(d=0,re=re[0],I++;(m<C||d)&&I--;m++)B=d*u+(te[m]||0),h[m]=B/re|0,d=B%re|0;y=d||m<C}else{for(d=u/(re[0]+1)|0,d>1&&(re=i(re,d,u),te=i(te,d,u),V=re.length,C=te.length),x=V,A=te.slice(0,V),T=A.length;T<V;)A[T++]=0;H=re.slice(),H.unshift(0),_=re[0],re[1]>=u/2&&++_;do d=0,c=e(re,A,V,T),c<0?(k=A[0],V!=T&&(k=k*u+(A[1]||0)),d=k/_|0,d>1?(d>=u&&(d=u-1),f=i(re,d,u),b=f.length,T=A.length,c=e(f,A,b,T),c==1&&(d--,t(f,V<b?H:re,b,u))):(d==0&&(c=d=1),f=re.slice()),b=f.length,b<T&&f.unshift(0),t(A,f,T,u),c==-1&&(T=A.length,c=e(re,A,V,T),c<1&&(d++,t(A,V<T?H:re,T,u))),T=A.length):c===0&&(d++,A=[0]),h[m++]=d,c&&A[0]?A[T++]=te[x]||0:(A=[te[x]],T=1);while((x++<C||A[0]!==void 0)&&I--);y=A[0]!==void 0}h[0]||h.shift()}if(p==1)g.e=l,ho=y;else{for(m=1,d=h[0];d>=10;d/=10)m++;g.e=m+l*p-1,G(g,a?o+g.e+1:o,s,y)}return g}}();function G(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/xe(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/xe(10,r-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%xe(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/xe(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]=xe(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=xe(10,j-o),m[d]=s>0?(l/xe(10,r-s)%xe(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]==rt&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=rt)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return Z&&(i.e>p.maxE?(i.d=null,i.e=NaN):i.e<p.minE&&(i.e=0,i.d=[0])),i}function pt(i,e,t){if(!i.isFinite())return Ko(i);var n,r=i.e,o=Le(i.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+Ct(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i.e<0?"e":"e+")+i.e):r<0?(o="0."+Ct(-r-1)+o,t&&(n=t-s)>0&&(o+=Ct(n))):r>=s?(o+=Ct(r+1-s),t&&(n=t-r-1)>0&&(o=o+"."+Ct(n))):((n=r+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(r+1===s&&(o+="."),o+=Ct(n))),o}function ar(i,e){var t=i[0];for(e*=j;t>=10;t/=10)e++;return e}function or(i,e,t){if(e>Ua)throw Z=!0,t&&(i.precision=t),Error(Po);return G(new i(rr),e,1,!0)}function nt(i,e,t){if(e>Qr)throw Error(Po);return G(new i(ir),e,t,!0)}function xo(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 Ct(i){for(var e="";i--;)e+="0";return e}function Bo(i,e,t,n){var r,o=new i(1),s=Math.ceil(n/j+4);for(Z=!1;;){if(t%2&&(o=o.times(e),wo(o.d,s)&&(r=!0)),t=_e(t/2),t===0){t=o.d.length-1,r&&o.d[t]===0&&++o.d[t];break}e=e.times(e),wo(e.d,s)}return Z=!0,o}function go(i){return i.d[i.d.length-1]&1}function So(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 Zr(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?(Z=!1,u=y):u=e,a=new d(.03125);i.e>-2;)i=i.times(a),m+=5;for(n=Math.log(xe(2,m))/Math.LN10*2+5|0,u+=n,t=o=s=new d(1),d.precision=u;;){if(o=G(o.times(i),u,1),t=t.times(++l),a=s.plus(de(o,t,u,1)),Le(a.d).slice(0,u)===Le(s.d).slice(0,u)){for(r=m;r--;)s=G(s.times(s),u,1);if(e==null)if(c<3&&bn(s.d,u-n,p,c))d.precision=u+=10,t=o=a=new d(1),l=0,c++;else return G(s,d.precision=y,p,Z=!0);else return d.precision=y,s}s=a}}function Lt(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,A=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?(Z=!1,l=A):l=e,g.precision=l+=y,t=Le(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=Le(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=or(g,l+2,A).times(o+""),f=Lt(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?G(f,A,h,Z=!0):f;for(m=f,u=s=f=de(f.minus(1),f.plus(1),l,1),d=G(f.times(f),l,1),r=3;;){if(s=G(s.times(d),l,1),c=u.plus(de(s,new g(r),l,1)),Le(c.d).slice(0,l)===Le(u.d).slice(0,l))if(u=u.times(2),o!==0&&(u=u.plus(or(g,l+2,A).times(o+""))),u=de(u,new g(p),l,1),e==null)if(bn(u.d,l-y,h,a))g.precision=l+=y,c=s=f=de(m.minus(1),m.plus(1),l,1),d=G(f.times(f),l,1),r=a=1;else return G(u,g.precision=A,h,Z=!0);else return g.precision=A,u;u=c,r+=2}}function Ko(i){return String(i.s*i.s/0)}function $r(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),Z&&(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 Xa(i,e){var t,n,r,o,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Io.test(e))return $r(i,e)}else if(e==="Infinity"||e==="NaN")return+e||(i.s=NaN),i.e=NaN,i.d=null,i;if(Da.test(e))t=16,e=e.toLowerCase();else if(va.test(e))t=2;else if(Wa.test(e))t=8;else throw Error(Rt+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=Bo(n,new n(t),o,o*2)),c=nr(e,t,rt),l=c.length-1,o=l;c[o]===0;--o)c.pop();return o<0?new n(i.s*0):(i.e=ar(c,l),i.d=c,Z=!1,s&&(i=de(i,r,a*4)),u&&(i=i.times(Math.abs(u)<54?xe(2,u):gn.pow(2,u))),Z=!0,i)}function za(i,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:nn(i,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/ur(5,t)),e=nn(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 nn(i,e,t,n,r){var o,s,a,u,c=1,l=i.precision,m=Math.ceil(l/j);for(Z=!1,u=t.times(t),a=new i(n);;){if(s=de(a.times(u),new i(e++*e++),l,1),a=r?n.plus(s):n.minus(s),n=de(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 Z=!0,s.d.length=m+1,s}function ur(i,e){for(var t=i;--e;)t*=i;return t}function Co(i,e){var t,n=e.s<0,r=nt(i,i.precision,1),o=r.times(.5);if(e=e.abs(),e.lte(o))return It=n?4:1,e;if(t=e.divToInt(r),t.isZero())It=n?3:2;else{if(e=e.minus(t.times(r)),e.lte(o))return It=go(t)?n?2:3:n?4:1,e;It=go(t)?n?1:4:n?3:2}return e.minus(r).abs()}function Jr(i,e,t,n){var r,o,s,a,u,c,l,m,d,p=i.constructor,y=t!==void 0;if(y?(ze(t,1,Ot),n===void 0?n=p.rounding:ze(n,0,8)):(t=p.precision,n=p.rounding),!i.isFinite())l=Ko(i);else{for(l=pt(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=nr(pt(d),10,r),d.e=d.d.length),m=nr(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=de(i,d,t,n,0,r),m=i.d,o=i.e,c=ho),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+=jr.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=nr(l,r,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=jr.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 wo(i,e){if(i.length>e)return i.length=e,!0}function Ya(i){return new this(i).abs()}function ja(i){return new this(i).acos()}function Ha(i){return new this(i).acosh()}function Qa(i,e){return new this(i).plus(e)}function Za(i){return new this(i).asin()}function $a(i){return new this(i).asinh()}function Ja(i){return new this(i).atan()}function eu(i){return new this(i).atanh()}function tu(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=nt(this,o,1).times(e.s>0?.25:.75),t.s=i.s):!e.d||i.isZero()?(t=e.s<0?nt(this,n,r):new this(0),t.s=i.s):!i.d||e.isZero()?(t=nt(this,o,1).times(.5),t.s=i.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(de(i,e,o,1)),e=nt(this,o,1),this.precision=n,this.rounding=r,t=i.s<0?t.minus(e):t.plus(e)):t=this.atan(de(i,e,o,1)),t}function nu(i){return new this(i).cbrt()}function ru(i){return G(i=new this(i),i.e+1,2)}function iu(i,e,t){return new this(i).clamp(e,t)}function ou(i){if(!i||typeof i!="object")throw Error(sr+"Object expected");var e,t,n,r=i.defaults===!0,o=["precision",1,Ot,"rounding",0,8,"toExpNeg",-tn,0,"toExpPos",0,tn,"maxE",0,tn,"minE",-tn,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],r&&(this[t]=Hr[t]),(n=i[t])!==void 0)if(_e(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(Rt+t+": "+n);if(t="crypto",r&&(this[t]=Hr[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(ko);else this[t]=!1;else throw Error(Rt+t+": "+n);return this}function su(i){return new this(i).cos()}function au(i){return new this(i).cosh()}function Lo(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,Ao(o)){c.s=o.s,Z?!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++;Z?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 $r(c,o.toString())}else if(u!=="string")throw Error(Rt+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),c.s=-1):(a===43&&(o=o.slice(1)),c.s=1),Io.test(o)?$r(c,o):Xa(c,o)}if(r.prototype=K,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=ou,r.clone=Lo,r.isDecimal=Ao,r.abs=Ya,r.acos=ja,r.acosh=Ha,r.add=Qa,r.asin=Za,r.asinh=$a,r.atan=Ja,r.atanh=eu,r.atan2=tu,r.cbrt=nu,r.ceil=ru,r.clamp=iu,r.cos=su,r.cosh=au,r.div=uu,r.exp=cu,r.floor=lu,r.hypot=mu,r.ln=du,r.log=pu,r.log10=yu,r.log2=fu,r.max=bu,r.min=gu,r.mod=wu,r.mul=Au,r.pow=hu,r.random=Pu,r.round=ku,r.sign=Tu,r.sin=Iu,r.sinh=xu,r.sqrt=Bu,r.sub=Su,r.sum=Ku,r.tan=Cu,r.tanh=Lu,r.trunc=Ru,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 uu(i,e){return new this(i).div(e)}function cu(i){return new this(i).exp()}function lu(i){return G(i=new this(i),i.e+1,3)}function mu(){var i,e,t=new this(0);for(Z=!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 Z=!0,new this(1/0);t=e}return Z=!0,t.sqrt()}function Ao(i){return i instanceof gn||i&&i.toStringTag===To||!1}function du(i){return new this(i).ln()}function pu(i,e){return new this(i).log(e)}function fu(i){return new this(i).log(2)}function yu(i){return new this(i).log(10)}function bu(){return So(this,arguments,"lt")}function gu(){return So(this,arguments,"gt")}function wu(i,e){return new this(i).mod(e)}function Au(i,e){return new this(i).mul(e)}function hu(i,e){return new this(i).pow(e)}function Pu(i){var e,t,n,r,o=0,s=new this(1),a=[];if(i===void 0?i=this.precision:ze(i,1,Ot),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(ko);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],i%=j,n&&i&&(r=xe(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 ku(i){return G(i=new this(i),i.e+1,this.rounding)}function Tu(i){return i=new this(i),i.d?i.d[0]?i.s:0*i.s:i.s||NaN}function Iu(i){return new this(i).sin()}function xu(i){return new this(i).sinh()}function Bu(i){return new this(i).sqrt()}function Su(i,e){return new this(i).sub(e)}function Ku(){var i=0,e=arguments,t=new this(e[i]);for(Z=!1;t.s&&++i<e.length;)t=t.plus(e[i]);return Z=!0,G(t,this.precision,this.rounding)}function Cu(i){return new this(i).tan()}function Lu(i){return new this(i).tanh()}function Ru(i){return G(i=new this(i),i.e+1,1)}K[Symbol.for("nodejs.util.inspect.custom")]=K.toString;K[Symbol.toStringTag]="Decimal";var gn=K.constructor=Lo(Hr);rr=new gn(rr);ir=new gn(ir);var E=gn;import{PublicKey as ii}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ou}from"@solana/spl-token";import{PublicKey as ye,SystemProgram as Ro,SYSVAR_RENT_PUBKEY as Nu}from"@solana/web3.js";function P({pubkey:i,isSigner:e=!1,isWritable:t=!0}){return{pubkey:i,isWritable:t,isSigner:e}}var ei=[P({pubkey:Ou,isWritable:!1}),P({pubkey:Ro.programId,isWritable:!1}),P({pubkey:Nu,isWritable:!1})];function ti({publicKey:i,transformSol:e}){let t=ni(i.toString());if(t instanceof ye)return e&&t.equals(Be)?$:t;if(e&&t.toString()===Be.toBase58())return $;if(typeof t=="string"){if(t===ye.default.toBase58())return ye.default;try{return new ye(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ni(i){try{return new ye(i)}catch{return i}}var cr=new ye("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),Oo=new ye("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),it=new ye("SysvarRent111111111111111111111111111111111"),No=new ye("SysvarC1ock11111111111111111111111111111111"),rn=new ye("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),_u=new ye("Sysvar1nstructions1111111111111111111111111"),_o=Ro.programId,hm=new ye("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Pm=new ye("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),km=new ye("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),Tm=new ye("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Im=new ye("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),xm=new ye("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Bm=new ye("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Sm=new ye("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Km=new ye("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Cm=new ye("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),Lm=new ye("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),$=new ye("So11111111111111111111111111111111111111112"),Be=ye.default;function ri(i){return ti({publicKey:i,transformSol:!0})}import{PublicKey as Mu}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Mo}from"@solana/spl-token";var Nt={chainId:101,address:Mu.default.toBase58(),programId:Mo.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Re={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Mo.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 oi=class{constructor({mint:e,decimals:t,symbol:n,name:r,skipMint:o=!1,isToken2022:s=!1}){if(e===Be.toBase58()||e instanceof ii&&Be.equals(e)){this.decimals=Re.decimals,this.symbol=Re.symbol,this.name=Re.name,this.mint=new ii(Re.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?ii.default:ti({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ae=oi;Ae.WSOL=new oi(W(O({},Re),{mint:Re.address}));import mr from"big.js";import Fu from"bn.js";import vu from"decimal.js-light";import Eu from"toformat";var Vu=Eu,wn=Vu;var lr=oe("module/fraction"),si=wn(mr),An=wn(vu),Du={[0]:An.ROUND_DOWN,[1]:An.ROUND_HALF_UP,[2]:An.ROUND_UP},Wu={[0]:mr.roundDown,[1]:mr.roundHalfUp,[2]:mr.roundUp},le=class{constructor(e,t=new Fu(1)){this.numerator=Y(e),this.denominator=Y(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new le(this.denominator,this.numerator)}add(e){let t=e instanceof le?e:new le(Y(e));return this.denominator.eq(t.denominator)?new le(this.numerator.add(t.numerator),this.denominator):new le(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof le?e:new le(Y(e));return this.denominator.eq(t.denominator)?new le(this.numerator.sub(t.numerator),this.denominator):new le(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof le?e:new le(Y(e));return new le(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof le?e:new le(Y(e));return new le(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||lr.logWithError(`${e} is not an integer.`),e<=0&&lr.logWithError(`${e} is not positive.`),An.set({precision:e+1,rounding:Du[n]});let r=new An(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)||lr.logWithError(`${e} is not an integer.`),e<0&&lr.logWithError(`${e} is negative.`),si.DP=e,si.RM=Wu[n]||1,new si(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var Uu=oe("Raydium_price"),$e=class extends le{constructor(t){let{baseToken:n,quoteToken:r,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=r,this.scalar=new le(ai(n.decimals),ai(r.decimals))}get raw(){return new le(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new $e({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Uu.logWithError("mul token not equals");let n=super.mul(t);return new $e({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 ui=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},dr=ui;dr.SOL=new ui(Nt);import Gu from"bn.js";var Eo=new le(new Gu(100)),He=class extends le{toSignificant(e=5,t,n){return this.mul(Eo).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Eo).toFixed(e,t,n)}};var qe=new Ye(0),Fo=new Ye(1),Bd=new Ye(2),Sd=new Ye(3),Kd=new Ye(5),ci=new Ye(10),Cd=new Ye(100),Ld=new Ye(1e3),Rd=new Ye(1e4),Vo=9007199254740991;function Y(i){let e=oe("Raydium_parseBigNumberish");if(i instanceof Ye)return i;if(typeof i=="string"){if(i.match(/^-?[0-9]+$/))return new Ye(i);e.logWithError(`invalid BigNumberish string: ${i}`)}return typeof i=="number"?(i%1&&e.logWithError(`BigNumberish number underflow: ${i}`),(i>=Vo||i<=-Vo)&&e.logWithError(`BigNumberish number overflow: ${i}`),new Ye(String(i))):typeof i=="bigint"?new Ye(i.toString()):(e.error(`invalid BigNumberish value: ${i}`),new Ye(0))}function ai(i){return ci.pow(Y(i))}function pr(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 zu=oe("Raydium_amount"),Do=wn(Xu);function Yu(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")):zu.logWithError(`invalid number string, num: ${i}`)}else t=i;return[t,n.slice(0,e)||n]}var be=class extends le{constructor(t,n,r=!0,o){let s=new fr(0),a=ci.pow(new fr(t.decimals));if(r)s=Y(n);else{let u=new fr(0),c=new fr(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Yu(n.toString(),t.decimals);u=Y(l),c=Y(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=oe(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 be(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new be(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 Do.DP=this.token.decimals,new Do(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};function vo(i){return typeof i=="object"&&i!==null&&![Ae,be,ju,le,Hu,$e,He].some(e=>typeof e=="object"&&i instanceof e)}function Ue(i){return typeof i=="string"?ni(i):Array.isArray(i)?i.map(e=>Ue(e)):vo(i)?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ue(t)])):i}import{PublicKey as kn,sendAndConfirmTransaction as fi,Transaction as Tn,TransactionMessage as In,VersionedTransaction as xn}from"@solana/web3.js";import tc from"axios";var M={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 Qu,ComputeBudgetProgram as Wo,Transaction as Uo,TransactionMessage as Zu,Keypair as Go,VersionedTransaction as Xo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as $u}from"@solana/spl-token";var qo=oe("Raydium_txUtil"),zo=1644;function yr(i){let e=[],t=[];return i.microLamports&&(e.push(Wo.setComputeUnitPrice({microLamports:i.microLamports})),t.push(M.SetComputeUnitPrice)),i.units&&(e.push(Wo.setComputeUnitLimit({units:i.units})),t.push(M.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function on(i){var e,t;try{return((t=await((e=i.getLatestBlockhash)==null?void 0:e.call(i)))==null?void 0:t.blockhash)||(await i.getRecentBlockhash()).blockhash}catch{return(await i.getRecentBlockhash()).blockhash}}function li(i,e){i.length<1&&qo.logWithError(`no instructions provided: ${i.toString()}`),e.length<1&&qo.logWithError(`no signers provided:, ${e.toString()}`);let t=new Uo;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...i);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<zo}catch{return!1}}function ue(i,e){let[t,n]=Qu.findProgramAddressSync(i,e);return{publicKey:t,nonce:n}}function hn({instructions:i,payer:e,signers:t}){return li(i,[e,...t])}function Pn({instructions:i,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Go.generate().publicKey.toString()}){let o=new Zu({payerKey:e,recentBlockhash:n,instructions:i}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Xo(o).serialize()).toString("base64").length<zo}catch{return!1}}var Ju=i=>Buffer.isBuffer(i)?i:i instanceof Uint8Array?Buffer.from(i.buffer,i.byteOffset,i.byteLength):Buffer.from(i);function Gt(i){let e=[];return i.forEach(t=>{t instanceof Uo&&(t.recentBlockhash||(t.recentBlockhash=$u.toBase58()),t.feePayer||(t.feePayer=Go.generate().publicKey));let n=t.serialize({requireAllSignatures:!1,verifySignatures:!1});t instanceof Xo&&(n=Ju(n));let r=n.toString("base64");e.push(r)}),console.log("simulate tx string:",e),e}import{PublicKey as Yo,AddressLookupTableAccount as gr}from"@solana/web3.js";import{PublicKey as ec}from"@solana/web3.js";import{getTransferFeeConfig as wp,unpackMint as Ap}from"@solana/spl-token";var mi=oe("Raydium_accountInfo_util");async function ft(i,e,t){let{batchRequest:n,commitment:r="confirmed"}=O({batchRequest:!1},t),o=di(e,100),s=new Array(o.length).fill([]);if(n){let a=o.map(l=>{let m=i._buildArgs([l.map(d=>d.toBase58())],r,"base64");return{methodName:"getMultipleAccounts",args:m}}),u=di(a,10);s=(await(await Promise.all(u.map(async l=>await i._rpcBatchRequest(l)))).flat()).map(l=>(l.error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${l.error.message}`),l.result.value.map(m=>{if(m){let{data:d,executable:p,lamports:y,owner:f,rentEpoch:b}=m;return d.length!==2&&d[1]!=="base64"&&mi.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(d[0],"base64"),executable:p,lamports:y,owner:new ec(f),rentEpoch:b}}return null})))}else try{s=await Promise.all(o.map(a=>i.getMultipleAccountsInfo(a,r)))}catch(a){a instanceof Error&&mi.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${a.message}`)}return s.flat()}async function br(i,e,t){let n=await ft(i,e.map(r=>r.pubkey),t);return e.map((r,o)=>W(O({},r),{accountInfo:n[o]}))}async function pi({connection:i,address:e}){let t=await ft(i,[...new Set(e.map(r=>r.toString()))].map(r=>new Yo(r))),n={};for(let r=0;r<e.length;r++){let o=t[r],s=e[r];if(!o)continue;let a=new gr({key:s,state:gr.deserialize(o.data)});n[s.toString()]=a,wr[s.toString()]=a}return n}var wr={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new gr({key:new Yo("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:gr.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 Ar=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}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 tc.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}=yr(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!==kn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){let t=new Tn;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async()=>{var r;let n=await on(this.connection);if(t.recentBlockhash=n,this.signers.length&&t.sign(...this.signers),Gt([t]),(r=this.owner)!=null&&r.isKeyPair)return{txId:await fi(this.connection,t,this.signers.find(o=>o.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer]),signedTx:t};if(this.signAllTransactions){let o=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(o[0].serialize(),{skipPreflight:!0}),signedTx:o[0]}}throw new Error("please connect wallet first")},extInfo:e||{}}}buildMultiTx(e){let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:r}=this.build(n),o=t.filter(c=>c.transaction.instructions.length>0),s=[r,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async c=>{var p;let{sequentially:l,onTxUpdate:m}=c||{},d=await on(this.connection);if((p=this.owner)!=null&&p.isKeyPair)return{txIds:await await Promise.all(s.map(async(y,f)=>(y.recentBlockhash=d,await fi(this.connection,y,a[f].find(b=>b.publicKey.equals(this.owner.publicKey))?a[f]:[...a[f],this.owner.signer])))),signedTxs:s};if(this.signAllTransactions){let y=s.map((b,g)=>(b.recentBlockhash=d,a[g].length&&b.sign(...a[g]),b));Gt(y);let f=await this.signAllTransactions(y);if(l){let b=0,g=[],h=async()=>{if(!f[b])return;let A=await this.connection.sendRawTransaction(f[b].serialize(),{skipPreflight:!0});g.push({txId:A,status:"sent",signedTx:f[b]}),m==null||m([...g]),b++,this.connection.onSignature(A,T=>{let k=g.findIndex(I=>I.txId===A);k>-1&&(g[k].status=T.err?"error":"success"),m==null||m([...g]),T.err||h()},"processed"),this.connection.getSignatureStatus(A)};return await h(),{txIds:g.map(A=>A.txId),signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let h=await this.connection.sendRawTransaction(f[g].serialize(),{skipPreflight:!0});b.push(h)}return{txIds:b,signedTxs:f}}}throw new Error("please connect wallet first")},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){let d=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:r}=d,o=we(d,["lookupTableCache","lookupTableAddress","forerunCreate"]),s=O(O({},wr),t),a=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let p of a)s[p]===void 0&&u.push(new kn(p));let c=await pi({connection:this.connection,address:u});for(let[p,y]of Object.entries(c))s[p]=y;let l=new In({payerKey:this.feePayer,recentBlockhash:r?kn.default.toBase58():await on(this.connection),instructions:[...this.allInstructions]}).compileToV0Message(Object.values(s)),m=new xn(l);return m.sign(this.signers),{builder:this,transaction:m,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async()=>{var p;if(Gt([m]),(p=this.owner)!=null&&p.isKeyPair){this.signers.find(g=>g.publicKey.equals(this.owner.publicKey))||m.sign([this.owner.signer]);let y=await this.connection.sendTransaction(m,{skipPreflight:!0}),{lastValidBlockHeight:f,blockhash:b}=await this.connection.getLatestBlockhash();return await this.connection.confirmTransaction({blockhash:b,lastValidBlockHeight:f,signature:y},"confirmed"),{txId:y,signedTx:m}}if(this.signAllTransactions){let y=await this.signAllTransactions([m]);return{txId:await this.connection.sendTransaction(y[0],{skipPreflight:!0}),signedTx:y[0]}}throw new Error("please connect wallet first")},extInfo:o||{}}}async buildV0MultiTx(e){let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:r}=await this.buildV0(n),o=t.filter(c=>c.builder.instructions.length>0),s=[r,...o.map(c=>c.transaction)],a=[this.signers,...o.map(c=>c.signers)],u=[...this.instructionTypes,...o.map(c=>c.instructionTypes).flat()];return s.forEach(async(c,l)=>{c.sign(a[l])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async c=>{var d;Gt(s);let{sequentially:l,onTxUpdate:m}=c||{};if((d=this.owner)!=null&&d.isKeyPair){let{lastValidBlockHeight:p,blockhash:y}=await this.connection.getLatestBlockhash();return s.forEach((f,b)=>{a[b].find(g=>g.publicKey.equals(this.owner.publicKey))||f.sign([this.owner.signer])}),{txIds:await Promise.all(s.map(async f=>{let b=await this.connection.sendTransaction(f);return await this.connection.confirmTransaction({blockhash:y,lastValidBlockHeight:p,signature:b},"confirmed"),b})),signedTxs:s}}if(this.signAllTransactions){let p=await this.signAllTransactions(s);if(l){let y=0,f=[],b=async()=>{if(!p[y])return;let g=await this.connection.sendTransaction(p[y],{skipPreflight:!0});f.push({txId:g,status:"sent",signedTx:p[y]}),m==null||m([...f]),y++,this.connection.onSignature(g,h=>{let A=f.findIndex(T=>T.txId===g);A>-1&&(f[A].status=h.err?"error":"success"),m==null||m([...f]),h.err||b()},"processed"),this.connection.getSignatureStatus(g)};return b(),{txIds:[],signedTxs:p}}else{let y=[];for(let f=0;f<p.length;f+=1){let b=await this.connection.sendTransaction(p[f],{skipPreflight:!0});y.push(b)}return{txIds:y,signedTxs:p}}}throw new Error("please connect wallet first")},extInfo:n||{}}}async sizeCheckBuild(e){let c=e||{},{computeBudgetConfig:t}=c,n=we(c,["computeBudgetConfig"]),r=t?yr(t):{instructions:[],instructionTypes:[]},o=this.signers.reduce((l,m)=>W(O({},l),{[m.publicKey.toBase58()]:m}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(l=>{let m=[...u,l],d=t?[...r.instructions,...m]:m,y=[...new Set(m.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat()).values()].map(f=>new kn(f));if(u.length<12&&hn({instructions:d,payer:this.feePayer,signers:y})||hn({instructions:m,payer:this.feePayer,signers:y}))u.push(l);else{if(u.length===0)throw Error("item ins too big");hn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:y})?s.push(new Tn().add(...r.instructions,...u)):s.push(new Tn().add(...u)),a.push(Array.from(new Set(u.map(f=>f.keys.filter(b=>b.isSigner).map(b=>b.pubkey.toString())).flat())).map(f=>o[f]).filter(f=>f!==void 0)),u=[l]}}),u.length>0){let m=[...new Set(u.map(d=>d.keys.filter(p=>p.isSigner).map(p=>p.pubkey.toString())).flat()).values()].map(d=>o[d]).filter(d=>d!==void 0);hn({instructions:t?[...r.instructions,...u]:[...u],payer:this.feePayer,signers:m.map(d=>d.publicKey)})?s.push(new Tn().add(...r.instructions,...u)):s.push(new Tn().add(...u)),a.push(m)}return s.forEach(l=>l.feePayer=this.feePayer),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async l=>{var y;let{sequentially:m,onTxUpdate:d}=l||{},p=await on(this.connection);if(s.forEach(async(f,b)=>{f.recentBlockhash=p,a[b].length&&f.sign(...a[b])}),Gt(s),(y=this.owner)!=null&&y.isKeyPair)return{txIds:await Promise.all(s.map(async(f,b)=>await fi(this.connection,f,a[b].find(g=>g.publicKey.equals(this.owner.publicKey))?a[b]:[...a[b],this.owner.signer]))),signedTxs:s};if(this.signAllTransactions){let f=await this.signAllTransactions(s);if(m){let b=0,g=[],h=async()=>{if(!f[b])return;let A=await this.connection.sendRawTransaction(f[b].serialize(),{skipPreflight:!0});g.push({txId:A,status:"sent",signedTx:f[b]}),d==null||d([...g]),b++,this.connection.onSignature(A,T=>{let k=g.findIndex(I=>I.txId===A);k>-1&&(g[k].status=T.err?"error":"success"),d==null||d([...g]),T.err||h()},"processed"),this.connection.getSignatureStatus(A)};return await h(),{txIds:g.map(A=>A.txId),signedTxs:f}}else{let b=[];for(let g=0;g<f.length;g+=1){let h=await this.connection.sendRawTransaction(f[g].serialize(),{skipPreflight:!0});b.push(h)}return{txIds:b,signedTxs:f}}}throw new Error("please connect wallet first")},extInfo:n||{}}}async sizeCheckBuildV0(e){let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:r=[]}=b,o=we(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=O(O({},wr),n),a=Array.from(new Set([...this.lookupTableAddress,...r])),u=[];for(let g of a)s[g]===void 0&&u.push(new kn(g));let c=await pi({connection:this.connection,address:u});for(let[g,h]of Object.entries(c))s[g]=h;let l=t?yr(t):{instructions:[],instructionTypes:[]},m=await on(this.connection),d=this.signers.reduce((g,h)=>W(O({},g),{[h.publicKey.toBase58()]:h}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(g=>{let h=[...f,g],A=t?[...l.instructions,...h]:h;if(f.length<12&&Pn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s})||Pn({instructions:h,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(g);else{if(f.length===0)throw Error("item ins too big");let T={};for(let k of[...new Set(a)])s[k]!==void 0&&(T[k]=s[k]);if(t&&Pn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new xn(k))}else{let k=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new xn(k))}y.push(Array.from(new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat())).map(k=>d[k]).filter(k=>k!==void 0)),f=[g]}}),f.length>0){let h=[...new Set(f.map(A=>A.keys.filter(T=>T.isSigner).map(T=>T.pubkey.toString())).flat()).values()].map(A=>d[A]).filter(A=>A!==void 0);if(t&&Pn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let A=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new xn(A))}else{let A=new In({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new xn(A))}y.push(h)}return{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async g=>{var T;let{sequentially:h,onTxUpdate:A}=g||{};if(p.map(async(k,I)=>{y[I].length&&k.sign(y[I])}),Gt(p),(T=this.owner)!=null&&T.isKeyPair){let{lastValidBlockHeight:k,blockhash:I}=await this.connection.getLatestBlockhash();return p.forEach((B,x)=>{y[x].find(C=>C.publicKey.equals(this.owner.publicKey))||B.sign([this.owner.signer])}),{txIds:await Promise.all(p.map(async B=>{let x=await this.connection.sendTransaction(B);return await this.connection.confirmTransaction({blockhash:I,lastValidBlockHeight:k,signature:x},"confirmed"),x})),signedTxs:p}}if(this.signAllTransactions){let k=await this.signAllTransactions(p);if(h){let I=0,B=[],x=async()=>{if(!k[I])return;let C=await this.connection.sendTransaction(k[I],{skipPreflight:!0});B.push({txId:C,status:"sent",signedTx:k[I]}),A==null||A([...B]),I++,this.connection.onSignature(C,_=>{let V=B.findIndex(H=>H.txId===C);V>-1&&(B[V].status=_.err?"error":"success"),A==null||A([...B]),_.err||x()},"processed"),this.connection.getSignatureStatus(C)};return x(),{txIds:[],signedTxs:k}}else{let I=[];for(let B=0;B<k.length;B+=1){let x=await this.connection.sendTransaction(k[B],{skipPreflight:!0});I.push(x)}return{txIds:I,signedTxs:k}}}throw new Error("please connect wallet first")},extInfo:o||{}}}};var ot=class{constructor(e){this._owner=e}get publicKey(){return ot.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return ot.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return ot.isKeyPair(this._owner)}get isPublicKey(){return ot.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!ot.isKeyPair(e)}};function di(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 Te}from"@solana/web3.js";var jo=new Te("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Ho=new Te("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),Bn=new Te("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Wp=new Te("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),qp=new Te("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Up=new Te("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),Qo=new Te("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Gp=new Te("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),Xp=new Te("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),zp=new Te("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),nc=new Te("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),rc=new Te("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),ic=new Te("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),oc=new Te("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),Yp=new Te("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),jp=new Te("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Hp=new Te("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Qp=new Te("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Zp=new Te("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),$p=new Te("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),Sn={IDO_PROGRAM_ID_V1:nc,IDO_PROGRAM_ID_V2:rc,IDO_PROGRAM_ID_V3:ic,IDO_PROGRAM_ID_V4:oc};import{PublicKey as sc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ac}from"@solana/spl-token";function ge(i,e,t){return ue([i.toBuffer(),(t!=null?t:ac).toBuffer(),e.toBuffer()],new sc("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import st from"bn.js";var Kn=1e4;function Se(i,e,t,n){if(e===void 0)return{amount:i,fee:void 0,expirationTime:void 0};let r=W(O({},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 st(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===Kn){let u=new st(o.maximumFee.toString());return{amount:i.add(u),fee:u,expirationTime:a}}else{let u=Cn(i.mul(new st(Kn)),new st(Kn-o.transferFeeBasisPoints)),c=new st(o.maximumFee.toString()),l=u.sub(i).gt(c)?i.add(c):u,m=Cn(l.mul(new st(o.transferFeeBasisPoints)),new st(Kn)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=Cn(i.mul(new st(o.transferFeeBasisPoints)),new st(Kn)),c=u.gt(s)?s:u;return{amount:i,fee:c,expirationTime:a}}}function Xt(i,e){return i===void 0?e:e===void 0?i:Math.min(i,e)}function Cn(i,e){let{div:t,mod:n}=i.divmod(e);return n.gt(new st(0))?t.add(new st(1)):t}var Me={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-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://token.jup.ag/{type}",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"},xf=O({},Me);var Zo="ray_tab_hash",bi="ray_req_hash",uc=()=>{if(typeof window===void 0)return"";let i=sessionStorage.getItem(Zo);return i||(i=`ray-${Date.now()}`,sessionStorage.setItem(Zo,i)),i},hr=async n=>{var r=n,{logCount:i=1e3,removeLastLog:e}=r,t=we(r,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(bi)||"[]").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(W(O({},t),{time:Date.now(),session:uc()}));try{localStorage.setItem(bi,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(bi,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(u=>u())}return hr(W(O({},t),{logCount:i,removeLastLog:!0}))}};var Pr=oe("Raydium_Api"),gi=new Map;var kr=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:r,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=r||1e3,this.api=lc.create({baseURL:this.urlConfigs.BASE_HOST||Me.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return Pr.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(Pr.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&&hr({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),Pr.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&&hr({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),Pr.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Me.CLMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Me.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await this.api.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 this.api.get(this.urlConfigs.CHAIN_TIME||Me.CHAIN_TIME)}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Me.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Me.TOKEN_LIST)).data}async getJupTokenList(e){return this.api.get("/",{baseURL:(this.urlConfigs.JUP_TOKEN_LIST||Me.JUP_TOKEN_LIST).replace("{type}",e||"all")})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Me.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||Me.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||Me.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],r=t.filter(s=>gi.has(s)?(n.push(gi.get(s)),!1):!0),o=[];return r.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Me.POOL_KEY_BY_ID)+`?ids=${r.join(",")}`)).data.filter(Boolean),o.forEach(a=>{gi.set(a.id,a)})),n.concat(o)}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Me.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Me.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Me.CHECK_AVAILABILITY)).data}};var Tr="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",$o="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{createAssociatedTokenAccountInstruction as Ki,TOKEN_PROGRAM_ID as Et,AccountLayout as un,TOKEN_2022_PROGRAM_ID as vc}from"@solana/spl-token";import{PublicKey as Rr,SystemProgram as Dc}from"@solana/web3.js";var wi=(...i)=>i.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),he=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=oe(t)}createTxBuilder(e){return this.scope.checkOwner(),new Ar({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,owner:this.scope.owner,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(wi(e))}logInfo(...e){this.logger.info(wi(e))}logAndCreateError(...e){let t=wi(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{createInitializeAccountInstruction as Nc,createCloseAccountInstruction as _c,createTransferInstruction as Mc,TOKEN_PROGRAM_ID as an}from"@solana/spl-token";import{PublicKey as Ec,SystemProgram as Vc}from"@solana/web3.js";import Fc from"bn.js";import{PublicKey as ds,Keypair as Cc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Lc}from"@solana/spl-token";import Rc from"bn.js";import{PublicKey as kc}from"@solana/web3.js";import rs,{isBN as is}from"bn.js";import{bits as mc,BitStructure as ry,blob as dc,Blob as iy,cstr as oy,f32 as sy,f32be as ay,f64 as uy,f64be as cy,greedy as ly,Layout as pc,ns64 as my,ns64be as dy,nu64 as fc,nu64be as py,offset as fy,s16 as yy,s16be as by,s24 as gy,s24be as wy,s32 as yc,s32be as Ay,s40 as hy,s40be as Py,s48 as ky,s48be as Ty,s8 as Iy,seq as bc,struct as xy,Structure as gc,u16 as wc,u16be as By,u24 as Sy,u24be as Ky,u32 as Ac,u32be as Cy,u40 as Ly,u40be as Ry,u48 as Oy,u48be as Ny,u8 as hc,UInt as Pc,union as _y,Union as My,unionLayoutDiscriminator as Ey,utf8 as Vy}from"@solana/buffer-layout";var Ir=pc,Jo=gc;var Ai=Pc;var es=hc,yt=wc;var hi=Ac;var ts=fc;var Oe=yc;var ns=bc;var fe=dc;var Pi=mc;var zt=class extends Ir{constructor(t,n,r){super(t,r);this.blob=fe(t),this.signed=n}decode(t,n=0){let r=new rs(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 rs(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,r)}},xr=class extends Ir{constructor(t){super(8,t);this._lower=Pi(hi(),!1),this._upper=Pi(hi(),!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 O(O({},r),o)}encode(t,n,r=0){return this._lower.encode(t,n,r)+this._upper.encode(t,n,r+this._lower.span)}};function F(i){return new Ai(1,i)}function Ge(i){return new Ai(4,i)}function w(i){return new zt(8,!1,i)}function X(i){return new zt(16,!1,i)}function os(i){return new zt(1,!0,i)}function Sr(i){return new zt(8,!0,i)}function ss(i){return new zt(16,!0,i)}var Br=class extends Ir{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 S(i){return new Br(fe(32),e=>new kc(e),e=>e.toBuffer(),i)}function Ee(i){return new Br(es(),Tc,Ic,i)}function Tc(i){if(i===0)return!1;if(i===1)return!0;throw new Error("Invalid bool: "+i)}function Ic(i){return i?1:0}var ki=class extends Jo{decode(e,t){return super.decode(e,t)}};function N(i,e,t){return new ki(i,e,t)}function q(i,e,t){let n,r=typeof e=="number"?e:is(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=is(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 ns(i,r,t)}var sn=N([S("mint"),S("owner"),w("amount"),Ge("delegateOption"),S("delegate"),F("state"),Ge("isNativeOption"),w("isNative"),w("delegatedAmount"),Ge("closeAuthorityOption"),S("closeAuthority")]);function xc(i){return i instanceof Uint8Array||i!=null&&typeof i=="object"&&i.constructor.name==="Uint8Array"}function Ti(i,...e){if(!xc(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 Ii(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 as(i,e){Ti(i);let t=e.outputLen;if(i.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Cr=i=>new DataView(i.buffer,i.byteOffset,i.byteLength),at=(i,e)=>i<<32-e|i>>>e;var $y=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Bc(i){if(typeof i!="string")throw new Error(`utf8ToBytes expected string, got ${typeof i}`);return new Uint8Array(new TextEncoder().encode(i))}function xi(i){return typeof i=="string"&&(i=Bc(i)),Ti(i),i}var Kr=class{clone(){return this._cloneInto()}},Jy={}.toString;function us(i){let e=n=>i().update(xi(n)).digest(),t=i();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>i(),e}function Sc(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 cs=(i,e,t)=>i&e^~i&t,ls=(i,e,t)=>i&e^i&t^e&t,Lr=class extends Kr{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=Cr(this.buffer)}update(e){Ii(this);let{view:t,buffer:n,blockLen:r}=this;e=xi(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=Cr(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){Ii(this),as(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;Sc(n,r-8,BigInt(this.length*8),o),this.process(n,0);let a=Cr(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 Kc=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]),_t=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Mt=new Uint32Array(64),Bi=class extends Lr{constructor(){super(64,32,8,!1),this.A=_t[0]|0,this.B=_t[1]|0,this.C=_t[2]|0,this.D=_t[3]|0,this.E=_t[4]|0,this.F=_t[5]|0,this.G=_t[6]|0,this.H=_t[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)Mt[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=Mt[m-15],p=Mt[m-2],y=at(d,7)^at(d,18)^d>>>3,f=at(p,17)^at(p,19)^p>>>10;Mt[m]=f+Mt[m-7]+y+Mt[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=at(a,6)^at(a,11)^at(a,25),p=l+d+cs(a,u,c)+Kc[m]+Mt[m]|0,f=(at(n,2)^at(n,13)^at(n,22))+ls(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(){Mt.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ms=us(()=>new Bi);var bb=oe("Raydium_Util");function ps({owner:i,solAccountResp:e,tokenAccountResp:t}){let n=[],r=[];for(let{pubkey:o,account:s}of t.value){let a=sn.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:o,mint:u,amount:c,isAssociated:ge(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:ds.default,amount:new Rc(e.lamports),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:r}}function Ve({fromPublicKey:i,programId:e=Lc}){let t=Cc.generate().publicKey.toBase58().slice(0,32);return{publicKey:Oc(i,t,e),seed:t}}function Oc(i,e,t){let n=Buffer.concat([i.toBuffer(),Buffer.from(e),t.toBuffer()]),r=ms(n);return new ds(r)}function Si(i){let{mint:e,tokenAccount:t,owner:n,programId:r=an}=i;return Nc(t,e,n,r)}function xt(i){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:r,programId:o=an}=i;return _c(e,t,r,n,o)}async function bt(i){let{connection:e,amount:t,commitment:n,payer:r,owner:o,skipCloseAccount:s}=i,a=await e.getMinimumBalanceForRentExemption(sn.span,n),u=Y(t).add(new Fc(a)),c=Ve({fromPublicKey:r,programId:an});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[Vc.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:sn.span,programId:an}),Si({mint:new Ec(Re.address),tokenAccount:c.publicKey,owner:o,programId:an})],instructionTypes:[M.CreateAccount,M.InitAccount],endInstructionTypes:s?[]:[M.CloseAccount],endInstructions:s?[]:[xt({tokenAccount:c.publicKey,payer:r,owner:o})]}}function Ln({source:i,destination:e,owner:t,amount:n,multiSigners:r=[],tokenProgram:o=an}){return Mc(i,e,t,BigInt(String(n)),r,o)}var Rn=class extends he{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;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 ge(this.scope.ownerPubKey,t,n).publicKey}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let r=O(O({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Et},r.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:vc},r.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=ps({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),"confirmed"),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=Et,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)return r&&s.equals(u),u}}async getOrCreateTokenAccount(t){var y,f,b;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:r,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new Rr(t.tokenProgram||Et),m=this.getAssociatedTokenAccount(n,new Rr(l)),d=(a?[]:this.tokenAccountRawInfos).filter(g=>g.accountInfo.mint.equals(n)&&(!o||g.pubkey.equals(m))).sort((g,h)=>g.accountInfo.amount.lt(h.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 g=Ki(s,m,s,n,l);if(c){let h=await this.scope.connection.getAccountInfo(m);if(h===null)(y=p.instructions)==null||y.push(g),p.instructionTypes.push(M.CreateATA);else if(!(h.owner.equals(l)&&un.decode(h.data).mint.equals(n)&&un.decode(h.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(g),p.instructionTypes.push(M.CreateATA);if(n.equals($)&&r.amount){let h=await bt({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(...h.instructions||[]),p.endInstructions.push(...h.endInstructions||[]),p.instructionTypes.push(...h.instructionTypes||[]),p.endInstructionTypes.push(...h.endInstructionTypes||[]),r.amount&&(p.instructions.push(Ln({source:h.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:r.amount,tokenProgram:Et})),p.instructionTypes.push(M.TransferAmount))}return u||(p.endInstructions.push(xt({owner:s,payer:r.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(M.CloseAccount)),{account:m,instructionParams:p}}else if(n.equals($)){let g=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:r.payer||this.scope.ownerPubKey,amount:(b=r.amount)!=null?b:0,skipCloseAccount:u});return p.instructions.push(...g.instructions||[]),p.endInstructions.push(...g.endInstructions||[]),p.signers.push(...g.signers||[]),p.instructionTypes.push(...g.instructionTypes||[]),p.endInstructionTypes.push(...g.endInstructionTypes||[]),{account:g.addresses.newAccount,instructionParams:p}}else{let g=Ve({fromPublicKey:s,programId:l}),h=await this.scope.connection.getMinimumBalanceForRentExemption(un.span),A=Dc.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:g.seed,newAccountPubkey:g.publicKey,lamports:h,space:un.span,programId:l});return p.instructions.push(A,Si({mint:n,tokenAccount:g.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(M.CreateAccount),p.instructionTypes.push(M.InitAccount),u||(p.endInstructions.push(xt({owner:s,payer:r.payer||s,tokenAccount:g.publicKey,programId:l})),p.endInstructionTypes.push(M.CloseAccount)),{account:g.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=Et,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 Ki(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[M.CreateATA],o=c}return r&&$.toBase58()===t.toBase58()&&(a.endInstructions=[xt({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[M.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:r,mint:o,programId:s=Et,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new Rr($).equals(o)){let p=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:r,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=Ki(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(Et)&&un.decode(f.data).mint.equals(o)&&un.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:[M.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:r=Et,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new Rr($))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:r}),{tokenAccount:d}=l,p=we(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=we(m,["tokenAccount"]);u=d,c.addInstruction(p)}return O({tokenAccount:u},c.AllTxData)}};import{createAssociatedTokenAccountInstruction as rl}from"@solana/spl-token";import{PublicKey as pe,SystemProgram as il}from"@solana/web3.js";import{PublicKey as bs}from"@solana/web3.js";var Ci=N([F("instruction")]),Li=N([F("instruction")]),Wc=N([w("rewardState"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardLastUpdateTime"),w("totalReward"),w("totalRewardEmissioned"),w("rewardClaimed"),w("rewardPerSecond"),X("accRewardPerShare"),S("rewardVault"),S("rewardMint"),S("rewardSender"),w("rewardType"),q(w(),15,"padding")]),qc=N([w("state"),w("nonce"),S("lpVault"),S("rewardVault"),S(),S(),w(),w(),w("totalReward"),X("perShareReward"),w("lastSlot"),w("perSlotReward")]),Uc=N([w("state"),w("nonce"),S("lpVault"),S("rewardVaultA"),w("totalRewardA"),X("perShareRewardA"),w("perSlotRewardA"),F("option"),S("rewardVaultB"),fe(7),w("totalRewardB"),X("perShareRewardB"),w("perSlotRewardB"),w("lastSlot"),S()]),Gc=N([w(),w("state"),w("nonce"),w("validRewardTokenNum"),X("rewardMultiplier"),w("rewardPeriodMax"),w("rewardPeriodMin"),w("rewardPeriodExtend"),S("lpMint"),S("lpVault"),q(Wc,5,"rewardInfos"),S("creator"),S(),q(w(),32,"padding")]),Xc=new Proxy(qc,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return W(O({},r),{version:3,rewardInfos:[{rewardVault:r.rewardVault,totalReward:r.totalReward,perSlotReward:r.perSlotReward,perShareReward:r.perShareReward}]})}:Reflect.get(i,e,t)}}),zc=new Proxy(Uc,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return W(O({},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)}}),Or=new Proxy(Gc,{get(i,e,t){return e==="decode"?(...n)=>{let r=i.decode(...n);return W(O({},r),{version:6,rewardInfos:r.rewardInfos.map(o=>{var s;return W(O({},o),{rewardType:((s=Object.entries(Vt).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(i,e,t)}}),Yc=N([w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),Ri=N([F("instruction"),w("nonce"),q(Yc,5,"rewardTimeInfo")]),Oi=N([F("instruction"),w("rewardReopenTime"),w("rewardEndTime"),w("rewardPerSecond")]),Ni=N([F("instruction"),w("isSet"),w("rewardPerSecond"),w("rewardOpenTime"),w("rewardEndTime"),w("rewardType")]),jb=N([w("state"),S("id"),S("owner"),w("deposited"),q(w(),1,"rewardDebts")]),_i=N([w("state"),S("id"),S("owner"),w("deposited"),q(X(),1,"rewardDebts"),w(""),w("voteLockedBalance"),q(w(),15)]),Hb=N([w("state"),S("id"),S("owner"),w("deposited"),q(w(),2,"rewardDebts")]),fs=N([w("state"),S("id"),S("owner"),w("deposited"),q(X(),2,"rewardDebts"),q(w(),17)]),ys=N([w(),w("state"),S("id"),S("owner"),w("deposited"),q(X(),5,"rewardDebts"),q(w(),16)]),Qe=N([F("instruction"),w("amount")]),jc=N([S("mint"),S("grantAuthority"),w("baselineVoteWeightScaledFactor"),w("maxExtraLockupVoteWeightScaledFactor"),w("lockupSaturationSecs"),os("digitShift"),q(F(),7,"reserved1"),q(w(),7,"reserved2")]),Hc=N([fe(8),S("governanceProgramId"),S("realm"),S("realmGoverningTokenMint"),S("realmAuthority"),q(F(),32,"reserved1"),q(jc,4,"votingMints"),Sr("timeOffset"),F("bump"),q(F(),7,"reserved2"),q(w(),11,"reserved3")]),Qc=N([Sr("startTime"),Sr("endTime"),F("kind"),q(F(),15,"reserved")]),Zc=N([q(Qc,1,"lockup"),w("amountDeposited_native"),w("amountInitiallyLockedNative"),Ee("isUsed"),Ee("allowClawback"),F("votingMintConfigIdx"),q(F(),29,"reserved")]),$c=N([fe(8),S("voterAuthority"),S("registrar"),q(Zc,32,"deposits"),F("voterBump"),F("voterWweightRecordBump"),q(F(),94,"reserved")]);var rg=oe("Raydium_farm_config"),gs=new bs("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),ws=new bs("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var As={3:_i,5:fs,6:ys},Mi=i=>[3,5,6].indexOf(i)!==-1,Ei=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)},Vt={"Standard SPL":0,"Option tokens":1},ut={[jo.toString()]:3,[Ho.toString()]:5,[Bn.toString()]:6};import{PublicKey as ce,SystemProgram as ks,SYSVAR_RENT_PUBKEY as tl,SYSVAR_CLOCK_PUBKEY as Nr,TransactionInstruction as ct}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as _g,TOKEN_PROGRAM_ID as Ft,ASSOCIATED_TOKEN_PROGRAM_ID as Mg}from"@solana/spl-token";import Ts from"bn.js";import Jc from"bn.js";var el=oe("Raydium.farm.util");function On({programId:i,poolId:e,mint:t,type:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],i);return r}function gt({programId:i,poolId:e,owner:t,version:n}){let{publicKey:r}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],i);return r}var hs=({programId:i,poolId:e})=>ue([e.toBuffer()],i);function Ps(i){return{isSet:new Jc(1),rewardPerSecond:Y(i.perSecond),rewardOpenTime:Y(i.openTime),rewardEndTime:Y(i.endTime),rewardType:Y(Vt[i.rewardType])}}function Vi(i){return Y(i.endTime).sub(Y(i.openTime)).mul(Y(i.perSecond))}function Fi(i){let e=As[i];return e||el.logWithError("invalid version",i),e}var nl=oe("Raydium_farm_instruction"),jg={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 Is(i){let{version:e,id:t,ledger:n,programId:r,owner:o}=i,s={3:9,5:10}[e];s||nl.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Ci.span);Ci.encode({instruction:s},a);let u=[P({pubkey:t}),P({pubkey:n}),P({pubkey:o,isWritable:!1}),P({pubkey:ks.programId,isWritable:!1}),P({pubkey:tl,isWritable:!1})];return{instruction:new ct({programId:r,keys:u,data:a}),instructionType:M.FarmV3CreateLedger}}function xs(i){var n;let e=Buffer.alloc(Ri.span);Ri.encode({instruction:0,nonce:new Ts(i.nonce),rewardTimeInfo:i.rewardInfoConfig},e);let t=[...ei,P({pubkey:i.farmId}),P({pubkey:i.farmAuthority,isWritable:!1}),P({pubkey:i.lpVault}),P({pubkey:i.lpMint,isWritable:!1}),P({pubkey:i.lockVault}),P({pubkey:i.lockMint,isWritable:!1}),P({pubkey:(n=i.lockUserAccount)!=null?n:Be}),P({pubkey:i.owner,isWritable:!1,isSigner:!0})];for(let r of i.rewardInfo)t.push(P({pubkey:r.rewardMint,isWritable:!1}),P({pubkey:r.rewardVault}),P({pubkey:r.userRewardToken}));return{instruction:new ct({programId:i.programId,keys:t,data:e}),instructionType:M.FarmV6Create}}function Bs(i){let e=Buffer.alloc(Li.span);Li.encode({instruction:5},e);let t=[P({pubkey:Ft,isWritable:!1}),P({pubkey:i.id}),P({pubkey:i.authority,isWritable:!1}),P({pubkey:i.lpVault,isWritable:!1}),P({pubkey:i.rewardVault}),P({pubkey:i.userRewardToken}),P({pubkey:i.owner,isWritable:!1,isSigner:!0})];return{instruction:new ct({programId:i.programId,keys:t,data:e}),instructionType:M.FarmV6CreatorWithdraw}}function vi({payer:i,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:r}){let o=Buffer.alloc(Oi.span);Oi.encode({instruction:3,rewardReopenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardPerSecond:Y(r.perSecond)},o);let s=[P({pubkey:Ft,isWritable:!1}),P({pubkey:n.id}),P({pubkey:n.lpVault,isWritable:!1}),P({pubkey:e}),P({pubkey:t}),P({pubkey:i,isWritable:!1,isSigner:!0})];return new ct({programId:n.programId,keys:s,data:o})}function Di({payer:i,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:r}){let o=Buffer.alloc(Ni.span);Ni.encode({instruction:4,isSet:new Ts(1),rewardPerSecond:Y(r.perSecond),rewardOpenTime:Y(r.openTime),rewardEndTime:Y(r.endTime),rewardType:Y(Vt[r.rewardType])},o);let s=[...ei,P({pubkey:t.id}),P({pubkey:t.authority,isWritable:!1}),P({pubkey:r.mint,isWritable:!1}),P({pubkey:n}),P({pubkey:e}),P({pubkey:i,isWritable:!1,isSigner:!0})];return new ct({programId:t.programId,keys:s,data:o})}function Nn(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new ce(e.programId),new ce(e.id)],c=gt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(Qe.span);Qe.encode({instruction:2,amount:Y(s)},l);let m=[P({pubkey:Ft,isWritable:!1}),P({pubkey:u}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:new ce(t.lpVault)}),P({pubkey:c}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new ct({programId:a,keys:m,data:l})}function _n(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:12,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Mn(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Ss(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:3}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:10,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Ks(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s,userAuxiliaryLedgers:a}=i,[u,c]=[new ce(e.programId),new ce(e.id)],l=gt({programId:u,poolId:c,owner:o,version:5}),m=Buffer.alloc(Qe.span);Qe.encode({instruction:11,amount:Y(s)},m);let d=[P({pubkey:c}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:l}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n}),P({pubkey:new ce(t.lpVault)}),P({pubkey:r[0]}),P({pubkey:new ce(t.rewardInfos[0].vault)}),P({pubkey:Nr,isWritable:!1}),P({pubkey:Ft,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(P({pubkey:r[p]})),d.push(P({pubkey:new ce(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(P({pubkey:p}));return new ct({programId:u,keys:d,data:m})}function Cs(i){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:r,owner:o,amount:s}=i,[a,u]=[new ce(e.programId),new ce(e.id)],c=gt({programId:a,poolId:u,owner:o,version:6}),l=Buffer.alloc(Qe.span);Qe.encode({instruction:1,amount:Y(s)},l);let m=[P({pubkey:Ft,isWritable:!1}),P({pubkey:ks.programId,isWritable:!1}),P({pubkey:u}),P({pubkey:new ce(t.authority),isWritable:!1}),P({pubkey:new ce(t.lpVault)}),P({pubkey:c}),P({pubkey:o,isWritable:!1,isSigner:!0}),P({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(P({pubkey:new ce(t.rewardInfos[d].vault)})),m.push(P({pubkey:r[d]}));return new ct({programId:a,keys:m,data:l})}var En=class extends he{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Be)){let n=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Vi(W(O({},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=Bn,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new pe(e.lpMint.address),lockInfo:{lockMint:gs,lockVault:ws},version:6,rewardInfos:t,programId:r},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=Ve({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(Or.span);u.addInstruction({instructions:[il.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:Or.span,programId:a.programId})]});let{publicKey:d,nonce:p}=hs({programId:new pe(a.programId),poolId:l.publicKey}),y=On({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let T of a.rewardInfos){T.openTime>=T.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",T.openTime.toString()),isNaN(Vt[T.rewardType])&&this.logAndCreateError("rewardType error",T.rewardType),Number(T.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",T.perSecond),f.push(Ps(T));let{rewardPubKey:k,newInstruction:I}=await this._getUserRewardInfo({rewardInfo:T,payer:c});I&&u.addInstruction(I),k||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=T.mint.equals(Be)?new pe(Re.address):T.mint;b.push({rewardMint:B,rewardVault:On({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:k})}let g=await this.scope.account.getCreatedTokenAccount({mint:a.lockInfo.lockMint});g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:h,instructionType:A}=xs({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:[h],instructionTypes:[A]}).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=ut[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ue((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(Be)?new pe(Re.address):n.mint,l=a.rewardInfos.findIndex(g=>new pe(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:Be,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:[vi({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[M.FarmV6Restart]}).versionBuild({txVersion:r})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:r}){var l;let o=ut[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=Ue((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(Be)?new pe(Re.address):m.mint,p=a.rewardInfos.findIndex(A=>new pe(A.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Be,{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=vi({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[h],instructionTypes:[M.FarmV6Restart]})}return c.versionBuild({txVersion:r})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:r,payer:o}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ue((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=o!=null?o:this.scope.ownerPubKey,c=this.createTxBuilder(),l=r.mint.equals(Be)?new pe(Re.address):r.mint,m=On({programId:new pe(n.programId),poolId:new pe(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:[Di({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:r})],instructionTypes:[M.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:r,payer:o}=e,s=ut[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ue((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(Be)?new pe(Re.address):l.mint,d=On({programId:new pe(n.programId),poolId:new pe(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=Di({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:W(O({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[M.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=ut[d];Mi(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new pe(n.programId),new pe(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=gt({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),h=this.createTxBuilder();h.addCustomComputeBudget(l);let A={};for(let D of this.scope.account.tokenAccounts)if(a){let ee=ge(this.scope.ownerPubKey,D.mint,D.programId).publicKey;D.publicKey&&ee.equals(D.publicKey)&&(A[D.mint.toString()]=D.publicKey)}else A[D.mint.toString()]=D.publicKey;let T=b.lpMint,k=A[T.address];k||this.logAndCreateError("you don't have any lp","lp zero",A);let I=[];for(let D of m){let ee=s&&D.mint.address===$.toString(),te=A[D.mint.address];if(!te){let{account:re,instructionParams:tt}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(D.mint.address),notUseTokenAccount:ee,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!ee,associatedOnly:ee?!1:a,checkCreateATAOwner:u});te=re,tt&&h.addInstruction(tt)}A[D.mint.address]=te,I.push(te)}let B,x=await this.scope.connection.getAccountInfo(g);if(x&&(B=Fi(p).decode(x.data)),n.programId!==Bn.toString()&&!B){let{instruction:D,instructionType:ee}=Is({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});h.addInstruction({instructions:[D],instructionTypes:[ee]})}let C=Ei({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:I});C&&this.logAndCreateError(C);let _={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:k,rewardAccounts:I,userAuxiliaryLedgers:c==null?void 0:c.map(D=>new pe(D))},V=p===6?Cs(_):p===5?Ks(_):Ss(_),H={3:M.FarmV3Deposit,5:M.FarmV5Deposit,6:M.FarmV6Deposit};return h.addInstruction({instructions:[V],instructionTypes:[H[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=ut[n.programId];Mi(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 C of this.scope.account.tokenAccounts)if(u){let _=ge(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&_.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(o)o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=gt({programId:new pe(n.programId),poolId:new pe(n.id),owner:this.scope.ownerPubKey,version:p}),_=await this.scope.connection.getAccountInfo(C);_||this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:_}),Fi(p).decode(_.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id})}let g=y.lpMint.address,h=s&&g===$.toString(),A=b[g.toString()];if(!A){let{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(g),notUseTokenAccount:h,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:h?!1:u,checkCreateATAOwner:c});A=C,_&&f.addInstruction(_)}b[g.toString()]=A;let T=[];for(let C of d){let _=s&&C.mint.address===$.toString(),V=b[C.mint.address];if(!V){let{account:H,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(C.mint.address),notUseTokenAccount:_,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!_,associatedOnly:_?!1:u,checkCreateATAOwner:c});V=H,D&&f.addInstruction(D)}b[C.mint.address]=V,T.push(V)}let k=Ei({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:T});k&&this.logAndCreateError(k);let I={amount:Y(r),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:T,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new pe(C))},B=p===6?Nn(I):p===5?_n(I):Mn(I),x={3:M.FarmV3Withdraw,5:M.FarmV5Withdraw,6:M.FarmV6Withdraw};return f.addInstruction({instructions:[B],instructionTypes:[x[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let r=Ue((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=ut[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(y=>y.mint.address===Be.toString()?new pe(Re.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:Be,c=this.createTxBuilder(),l;if(t.equals(Be)){let y=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Vi(W(O({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new E(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:[rl(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[M.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Bs({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=ge(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)=>W(O({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:h}=y,A=ut[f],T=b.address,k=n&&T===$.toString(),I=m[T];if(!I){let{account:H,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(T),notUseTokenAccount:k,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:k?!1:o,checkCreateATAOwner:s});I=H,D&&l.addInstruction(D)}m[T.toString()]=I;let B=[];for(let H of g){let D=n&&H.mint.address===$.toString(),ee=m[H.mint.address];if(!ee){let{account:te,instructionParams:re}=await this.scope.account.getOrCreateTokenAccount({mint:new pe(H.mint.address),notUseTokenAccount:D,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!D,associatedOnly:D?!1:o,checkCreateATAOwner:s});ee=te,re&&l.addInstruction(re)}m[H.mint.address]=ee,B.push(ee)}let x=p[h],C={amount:qe,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:x,lpAccount:I,rewardAccounts:B,userAuxiliaryLedgers:a==null?void 0:a.map(H=>new pe(H))},_=A===6?Nn(C):A===5?_n(C):Mn(C),V={3:M.FarmV3Withdraw,5:M.FarmV5Withdraw,6:M.FarmV6Withdraw};l.addInstruction({instructions:[_],instructionTypes:[V[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as je}from"@solana/web3.js";import{NATIVE_MINT as ma,TOKEN_PROGRAM_ID as Dr}from"@solana/spl-token";var gw=N([Ge("mintAuthorityOption"),S("mintAuthority"),w("supply"),F("decimals"),F("isInitialized"),Ge("freezeAuthorityOption"),S("freezeAuthority")]);import{PublicKey as Pw}from"@solana/web3.js";import{MintLayout as Tw,TOKEN_PROGRAM_ID as xw}from"@solana/spl-token";var _r=i=>new Ae({mint:i.address,decimals:i.decimals,symbol:i.symbol,name:i.name});import{TOKEN_PROGRAM_ID as Mr,ASSOCIATED_TOKEN_PROGRAM_ID as wl}from"@solana/spl-token";import{PublicKey as wt,TransactionInstruction as ln,SystemProgram as Vs,SYSVAR_RENT_PUBKEY as Hw}from"@solana/web3.js";var Wi=N([F("instruction"),w("amountIn"),w("minAmountOut")]),qi=N([F("instruction"),w("maxAmountIn"),w("amountOut")]),vw=N([F("instruction"),F("nonce")]),ol=N([F("instruction"),F("nonce"),w("startTime")]),Dw=N([w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalValue"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),X("swapBaseInAmount"),X("swapQuoteOutAmount"),w("swapBase2QuoteFee"),X("swapQuoteInAmount"),X("swapBaseOutAmount"),w("swapQuote2BaseFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("withdrawQueue"),S("lpVault"),S("owner"),w("lpReserve"),q(w(),3,"padding")]),Ww=N([w("accountType"),w("status"),w("nonce"),w("maxOrder"),w("depth"),w("baseDecimal"),w("quoteDecimal"),w("state"),w("resetFlag"),w("minSize"),w("volMaxCutRatio"),w("amountWaveRatio"),w("baseLotSize"),w("quoteLotSize"),w("minPriceMultiplier"),w("maxPriceMultiplier"),w("systemDecimalsValue"),w("abortTradeFactor"),w("priceTickMultiplier"),w("priceTick"),w("minSeparateNumerator"),w("minSeparateDenominator"),w("tradeFeeNumerator"),w("tradeFeeDenominator"),w("pnlNumerator"),w("pnlDenominator"),w("swapFeeNumerator"),w("swapFeeDenominator"),w("baseNeedTakePnl"),w("quoteNeedTakePnl"),w("quoteTotalPnl"),w("baseTotalPnl"),w("poolOpenTime"),w("punishPcAmount"),w("punishCoinAmount"),w("orderbookToInitTime"),X("swapBaseInAmount"),X("swapQuoteOutAmount"),X("swapQuoteInAmount"),X("swapBaseOutAmount"),w("swapQuote2BaseFee"),w("swapBase2QuoteFee"),S("baseVault"),S("quoteVault"),S("baseMint"),S("quoteMint"),S("lpMint"),S("modelDataAccount"),S("openOrders"),S("marketId"),S("marketProgramId"),S("targetOrders"),S("owner"),q(w(),64,"padding")]),Ui=N([F("instruction"),w("baseAmountIn"),w("quoteAmountIn"),w("fixedSide")]),Gi=N([F("instruction"),w("amountIn")]);var Ls=N([w("fee")]);import{PublicKey as sl}from"@solana/web3.js";var cn=new sl("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),jt=5e4,al=N([w("x"),w("y"),w("price")]),ul=N([w("accountType"),w("status"),w("multiplier"),w("validDataCount"),q(al,jt,"DataElement")]);function cl(i,e){return[0,jt-2]}function ll(i){return[0,jt-2]}function ml(i){return[0,jt-2]}function dl(i,e,t){let[n,r]=cl(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>=jt-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 Xi(i,e,t){let[n,r,o]=dl(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 Yt(i,e,t){return e*i.multiplier/t}function Rs(i,e,t){return e*t/i.multiplier}function pl(i,e){let[t,n]=ll(e),r=t,o=n,s=0,a=e;for(;r<o;){if(s=Math.floor((o+r)/2),s<=0||s>jt-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 fl(i,e){let[t,n]=ml(e),r=t,o=n,s=0,a=e;for(;r<=o;){if(s=Math.floor((o+r)/2),s<=0||s>=jt-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 Os(i,e,t,n){let r=n?e+t:e-t,[o,s,a]=pl(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 yl(i,e,t,n){let r=n?e-t:e+t,[o,s,a]=fl(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 bl(i,e){let t=Os(i,e,0,!1);return t[3]?t[0]:0}function Ns(i,e,t,n){let r=Xi(i,e,t),o=Yt(i,e,r),s=Yt(i,t,r),a=Yt(i,n,r),u=!0,[c,l,m,d]=Os(i,o,a,u);if(!d)return 0;if(m)return n*i.multiplier/c;{let p=s-l;return Rs(i,p,r)}}function _s(i,e,t,n){let r=Xi(i,e,t),o=Yt(i,e,r),s=Yt(i,t,r),a=Yt(i,n,r),u=!1,[c,l,m,d]=yl(i,s,a,u);if(!d)return 0;if(m)return n*c/i.multiplier;{let p=o-l;return Rs(i,p,r)}}function gl(i){let e=ul.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 Ms(i,e,t,n){let r=bl(i,Yt(i,e,Xi(i,e,t)))/i.multiplier;return n?r:1/r}var Vn=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(cn);e&&(this._layoutData=gl(e==null?void 0:e.data))}}};var Es=oe("Raydium_liquidity_instruction");function Fs(i){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:r,quoteAmountIn:o,fixedSide:s}=i,a=Buffer.alloc(Ui.span);Ui.encode({instruction:3,baseAmountIn:Y(r),quoteAmountIn:Y(o),fixedSide:s==="base"?qe:Fo},a);let u=[P({pubkey:Mr,isWritable:!1}),P({pubkey:new wt(e.id)}),P({pubkey:new wt(t.authority),isWritable:!1}),P({pubkey:new wt(t.openOrders),isWritable:!1}),P({pubkey:new wt(t.targetOrders)}),P({pubkey:new wt(e.lpMint.address)}),P({pubkey:new wt(t.vault.A)}),P({pubkey:new wt(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(P({pubkey:cn})),u.push(P({pubkey:new wt(e.marketId),isWritable:!1}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:new wt(t.marketEventQueue),isWritable:!1})),new ln({programId:new wt(e.programId),keys:u,data:a})}function zi(i){let{poolInfo:e,poolKeys:t,userKeys:n,amountIn:r}=i,o=Ue(t),s=4;if(e.pooltype.includes("StablePool")&&(s=5),s===4||s===5){let a=Buffer.alloc(Gi.span);Gi.encode({instruction:4,amountIn:Y(r)},a);let u=[P({pubkey:Mr,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders}),P({pubkey:o.targetOrders}),P({pubkey:o.mintLp.address}),P({pubkey:o.vault.A}),P({pubkey:o.vault.B})];return s===5?u.push(P({pubkey:cn})):(u.push(P({pubkey:o.id})),u.push(P({pubkey:o.id}))),u.push(P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId}),P({pubkey:o.marketBaseVault}),P({pubkey:o.marketQuoteVault}),P({pubkey:o.marketAuthority,isWritable:!1}),P({pubkey:n.lpTokenAccount}),P({pubkey:n.baseTokenAccount}),P({pubkey:n.quoteTokenAccount}),P({pubkey:n.owner,isWritable:!1,isSigner:!0}),P({pubkey:o.marketEventQueue}),P({pubkey:o.marketBids}),P({pubkey:o.marketAsks})),new ln({programId:o.programId,keys:u,data:a})}return new ln({programId:o.programId,keys:[]})}function vs({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:A,coinAmount:T,pcAmount:k,ammConfigId:I,feeDestinationId:B}){let x=N([F("instruction"),F("nonce"),w("openTime"),w("pcAmount"),w("coinAmount")]),C=[{pubkey:Mr,isSigner:!1,isWritable:!1},{pubkey:wl,isSigner:!1,isWritable:!1},{pubkey:Vs.programId,isSigner:!1,isWritable:!1},{pubkey:it,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:I,isSigner:!1,isWritable:!1},{pubkey:B,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}],_=Buffer.alloc(x.span);return x.encode({instruction:1,nonce:h,openTime:A,coinAmount:T,pcAmount:k},_),{instruction:new ln({keys:C,programId:i,data:_}),instructionType:M.AmmV4CreatePool}}function Al({poolKeys:i,userKeys:e,amountIn:t,minAmountOut:n},r){let o=Ue(i),s=Buffer.alloc(Wi.span);Wi.encode({instruction:9,amountIn:Y(t),minAmountOut:Y(n)},s);let a=[P({pubkey:Mr,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders})];return r===4&&a.push(P({pubkey:o.targetOrders})),a.push(P({pubkey:o.vault.A}),P({pubkey:o.vault.B})),r===5&&a.push(P({pubkey:cn})),a.push(P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId}),P({pubkey:o.marketBids}),P({pubkey:o.marketAsks}),P({pubkey:o.marketEventQueue}),P({pubkey:o.marketBaseVault}),P({pubkey:o.marketQuoteVault}),P({pubkey:o.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1})),new ln({programId:o.programId,keys:a,data:s})}function hl({poolKeys:i,userKeys:e,maxAmountIn:t,amountOut:n},r){let o=Ue(i),s=Buffer.alloc(qi.span);qi.encode({instruction:11,maxAmountIn:Y(t),amountOut:Y(n)},s);let a=[P({pubkey:Vs.programId,isWritable:!1}),P({pubkey:o.id}),P({pubkey:o.authority,isWritable:!1}),P({pubkey:o.openOrders}),P({pubkey:o.targetOrders}),P({pubkey:o.vault.A}),P({pubkey:o.vault.B})];return r===5&&a.push(P({pubkey:cn})),a.push(P({pubkey:o.marketProgramId,isWritable:!1}),P({pubkey:o.marketId}),P({pubkey:o.marketBids}),P({pubkey:o.marketAsks}),P({pubkey:o.marketEventQueue}),P({pubkey:o.marketBaseVault}),P({pubkey:o.marketQuoteVault}),P({pubkey:o.marketAuthority,isWritable:!1}),P({pubkey:e.tokenAccountIn}),P({pubkey:e.tokenAccountOut}),P({pubkey:e.owner,isWritable:!1,isSigner:!0})),new ln({programId:o.programId,keys:a,data:s})}function Ds(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 Al(W(O({},a),{amountIn:r,minAmountOut:o}),t);if(s==="out")return hl(W(O({},a),{maxAmountIn:r,amountOut:o}),t);Es.logWithError("invalid params","params",i)}throw Es.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{TOKEN_PROGRAM_ID as Ne,TOKEN_2022_PROGRAM_ID as qt,ASSOCIATED_TOKEN_PROGRAM_ID as ra}from"@solana/spl-token";import{PublicKey as v,TransactionInstruction as lt,SystemProgram as mn,Keypair as eo}from"@solana/web3.js";import ia from"bn.js";import Cl from"bn.js";function Er(i){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,i,!1),new Uint8Array(e)}function Yi(i,e){let t=0;for(let n=i-1;n>=0&&!e.testn(n);n--)t++;return t}function ji(i,e){let t=0;for(let n=0;n<i&&!e.testn(n);n++)t++;return t}function Fn(i,e){for(let t=0;t<i;t++)if(e.testn(t))return!1;return!0}function Ws(i,e){return Fn(i,e)?null:Yi(i,e)}function qs(i,e){return Fn(i,e)?null:ji(i,e)}var cA=Buffer.from("amm_config","utf8"),Pl=Buffer.from("pool","utf8"),kl=Buffer.from("pool_vault","utf8"),Tl=Buffer.from("pool_reward_vault","utf8"),Us=Buffer.from("position","utf8"),Il=Buffer.from("tick_array","utf8"),xl=Buffer.from("operation","utf8"),Bl=Buffer.from("pool_tick_array_bitmap_extension","utf8");function Gs(i,e,t,n){return ue([Pl,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function Hi(i,e,t){return ue([kl,e.toBuffer(),t.toBuffer()],i)}function Xs(i,e,t){return ue([Tl,e.toBuffer(),t.toBuffer()],i)}function me(i,e,t){return ue([Il,e.toBuffer(),Er(t)],i)}function Ht(i,e,t,n){return ue([Us,e.toBuffer(),Er(t),Er(n)],i)}function At(i,e){return ue([Us,e.toBuffer()],i)}function Vr(i){return ue([Buffer.from("metadata","utf8"),rn.toBuffer(),i.toBuffer()],rn)}function vn(i){return ue([xl],i)}function ht(i,e){return ue([Bl,e.toBuffer()],i)}import Pt from"bn.js";var Ie=new Pt(0),kt=new Pt(1),Bt=new Pt(-1),Ze=new Pt(1).shln(64),Fr=new Pt(1).shln(128),Qi=Ze.sub(kt),Dn=64,zs=Fr.subn(1),Fe=-443636,Xe=-Fe,vt=new Pt("4295048016"),Dt=new Pt("79226673521066979257578248091"),Ys=16,js="59543866431248",Hs="184467440737095516",Qs="15793534762490258745",vr=new Pt(10).pow(new Pt(6));var Zs={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:[]},dA=new Pt("18446744073700000000");var Sl=15,se=class{static async getTickArrays(e,t,n,r,o,s,a){let u=[],c=U.getTickArrayStartIndexByTick(r,o),l=U.getInitializedTickArrayInRange(s,a,o,c,Math.floor(Sl/2));for(let p=0;p<l.length;p++){let{publicKey:y}=me(t,n,l[p]);u.push(y)}let m=(await ft(e,u)).map(p=>p!==null?Wn.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=W(O({},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=U.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/se.tickCount(t)),a=n?U.searchLowBitFromStart(r,o,s-1,1,t):U.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=Ke-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<Ke;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){o=u;break}a=a+1}}let{publicKey:s}=me(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,r,o,s){let a=U.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<Ke;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=me(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(U.checkIsOutOfBoundary(e)){if(e>Xe)return!1;let n=U.getTickArrayStartIndexByTick(Fe,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Ke*e}};import ne from"bn.js";import{PublicKey as Wt}from"@solana/web3.js";import Pe from"bn.js";var Zi=14,St=class{static maxTickInTickarrayBitmap(e){return e*Ke*Qt}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(!se.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=r?t-se.tickCount(n):t+se.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Ke,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=Ws(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=qs(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-se.tickCount(n)}}}},qn=class{static getBitmapOffset(e,t){if(!se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=St.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=St.maxTickInTickarrayBitmap(e),n=-t;if(Xe<=t)throw Error(`extensionTickBoundary check error: ${Xe}, ${t}`);if(n<=Fe)throw Error(`extensionTickBoundary check error: ${n}, ${Fe}`);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:U.mergeTickArrayBitmap(r).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,r){let o=se.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}=St.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(r){let u=U.mergeTickArrayBitmap(e).shln(Qt-1-a),c=Fn(512,u)?null:Yi(512,u);if(c!==null){let l=t-c*se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let u=U.mergeTickArrayBitmap(e).shrn(a),c=Fn(512,u)?null:ji(512,u);if(c!==null){let l=t+c*se.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-se.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%St.maxTickInTickarrayBitmap(t),r=Math.floor(n/se.tickCount(t));return e<0&&n!=0&&(r=Qt-r),r}};import Tt from"bn.js";var Un=class{static getfeeGrowthInside(e,t,n){let r=new Tt(0),o=new Tt(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 Tt(0),a=new Tt(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=Q.wrappingSubU128(Q.wrappingSubU128(e.feeGrowthGlobalX64A,r),s),c=Q.wrappingSubU128(Q.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=Q.mulDivFloor(Q.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,Ze),u=t.tokenFeesOwedA.add(a),c=Q.mulDivFloor(Q.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,Ze),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=Q.mulDivFloor(Q.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,Ze),u=t.tokenFeesOwedA.add(a),c=Q.mulDivFloor(Q.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,Ze),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=Q.wrappingSubU128(u,c.growthInsideLastX64),m=Q.mulDivFloor(l,t.liquidity,Ze),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=Q.wrappingSubU128(u,c.growthInsideLastX64),m=Q.mulDivFloor(l,t.liquidity,Ze),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 Tt(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 Tt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(Q.wrappingSubU128(Q.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 Tt(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 Tt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=r[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(Q.wrappingSubU128(Q.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,A;let a=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),u=J.getSqrtPriceX64FromTick(t.tickLower),c=J.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+r:1-r,m=ae.getAmountsFromLiquidity(a,u,c,n,o),[d,p]=[Se(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),Se(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[Se(new Tt(new E(m.amountA.toString()).mul(l).toFixed(0)),(h=e.mintA.extensions)==null?void 0:h.feeConfig,s,!0),Se(new Tt(new E(m.amountB.toString()).mul(l).toFixed(0)),(A=e.mintB.extensions)==null?void 0:A.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Xt(d.expirationTime,p.expirationTime)}}};import{TOKEN_2022_PROGRAM_ID as $s}from"@solana/spl-token";var ve=class{static getOutputAmountAndRemainAccounts(e,t,n,r,o){let s=n.toBase58()===e.mintA.address,a=[],{isExist:u,startIndex:c,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!u||c===void 0||!l)throw new Error("Invalid tick array");a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Zt.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r,c,o);return a.push(...d),{expectedAmountOut:m.mul(Bt),remainingAccounts:a,executionPrice:p,feeAmount:y}}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}=me(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=Zt.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,r.mul(Bt),c,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:r}=ve.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?qn.checkTickArrayIsInit(se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):U.checkTickArrayIsInitialized(U.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=me(e.programId,e.id,r);return{isExist:!0,startIndex:r,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,se.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=me(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/se.tickCount(e.tickSpacing)),r=t?U.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):U.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=se.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:r,tickIndex:o}=St.nextInitializedTickArrayStartIndex(U.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(r)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=qn.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Fe||t>Xe)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=W(O({},m),{perSecond:Q.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Wt(d)});if(p.tokenMint.equals(Wt.default))continue;if(n<=p.openTime.toNumber()||r.eq(Ie)){s.push(p);continue}let y=new Pe(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=Q.mulDivFloor(f,p.emissionsPerSecondX64,r),g=p.rewardGrowthGlobalX64.add(b),h=Q.mulDivFloor(f,p.emissionsPerSecondX64,Ze),A=p.rewardTotalEmissioned.add(h);s.push(W(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:r}=this.tickRange(e);for(let o of t){let s=U.getTickArrayStartIndexByTick(o,e);if(s>=n||s<r)return!0}return!1}static tickRange(e){let t=St.maxTickInTickarrayBitmap(e),n=-t;return t>Xe&&(t=se.getArrayStartIndex(Xe,e)+se.tickCount(e)),n<Fe&&(n=se.getArrayStartIndex(Fe,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!se.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/se.tickCount(t)*Qt}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let r=await br(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of r)s.accountInfo!==null&&(o[s.pubkey.toString()]=ta.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=U.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=U.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=me(u.programId,u.id,m);o.push({pubkey:d}),r[d.toString()]=u.id}}let s=await br(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=Wn.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=W(O({},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(At(p,d).publicKey);let l=await ft(t,c,{batchRequest:r}),m={};for(let d of l){if(d===null)continue;let p=ea.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=U._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),h=U._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:T}=ae.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,h.tickSqrtPriceX64,p.liquidity,!1),k=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:A,amountB:T,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=>W(O({},x),{pendingReward:new Pe(0)})),leverage:k,tokenFeeAmountA:new Pe(0),tokenFeeAmountB:new Pe(0)}];let I=await U.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),B=await U.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=I,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=B}if(o){let d=Object.values(m),p=await ft(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]=Wn.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}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,T=y[m[h].toString()],k=y[m[A].toString()],I=T.ticks[U.getTickOffsetInArray(g.tickLower,f.tickSpacing)],B=k.ticks[U.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:x,tokenFeeAmountB:C}=await Un.GetPositionFees(f,g,I,B),_=await Un.GetPositionRewards(f,g,I,B);g.tokenFeeAmountA=x.gte(new Pe(0))?x:new Pe(0),g.tokenFeeAmountB=C.gte(new Pe(0))?C:new Pe(0);for(let V=0;V<_.length;V++)g.rewardInfos[V].pendingReward=_[V].gte(new Pe(0))?_[V]:new Pe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:r,amountIn:o,slippage:s,priceLimit:a=new E(0)}){var _;let u,c=n.toBase58()===e.mintA.address,[l,m]=c?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new E(0))?u=c?vt.add(new Pe(1)):Dt.sub(new Pe(1)):u=J.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let d=Se(o,l,r,!1),{expectedAmountOut:p,remainingAccounts:y,executionPrice:f,feeAmount:b}=ve.getOutputAmountAndRemainAccounts(e,t,n,d.amount.sub((_=d.fee)!=null?_:Ie),u),g=Se(p,m,r,!1),h=J.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),A=c?h:new E(1).div(h),T=p.mul(new Pe(Math.floor((1-s)*1e10))).div(new Pe(1e10)),k=Se(T,m,r,!1),I=c?e.currentPrice:new E(1).div(e.currentPrice),B=new E(A).sub(I).abs(),x=I,C=new He(new E(B).mul(10**15).toFixed(0),new E(x).mul(10**15).toFixed(0));return{realAmountIn:d,amountOut:g,minAmountOut:k,expirationTime:Xt(d.expirationTime,g.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:C,fee:b,remainingAccounts:y}}static async computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:r,slippage:o,epochInfo:s}){let a=r.address===e.mintB.address,[u,c]=a?[e.mintA,e.mintB]:[e.mintB,e.mintA],[l,m]=[new Ae(W(O({},u),{mint:u.address,isToken2022:u.programId===$s.toBase58()})),new Ae(W(O({},c),{mint:c.address,isToken2022:c.programId===$s.toBase58()}))],{realAmountIn:d,amountOut:p,minAmountOut:y,expirationTime:f,currentPrice:b,executionPrice:g,priceImpact:h,fee:A,remainingAccounts:T}=await ve.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Wt(u.address),amountIn:n,slippage:o,epochInfo:s}),k=W(O({},d),{amount:new be(l,d.amount),fee:d.fee===void 0?void 0:new be(l,d.fee)}),I=W(O({},p),{amount:new be(m,p.amount),fee:p.fee===void 0?void 0:new be(m,p.fee)}),B=W(O({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),x=new $e({baseToken:l,denominator:new Pe(10).pow(new Pe(20+l.decimals)),quoteToken:m,numerator:b.mul(new E(10**(20+m.decimals))).toFixed(0)}),C=new $e({baseToken:l,denominator:new Pe(10).pow(new Pe(20+l.decimals)),quoteToken:m,numerator:g.mul(new E(10**(20+m.decimals))).toFixed(0)}),_=new be(l,A);return{realAmountIn:k,amountOut:I,minAmountOut:B,expirationTime:f,currentPrice:x,executionPrice:C,priceImpact:h,fee:_,remainingAccounts:T}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:r}){var y,f,b;let o=e[t],s=U.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=U.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[ri(e.mintA.address).toString()],d=r[ri(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=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),b=J.getSqrtPriceX64FromTick(s),g=J.getSqrtPriceX64FromTick(a),{amountSlippageA:h,amountSlippageB:A}=ae.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:T,amountSlippageB:k}=ae.getAmountsFromLiquidityWithSlippage(f,b,g,o,!1,!1,0),I=new E(h.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(A.toString()).div(new E(10).pow(y)).mul(d.value)),B=new E(T.toString()).div(new E(10).pow(p)).mul(m.value).add(new E(k.toString()).div(new E(10).pow(y)).mul(d.value)),x=B.div(I.add(B)).div(B),_=new E(l.volumeFee).mul(365).div(c).mul(x).mul(100).toNumber(),V=3600*24*365,H=e.rewardDefaultInfos.map(D=>{var re,tt;let ee=D.mint.decimals,te=r[D.mint.address];return u<((re=D.startTime)!=null?re:0)||u>((tt=D.endTime)!=null?tt:0)||!D.perSecond||!te||ee===void 0?0:new E(te.value).mul(new E(D.perSecond).mul(V)).div(new E(10).pow(ee)).mul(x).mul(100).toNumber()});return{feeApr:_,rewardsApr:H,apr:_+H.reduce((D,ee)=>D+ee,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=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),m=J.getSqrtPriceX64FromTick(n),d=J.getSqrtPriceX64FromTick(r),p=a?1-s:1+s,y=Se(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new Pe(new E(y.amount.sub((h=y.fee)!=null?h:Ie).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?ae.getLiquidityFromTokenAmountA(m,d,f,!a):new Pe(0);else if(l.lte(d)){let A=ae.getLiquidityFromTokenAmountA(l,d,f,!a),T=ae.getLiquidityFromTokenAmountB(m,l,f);b=t?A:T}else b=t?new Pe(0):ae.getLiquidityFromTokenAmountB(m,d,f);return ve.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,A;let u=J.getSqrtPriceX64FromTick(n),c=J.getSqrtPriceX64FromTick(r),l=a?1+s:1-s,m=ae.getAmountsFromLiquidity(J.priceToSqrtPriceX64(new E(t.price),t.mintA.decimals,t.mintB.decimals),u,c,o,a),[d,p]=[Se(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),Se(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[Se(m.amountA.muln(l),(h=t.mintA.extensions)==null?void 0:h.feeConfig,e,!0),Se(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Xt(d.expirationTime,p.expirationTime)}}static async fetchComputeClmmInfo({owner:e,connection:t,poolInfo:n}){let r=await t.getAccountInfo(new Wt(n.id));if(!r)throw new Error(`pool not found ${n.id}`);let o=Js.decode(r.data),s=ht(e,new Wt(n.id)).publicKey,a=await ve.fetchExBitmaps({connection:t,exBitmapAddress:[s],batchRequest:!1});return W(O({},o),{id:new Wt(n.id),programId:new Wt(n.programId),mintA:n.mintA,mintB:n.mintB,ammConfig:W(O({},n.config),{id:new Wt(n.config.id),fundOwner:""}),currentPrice:new E(n.price),exBitmapInfo:a[s.toBase58()],startTime:o.startTime.toNumber()})}};var Q=class{static mulDivRoundingUp(e,t,n){let r=e.mul(t),o=r.div(n);return r.mod(n).eq(Ie)||(o=o.add(kt)),o}static mulDivFloor(e,t,n){if(n.eq(Ie))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Ie))throw new Error("division by 0");return e.mul(t).add(n.sub(kt)).div(n)}static x64ToDecimal(e,t){return new E(e.toString()).div(E.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ne(e.mul(E.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Fr).sub(t).mod(Fr)}};function Ce(i,e){return $i(i.mul(e),64,256)}function Kl(i,e,t){let n=i.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function $i(i,e,t){let n=i.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var J=class{static sqrtPriceX64ToPrice(e,t,n){return Q.x64ToDecimal(e).pow(2).mul(E.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return Q.decimalToX64(e.mul(E.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,r){if(!e.gt(Ie))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ie))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(Ie))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ie))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(Ie))return e;let o=t.shln(Dn);if(r){let s=o,a=o.add(n.mul(e));return a.gte(s)?Q.mulDivCeil(s,e,a):Q.mulDivRoundingUp(s,kt,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 Q.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,r){let o=n.shln(Dn);if(r)return e.add(o.div(t));{let s=Q.mulDivRoundingUp(o,kt,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<Fe||e>Xe)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ne("18445821805675395072"):new ne("18446744073709551616");return(t&2)!=0&&(n=Ce(n,new ne("18444899583751176192"))),(t&4)!=0&&(n=Ce(n,new ne("18443055278223355904"))),(t&8)!=0&&(n=Ce(n,new ne("18439367220385607680"))),(t&16)!=0&&(n=Ce(n,new ne("18431993317065453568"))),(t&32)!=0&&(n=Ce(n,new ne("18417254355718170624"))),(t&64)!=0&&(n=Ce(n,new ne("18387811781193609216"))),(t&128)!=0&&(n=Ce(n,new ne("18329067761203558400"))),(t&256)!=0&&(n=Ce(n,new ne("18212142134806163456"))),(t&512)!=0&&(n=Ce(n,new ne("17980523815641700352"))),(t&1024)!=0&&(n=Ce(n,new ne("17526086738831433728"))),(t&2048)!=0&&(n=Ce(n,new ne("16651378430235570176"))),(t&4096)!=0&&(n=Ce(n,new ne("15030750278694412288"))),(t&8192)!=0&&(n=Ce(n,new ne("12247334978884435968"))),(t&16384)!=0&&(n=Ce(n,new ne("8131365268886854656"))),(t&32768)!=0&&(n=Ce(n,new ne("3584323654725218816"))),(t&65536)!=0&&(n=Ce(n,new ne("696457651848324352"))),(t&131072)!=0&&(n=Ce(n,new ne("26294789957507116"))),(t&262144)!=0&&(n=Ce(n,new ne("37481735321082"))),e>0&&(n=zs.div(n)),n}static getTickFromPrice(e,t,n){return J.getTickFromSqrtPriceX64(J.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Dt)||e.lt(vt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ne(t-64),r=Kl(n,32,128),o=new ne("8000000000000000","hex"),s=0,a=new ne(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new ne(0))&&s<Ys;){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 ne(js)),d=$i(m.sub(new ne(Hs)),64,128).toNumber(),p=$i(m.add(new ne(Qs)),64,128).toNumber();return d==p?d:J.getSqrtPriceX64FromTick(p).lte(e)?p:d}},$t=class{static getTickWithPriceAndTickspacing(e,t,n,r){let s=J.getTickFromSqrtPriceX64(J.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=$t.getTickWithPriceAndTickspacing(e,t,n,r),s=J.getSqrtPriceX64FromTick(o);return J.sqrtPriceX64ToPrice(s,n,r)}},ae=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(Ie))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(Dn),s=t.sub(e);return r?Q.mulDivRoundingUp(Q.mulDivCeil(o,s,t),kt,e):Q.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,r){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Ie))throw new Error("sqrtPriceX64A must greater than 0");return r?Q.mulDivCeil(n,t.sub(e),Ze):Q.mulDivFloor(n,t.sub(e),Ze)}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?Q.mulDivRoundingUp(a,kt,Qi):a.shrn(Dn)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),Q.mulDivFloor(n,Qi,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return ae.getLiquidityFromTokenAmountA(t,n,r,!1);if(e.lt(n)){let s=ae.getLiquidityFromTokenAmountA(e,n,r,!1),a=ae.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return ae.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,r,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:ae.getTokenAmountAFromLiquidity(t,n,r,o),amountB:new ne(0)};if(e.lt(n)){let s=ae.getTokenAmountAFromLiquidity(e,n,r,o),a=ae.getTokenAmountBFromLiquidity(t,e,r,o);return{amountA:s,amountB:a}}else return{amountA:new ne(0),amountB:ae.getTokenAmountBFromLiquidity(t,n,r,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,r,o,s,a){let{amountA:u,amountB:c}=ae.getAmountsFromLiquidity(e,t,n,r,s),l=o?1+a:1-a,m=new ne(new E(u.toString()).mul(l).toFixed(0)),d=new ne(new E(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,A,T,k;let c=J.priceToSqrtPriceX64(new E(e.price),e.mintA.decimals,e.mintB.decimals),l=J.getSqrtPriceX64FromTick(t),m=J.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=ae.getAmountsFromLiquidity(c,l,m,r,s),[y,f]=[Se(p.amountA,(h=e.mintA.extensions)==null?void 0:h.feeConfig,a,u),Se(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[Se(new ne(new E(p.amountA.toString()).mul(d).toFixed(0)),(T=e.mintA.extensions)==null?void 0:T.feeConfig,a,u),Se(new ne(new E(p.amountB.toString()).mul(d).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,u)];return{liquidity:r,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Xt(y.expirationTime,f.expirationTime)}}},Zt=class{static swapCompute(e,t,n,r,o,s,a,u,c,l,m,d,p,y){if(d.eq(Ie))throw new Error("amountSpecified must not be 0");if(y||(y=s?vt.add(kt):Dt.sub(kt)),s){if(y.lt(vt))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(Dt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let f=d.gt(Ie),b={amountSpecifiedRemaining:d,amountCalculated:Ie,sqrtPriceX64:m,tick:c>p?Math.min(p+se.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new ne(0)},g=p,h=n[p],A=0,T=!s&&h.startTickIndex===b.tick;for(;!b.amountSpecifiedRemaining.eq(Ie)&&!b.sqrtPriceX64.eq(y);){if(A>10)throw Error("liquidity limit");let k={};k.sqrtPriceStartX64=b.sqrtPriceX64;let I=U.nextInitTick(h,b.tick,l,s,T),B=I||null,x=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let _=ve.nextInitializedTickArrayStartIndex({tickCurrent:b.tick,tickSpacing:l,tickArrayBitmap:r,exBitmapInfo:o},g,s);if(!_.isExist)throw Error("swapCompute LiquidityInsufficient");g=_.nextStartIndex;let{publicKey:V}=me(e,t,g);x=V,h=n[g],B=U.firstInitializedTick(h,s)}k.tickNext=B.tick,k.initialized=B.liquidityGross.gtn(0),p!==g&&x&&(b.accounts.push(x),p=g),k.tickNext<Fe?k.tickNext=Fe:k.tickNext>Xe&&(k.tickNext=Xe),k.sqrtPriceNextX64=J.getSqrtPriceX64FromTick(k.tickNext);let C;if(s&&k.sqrtPriceNextX64.lt(y)||!s&&k.sqrtPriceNextX64.gt(y)?C=y:C=k.sqrtPriceNextX64,[b.sqrtPriceX64,k.amountIn,k.amountOut,k.feeAmount]=Zt.swapStepCompute(b.sqrtPriceX64,C,b.liquidity,b.amountSpecifiedRemaining,a),b.feeAmount=b.feeAmount.add(k.feeAmount),f?(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.sub(k.amountIn.add(k.feeAmount)),b.amountCalculated=b.amountCalculated.sub(k.amountOut)):(b.amountSpecifiedRemaining=b.amountSpecifiedRemaining.add(k.amountOut),b.amountCalculated=b.amountCalculated.add(k.amountIn.add(k.feeAmount))),b.sqrtPriceX64.eq(k.sqrtPriceNextX64)){if(k.initialized){let _=B.liquidityNet;s&&(_=_.mul(Bt)),b.liquidity=ae.addDelta(b.liquidity,_)}T=k.tickNext!=b.tick&&!s&&h.startTickIndex===k.tickNext,b.tick=s?k.tickNext-1:k.tickNext}else if(b.sqrtPriceX64!=k.sqrtPriceStartX64){let _=J.getTickFromSqrtPriceX64(b.sqrtPriceX64);T=_!=b.tick&&!s&&h.startTickIndex===_,b.tick=_}++A}try{let{nextStartIndex:k,isExist:I}=se.nextInitializedTickArray(b.tick,l,s,r,o);I&&p!==k&&(b.accounts.push(me(e,t,k).publicKey),p=k)}catch{}return{amountCalculated:b.amountCalculated,feeAmount:b.feeAmount,sqrtPriceX64:b.sqrtPriceX64,liquidity:b.liquidity,tickCurrent:b.tick,accounts:b.accounts}}static swapStepCompute(e,t,n,r,o){let s={sqrtPriceX64Next:new ne(0),amountIn:new ne(0),amountOut:new ne(0),feeAmount:new ne(0)},a=e.gte(t),u=r.gte(Ie);if(u){let l=Q.mulDivFloor(r,vr.sub(new ne(o.toString())),vr);s.amountIn=a?ae.getTokenAmountAFromLiquidity(t,e,n,!0):ae.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=J.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?ae.getTokenAmountBFromLiquidity(t,e,n,!1):ae.getTokenAmountAFromLiquidity(e,t,n,!1),r.mul(Bt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=J.getNextSqrtPriceX64FromOutput(e,n,r.mul(Bt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=ae.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=ae.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:ae.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:ae.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(r.mul(Bt))&&(s.amountOut=r.mul(Bt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=r.sub(s.amountIn):s.feeAmount=Q.mulDivCeil(s.amountIn,new ne(o),vr.sub(new ne(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Ke=60,Qt=512,U=class{static getTickArrayAddressByTick(e,t,n,r){let o=U.getTickArrayStartIndexByTick(n,r),{publicKey:s}=me(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=U.getTickArrayStartIndexByTick(e,t),r=Math.floor((e-n)/t);if(r<0||r>=Ke)throw new Error("tick offset in array overflow");return r}static getTickArrayBitIndex(e,t){let n=se.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)*se.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Ke,r=Math.floor(e/n)+512;return Math.abs(r)}static checkTickArrayIsInitialized(e,t,n){let r=n*Ke,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*Ke:e+t*Ke}static mergeTickArrayBitmap(e){let t=new Cl(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*Ke));return[...U.searchLowBitFromStart(e,t,s-1,o,n),...U.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return U.searchHightBitFromStart(e,t,0,Qt,n)}static getAllInitializedTickArrayInfo(e,t,n,r,o){let s=[],a=U.getAllInitializedTickArrayStartIndex(n,r,o);for(let u of a){let{publicKey:c}=me(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=>U.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=se.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=>U.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=se.tickCount(o);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Fe||e>Xe}static nextInitTick(e,t,n,r,o){if(se.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<Ke;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Ke-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Ke;){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=J.getSqrtPriceX64FromTick(t),o=J.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:r}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let r=n?t:new E(1).div(t),o=$t.getTickWithPriceAndTickspacing(r,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=J.getSqrtPriceX64FromTick(o),a=J.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let r=J.getSqrtPriceX64FromTick(t),o=J.sqrtPriceX64ToPrice(r,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:r}:{tick:t,price:new E(1).div(o),tickSqrtPriceX64:r}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let r=n?t:new E(1).div(t),o=$t.getTickWithPriceAndTickspacing(r,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=J.getSqrtPriceX64FromTick(o),a=J.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new E(1).div(a)}}};var hh=N([fe(8),F("bump"),yt("index"),S(""),Ge("protocolFeeRate"),Ge("tradeFeeRate"),yt("tickSpacing"),q(w(),8,"")]),Ll=N([Ge("blockTimestamp"),X("sqrtPriceX64"),X("cumulativeTimePriceX64"),q(X(),1,"")]),Ji=N([fe(8),Ee("initialized"),S("poolId"),q(Ll,1e3,"observations"),q(X(),5,"")]),Rl=N([F("rewardState"),w("openTime"),w("endTime"),w("lastUpdateTime"),X("emissionsPerSecondX64"),w("rewardTotalEmissioned"),w("rewardClaimed"),S("tokenMint"),S("tokenVault"),S("creator"),X("rewardGrowthGlobalX64")]),Js=N([fe(8),F("bump"),S("ammConfig"),S("creator"),S("mintA"),S("mintB"),S("vaultA"),S("vaultB"),S("observationId"),F("mintDecimalsA"),F("mintDecimalsB"),yt("tickSpacing"),X("liquidity"),X("sqrtPriceX64"),Oe("tickCurrent"),yt("observationIndex"),yt("observationUpdateDuration"),X("feeGrowthGlobalX64A"),X("feeGrowthGlobalX64B"),w("protocolFeesTokenA"),w("protocolFeesTokenB"),X("swapInAmountTokenA"),X("swapOutAmountTokenB"),X("swapInAmountTokenB"),X("swapOutAmountTokenA"),F("status"),q(F(),7,""),q(Rl,3,"rewardInfos"),q(w(),16,"tickArrayBitmap"),w("totalFeesTokenA"),w("totalFeesClaimedTokenA"),w("totalFeesTokenB"),w("totalFeesClaimedTokenB"),w("fundFeesTokenA"),w("fundFeesTokenB"),w("startTime"),q(w(),15*4-3,"padding")]),Ol=N([X("growthInsideLastX64"),w("rewardAmountOwed")]),ea=N([fe(8),F("bump"),S("nftMint"),S("poolId"),Oe("tickLower"),Oe("tickUpper"),X("liquidity"),X("feeGrowthInsideLastX64A"),X("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(Ol,3,"rewardInfos"),q(w(),8,"")]),Ph=N([fe(8),F("bump"),S("poolId"),Oe("tickLowerIndex"),Oe("tickUpperIndex"),X("liquidity"),X("feeGrowthInsideLastX64A"),X("feeGrowthInsideLastX64B"),w("tokenFeesOwedA"),w("tokenFeesOwedB"),q(X(),3,"rewardGrowthInside"),q(w(),8,"")]),Nl=N([Oe("tick"),ss("liquidityNet"),X("liquidityGross"),X("feeGrowthOutsideX64A"),X("feeGrowthOutsideX64B"),q(X(),3,"rewardGrowthsOutsideX64"),q(Ge(),13,"")]),Wn=N([fe(8),S("poolId"),Oe("startTickIndex"),q(Nl,Ke,"ticks"),F("initializedTickCount"),q(F(),115,"")]),na=N([fe(329),q(S(),100,"whitelistMints")]),ta=N([fe(8),S("poolId"),q(q(w(),8),Zi,"positiveTickArrayBitmap"),q(q(w(),8),Zi,"negativeTickArrayBitmap")]);var oa=oe("Raydium_Clmm"),mt={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]},ke=class{static createPoolInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=N([X("sqrtPriceX64"),w("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:!1},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:mn.programId,isSigner:!1,isWritable:!1},{pubkey:it,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let h=Buffer.from([...mt.createPool,...g]);return new lt({keys:b,programId:e,data:h})}static async createPoolInstructions(e){let{connection:t,programId:n,owner:r,mintA:o,mintB:s,ammConfigId:a,initialPriceX64:u,startTime:c,forerunCreate:l}=e,m=Ve({fromPublicKey:r,programId:n}),[d,p]=[new v(o.address),new v(s.address)],y=[mn.createAccountWithSeed({fromPubkey:r,basePubkey:r,seed:m.seed,newAccountPubkey:m.publicKey,lamports:l?0:await t.getMinimumBalanceForRentExemption(Ji.span),space:Ji.span,programId:n})],{publicKey:f}=Gs(n,a,d,p),{publicKey:b}=Hi(n,f,d),{publicKey:g}=Hi(n,f,p);return y.push(this.createPoolInstruction(n,f,r,a,m.publicKey,d,b,new v(o.programId||Ne),p,g,new v(s.programId||Ne),ht(n,f).publicKey,u,c)),{signers:[],instructions:y,instructionTypes:[M.CreateAccount,M.ClmmCreatePool],address:{poolId:f,observationId:m.publicKey,mintAVault:b,mintBVault:g},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,A,T,k,I,B,x,C,_){let V=N([Oe("tickLowerIndex"),Oe("tickUpperIndex"),Oe("tickArrayLowerStartIndex"),Oe("tickArrayUpperStartIndex"),X("liquidity"),w("amountMaxA"),w("amountMaxB"),Ee("withMetadata"),F("optionBaseFlag"),Ee("baseFlag")]),H=[..._?[{pubkey:_,isSigner:!1,isWritable:!0}]:[]],D=[{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:it,isSigner:!1,isWritable:!1},{pubkey:mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],ee=Buffer.alloc(V.span);V.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:k,liquidity:I,amountMaxA:B,amountMaxB:x,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},ee);let te=Buffer.from([...mt.openPosition,...ee]);return new lt({keys:D,programId:e,data:te})}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 v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=eo.generate();m.push(x),y=x.publicKey}let f=U.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=U.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=me(d,p,f),{publicKey:h}=me(d,p,b),{publicKey:A}=ge(n.wallet,y,Ne),{publicKey:T}=Vr(y),{publicKey:k}=At(d,y),{publicKey:I}=Ht(d,p,r,o),B=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,h,k,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),r,o,f,b,s,a,u,c);return{signers:m,instructions:[B],instructionTypes:[M.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:T,personalPosition:k,protocolPosition:I}}}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 v(e.programId),new v(e.id)],y;if(l)y=new v((await l(1))[0]);else{let x=eo.generate();m.push(x),y=x.publicKey}let f=U.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=U.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=me(d,p,f),{publicKey:h}=me(d,p,b),{publicKey:A}=ge(n.wallet,y,Ne),{publicKey:T}=Vr(y),{publicKey:k}=At(d,y),{publicKey:I}=Ht(d,p,r,o),B=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,T,I,g,h,k,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),r,o,f,b,c,s,a,u,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ht(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:T,personalPosition:k,protocolPosition:I},instructions:[B],signers:m,instructionTypes:[M.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,A,T,k,I,B,x,C,_){let V=N([Oe("tickLowerIndex"),Oe("tickUpperIndex"),Oe("tickArrayLowerStartIndex"),Oe("tickArrayUpperStartIndex"),X("liquidity"),w("amountMaxA"),w("amountMaxB"),Ee("withMetadata"),F("optionBaseFlag"),Ee("baseFlag")]),H=[..._?[{pubkey:_,isSigner:!1,isWritable:!0}]:[]],D=[{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:it,isSigner:!1,isWritable:!1},{pubkey:mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1},{pubkey:ra,isSigner:!1,isWritable:!1},{pubkey:rn,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...H],ee=Buffer.alloc(V.span);V.encode({tickLowerIndex:h,tickUpperIndex:A,tickArrayLowerStartIndex:T,tickArrayUpperStartIndex:k,liquidity:new ia(0),amountMaxA:B==="MintA"?x:C,amountMaxB:B==="MintA"?C:x,withMetadata:I==="create",baseFlag:B==="MintA",optionBaseFlag:1},ee);let te=Buffer.from([...mt.openPosition,...ee]);return new lt({keys:D,programId:e,data:te})}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 v((await l(1))[0]);else{let x=eo.generate();d.push(x),m=x.publicKey}let[p,y]=[new v(e.programId),new v(e.id)],f=U.getTickArrayStartIndexByTick(r,e.config.tickSpacing),b=U.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:g}=me(p,y,f),{publicKey:h}=me(p,y,b),{publicKey:A}=ge(n.wallet,m,Ne),{publicKey:T}=Vr(m),{publicKey:k}=At(p,m),{publicKey:I}=Ht(p,y,r,o),B=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,T,I,g,h,k,n.tokenAccountA,n.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(t.mintA.address),new v(t.mintB.address),r,o,f,b,s,a,u,c,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ht(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:h,positionNftAccount:A,metadataAccount:T,personalPosition:k,protocolPosition:I},instructions:[B],signers:d,instructionTypes:[M.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,r,o){let s=N([]),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:mn.programId,isSigner:!1,isWritable:!1},{pubkey:Ne,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...mt.closePosition,...u]);return new lt({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:r}){let o=new v(e.programId),{publicKey:s}=ge(n.wallet,r.nftMint,Ne),{publicKey:a}=At(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:[M.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 A=N([X("liquidity"),w("amountMaxA"),w("amountMaxB"),F("optionBaseFlag"),Ee("baseFlag")]),T=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],k=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},I);let B=Buffer.from([...mt.increaseLiquidity,...I]);return new lt({keys:k,programId:e,data:B})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:r,liquidity:o,amountMaxA:s,amountMaxB:a}){let[u,c]=[new v(e.programId),new v(e.id)],l=U.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=U.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=me(u,c,l),{publicKey:p}=me(u,c,m),{publicKey:y}=ge(r.wallet,n.nftMint,Ne),{publicKey:f}=At(u,n.nftMint),{publicKey:b}=Ht(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,r.wallet,y,f,c,b,d,p,r.tokenAccountA,r.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ht(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[M.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 v(e.programId),new v(e.id)],l=U.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=U.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=me(u,c,l),{publicKey:p}=me(u,c,m),{publicKey:y}=ge(r.wallet,n.nftMint,Ne),{publicKey:f}=At(u,n.nftMint),{publicKey:b}=Ht(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 v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),o,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ht(u,c).publicKey:void 0)],signers:[],instructionTypes:[M.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 A=N([X("liquidity"),w("amountMaxA"),w("amountMaxB"),F("optionBaseFlag"),Ee("baseFlag")]),T=[...h?[{pubkey:h,isSigner:!1,isWritable:!0}]:[]],k=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...T],I=Buffer.alloc(A.span);A.encode({liquidity:new ia(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},I);let B=Buffer.from([...mt.increaseLiquidity,...I]);return new lt({keys:k,programId:e,data:B})}static decreaseLiquidityInstruction(e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let T=N([X("liquidity"),w("amountMinA"),w("amountMinB")]),k=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[],...f.map(C=>[{pubkey:C.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:C.rewardMint,isSigner:!1,isWritable:!1}]).flat()],I=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],B=Buffer.alloc(T.span);T.encode({liquidity:b,amountMinA:g,amountMinB:h},B);let x=Buffer.from([...mt.decreaseLiquidity,...B]);return new lt({keys:I,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 v(e.programId),new v(e.id)],m=U.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=U.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=me(c,l,m),{publicKey:y}=me(c,l,d),{publicKey:f}=ge(r.wallet,n.nftMint,u),{publicKey:b}=At(c,n.nftMint),{publicKey:g}=Ht(c,l,n.tickLower,n.tickUpper),h=[];for(let T=0;T<e.rewardDefaultInfos.length;T++)h.push({poolRewardVault:new v(t.rewardInfos[T].vault),ownerRewardVault:r.rewardAccounts[T],rewardMint:new v(e.rewardDefaultInfos[T].mint.address)});let A=[];return A.push(this.decreaseLiquidityInstruction(c,r.wallet,f,b,l,g,p,y,r.tokenAccountA,r.tokenAccountB,new v(t.vault.A),new v(t.vault.B),new v(e.mintA.address),new v(e.mintB.address),h,o,s,a,ve.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ht(c,l).publicKey:void 0)),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[M.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=N([w("amount"),w("otherAmountThreshold"),X("sqrtPriceLimitX64"),Ee("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(B=>({pubkey:B,isSigner:!1,isWritable:!0}))],T=[{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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],k=Buffer.alloc(h.span);h.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},k);let I=Buffer.from([...mt.swap,...k]);return new lt({keys:T,programId:e,data:I})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,inputMint:r,amountIn:o,amountOutMin:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,d]=[new v(t.vault.A),new v(t.vault.B)],[p,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountA:n.tokenAccountB,f?n.tokenAccountB:n.tokenAccountA,f?m:d,f?d:m,f?p:y,f?y:p,u,m,o,s,a,!0,ht(c,l).publicKey)];return{signers:[],instructions:b,instructionTypes:[M.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=N([w("openTime"),w("endTime"),X("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:mn.programId,isSigner:!1,isWritable:!1},{pubkey:it,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Y(l),endTime:Y(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...mt.initReward,...f]);return new lt({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new v(e.programId),new v(e.id)],a=Xs(o,s,r.mint).publicKey,u=vn(o).publicKey,c=[this.initRewardInstruction(o,n.wallet,s,u,new v(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:[M.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,r,o,s,a,u,c,l,m,d){let p=N([F("rewardIndex"),X("emissionsPerSecondX64"),w("openTime"),w("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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,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:Y(l),endTime:Y(m)},f);let b=Buffer.from([...mt.setRewardEmissions,...f]);return new lt({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:r}){let[o,s]=[new v(e.programId),new v(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 v(t.rewardInfos[d].vault),c=new v(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&oa.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=vn(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new v(e.config.id),n.tokenAccount,u,c,a,r.openTime,r.endTime,r.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[M.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,r,o,s,a){let u=N([F("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:Ne,isSigner:!1,isWritable:!1},{pubkey:qt,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...mt.collectReward,...l]);return new lt({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:r}){let[o,s]=[new v(e.programId),new v(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===r.toString()&&(a=l,u=new v(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&oa.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:[M.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapBaseOutInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,outputMint:r,amountOut:o,amountInMax:s,sqrtPriceLimitX64:a,remainingAccounts:u}){let[c,l]=[new v(e.programId),new v(e.id)],[m,d]=[new v(t.vault.A),new v(t.vault.B)],[p,y]=[new v(e.mintA.address),new v(e.mintB.address)],f=e.mintA.address===r.toString(),b=[this.swapInstruction(c,n.wallet,l,new v(e.config.id),f?n.tokenAccountB:n.tokenAccountA,f?n.tokenAccountA:n.tokenAccountB,f?d:m,f?m:d,f?p:y,f?y:p,u,m,o,s,a,!1)];return{signers:[],instructions:b,instructionTypes:[M.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}};import{PublicKey as El}from"@solana/web3.js";import{PublicKey as _l}from"@solana/web3.js";import sa from"bn.js";var aa=new sa(25),ua=new sa(1e4);var Ml=oe("Raydium_liquidity_serum");function ca({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=_l.createProgramAddressSync(o,i)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:r,nonce:n}}throw Ml.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 nP from"bn.js";function to({programId:i}){let{publicKey:e}=ue([Buffer.from("amm_config_account_seed","utf-8")],i);return e}function Jt({name:i,programId:e,marketId:t}){let{publicKey:n}=ue([e.toBuffer(),t.toBuffer(),Buffer.from(i,"utf-8")],e);return n}function Vl({programId:i,marketId:e}){let{publicKey:t}=ue([i.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],i);return t}function Fl({programId:i}){return ue([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],i)}function la({version:i,marketVersion:e,marketId:t,baseMint:n,quoteMint:r,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:u}){let c=Jt({name:"amm_associated_seed",programId:a,marketId:t}),l=Jt({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=Fl({programId:a}),p=Jt({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Jt({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Jt({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=Vl({programId:a,marketId:t}),g=Jt({name:"target_associated_seed",programId:a,marketId:t}),h=Jt({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=ca({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:A,lookupTableAccount:El.default,configId:to({programId:a})}}import De from"bn.js";var Gn=class extends he{constructor(t){super(t);this.stableLayout=new Vn({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 De(new E(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=_r(t[o?"mintB":"mintA"]),[u,c]=[new De(new E(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new De(new E(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new De(new E(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,E.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()}%`);let m=o?"base":"quote";this.logDebug("input side:",m);let d=qe;s.isZero()||(d=m==="base"?pr(s.mul(c),u):pr(s.mul(u),c));let p=pr(s.mul(l),new De(m==="base"?t.mintAmountA:t.mintAmountB).mul(new De(10).pow(new De(t[m==="base"?"mintA":"mintB"].decimals)))),f=new He(new De(1)).add(r).mul(d).quotient,b=new be(a,d),g=new be(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,amountInA:r,amountInB:o,fixedSide:s,config:a,txVersion:u,computeBudgetConfig:c}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",o),(r.isZero()||o.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:o.toFixed()});let{account:l}=this.scope,{bypassAssociatedCheck:m,checkCreateATAOwner:d}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),[p,y]=[r.token,o.token],f=await l.getCreatedTokenAccount({mint:p.mint,associatedOnly:!1}),b=await l.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",l.tokenAccounts);let g=await l.getCreatedTokenAccount({mint:new je(n.lpMint.address)}),h=[p,y],A=[f,b],T=[r.raw,o.raw],k=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(k)||this.logAndCreateError("invalid fixedSide","fixedSide",s),k==="quote"?(h.reverse(),A.reverse(),T.reverse(),I=s==="a"?"quote":"base"):k==="base"&&(I=s==="a"?"base":"quote");let[B,x]=h,[C,_]=A,[V,H]=T,D=await this.getAmmPoolKeys(n.id),ee=this.createTxBuilder(),Kt=await l.handleTokenAccount({side:"in",amount:V,mint:B.mint,tokenAccount:C,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:te}=Kt,re=we(Kt,["tokenAccount"]);ee.addInstruction(re);let er=await l.handleTokenAccount({side:"in",amount:H,mint:x.mint,tokenAccount:_,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:tt}=er,fn=we(er,["tokenAccount"]);ee.addInstruction(fn);let yn=await l.handleTokenAccount({side:"out",amount:0,mint:new je(n.lpMint.address),tokenAccount:g,bypassAssociatedCheck:m,checkCreateATAOwner:d}),{tokenAccount:Xr}=yn,zr=we(yn,["tokenAccount"]);return ee.addInstruction(zr),ee.addInstruction({instructions:[Fs({poolInfo:n,poolKeys:D,userKeys:{baseTokenAccount:te,quoteTokenAccount:tt,lpTokenAccount:Xr,owner:this.scope.ownerPubKey},baseAmountIn:V,quoteAmountIn:H,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?M.AmmV5AddLiquidity:M.AmmV4AddLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),ee.addCustomComputeBudget(c),u===0&&await ee.buildV0(),ee.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,amountIn:r,config:o,txVersion:s,computeBudgetConfig:a}=t,u=await this.getAmmPoolKeys(n.id),[c,l,m]=[new je(n.mintA.address),new je(n.mintB.address),new je(n.lpMint.address)];this.logDebug("amountIn:",r),r.isZero()&&this.logAndCreateError("amount must greater than zero","amountIn",r.toString());let{account:d}=this.scope,p=await d.getCreatedTokenAccount({mint:m,associatedOnly:!1});p||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",d.tokenAccounts);let y=await d.getCreatedTokenAccount({mint:c}),f=await d.getCreatedTokenAccount({mint:l}),b=this.createTxBuilder(),{bypassAssociatedCheck:g,checkCreateATAOwner:h}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),B=await d.handleTokenAccount({side:"out",amount:0,mint:c,tokenAccount:y,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:A}=B,T=we(B,["tokenAccount"]);b.addInstruction(T);let x=await d.handleTokenAccount({side:"out",amount:0,mint:l,tokenAccount:f,bypassAssociatedCheck:g,checkCreateATAOwner:h}),{tokenAccount:k}=x,I=we(x,["tokenAccount"]);return b.addInstruction(I),b.addInstruction({instructions:[zi({poolInfo:n,poolKeys:u,userKeys:{lpTokenAccount:p,baseTokenAccount:A,quoteTokenAccount:k,owner:this.scope.ownerPubKey},amountIn:r})],lookupTableAddress:u.lookupTableAccount?[u.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?M.AmmV5RemoveLiquidity:M.AmmV4RemoveLiquidity]}),b.addCustomComputeBudget(a),s===0?await b.buildV0():b.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:r,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,tokenProgram:m=Dr,checkCreateATAOwner:d=!0,getEphemeralSigners:p,txVersion:y}){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 f=this.createTxBuilder();f.addCustomComputeBudget(c);let b={};for(let te of this.scope.account.tokenAccountRawInfos)(b[te.accountInfo.mint.toString()]===void 0||ge(this.scope.ownerPubKey,te.accountInfo.mint,Dr).publicKey.equals(te.pubkey))&&(b[te.accountInfo.mint.toString()]=te.pubkey);let g=b[t.lpMint.address];if(g===void 0)throw Error("find lp account error in trade accounts");let h=r.add(a!=null?a:new De(0)),A=t.mintA.address===Ae.WSOL.mint.toString(),T=t.mintB.address===Ae.WSOL.mint.toString(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dr,mint:new je(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!0,checkCreateATAOwner:d});if(f.addInstruction(I||{}),k===void 0)throw new Error("base token account not found");let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Dr,mint:new je(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:T?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!T,notUseTokenAccount:T,associatedOnly:!0,checkCreateATAOwner:d});if(f.addInstruction(x||{}),B===void 0)throw new Error("quote token account not found");if(b[t.mintA.address]=k,b[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let te=[];for(let Kt of s.rewardInfos){let er=Kt.mint.address===Ae.WSOL.mint.toString();if(b[Kt.mint.address])te.push(b[Kt.mint.address]);else{let{account:yn,instructionParams:co}=await this.scope.account.getOrCreateTokenAccount({mint:new je(Kt.mint.address),tokenProgram:m,owner:this.scope.ownerPubKey,skipCloseAccount:!er,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:d});yn||this.logAndCreateError("farm reward account not found:",Kt.mint.address),co&&f.addInstruction(co),te.push(yn)}}let re=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],tt={amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:re,lpAccount:g,rewardAccounts:te},fn=ut[s.programId],Xr=fn===6?Nn(tt):fn===5?_n(tt):Mn(tt),zr={3:M.FarmV3Withdraw,5:M.FarmV5Withdraw,6:M.FarmV6Withdraw};f.addInstruction({instructions:[Xr],instructionTypes:[zr[fn]]})}let C=await this.getAmmPoolKeys(t.id),_=zi({poolInfo:t,poolKeys:C,userKeys:{lpTokenAccount:g,baseTokenAccount:k,quoteTokenAccount:B,owner:this.scope.ownerPubKey},amountIn:h});f.addInstruction({instructions:[_],instructionTypes:[t.pooltype.includes("StablePool")?M.AmmV5RemoveLiquidity:M.AmmV4RemoveLiquidity],lookupTableAddress:C.lookupTableAccount?[C.lookupTableAccount]:[]});let[V,H]=t.mintA.address===n.mintA.address?[k,B]:[B,k],D=await this.scope.clmm.getClmmPoolKeys(t.id),ee=await ke.openPositionFromBaseInstructions(W(O({poolInfo:n,poolKeys:D,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:V,tokenAccountB:H},withMetadata:"create"},o),{base:u,getEphemeralSigners:p}));return f.addInstruction({instructions:[...ee.instructions],signers:ee.signers,instructionTypes:[...ee.instructionTypes],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),y===0?f.sizeCheckBuildV0():f.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 H;let b=c.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),g=c.useSOLBalance&&r.mint.equals(ma),h=c.useSOLBalance&&o.mint.equals(ma),A=this.createTxBuilder(),{account:T,instructionParams:k}=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});A.addInstruction(k||{});let{account:I,instructionParams:B}=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(A.addInstruction(B||{}),T===void 0||I===void 0)throw Error("you don't has some token account");let x=la({version:4,marketVersion:3,marketId:n.marketId,baseMint:r.mint,quoteMint:o.mint,baseDecimals:r.decimals,quoteDecimals:o.decimals,programId:t,marketProgramId:n.programId}),C={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:_,instructionType:V}=vs(W(O({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:T,userPcVault:I,userLpVault:ge(this.scope.ownerPubKey,x.lpMint,d).publicKey,nonce:x.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[_],instructionTypes:[V]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=to({programId:t}),r=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(r===null)throw Error("get config account error");return Ls.decode(r.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:r,mintOut:o,slippage:s}){if(r!==t.mintA.address&&r!==t.mintA.address)throw new Error("toke not match");if(o!==t.mintB.address&&o!==t.mintB.address)throw new Error("toke not match");let{baseReserve:a,quoteReserve:u}=t,c=[a,u],l=r==t.mintA.address?"base":"quote";l==="quote"&&c.reverse();let[m,d]=c,p=t.programId===Qo.toBase58(),y;if(p)y=new E(d.toString()).div(m.toString());else{let x=Ms(this.stableLayout.stableModelData,a.toNumber(),u.toNumber(),!1);l==="quote"?y=new E(1e6).div(x*1e6):y=new E(x*1e6).div(1e6)}let f=n,b=new De(0),g=new De(0);if(!f.isZero())if(p){g=Cn(f.mul(aa),ua);let x=f.sub(g),C=m.add(x);b=d.mul(x).div(C)}else{g=f.mul(new De(2)).div(new De(1e4));let x=f.sub(g);l==="quote"?b=new De(Ns(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber())):b=new De(_s(this.stableLayout.stableModelData,u.toNumber(),a.toNumber(),x.toNumber()))}let h=new De(new E(b.toString()).mul(1-s).toFixed(0)),A=b,T=h,k=new E(b.toString()).div(new E(f.sub(g).toString()).toFixed(0));!f.isZero()&&!b.isZero()&&(k=new E(b.toString()).div(f.sub(g).toString()));let I=y.sub(k).div(y).mul(100);return{amountOut:A,minAmountOut:T,currentPrice:y,executionPrice:k,priceImpact:I,fee:g}}async swap({poolInfo:t,amountIn:n,amountOut:r,inputMint:o,fixedSide:s,txVersion:a,computeBudgetConfig:u}){let c=this.createTxBuilder(),[l,m]=o===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],d=await this.scope.account.getCreatedTokenAccount({mint:new je(l.address),programId:new je(l.programId),associatedOnly:!1}),p=await this.scope.account.getCreatedTokenAccount({mint:new je(m.address),programId:new je(m.programId),associatedOnly:!1}),T=await this.scope.account.handleTokenAccount({side:"in",amount:n,mint:new je(l.address),tokenAccount:d,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:y}=T,f=we(T,["tokenAccount"]);c.addInstruction(f);let k=await this.scope.account.handleTokenAccount({side:"out",amount:0,mint:new je(m.address),tokenAccount:p,bypassAssociatedCheck:!1,checkCreateATAOwner:!1}),{tokenAccount:b}=k,g=we(k,["tokenAccount"]);c.addInstruction(g);let h=await this.getAmmPoolKeys(t.id),A=4;return t.pooltype.includes("StablePool")&&(A=5),c.addInstruction({instructions:[Ds({version:A,poolKeys:h,userKeys:{tokenAccountIn:y,tokenAccountOut:b,owner:this.scope.ownerPubKey},amountIn:n,amountOut:r,fixedSide:s})],instructionTypes:[A===4?M.AmmV4SwapBaseIn:M.AmmV5SwapBaseIn]}),c.addCustomComputeBudget(u),c.versionBuild({txVersion:a})}};import{PublicKey as ie}from"@solana/web3.js";import dt from"bn.js";var Xn=class extends he{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var h;let{programId:t,owner:n=((h=this.scope.owner)==null?void 0:h.publicKey)||ie.default,mint1:r,mint2:o,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,txVersion:m}=e,d=this.createTxBuilder(),[p,y,f]=new dt(new ie(r.address).toBuffer()).gt(new dt(new ie(o.address).toBuffer()))?[o,r,new E(1).div(a)]:[r,o,a],b=J.priceToSqrtPriceX64(f,p.decimals,y.decimals),g=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:p,mintB:y,ammConfigId:s.id,initialPriceX64:b,startTime:u,forerunCreate:l});return d.addInstruction(g),d.addCustomComputeBudget(c),d.versionBuild({txVersion:m,extInfo:{address:W(O({},g.address),{programId:t.toString(),id:g.address.poolId.toString(),mintA:p,mintB:y,openTime:u.toString(),vault:{A:g.address.mintAVault.toString(),B:g.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:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:g.address.poolId.toString(),mintA:p,mintB:y,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:f.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:[]}},Zs),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===$.toString(),A=n.useSOLBalance&&e.mintB.address===$.toString(),[T,k]=s==="MintA"?[a,u]:[u,a],{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:h||T.isZero()?{payer:this.scope.ownerPubKey,amount:T}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});I&&(b=I),f.addInstruction(B||{});let{account:x,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});x&&(g=x),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let _=t||await this.getClmmPoolKeys(e.id),V=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:_,ownerInfo:W(O({},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(V),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:V.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,getEphemeralSigners:p}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),f=null,b=null,g=n.useSOLBalance&&e.mintA.address===$.toBase58(),h=n.useSOLBalance&&e.mintB.address===$.toBase58(),{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:g?!1:c,checkCreateATAOwner:l});A&&(f=A),y.addInstruction(T||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:h?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!h,notUseTokenAccount:h,associatedOnly:h?!1:c,checkCreateATAOwner:l});k&&(b=k),y.addInstruction(I||{}),(f===void 0||b===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id);console.log(123123444,B);let x=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:r,amountMaxB:o,withMetadata:m,getEphemeralSigners:p});return y.addInstruction(x),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,ownerPosition:n,amountMaxA:r,amountMaxB:o,liquidity: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===$.toString(),b=a.useSOLBalance&&t.mintB.address===$.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?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(h||{});let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let k=await this.getClmmPoolKeys(t.id),I=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:k,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},liquidity:s,amountMaxA:r,amountMaxB:o});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.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===$.toString(),b=a.useSOLBalance&&t.mintB.address===$.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?{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:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({mint:new ie(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b?{payer:this.scope.ownerPubKey,amount:r==="MintA"?s:o}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(T||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let k=await this.getClmmPoolKeys(t.id),I=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:k,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:r,baseAmount:o,otherAmountMax:s});return d.addInstruction(I),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:I.address}})}async decreaseLiquidity(e){let{poolInfo:t,ownerPosition:n,ownerInfo:r,amountMinA:o,amountMinB:s,liquidity:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let d=this.createTxBuilder(),p=r.useSOLBalance&&t.mintA.address===$.toString(),y=r.useSOLBalance&&t.mintB.address===$.toString(),f,b,{account:g,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new ie(t.mintA.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!p,associatedOnly:p?!1:u,checkCreateATAOwner:c});f=g,h&&d.addInstruction(h);let{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new ie(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:c});b=A,T&&d.addInstruction(T);let k=[];for(let C of t.rewardDefaultInfos){let _=r.useSOLBalance&&C.mint.address===$.toString(),V;if(C.mint.address===t.mintA.address)V=f;else if(C.mint.address===t.mintB.address)V=b;else{let{account:H,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(C.mint.programId),mint:new ie(C.mint.address),notUseTokenAccount:_,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!_,associatedOnly:_?!1:u,checkCreateATAOwner:c});V=H,D&&d.addInstruction(D)}k.push(V)}!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=await this.getClmmPoolKeys(t.id),B=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:k},liquidity:a,amountMinA:o,amountMinB:s});d.addInstruction({instructions:B.instructions,instructionTypes:[M.ClmmDecreasePosition]});let x=O({},B.address);if(r.closePosition){let C=await ke.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});d.addInstruction({endInstructions:C.instructions,endInstructionTypes:C.instructionTypes}),x=O(O({},x),C.address)}return d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:x}})}async closePosition({poolInfo:e,ownerPosition:t,txVersion:n}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),o=await this.getClmmPoolKeys(e.id),s=ke.closePositionInstructions({poolInfo:e,poolKeys:o,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:t});return r.addInstruction(s).versionBuild({txVersion:n,extInfo:{address:s.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()===$.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 dt(new E(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=ke.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:Q.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){for(let l of n)l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let u=this.createTxBuilder(),c={};for(let l of n){let m=t.useSOLBalance&&l.mint.address===$.toString(),d=l.perSecond.mul(l.endTime-l.openTime),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(l.mint.programId),mint:new ie(l.mint.address),notUseTokenAccount:!!m,skipCloseAccount:!m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(d.toFixed(0)).gte(d)?d.toFixed(0):d.add(1).toFixed(0))}:void 0,associatedOnly:m?!1:r,checkCreateATAOwner:o});y&&u.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=await this.getClmmPoolKeys(e.id),b=ke.initRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{programId:new ie(l.mint.programId),mint:new ie(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:Q.decimalToX64(l.perSecond)}});c=O(O({},c),b.address),u.addInstruction(b)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}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($),{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 dt(new E(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=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:Q.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,ownerInfo:t,rewardInfos:n,associatedOnly:r=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){let u=this.createTxBuilder(),c={};for(let l of n){l.endTime<=l.openTime&&this.logAndCreateError("reward time error","rewardInfo",l);let m=t.useSOLBalance&&l.mint.address===$.toString(),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(l.mint.programId),mint:new ie(l.mint.address),notUseTokenAccount:m,owner:this.scope.ownerPubKey,createInfo:m?{payer:t.feePayer||this.scope.ownerPubKey,amount:new dt(new E(l.perSecond.sub(l.endTime-l.openTime).toFixed(0)).gte(l.perSecond.sub(l.endTime-l.openTime))?l.perSecond.sub(l.endTime-l.openTime).toFixed(0):l.perSecond.sub(l.endTime-l.openTime).add(1).toFixed(0))}:void 0,associatedOnly:m?!1:r,checkCreateATAOwner:o});p&&u.addInstruction(p),d||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=await this.getClmmPoolKeys(e.id),f=ke.setRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:d},rewardInfo:{mint:new ie(l.mint.address),openTime:l.openTime,endTime:l.endTime,emissionsPerSecondX64:Q.decimalToX64(l.perSecond)}});u.addInstruction(f),c=O(O({},c),f.address)}return u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:c}})}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($),{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=ke.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($),{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=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=O(O({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,inputMint:t,amountIn:n,amountOutMin:r,priceLimit:o,ownerInfo:s,remainingAccounts:a,associatedOnly:u=!0,checkCreateATAOwner:c=!1,txVersion:l}){let m=this.createTxBuilder(),d=s.useSOLBalance&&e.mintA.address===$.toBase58(),p=s.useSOLBalance&&e.mintB.address===$.toBase58(),y;!o||o.equals(new E(0))?y=t.toString()===e.mintA.address?vt.add(new dt(1)):Dt.sub(new dt(1)):y=J.priceToSqrtPriceX64(o,e.mintA.decimals,e.mintB.decimals);let f;if(!f){let{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new ie(e.mintA.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,skipCloseAccount:!d,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:d?!1:u,checkCreateATAOwner:c});f=h,A&&m.addInstruction(A)}let b;if(!b){let{account:h,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new ie(e.mintB.address),notUseTokenAccount:p,owner:this.scope.ownerPubKey,skipCloseAccount:!p,createInfo:{payer:s.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:p?!1:u,checkCreateATAOwner:c});b=h,A&&m.addInstruction(A)}(!f||!b)&&this.logAndCreateError("user do not have token account",this.scope.account.tokenAccountRawInfos);let g=await this.getClmmPoolKeys(e.id);return m.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:g,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},inputMint:new ie(t),amountIn:n,amountOutMin:r,sqrtPriceLimitX64:y,remainingAccounts:a})),m.versionBuild({txVersion:l})}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?ge(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(A=>!A.liquidity.isZero()||A.rewardInfos.find(T=>!T.rewardAmountOwed.isZero())))continue;let d=m,p=n.useSOLBalance&&d.mintA.address===$.toString(),y=n.useSOLBalance&&d.mintB.address===$.toString(),f=c[d.mintA.address];if(!f){let{account:A,instructionParams:T}=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=A,T&&l.addInstruction(T)}let b=c[d.mintB.address];if(!b){let{account:A,instructionParams:T}=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=A,T&&l.addInstruction(T)}c[d.mintA.address]=f,c[d.mintB.address]=b;let g=[];for(let A of d.rewardDefaultInfos){let T=n.useSOLBalance&&A.mint.address===$.toString(),k=c[A.mint.address];if(!k){let{account:I,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new ie(A.mint.programId),mint:new ie(A.mint.address),notUseTokenAccount:T,owner:this.scope.ownerPubKey,skipCloseAccount:!T,createInfo:{payer:n.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:T?!1:r});k=I,B&&l.addInstruction(B)}c[A.mint.address]=k,g.push(k)}let h=await this.getClmmPoolKeys(d.id);for(let A of t[m.id]){let T=ke.decreaseLiquidityInstructions({poolInfo:d,poolKeys:h,ownerPosition:A,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b,rewardAccounts:g},liquidity:new dt(0),amountMinA:new dt(0),amountMinB:new dt(0)});l.addInstruction(T)}}return a===0?l.sizeCheckBuildV0({computeBudgetConfig:u}):l.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(vn(e).publicKey);return t?na.decode(t.data).whitelistMints.filter(r=>!r.equals(ie.default)):[]}};import{PublicKey as z}from"@solana/web3.js";import{NATIVE_MINT as qr,TOKEN_PROGRAM_ID as Ut,AccountLayout as Ta}from"@solana/spl-token";var vl=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),Dl=Buffer.from("amm_config","utf8"),Wl=Buffer.from("pool","utf8"),ql=Buffer.from("pool_lp_mint","utf8"),Ul=Buffer.from("pool_vault","utf8"),Gl=Buffer.from("observation","utf8");function Xl(i){return ue([vl],i)}function zl(i,e){return ue([Dl,Hl(e)],i)}function Yl(i,e,t,n){return ue([Wl,e.toBuffer(),t.toBuffer(),n.toBuffer()],i)}function jl(i,e){return ue([ql,e.toBuffer()],i)}function da(i,e,t){return ue([Ul,e.toBuffer(),t.toBuffer()],i)}function Wr(i,e){return ue([Gl,e.toBuffer()],i)}function Hl(i){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,i,!1),new Uint8Array(e)}function pa({programId:i,mintA:e,mintB:t}){let n=zl(i,0).publicKey,r=Xl(i).publicKey,o=Yl(i,n,e,t).publicKey,s=jl(i,o).publicKey,a=da(i,o,e).publicKey,u=da(i,o,t).publicKey,c=Wr(i,o).publicKey;return{poolId:o,configId:n,authority:r,lpMint:s,vaultA:a,vaultB:u,observationId:c}}import{TransactionInstruction as zn}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as no,TOKEN_2022_PROGRAM_ID as ya,ASSOCIATED_TOKEN_PROGRAM_ID as Ql}from"@solana/spl-token";var fa=oe("Raydium_Cpmm_ins"),Yn={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 ba(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f,b,g,h,A){let T=N([w("amountMaxA"),w("amountMaxB"),w("openTime")]),k=[{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:no,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Ql,isSigner:!1,isWritable:!1},{pubkey:_o,isSigner:!1,isWritable:!1},{pubkey:it,isSigner:!1,isWritable:!1}],I=Buffer.alloc(T.span);return T.encode({amountMaxA:g,amountMaxB:h,openTime:A},I),new zn({keys:k,programId:i,data:Buffer.from([...Yn.initialize,...I])})}function ga(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){fa.info(123123,{mintA:c.toBase58(),mintB:l.toBase58(),lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()});let f=N([w("lpAmount"),w("amountMaxA"),w("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:no,isSigner:!1,isWritable:!1},{pubkey:ya,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 fa.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new zn({keys:b,programId:i,data:Buffer.from([...Yn.deposit,...g])})}function wa(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y){let f=N([w("lpAmount"),w("amountMinA"),w("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:no,isSigner:!1,isWritable:!1},{pubkey:ya,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Oo,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new zn({keys:b,programId:i,data:Buffer.from([...Yn.withdraw,...g])})}function Aa(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=N([w("amountIn"),w("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 zn({keys:g,programId:i,data:Buffer.from([...Yn.swapBaseInput,...h])})}function ha(i,e,t,n,r,o,s,a,u,c,l,m,d,p,y,f){let b=N([w("amountInMax"),w("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 zn({keys:g,programId:i,data:Buffer.from([...Yn.swapBaseOutput,...h])})}import Je from"bn.js";var Pa=N([fe(8),F("bump"),Ee("disableCreatePool"),yt("index"),w("tradeFeeRate"),w("protocolFeeRate"),w("fundFeeRate"),w("createPoolFee"),S("protocolOwner"),S("fundOwner"),q(w(),16)]),ka=N([fe(8),S("configId"),S("poolCreator"),S("vaultA"),S("vaultB"),S("mintLp"),S("mintA"),S("mintB"),S("mintProgramA"),S("mintProgramB"),S("observationId"),F("bump"),F("status"),F("lpDecimals"),F("mintDecimalA"),F("mintDecimalB"),w("lpAmount"),w("protocolFeesMintA"),w("protocolFeesMintB"),w("fundFeesMintA"),w("fundFeesMintB"),w("openTime"),q(w(),32)]);var jn=class extends he{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){let n=await this.scope.connection.getAccountInfo(new z(e));if(!n)throw new Error(`pool not found: ${e}`);let r=ka.decode(n.data),[o,s]=await this.scope.connection.getMultipleAccountsInfo([r.vaultA,r.vaultB]);if(!o)throw new Error(`pool vaultA info not found: ${r.vaultA.toBase58()}`);if(!s)throw new Error(`pool vaultB info not found: ${r.vaultB.toBase58()}`);let a;if(t){let u=await this.scope.connection.getAccountInfo(r.configId);u&&(a=Pa.decode(u.data))}return W(O({},r),{baseReserve:new Je(Ta.decode(o.data).amount.toString()).sub(r.protocolFeesMintA).sub(r.fundFeesMintA),quoteReserve:new Je(Ta.decode(s.data).amount.toString()).sub(r.protocolFeesMintB).sub(r.fundFeesMintB),configInfo:a})}async createPool(l){var m=l,{programId:e,poolFeeAccount:t,startTime:n,ownerInfo:r,associatedOnly:o=!1,checkCreateATAOwner:s=!1,txVersion:a,computeBudgetConfig:u}=m,c=we(m,["programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","computeBudgetConfig"]);var H,D,ee;let d=r.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),p=new Je(new z(c.mintA.address).toBuffer()).lte(new Je(new z(c.mintB.address).toBuffer())),[y,f]=p?[c.mintA,c.mintB]:[c.mintB,c.mintA],[b,g]=p?[c.mintAAmount,c.mintBAmount]:[c.mintBAmount,c.mintAAmount],h=r.useSOLBalance&&y.address===qr.toBase58(),A=r.useSOLBalance&&f.address===qr.toBase58(),[T,k]=[new z(y.address),new z(f.address)],I=this.createTxBuilder(),{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:T,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:h?{payer:d,amount:b}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:o,checkCreateATAOwner:s});I.addInstruction(x||{});let{account:C,instructionParams:_}=await this.scope.account.getOrCreateTokenAccount({mint:new z(f.address),tokenProgram:f.programId,owner:this.scope.ownerPubKey,createInfo:A?{payer:d,amount:g}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:o,checkCreateATAOwner:s});if(I.addInstruction(_||{}),B===void 0||C===void 0)throw Error("you don't has some token account");let V=pa({programId:e,mintA:T,mintB:k});return I.addInstruction({instructions:[ba(e,this.scope.ownerPubKey,V.configId,V.authority,V.poolId,T,k,V.lpMint,B,C,ge(this.scope.ownerPubKey,V.lpMint).publicKey,V.vaultA,V.vaultB,t,new z((D=y.programId)!=null?D:Ut),new z((ee=f.programId)!=null?ee:Ut),V.observationId,b,g,n)],instructionTypes:[M.CpmmCreatePool]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:a,extInfo:{address:W(O({},V),{mintA:y,mintB:f,programId:e,poolFeeAccount:t})}})}async addLiquidity(e){let{poolInfo:t,inputAmount:n,baseIn:r,slippage:o,computeBudgetConfig:s,config:a,txVersion:u}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),n.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:n.toString()});let{account:c}=this.scope,{bypassAssociatedCheck:l,checkCreateATAOwner:m}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},a),d=await this.getRpcPoolInfo(t.id),{liquidity:p,anotherAmount:y}=this.computePairAmount({poolInfo:W(O({},t),{mintAmountA:new E(d.baseReserve.toString()).div(10**t.mintA.decimals).toNumber(),mintAmountB:new E(d.quoteReserve.toString()).div(10**t.mintB.decimals).toNumber(),lpAmount:new E(d.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),slippage:o,baseIn:r,amount:new E(n.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),f=y.raw,b=t.mintA.address===qr.toString(),g=t.mintB.address===qr.toString(),h=this.createTxBuilder(),[A,T]=[new z(t.mintA.address),new z(t.mintB.address)],{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:b||(r?n:f).isZero()?{payer:this.scope.ownerPubKey,amount:r?n:f}:void 0,skipCloseAccount:!b,notUseTokenAccount:b,associatedOnly:!1,checkCreateATAOwner:m});h.addInstruction(I||{});let{account:B,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||(r?f:n).isZero()?{payer:this.scope.ownerPubKey,amount:r?f:n}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:!1,checkCreateATAOwner:m});h.addInstruction(x||{}),!k&&!B&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",c.tokenAccounts);let C=await c.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),D=await c.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:C,bypassAssociatedCheck:l,checkCreateATAOwner:m}),{tokenAccount:_}=D,V=we(D,["tokenAccount"]);h.addInstruction(V);let H=await this.getCpmmPoolKeys(t.id);return h.addInstruction({instructions:[ga(new z(t.programId),this.scope.ownerPubKey,new z(H.authority),new z(t.id),_,k,B,new z(H.vault.A),new z(H.vault.B),A,T,new z(t.lpMint.address),p,r?n:f,r?f:n)],instructionTypes:[M.CpmmAddLiquidity],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),h.addCustomComputeBudget(s),h.versionBuild({txVersion:u})}async withdrawLiquidity(e){let{poolInfo:t,lpAmount:n,slippage:r,computeBudgetConfig:o,txVersion:s}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let a=new He(new Je(1)).sub(r),u=await this.getRpcPoolInfo(t.id),[c,l]=[a.mul(n.mul(u.baseReserve).div(u.lpAmount)).quotient,a.mul(n.mul(u.quoteReserve).div(u.lpAmount)).quotient],{account:m}=this.scope,d=this.createTxBuilder(),[p,y]=[new z(t.mintA.address),new z(t.mintB.address)],f=p.equals($),b=y.equals($),g,h,{account:A,instructionParams:T}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=A,T&&d.addInstruction(T);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:!b,checkCreateATAOwner:!1});h=k,I&&d.addInstruction(I),(!g||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let B=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)});B||this.logAndCreateError("cannot found lp token account","tokenAccounts",m.tokenAccounts);let x=await this.getCpmmPoolKeys(t.id);return d.addInstruction({instructions:[wa(new z(t.programId),this.scope.ownerPubKey,new z(x.authority),new z(t.id),B,g,h,new z(x.vault.A),new z(x.vault.B),p,y,new z(t.lpMint.address),n,c,l)],instructionTypes:[M.CpmmWithdrawLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]}),d.addCustomComputeBudget(o),d.versionBuild({txVersion:s})}async swap(e){var T,k,x,C,_,V;let{poolInfo:t,baseIn:n,swapResult:r,config:o,computeBudgetConfig:s,txVersion:a}=e,{bypassAssociatedCheck:u,checkCreateATAOwner:c}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},o),l=this.createTxBuilder(),[m,d]=[new z(t.mintA.address),new z(t.mintB.address)],p=await this.scope.account.getCreatedTokenAccount({programId:new z((T=t.mintA.programId)!=null?T:Ut),mint:m,associatedOnly:!1}),y=await this.scope.account.getCreatedTokenAccount({programId:new z((k=t.mintB.programId)!=null?k:Ut),mint:d,associatedOnly:!1}),I=await this.scope.account.handleTokenAccount({side:n?"in":"out",amount:n?r.sourceAmountSwapped:r.destinationAmountSwapped,mint:m,tokenAccount:p,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:f}=I,b=we(I,["tokenAccount"]);l.addInstruction(b);let B=await this.scope.account.handleTokenAccount({side:n?"out":"in",amount:n?r.destinationAmountSwapped:r.sourceAmountSwapped,mint:d,tokenAccount:y,bypassAssociatedCheck:u,checkCreateATAOwner:c}),{tokenAccount:g}=B,h=we(B,["tokenAccount"]);l.addInstruction(h),!f&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let A=await this.getCpmmPoolKeys(t.id);return l.addInstruction({instructions:[n?Aa(new z(t.programId),this.scope.ownerPubKey,new z(A.authority),new z(A.config.id),new z(t.id),f,g,new z(A.vault.A),new z(A.vault.B),new z((x=t.mintA.programId)!=null?x:Ut),new z((C=t.mintB.programId)!=null?C:Ut),m,d,Wr(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped):ha(new z(t.programId),this.scope.ownerPubKey,new z(A.authority),new z(A.config.id),new z(t.id),g,f,new z(A.vault.B),new z(A.vault.A),new z((_=t.mintB.programId)!=null?_:Ut),new z((V=t.mintA.programId)!=null?V:Ut),d,m,Wr(new z(t.programId),new z(t.id)).publicKey,r.sourceAmountSwapped,r.destinationAmountSwapped)],instructionTypes:[n?M.CpmmSwapBaseIn:M.CpmmSwapBaseOut]}),l.addCustomComputeBudget(s),l.versionBuild({txVersion:a})}computePairAmount({poolInfo:e,amount:t,slippage:n,baseIn:r}){let o=new Je(new E(t).mul(10**e[r?"mintA":"mintB"].decimals).toFixed(0)),s=_r(e[r?"mintB":"mintA"]),[a,u]=[new Je(new E(e.mintAmountA).mul(10**e.mintA.decimals).toString()),new Je(new E(e.mintAmountB).mul(10**e.mintB.decimals).toString())],c=new Je(new E(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,E.ROUND_DOWN));this.logDebug("baseReserve:",a.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",r?e.mintA.symbol:e.mintB.symbol,"amountIn:",o.toString(),"anotherToken:",r?e.mintB.symbol:e.mintA.symbol,"slippage:",`${n.toSignificant()}%`);let l=r?"base":"quote";this.logDebug("input side:",l);let m=o.mul(c).div(l==="base"?a:u),d=qe;o.isZero()||(d=Zl(m,a,u,c)[r?"amountB":"amountA"]);let y=new He(new Je(1)).add(n).mul(d).quotient,f=new be(s,d),b=new be(s,y);return this.logDebug("anotherAmount:",f.toFixed(),"maxAnotherAmount:",b.toFixed()),{anotherAmount:f,maxAnotherAmount:b,liquidity:m}}};function Zl(i,e,t,n){let r=i.mul(e).div(n);!r.isZero()&&!i.mul(e).mod(n).isZero()&&(r=r.add(new Je(1)));let o=i.mul(t).div(n);return!o.isZero()&&!i.mul(t).mod(n).isZero()&&(o=o.add(new Je(1))),{amountA:r,amountB:o}}var Hn=class extends he{constructor(e){super(e)}static getAddLiquidityDefaultPool({addLiquidityPools:e,poolInfosCache:t}){if(e.length===0)return;if(e.length===1||(e.sort((r,o)=>o.version-r.version),e[0].version!==e[1].version))return e[0];let n=e.filter(r=>r.version===e[0].version);return n.sort((r,o)=>this.comparePoolSize(r,o,t)),n[0]}static comparePoolSize(e,t,n){let r=n[e.id],o=n[t.id];return r===void 0?1:o===void 0?-1:e.baseMint===t.baseMint?r.baseReserve.sub(o.baseReserve).gte(qe)?-1:1:r.baseReserve.sub(o.quoteReserve).gte(qe)?-1:1}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals($));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}=e,r=await this.getWSolAccounts(),o=this.createTxBuilder();o.addCustomComputeBudget(e.computeBudgetConfig);let s=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});o.addInstruction(s);let a=Y(t);for(let u=0;u<r.length;u++)a.gte(r[u].amount)?(o.addInstruction({instructions:[xt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),a.sub(r[u].amount)):(o.addInstruction({instructions:[xt({tokenAccount:r[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),Ln({destination:s.addresses.newAccount,source:r[u].publicKey,amount:a,owner:this.scope.ownerPubKey,tokenProgram:n}));return o.build()}async wrapWSol(e,t){let n=await this.getWSolAccounts(),r=this.createTxBuilder(),o=await bt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return r.addInstruction(o),n.length&&r.addInstruction({instructions:[Ln({destination:n[0].publicKey,source:o.addresses.newAccount,amount:e,owner:this.scope.ownerPubKey,tokenProgram:t})],endInstructions:[xt({tokenAccount:o.addresses.newAccount,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:t})]}),r.build()}};import{TOKEN_PROGRAM_ID as $l}from"@solana/spl-token";import{PublicKey as Jl,Transaction as ro,TransactionInstruction as em}from"@solana/web3.js";import Ia from"bn.js";var We=class extends he{static getPdaPoolId(e,t){return ue([We.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,r){return ue([We.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Ia(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=>We.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<We.VERSION_PROJECT.length;l++)a.push(...s.map(m=>We.getPdaOwnerId(t,m,r,l).publicKey));let u=await ft(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!==We.POOL_LAYOUT.span||b.data.length!==We.OWNER_LAYOUT.span)continue;let g=We.POOL_LAYOUT.decode(f.data),h=We.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),T=g.endTime.toNumber(),k=h.tokenInfo.map(x=>x.debtAmount.gt(new Ia(0))).filter(x=>!x).length!==3,I=o>A&&o<T&&g.status===1,B=k&&I;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:h.lpAmount,project:We.VERSION_PROJECT[m],openTime:A,endTime:T,canClaim:B,canClaimErrorType:k?I?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((x,C)=>({mintAddress:x.mintAddress,mintVault:x.mintVault,mintDecimals:x.mintDecimals,perLpLoss:x.perLpLoss,debtAmount:h.tokenInfo[C].debtAmount.add(h.tokenInfo[C].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(Ae.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!u.mintAddress.equals(Ae.WSOL.mint),associatedOnly:u.mintAddress.equals(Ae.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(c)}n.addInstruction({instructions:[We.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(Ae.WSOL.mint),createInfo:{payer:r,amount:0},skipCloseAccount:!m.mintAddress.equals(Ae.WSOL.mint),associatedOnly:m.mintAddress.equals(Ae.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[We.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 li(u,[r,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ro().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ro().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ro().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let r=N([]),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:$l,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 em({keys:o,programId:e,data:a})}},et=We;et.CLAIMED_NUM=3,et.POOL_LAYOUT=N([fe(8),F("bump"),F("status"),w("openTime"),w("endTime"),S("ammId"),q(N([F("mintDecimals"),S("mintAddress"),S("mintVault"),w("perLpLoss"),w("totalClaimedAmount")]),We.CLAIMED_NUM,"tokenInfo"),q(w(),10,"padding")]),et.OWNER_LAYOUT=N([fe(8),F("bump"),F("version"),S("poolId"),S("owner"),w("lpAmount"),q(N([S("mintAddress"),w("debtAmount"),w("claimedAmount")]),We.CLAIMED_NUM,"tokenInfo"),q(w(),4,"padding")]),et.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Jl(e)),et.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},et.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as oo}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ca}from"@solana/spl-token";import Qn from"bn.js";import{TransactionInstruction as nm,SYSVAR_RENT_PUBKEY as rm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as xa}from"@solana/spl-token";import{createInitializeAccountInstruction as Ba}from"@solana/spl-token";import{SystemProgram as en,Transaction as Sa}from"@solana/web3.js";function tm(i="accountFlags"){let e=new xr(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 io=N([fe(5),tm("accountFlags"),S("ownAddress"),w("vaultSignerNonce"),S("baseMint"),S("quoteMint"),S("baseVault"),w("baseDepositsTotal"),w("baseFeesAccrued"),S("quoteVault"),w("quoteDepositsTotal"),w("quoteFeesAccrued"),w("quoteDustThreshold"),S("requestQueue"),S("eventQueue"),S("bids"),S("asks"),w("baseLotSize"),w("quoteLotSize"),w("feeRateBps"),w("referrerRebatesAccrued"),fe(7)]);function im({programId:i,marketInfo:e}){let t=N([F("version"),Ge("instruction"),w("baseLotSize"),w("quoteLotSize"),yt("feeRateBps"),w("vaultSignerNonce"),w("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:rm,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 nm({keys:n,programId:i,data:r})}async function Ka({connection:i,wallet:e,marketInfo:t}){let n=new Sa,r=await i.getMinimumBalanceForRentExemption(165);n.add(en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:r,space:165,programId:xa}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:r,space:165,programId:xa}),Ba(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Ba(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let o=new Sa;return o.add(en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await i.getMinimumBalanceForRentExemption(io.span),space:io.span,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption(5120+12),space:5120+12,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await i.getMinimumBalanceForRentExemption(262144+12),space:262144+12,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await i.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),en.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await i.getMinimumBalanceForRentExemption(65536+12),space:65536+12,programId:t.programId}),im({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:[M.CreateAccount,M.CreateAccount,M.InitAccount,M.InitAccount]},{transaction:o,signer:[],instructionTypes:[M.CreateAccount,M.CreateAccount,M.CreateAccount,M.CreateAccount,M.CreateAccount,M.InitMarket]}]}var dn=class extends he{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:r,dexProgramId:o,txVersion:s,computeBudgetConfig:a}){let u=this.scope.ownerPubKey,c=Ve({fromPublicKey:u,programId:o}),l=Ve({fromPublicKey:u,programId:o}),m=Ve({fromPublicKey:u,programId:o}),d=Ve({fromPublicKey:u,programId:o}),p=Ve({fromPublicKey:u,programId:o}),y=Ve({fromPublicKey:u,programId:Ca}),f=Ve({fromPublicKey:u,programId:Ca}),b=0,g=new Qn(100);function h(){let _=new Qn(0);for(;;)try{return{vaultOwner:oo.createProgramAddressSync([c.publicKey.toBuffer(),_.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:_}}catch{if(_.iaddn(1),_.gt(new Qn(25555)))throw Error("find vault owner error")}}let{vaultOwner:A,vaultSignerNonce:T}=h(),k=new Qn(Math.round(10**e.decimals*n)),I=new Qn(Math.round(n*10**t.decimals*r));if(k.eq(qe))throw Error("lot size is too small");if(I.eq(qe))throw Error("tick size or lot size is too small");let B=await Ka({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:c,baseMint:e.mint,quoteMint:t.mint,baseVault:y,quoteVault:f,vaultOwner:A,requestQueue:l,eventQueue:m,bids:d,asks:p,feeRateBps:b,quoteDustThreshold:g,vaultSignerNonce:T,baseLotSize:k,quoteLotSize:I}}),x=this.createTxBuilder();x.addCustomComputeBudget(a),x.addInstruction({instructions:B[0].transaction.instructions,signers:B[0].signer});let C=[];for await(let _ of B.slice(1,B.length)){let V=this.createTxBuilder();V.addCustomComputeBudget(a),V.addInstruction({instructions:_.transaction.instructions,signers:_.signer,instructionTypes:_.instructionTypes});let H=await V.versionBuild({txVersion:s});C.push(H)}return x.versionMultiBuild({extraPreBuildData:C,extInfo:{address:{marketId:c.publicKey,requestQueue:l.publicKey,eventQueue:m.publicKey,bids:d.publicKey,asks:p.publicKey,baseVault:y.publicKey,quoteVault:f.publicKey,baseMint:new oo(e.mint),quoteMin:new oo(t.mint)}},txVersion:s})}};import{PublicKey as $n}from"@solana/web3.js";import{PublicKey as WT,TransactionInstruction as La,SYSVAR_CLOCK_PUBKEY as sm}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ra}from"@solana/spl-token";var om=N([F("instruction"),ts("amount")]),Zn=N([F("instruction")]);function Ur({programId:i},e){let t=[{pubkey:Ra,isSigner:!1,isWritable:!1},{pubkey:No,isSigner:!1,isWritable:!1},...Object.entries(e).map(([r,o])=>({pubkey:o,isSigner:r==="userOwner",isWritable:!["authority","userOwner"].includes(r)}))],n=Buffer.alloc(Zn.span);return Zn.encode({instruction:2},n),new La({keys:t,programId:i,data:n})}function so(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(Zn.span);Zn.encode({instruction:2},s);let a=[{pubkey:Ra,isWritable:!1,isSigner:!1},{pubkey:sm,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 La({programId:e.programId,keys:a,data:s})}import Oa from"bn.js";var am={[Sn.IDO_PROGRAM_ID_V1.toString()]:1,[Sn.IDO_PROGRAM_ID_V2.toString()]:2,[Sn.IDO_PROGRAM_ID_V3.toString()]:3,[Sn.IDO_PROGRAM_ID_V4.toString()]:4},pn=class extends he{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:r=!1,txVersion:o}){let s=this.createTxBuilder(),a=am[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ue(t),[c,l]=[!new Oa(e.coin).isZero(),!new Oa(e.pc).isZero()],m=u.projectInfo.mint.address.equals($),{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($),{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?[Ur({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new $n(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[Ur({programId:new $n(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new $n(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[Ur({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new $n(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 $n(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[so(W(O({},g),{side:"base"}))]:[],...l?[so(W(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as um}from"@solana/web3.js";import{MintLayout as cm,TOKEN_2022_PROGRAM_ID as ao,TOKEN_PROGRAM_ID as uo}from"@solana/spl-token";var Jn=class extends he{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._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:r="strict"}=t||{},{mintList:o,blacklist:s}=await this.scope.fetchV3TokenList(n),a=await this.scope.fetchJupTokenList(r,n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._tokenMap.set(Nt.address,Nt),this._mintGroup.official.add(Nt.address),s.forEach(u=>{this._blackTokenMap.set(u.address,W(O({},u),{priority:-1}))}),o.forEach(u=>{var c;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"raydium",priority:2,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?ao.toBase58():uo.toBase58()})),this._mintGroup.official.add(u.address))}),a.forEach(u=>{var c;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"jupiter",priority:1,programId:(c=u.programId)!=null?c:u.tags.includes("token-2022")?ao.toBase58():uo.toBase58()})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?ao.toBase58():uo.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}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 Nt;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,W(O({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new um(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=cm.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 Gr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:r,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u}=e;this._connection=t,this.cluster=n,this._owner=r?new ot(r):void 0,this._signAllTransactions=e.signAllTransactions,this.api=o,this._apiCacheTime=u||5*60*1e3,this.logger=oe("Raydium"),this.farm=new En({scope:this,moduleName:"Raydium_Farm"}),this.account=new Rn({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Gn({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Jn({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Hn({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Xn({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new jn({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new et({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new dn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new pn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let c=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:c,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){let t=lm({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:r,logCount:o,logRequests:s,urlConfigs:a}=t,u=new kr({cluster:n,timeout:r,urlConfigs:a,logCount:o,logRequests:s}),c=new Gr(W(O({},t),{api:u}));return await c.fetchAvailabilityStatus(e.disableFeatureCheck),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Tr);return this._owner.publicKey}setOwner(e){return this._owner=e?new ot(e):void 0,this}get connection(){if(!this._connection)throw new Error($o);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(Tr),new Error(Tr)}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;let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}async fetchJupTokenList(e,t){var o;let n=(o=this.apiData.jupTokenList)==null?void 0:o[e];if(n&&!this.isCacheInvalidate(n.fetched)&&!t)return n.data;let r=await this.api.getJupTokenList(e);return this.apiData.jupTokenList=W(O({},this.apiData.jupTokenList),{[e]:{fetched:Date.now(),data:r}}),this.apiData.jupTokenList[e].data}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{Gr as Raydium};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=raydium.mjs.map