@raydium-io/raydium-sdk-v2 0.1.73-alpha → 0.1.74-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 (106) 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/constant.d.ts +1 -1
  7. package/lib/common/fractionUtil.d.ts +1 -1
  8. package/lib/common/index.d.ts +1 -1
  9. package/lib/common/transfer.d.ts +1 -1
  10. package/lib/common/txTool/txTool.d.ts +1 -1
  11. package/lib/common/txTool/txUtils.d.ts +1 -1
  12. package/lib/common/utility.d.ts +1 -1
  13. package/lib/index.d.ts +3 -3
  14. package/lib/index.js +1 -1
  15. package/lib/index.js.map +1 -1
  16. package/lib/index.mjs +1 -1
  17. package/lib/index.mjs.map +1 -1
  18. package/lib/module/amount.d.ts +1 -1
  19. package/lib/module/fraction.d.ts +1 -1
  20. package/lib/module/index.d.ts +1 -1
  21. package/lib/module/percent.d.ts +1 -1
  22. package/lib/module/price.d.ts +1 -1
  23. package/lib/raydium/account/account.d.ts +3 -3
  24. package/lib/raydium/account/index.d.ts +1 -1
  25. package/lib/raydium/account/instruction.d.ts +1 -1
  26. package/lib/raydium/account/types.d.ts +1 -1
  27. package/lib/raydium/account/util.d.ts +1 -1
  28. package/lib/raydium/clmm/clmm.d.ts +3 -3
  29. package/lib/raydium/clmm/index.d.ts +3 -3
  30. package/lib/raydium/clmm/instrument.d.ts +2 -2
  31. package/lib/raydium/clmm/layout.d.ts +1 -1
  32. package/lib/raydium/clmm/type.d.ts +2 -2
  33. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  34. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  35. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  36. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  37. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  38. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  39. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  40. package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
  41. package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
  42. package/lib/raydium/cpmm/index.d.ts +1 -1
  43. package/lib/raydium/cpmm/instruction.d.ts +1 -1
  44. package/lib/raydium/cpmm/layout.d.ts +1 -1
  45. package/lib/raydium/cpmm/type.d.ts +1 -1
  46. package/lib/raydium/farm/config.d.ts +1 -1
  47. package/lib/raydium/farm/farm.d.ts +3 -3
  48. package/lib/raydium/farm/index.d.ts +1 -1
  49. package/lib/raydium/farm/instruction.d.ts +1 -1
  50. package/lib/raydium/farm/layout.d.ts +1 -1
  51. package/lib/raydium/farm/type.d.ts +1 -1
  52. package/lib/raydium/farm/util.d.ts +1 -1
  53. package/lib/raydium/ido/ido.d.ts +3 -3
  54. package/lib/raydium/ido/index.d.ts +3 -3
  55. package/lib/raydium/ido/instruction.d.ts +1 -1
  56. package/lib/raydium/ido/type.d.ts +1 -1
  57. package/lib/raydium/index.d.ts +3 -3
  58. package/lib/raydium/index.js +1 -1
  59. package/lib/raydium/index.js.map +1 -1
  60. package/lib/raydium/index.mjs +1 -1
  61. package/lib/raydium/index.mjs.map +1 -1
  62. package/lib/raydium/liquidity/index.d.ts +1 -1
  63. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  64. package/lib/raydium/liquidity/layout.d.ts +6 -6
  65. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  66. package/lib/raydium/liquidity/type.d.ts +1 -1
  67. package/lib/raydium/liquidity/utils.d.ts +1 -1
  68. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  69. package/lib/raydium/marketV2/createMarket.js +1 -1
  70. package/lib/raydium/marketV2/createMarket.js.map +1 -1
  71. package/lib/raydium/marketV2/createMarket.mjs +1 -1
  72. package/lib/raydium/marketV2/createMarket.mjs.map +1 -1
  73. package/lib/raydium/marketV2/index.d.ts +3 -3
  74. package/lib/raydium/marketV2/index.js +1 -1
  75. package/lib/raydium/marketV2/index.js.map +1 -1
  76. package/lib/raydium/marketV2/index.mjs +1 -1
  77. package/lib/raydium/marketV2/index.mjs.map +1 -1
  78. package/lib/raydium/marketV2/instrument.d.ts +1 -0
  79. package/lib/raydium/marketV2/instrument.js +1 -1
  80. package/lib/raydium/marketV2/instrument.js.map +1 -1
  81. package/lib/raydium/marketV2/instrument.mjs +1 -1
  82. package/lib/raydium/marketV2/instrument.mjs.map +1 -1
  83. package/lib/raydium/moduleBase.d.ts +3 -3
  84. package/lib/raydium/raydium.d.ts +3 -3
  85. package/lib/raydium/raydium.js +1 -1
  86. package/lib/raydium/raydium.js.map +1 -1
  87. package/lib/raydium/raydium.mjs +1 -1
  88. package/lib/raydium/raydium.mjs.map +1 -1
  89. package/lib/raydium/token/constant.d.ts +1 -1
  90. package/lib/raydium/token/index.d.ts +1 -1
  91. package/lib/raydium/token/token.d.ts +3 -3
  92. package/lib/raydium/token/type.d.ts +1 -1
  93. package/lib/raydium/token/utils.d.ts +1 -1
  94. package/lib/raydium/tradeV2/index.d.ts +2 -2
  95. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  96. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  97. package/lib/raydium/tradeV2/type.d.ts +2 -2
  98. package/lib/raydium/type.d.ts +1 -1
  99. package/lib/raydium/utils1216/index.d.ts +3 -3
  100. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  101. package/lib/{raydium-94d49791.d.ts → raydium-87764c35.d.ts} +5 -4
  102. package/lib/{type-11af28b1.d.ts → type-91ebce1b.d.ts} +1 -1
  103. package/package.json +1 -1
  104. package/src/raydium/marketV2/createMarket.ts +4 -0
  105. package/src/raydium/marketV2/instrument.ts +14 -4
  106. package/lib/{api-f6d3edc7.d.ts → api-fd862469.d.ts} +5 -5
@@ -1,3 +1,3 @@
1
- var Yu=Object.defineProperty,ju=Object.defineProperties;var Hu=Object.getOwnPropertyDescriptors;var Vi=Object.getOwnPropertySymbols;var As=Object.prototype.hasOwnProperty,Ps=Object.prototype.propertyIsEnumerable;var ws=(o,e,t)=>e in o?Yu(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,R=(o,e)=>{for(var t in e||(e={}))As.call(e,t)&&ws(o,t,e[t]);if(Vi)for(var t of Vi(e))Ps.call(e,t)&&ws(o,t,e[t]);return o},F=(o,e)=>ju(o,Hu(e));var Re=(o,e)=>{var t={};for(var n in o)As.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Vi)for(var n of Vi(o))e.indexOf(n)<0&&Ps.call(o,n)&&(t[n]=o[n]);return t};import{merge as Ud}from"lodash";import ra from"axios";import{PublicKey as Ts}from"@solana/web3.js";import{get as ks,set as Zu}from"lodash";var jo=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},hs={},$u={};function ae(o){let e=ks(hs,o);if(!e){let t=ks($u,o);e=new jo({name:o,logLevel:t}),Zu(hs,o,e)}return e}import{MINT_SIZE as Ju,TOKEN_PROGRAM_ID as ec,getTransferFeeConfig as tc,unpackMint as nc}from"@solana/spl-token";var Ho=ae("Raydium_accountInfo_util");async function Pt(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:r=100}=R({batchRequest:!1},t),s=Zo(e,r),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Zo(u,10);a=(await(await Promise.all(c.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Ho.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Ho.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ts(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>o.getMultipleAccountsInfo(u,i)))}catch(u){u instanceof Error&&Ho.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ee(o,e,t){let n=await Pt(o,e.map(i=>i.pubkey),t);return e.map((i,r)=>F(R({},i),{accountInfo:n[r]}))}async function xn({connection:o,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await Ee(o,e.map(u=>({pubkey:st(u)})),t),i={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<Ju){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=nc(u.pubkey,u.accountInfo,(r=u.accountInfo)==null?void 0:r.owner);i[u.pubkey.toString()]=F(R({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||ec,feeConfig:(a=tc(c))!=null?a:void 0})}return i[Ts.default.toBase58()]=i[j.toBase58()],i}import Dt from"bn.js";var Sn=9e15,$t=1e9,$o="0123456789abcdef",Fi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Di="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Jo={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Sn,maxE:Sn,crypto:!1},Ss,Et,oe=!0,qi="[DecimalError] ",Zt=qi+"Invalid argument: ",Ks=qi+"Precision limit exceeded",Cs=qi+"crypto unavailable",Rs="[object Decimal]",ze=Math.floor,Ne=Math.pow,ic=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,oc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,rc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ls=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ht=1e7,ee=7,sc=9007199254740991,ac=Fi.length-1,er=Di.length-1,v={toStringTag:Rs};v.absoluteValue=v.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),$(o)};v.ceil=function(){return $(new this.constructor(this),this.e+1,2)};v.clampedTo=v.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(Zt+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};v.comparedTo=v.cmp=function(o){var e,t,n,i,r=this,s=r.d,a=(o=new r.constructor(o)).d,u=r.s,c=o.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(r.e!==o.e)return r.e>o.e^u<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};v.cosine=v.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ee,n.rounding=1,t=uc(n,vs(n,t)),n.precision=o,n.rounding=e,$(Et==2||Et==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};v.cubeRoot=v.cbrt=function(){var o,e,t,n,i,r,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,r=l.s*Ne(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=qe(l.d),o=l.e,(r=(o-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=Ne(t,1/3),o=ze((o+1)/3)-(o%3==(o<0?-1:2)),r==1/0?t="5e"+o:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(o=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=Pe(c.plus(l).times(a),c.plus(u),s+2,1),qe(a.d).slice(0,s)===(t=qe(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&($(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&($(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,$(n,o,m.rounding,e)};v.decimalPlaces=v.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-ze(this.e/ee))*ee,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};v.dividedBy=v.div=function(o){return Pe(this,new this.constructor(o))};v.dividedToIntegerBy=v.divToInt=function(o){var e=this,t=e.constructor;return $(Pe(e,new t(o),0,1,1),t.precision,t.rounding)};v.equals=v.eq=function(o){return this.cmp(o)===0};v.floor=function(){return $(new this.constructor(this),this.e+1,3)};v.greaterThan=v.gt=function(o){return this.cmp(o)>0};v.greaterThanOrEqualTo=v.gte=function(o){var e=this.cmp(o);return e==1||e===0};v.hyperbolicCosine=v.cosh=function(){var o,e,t,n,i,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,i=r.d.length,i<32?(o=Math.ceil(i/3),e=(1/Gi(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),r=Kn(s,1,r.times(e),new s(1),!0);for(var u,c=o,l=new s(8);c--;)u=r.times(r),r=a.minus(u.times(l.minus(u.times(l))));return $(r,s.precision=t,s.rounding=n,!0)};v.hyperbolicSine=v.sinh=function(){var o,e,t,n,i=this,r=i.constructor;if(!i.isFinite()||i.isZero())return new r(i);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(i.e,i.sd())+4,r.rounding=1,n=i.d.length,n<3)i=Kn(r,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/Gi(5,o)),i=Kn(r,2,i,i,!0);for(var s,a=new r(5),u=new r(16),c=new r(20);o--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(c))))}return r.precision=e,r.rounding=t,$(i,e,t,!0)};v.hyperbolicTangent=v.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,Pe(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};v.inverseCosine=v.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?kt(t,i,r):new t(0):new t(NaN):e.isZero()?kt(t,i+4,r).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=kt(t,i+4,r).times(.5),t.precision=i,t.rounding=r,o.minus(e))};v.inverseHyperbolicCosine=v.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};v.inverseHyperbolicSine=v.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};v.inverseHyperbolicTangent=v.atanh=function(){var o,e,t,n,i=this,r=i.constructor;return i.isFinite()?i.e>=0?new r(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=r.precision,e=r.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?$(new r(i),o,e,!0):(r.precision=t=n-i.e,i=Pe(i.plus(1),new r(1).minus(i),t+o,1),r.precision=o+4,r.rounding=1,i=i.ln(),r.precision=o,r.rounding=e,i.times(.5))):new r(NaN)};v.inverseSine=v.asin=function(){var o,e,t,n,i=this,r=i.constructor;return i.isZero()?new r(i):(e=i.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(o=kt(r,t+4,n).times(.5),o.s=i.s,o):new r(NaN):(r.precision=t+6,r.rounding=1,i=i.div(new r(1).minus(i.times(i)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,i.times(2)))};v.inverseTangent=v.atan=function(){var o,e,t,n,i,r,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<=er)return s=kt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=er)return s=kt(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/ee+2|0),o=t;o;--o)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/ee),n=1,u=c.times(c),s=new l(c),i=c;o!==-1;)if(i=i.times(u),r=s.minus(i.div(n+=2)),i=i.times(u),s=r.plus(i.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===r.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,$(s,l.precision=m,l.rounding=d,!0)};v.isFinite=function(){return!!this.d};v.isInteger=v.isInt=function(){return!!this.d&&ze(this.e/ee)>this.d.length-2};v.isNaN=function(){return!this.s};v.isNegative=v.isNeg=function(){return this.s<0};v.isPositive=v.isPos=function(){return this.s>0};v.isZero=function(){return!!this.d&&this.d[0]===0};v.lessThan=v.lt=function(o){return this.cmp(o)<0};v.lessThanOrEqualTo=v.lte=function(o){return this.cmp(o)<1};v.logarithm=v.log=function(o){var e,t,n,i,r,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.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)r=!0;else{for(i=t[0];i%10===0;)i/=10;r=i!==1}if(oe=!1,a=m+p,s=Ht(c,a),n=e?Wi(l,a+10):Ht(o,a),u=Pe(s,n,a,1),qn(u.d,i=m,d))do if(a+=10,s=Ht(c,a),n=e?Wi(l,a+10):Ht(o,a),u=Pe(s,n,a,1),!r){+qe(u.d).slice(i+1,i+15)+1==1e14&&(u=$(u,m+1,0));break}while(qn(u.d,i+=10,d));return oe=!0,$(u,m,d)};v.minus=v.sub=function(o){var e,t,n,i,r,s,a,u,c,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(c=p.d,d=o.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])o.s=-o.s;else if(c[0])o=new y(p);else return new y(u===3?-0:0);return oe?$(o,a,u):o}if(t=ze(o.e/ee),l=ze(p.e/ee),c=c.slice(),r=l-t,r){for(m=r<0,m?(e=c,r=-r,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/ee),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;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}r=0}for(m&&(e=c,c=d,d=e,o.s=-o.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>r;){if(c[--n]<d[n]){for(i=n;i&&c[--i]===0;)c[i]=ht-1;--c[i],c[n]+=ht}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(o.d=c,o.e=Ui(c,t),oe?$(o,a,u):o):new y(u===3?-0:0)};v.modulo=v.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=Pe(t,o.abs(),0,3,1),e.s*=o.s):e=Pe(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};v.naturalExponential=v.exp=function(){return tr(this)};v.naturalLogarithm=v.ln=function(){return Ht(this)};v.negated=v.neg=function(){var o=new this.constructor(this);return o.s=-o.s,$(o)};v.plus=v.add=function(o){var e,t,n,i,r,s,a,u,c,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(c=m.d,l=o.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(o=new d(m)),oe?$(o,a,u):o;if(r=ze(m.e/ee),n=ze(o.e/ee),c=c.slice(),i=r-n,i){for(i<0?(t=c,i=-i,s=l.length):(t=l,n=r,s=c.length),r=Math.ceil(a/ee),s=r>s?r+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=c.length,i=l.length,s-i<0&&(i=s,t=l,l=c,c=t),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/ht|0,c[i]%=ht;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return o.d=c,o.e=Ui(c,n),oe?$(o,a,u):o};v.precision=v.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Zt+o);return t.d?(e=Os(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};v.round=function(){var o=this,e=o.constructor;return $(new e(o),o.e+1,e.rounding)};v.sine=v.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ee,n.rounding=1,t=lc(n,vs(n,t)),n.precision=o,n.rounding=e,$(Et>2?t.neg():t,o,e,!0)):new n(NaN)};v.squareRoot=v.sqrt=function(){var o,e,t,n,i,r,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(oe=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=qe(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=ze((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(r=n,n=r.plus(Pe(s,r,t+2,1)).times(.5),qe(r.d).slice(0,t)===(e=qe(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&($(r,u+1,0),r.times(r).eq(s))){n=r;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,u+1,1),o=!n.times(n).eq(s));break}return oe=!0,$(n,u,l.rounding,o)};v.tangent=v.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=Pe(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,$(Et==2||Et==4?t.neg():t,o,e,!0)):new n(NaN)};v.times=v.mul=function(o){var e,t,n,i,r,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=ze(l.e/ee)+ze(o.e/ee),u=d.length,c=p.length,u<c&&(r=d,d=p,p=r,s=u,u=c,c=s),r=[],s=u+c,n=s;n--;)r.push(0);for(n=c;--n>=0;){for(e=0,i=u+n;i>n;)a=r[i]+p[n]*d[i-n-1]+e,r[i--]=a%ht|0,e=a/ht|0;r[i]=(r[i]+e)%ht|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),o.d=r,o.e=Ui(r,t),oe?$(o,m.precision,m.rounding):o};v.toBinary=function(o,e){return ir(this,2,o,e)};v.toDecimalPlaces=v.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(tt(o,0,$t),e===void 0?e=n.rounding:tt(e,0,8),$(t,o+t.e+1,e))};v.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Nt(n,!0):(tt(o,0,$t),e===void 0?e=i.rounding:tt(e,0,8),n=$(new i(n),o+1,e),t=Nt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toFixed=function(o,e){var t,n,i=this,r=i.constructor;return o===void 0?t=Nt(i):(tt(o,0,$t),e===void 0?e=r.rounding:tt(e,0,8),n=$(new r(i),o+i.e+1,e),t=Nt(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};v.toFraction=function(o){var e,t,n,i,r,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),r=e.e=Os(y)-p.e-1,s=r%ee,e.d[0]=Ne(10,s<0?ee+s:s),o==null)o=r>0?e:c;else{if(a=new f(o),!a.isInt()||a.lt(c))throw Error(Zt+a);o=a.gt(e)?r>0?e:c:a}for(oe=!1,a=new f(qe(y)),l=f.precision,f.precision=r=y.length*ee*2;m=Pe(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(o)!=1;)t=n,n=i,i=c,c=u.plus(m.times(i)),u=i,i=e,e=a.minus(m.times(i)),a=i;return i=Pe(o.minus(t),n,0,1,1),u=u.plus(i.times(c)),t=t.plus(i.times(n)),u.s=c.s=p.s,d=Pe(c,n,r,1).minus(p).abs().cmp(Pe(u,t,r,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,oe=!0,d};v.toHexadecimal=v.toHex=function(o,e){return ir(this,16,o,e)};v.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:tt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(oe=!1,t=Pe(t,o,0,e,1).times(o),oe=!0,$(t)):(o.s=t.s,t=o),t};v.toNumber=function(){return+this};v.toOctal=function(o,e){return ir(this,8,o,e)};v.toPower=v.pow=function(o){var e,t,n,i,r,s,a=this,u=a.constructor,c=+(o=new u(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new u(Ne(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,r=u.rounding,o.eq(1))return $(a,n,r);if(e=ze(o.e/ee),e>=o.d.length-1&&(t=c<0?-c:c)<=sc)return i=Ns(u,a,t,n),o.s<0?new u(1).div(i):$(i,n,r);if(s=a.s,s<0){if(e<o.d.length-1)return new u(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ne(+a,c),e=t==0||!isFinite(t)?ze(c*(Math.log("0."+qe(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):(oe=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),i=tr(o.times(Ht(a,n+t)),n),i.d&&(i=$(i,n+5,1),qn(i.d,n,r)&&(e=n+10,i=$(tr(o.times(Ht(a,e+t)),e),e+5,1),+qe(i.d).slice(n+1,n+15)+1==1e14&&(i=$(i,n+1,0)))),i.s=s,oe=!0,u.rounding=r,$(i,n,r))};v.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Nt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(tt(o,1,$t),e===void 0?e=i.rounding:tt(e,0,8),n=$(new i(n),o,e),t=Nt(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toSignificantDigits=v.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(tt(o,1,$t),e===void 0?e=n.rounding:tt(e,0,8)),$(new n(t),o,e)};v.toString=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};v.truncated=v.trunc=function(){return $(new this.constructor(this),this.e+1,1)};v.valueOf=v.toJSON=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function qe(o){var e,t,n,i=o.length-1,r="",s=o[0];if(i>0){for(r+=s,e=1;e<i;e++)n=o[e]+"",t=ee-n.length,t&&(r+=jt(t)),r+=n;s=o[e],n=s+"",t=ee-n.length,t&&(r+=jt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function tt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Zt+o)}function qn(o,e,t,n){var i,r,s,a;for(r=o[0];r>=10;r/=10)--e;return--e<0?(e+=ee,i=0):(i=Math.ceil((e+1)/ee),e%=ee),r=Ne(10,ee-e),a=o[i]%r|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==r||t>3&&a+1==r/2)&&(o[i+1]/r/100|0)==Ne(10,e-2)-1||(a==r/2||a==0)&&(o[i+1]/r/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==r||!n&&t>3&&a+1==r/2)&&(o[i+1]/r/1e3|0)==Ne(10,e-3)-1,s}function Ei(o,e,t){for(var n,i=[0],r,s=0,a=o.length;s<a;){for(r=i.length;r--;)i[r]*=e;for(i[0]+=$o.indexOf(o.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function uc(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Gi(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=Kn(o,1,e.times(i),new o(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var Pe=function(){function o(n,i,r){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,i,r,s){var a,u;if(r!=s)u=r>s?1:-1;else for(a=u=0;a<r;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function t(n,i,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<i[r]?1:0,n[r]=a*s+n[r]-i[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,r,s,a,u){var c,l,m,d,p,y,f,b,g,w,A,k,B,h,S,I,C,x,L,D,N=n.constructor,H=n.s==i.s?1:-1,X=n.d,W=i.d;if(!X||!X[0]||!W||!W[0])return new N(!n.s||!i.s||(X?W&&X[0]==W[0]:!W)?NaN:X&&X[0]==0||!W?H*0:H/0);for(u?(p=1,l=n.e-i.e):(u=ht,p=ee,l=ze(n.e/p)-ze(i.e/p)),L=W.length,C=X.length,g=new N(H),w=g.d=[],m=0;W[m]==(X[m]||0);m++);if(W[m]>(X[m]||0)&&l--,r==null?(h=r=N.precision,s=N.rounding):a?h=r+(n.e-i.e)+1:h=r,h<0)w.push(1),y=!0;else{if(h=h/p+2|0,m=0,L==1){for(d=0,W=W[0],h++;(m<C||d)&&h--;m++)S=d*u+(X[m]||0),w[m]=S/W|0,d=S%W|0;y=d||m<C}else{for(d=u/(W[0]+1)|0,d>1&&(W=o(W,d,u),X=o(X,d,u),L=W.length,C=X.length),I=L,A=X.slice(0,L),k=A.length;k<L;)A[k++]=0;D=W.slice(),D.unshift(0),x=W[0],W[1]>=u/2&&++x;do d=0,c=e(W,A,L,k),c<0?(B=A[0],L!=k&&(B=B*u+(A[1]||0)),d=B/x|0,d>1?(d>=u&&(d=u-1),f=o(W,d,u),b=f.length,k=A.length,c=e(f,A,b,k),c==1&&(d--,t(f,L<b?D:W,b,u))):(d==0&&(c=d=1),f=W.slice()),b=f.length,b<k&&f.unshift(0),t(A,f,k,u),c==-1&&(k=A.length,c=e(W,A,L,k),c<1&&(d++,t(A,L<k?D:W,k,u))),k=A.length):c===0&&(d++,A=[0]),w[m++]=d,c&&A[0]?A[k++]=X[I]||0:(A=[X[I]],k=1);while((I++<C||A[0]!==void 0)&&h--);y=A[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,Ss=y;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,$(g,a?r+g.e+1:r,s,y)}return g}}();function $(o,e,t,n){var i,r,s,a,u,c,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(i=1,a=m[0];a>=10;a/=10)i++;if(r=e-i,r<0)r+=ee,s=e,l=m[d=0],u=l/Ne(10,i-s-1)%10|0;else if(d=Math.ceil((r+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,i=1,r%=ee,s=r-ee+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;r%=ee,s=r-ee+i,u=s<0?0:l/Ne(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ne(10,i-s-1)),c=t<4?(u||n)&&(t==0||t==(o.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(r>0?s>0?l/Ne(10,i-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=o.e+1,m[0]=Ne(10,(ee-e%ee)%ee),o.e=-e||0):m[0]=o.e=0,o;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ne(10,ee-r),m[d]=s>0?(l/Ne(10,i-s)%Ne(10,s)|0)*a:0),c)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(o.e++,m[0]==ht&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=ht)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Nt(o,e,t){if(!o.isFinite())return _s(o);var n,i=o.e,r=qe(o.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+jt(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(o.e<0?"e":"e+")+o.e):i<0?(r="0."+jt(-i-1)+r,t&&(n=t-s)>0&&(r+=jt(n))):i>=s?(r+=jt(i+1-s),t&&(n=t-i-1)>0&&(r=r+"."+jt(n))):((n=i+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(r+="."),r+=jt(n))),r}function Ui(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function Wi(o,e,t){if(e>ac)throw oe=!0,t&&(o.precision=t),Error(Ks);return $(new o(Fi),e,1,!0)}function kt(o,e,t){if(e>er)throw Error(Ks);return $(new o(Di),e,t,!0)}function Os(o){var e=o.length-1,t=e*ee+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function jt(o){for(var e="";o--;)e+="0";return e}function Ns(o,e,t,n){var i,r=new o(1),s=Math.ceil(n/ee+4);for(oe=!1;;){if(t%2&&(r=r.times(e),Bs(r.d,s)&&(i=!0)),t=ze(t/2),t===0){t=r.d.length-1,i&&r.d[t]===0&&++r.d[t];break}e=e.times(e),Bs(e.d,s)}return oe=!0,r}function Is(o){return o.d[o.d.length-1]&1}function Ms(o,e,t){for(var n,i=new o(e[0]),r=0;++r<e.length;)if(n=new o(e[r]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function tr(o,e){var t,n,i,r,s,a,u,c=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(oe=!1,u=y):u=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Ne(2,m))/Math.LN10*2+5|0,u+=n,t=r=s=new d(1),d.precision=u;;){if(r=$(r.times(o),u,1),t=t.times(++l),a=s.plus(Pe(r,t,u,1)),qe(a.d).slice(0,u)===qe(s.d).slice(0,u)){for(i=m;i--;)s=$(s.times(s),u,1);if(e==null)if(c<3&&qn(s.d,u-n,p,c))d.precision=u+=10,t=r=a=new d(1),l=0,c++;else return $(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Ht(o,e){var t,n,i,r,s,a,u,c,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,w=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?(oe=!1,l=A):l=e,g.precision=l+=y,t=qe(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=qe(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return c=Wi(g,l+2,A).times(r+""),f=Ht(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=A,e==null?$(f,A,w,oe=!0):f;for(m=f,u=s=f=Pe(f.minus(1),f.plus(1),l,1),d=$(f.times(f),l,1),i=3;;){if(s=$(s.times(d),l,1),c=u.plus(Pe(s,new g(i),l,1)),qe(c.d).slice(0,l)===qe(u.d).slice(0,l))if(u=u.times(2),r!==0&&(u=u.plus(Wi(g,l+2,A).times(r+""))),u=Pe(u,new g(p),l,1),e==null)if(qn(u.d,l-y,w,a))g.precision=l+=y,c=s=f=Pe(m.minus(1),m.plus(1),l,1),d=$(f.times(f),l,1),i=a=1;else return $(u,g.precision=A,w,oe=!0);else return g.precision=A,u;u=c,i+=2}}function _s(o){return String(o.s*o.s/0)}function nr(o,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ee;n<i;)o.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),oe&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function cc(o,e){var t,n,i,r,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ls.test(e))return nr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(oc.test(e))t=16,e=e.toLowerCase();else if(ic.test(e))t=2;else if(rc.test(e))t=8;else throw Error(Zt+e);for(r=e.search(/p/i),r>0?(u=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,i=Ns(n,new n(t),r,r*2)),c=Ei(e,t,ht),l=c.length-1,r=l;c[r]===0;--r)c.pop();return r<0?new n(o.s*0):(o.e=Ui(c,l),o.d=c,oe=!1,s&&(o=Pe(o,i,a*4)),u&&(o=o.times(Math.abs(u)<54?Ne(2,u):Un.pow(2,u))),oe=!0,o)}function lc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Kn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Gi(5,t)),e=Kn(o,2,e,e);for(var i,r=new o(5),s=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(r.plus(i.times(s.times(i).minus(a))));return e}function Kn(o,e,t,n,i){var r,s,a,u,c=1,l=o.precision,m=Math.ceil(l/ee);for(oe=!1,u=t.times(t),a=new o(n);;){if(s=Pe(a.times(u),new o(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Pe(s.times(u),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,c++}return oe=!0,s.d.length=m+1,s}function Gi(o,e){for(var t=o;--e;)t*=o;return t}function vs(o,e){var t,n=e.s<0,i=kt(o,o.precision,1),r=i.times(.5);if(e=e.abs(),e.lte(r))return Et=n?4:1,e;if(t=e.divToInt(i),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(r))return Et=Is(t)?n?2:3:n?4:1,e;Et=Is(t)?n?1:4:n?3:2}return e.minus(i).abs()}function ir(o,e,t,n){var i,r,s,a,u,c,l,m,d,p=o.constructor,y=t!==void 0;if(y?(tt(t,1,$t),n===void 0?n=p.rounding:tt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=_s(o);else{for(l=Nt(o),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Ei(Nt(d),10,i),d.e=d.d.length),m=Ei(l,10,i),r=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(o=new p(o),o.d=m,o.e=r,o=Pe(o,d,t,n,0,i),m=o.d,r=o.e,c=Ss),s=m[t],a=i/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,c)for(;++m[--t]>i-1;)m[t]=0,t||(++r,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=$o.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=Ei(l,i,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=$o.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>u)for(r-=u;r--;)l+="0";else r<u&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function Bs(o,e){if(o.length>e)return o.length=e,!0}function mc(o){return new this(o).abs()}function dc(o){return new this(o).acos()}function pc(o){return new this(o).acosh()}function fc(o,e){return new this(o).plus(e)}function yc(o){return new this(o).asin()}function bc(o){return new this(o).asinh()}function gc(o){return new this(o).atan()}function wc(o){return new this(o).atanh()}function Ac(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,r=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=kt(this,r,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?kt(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=kt(this,r,1).times(.5),t.s=o.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Pe(o,e,r,1)),e=kt(this,r,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Pe(o,e,r,1)),t}function Pc(o){return new this(o).cbrt()}function kc(o){return $(o=new this(o),o.e+1,2)}function hc(o,e,t){return new this(o).clamp(e,t)}function Tc(o){if(!o||typeof o!="object")throw Error(qi+"Object expected");var e,t,n,i=o.defaults===!0,r=["precision",1,$t,"rounding",0,8,"toExpNeg",-Sn,0,"toExpPos",0,Sn,"maxE",0,Sn,"minE",-Sn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],i&&(this[t]=Jo[t]),(n=o[t])!==void 0)if(ze(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(Zt+t+": "+n);if(t="crypto",i&&(this[t]=Jo[t]),(n=o[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(Cs);else this[t]=!1;else throw Error(Zt+t+": "+n);return this}function Ic(o){return new this(o).cos()}function Bc(o){return new this(o).cosh()}function Vs(o){var e,t,n;function i(r){var s,a,u,c=this;if(!(c instanceof i))return new i(r);if(c.constructor=i,xs(r)){c.s=r.s,oe?!r.d||r.e>i.maxE?(c.e=NaN,c.d=null):r.e<i.minE?(c.e=0,c.d=[0]):(c.e=r.e,c.d=r.d.slice()):(c.e=r.e,c.d=r.d?r.d.slice():r.d);return}if(u=typeof r,u==="number"){if(r===0){c.s=1/r<0?-1:1,c.e=0,c.d=[0];return}if(r<0?(r=-r,c.s=-1):c.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;oe?s>i.maxE?(c.e=NaN,c.d=null):s<i.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[r]):(c.e=s,c.d=[r]);return}else if(r*0!==0){r||(c.s=NaN),c.e=NaN,c.d=null;return}return nr(c,r.toString())}else if(u!=="string")throw Error(Zt+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),c.s=-1):(a===43&&(r=r.slice(1)),c.s=1),Ls.test(r)?nr(c,r):cc(c,r)}if(i.prototype=v,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Tc,i.clone=Vs,i.isDecimal=xs,i.abs=mc,i.acos=dc,i.acosh=pc,i.add=fc,i.asin=yc,i.asinh=bc,i.atan=gc,i.atanh=wc,i.atan2=Ac,i.cbrt=Pc,i.ceil=kc,i.clamp=hc,i.cos=Ic,i.cosh=Bc,i.div=xc,i.exp=Sc,i.floor=Kc,i.hypot=Cc,i.ln=Rc,i.log=Lc,i.log10=Nc,i.log2=Oc,i.max=Mc,i.min=_c,i.mod=vc,i.mul=Vc,i.pow=Ec,i.random=Fc,i.round=Dc,i.sign=Wc,i.sin=qc,i.sinh=Uc,i.sqrt=Gc,i.sub=Xc,i.sum=zc,i.tan=Qc,i.tanh=Yc,i.trunc=jc,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function xc(o,e){return new this(o).div(e)}function Sc(o){return new this(o).exp()}function Kc(o){return $(o=new this(o),o.e+1,3)}function Cc(){var o,e,t=new this(0);for(oe=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function xs(o){return o instanceof Un||o&&o.toStringTag===Rs||!1}function Rc(o){return new this(o).ln()}function Lc(o,e){return new this(o).log(e)}function Oc(o){return new this(o).log(2)}function Nc(o){return new this(o).log(10)}function Mc(){return Ms(this,arguments,"lt")}function _c(){return Ms(this,arguments,"gt")}function vc(o,e){return new this(o).mod(e)}function Vc(o,e){return new this(o).mul(e)}function Ec(o,e){return new this(o).pow(e)}function Fc(o){var e,t,n,i,r=0,s=new this(1),a=[];if(o===void 0?o=this.precision:tt(o,1,$t),n=Math.ceil(o/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)i=e[r],i>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)i=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(i%1e7),r+=4);r=n/4}else throw Error(Cs);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],o%=ee,n&&o&&(i=Ne(10,ee-o),a[r]=(n/i|0)*i);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function Dc(o){return $(o=new this(o),o.e+1,this.rounding)}function Wc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function qc(o){return new this(o).sin()}function Uc(o){return new this(o).sinh()}function Gc(o){return new this(o).sqrt()}function Xc(o,e){return new this(o).sub(e)}function zc(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,$(t,this.precision,this.rounding)}function Qc(o){return new this(o).tan()}function Yc(o){return new this(o).tanh()}function jc(o){return $(o=new this(o),o.e+1,1)}v[Symbol.for("nodejs.util.inspect.custom")]=v.toString;v[Symbol.toStringTag]="Decimal";var Un=v.constructor=Vs(Jo);Fi=new Un(Fi);Di=new Un(Di);var O=Un;import il from"big.js";import Qi from"bn.js";import Hc from"toformat";var Zc=Hc,Gn=Zc;import zi from"big.js";import Jc from"bn.js";import el from"decimal.js-light";import Xn from"bn.js";var Es=9007199254740991;function Z(o){let e=ae("Raydium_parseBigNumberish");if(o instanceof Xn)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new Xn(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Es||o<=-Es)&&e.logWithError(`BigNumberish number overflow: ${o}`),new Xn(String(o))):typeof o=="bigint"?new Xn(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new Xn(0))}var Xi=ae("module/fraction"),or=Gn(zi),zn=Gn(el),tl={[0]:zn.ROUND_DOWN,[1]:zn.ROUND_HALF_UP,[2]:zn.ROUND_UP},nl={[0]:zi.roundDown,[1]:zi.roundHalfUp,[2]:zi.roundUp},fe=class{constructor(e,t=new Jc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new fe(this.denominator,this.numerator)}add(e){let t=e instanceof fe?e:new fe(Z(e));return this.denominator.eq(t.denominator)?new fe(this.numerator.add(t.numerator),this.denominator):new fe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof fe?e:new fe(Z(e));return this.denominator.eq(t.denominator)?new fe(this.numerator.sub(t.numerator),this.denominator):new fe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof fe?e:new fe(Z(e));return new fe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof fe?e:new fe(Z(e));return new fe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Xi.logWithError(`${e} is not an integer.`),e<=0&&Xi.logWithError(`${e} is not positive.`),zn.set({precision:e+1,rounding:tl[n]});let i=new zn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Xi.logWithError(`${e} is not an integer.`),e<0&&Xi.logWithError(`${e} is negative.`),or.DP=e,or.RM=nl[n]||1,new or(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ol=ae("Raydium_amount"),Fs=Gn(il);function rl(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):ol.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var be=class extends fe{constructor(t,n,i=!0,r){let s=new Qi(0),a=rr.pow(new Qi(t.decimals));if(i)s=Z(n);else{let u=new Qi(0),c=new Qi(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=rl(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(r||"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,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Fs.DP=this.token.decimals,new Fs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as sl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ds}from"@solana/spl-token";var Jt={chainId:101,address:sl.default.toBase58(),programId:Ds.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ue={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ds.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as lr}from"@solana/web3.js";import{PublicKey as Te,SystemProgram as Ws,SYSVAR_RENT_PUBKEY as al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ul}from"@solana/spl-token";function T({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var sr=[T({pubkey:ul,isWritable:!1}),T({pubkey:Ws.programId,isWritable:!1}),T({pubkey:al,isWritable:!1})];function ar({publicKey:o,transformSol:e}){let t=ur(o.toString());if(t instanceof Te)return e&&t.equals(Me)?j:t;if(e&&t.toString()===Me.toBase58())return j;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ur(o){try{return new Te(o)}catch{return o}}var Yi=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),en=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),at=new Te("SysvarRent111111111111111111111111111111111"),qs=new Te("SysvarC1ock11111111111111111111111111111111"),Ft=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),cl=new Te("Sysvar1nstructions1111111111111111111111111"),cr=Ws.programId,Op=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Np=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Mp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),_p=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),vp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Vp=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ep=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Fp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Dp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Wp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),qp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Te("So11111111111111111111111111111111111111112"),Me=Te.default;function st(o){return ar({publicKey:o,transformSol:!0})}var mr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:r=!1,isToken2022:s=!1}){if(e===Me.toBase58()||e instanceof lr&&Me.equals(e)){this.decimals=Ue.decimals,this.symbol=Ue.symbol,this.name=Ue.name,this.mint=new lr(Ue.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=r?lr.default:ar({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=mr;Ie.WSOL=new mr(F(R({},Ue),{mint:Ue.address}));var dr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},ji=dr;ji.SOL=new dr(Jt);import ll from"bn.js";var Us=new fe(new ll(100)),Fe=class extends fe{toSignificant(e=5,t,n){return this.mul(Us).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Us).toFixed(e,t,n)}};var ml=ae("Raydium_price"),nt=class extends fe{constructor(t){let{baseToken:n,quoteToken:i,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=i,this.scalar=new fe(pr(n.decimals),pr(i.decimals))}get raw(){return new fe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ml.logWithError("mul token not equals");let n=super.mul(t);return new nt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};import{PublicKey as dl}from"@solana/web3.js";import pl from"bn.js";function Gs(o){return typeof o=="object"&&o!==null&&![Ie,be,dl,fe,pl,nt,Fe].some(e=>typeof e=="object"&&o instanceof e)}function Ge(o){return typeof o=="string"?ur(o):Array.isArray(o)?o.map(e=>Ge(e)):Gs(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ge(t)])):o}var dt=new Dt(0),Xs=new Dt(1),Ef=new Dt(2),Ff=new Dt(3),Df=new Dt(5),rr=new Dt(10),Wf=new Dt(100),qf=new Dt(1e3),Uf=new Dt(1e4);function pr(o){return rr.pow(Z(o))}function Hi(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Zo(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var Tt=class{constructor(e){this._owner=e}get publicKey(){return Tt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Tt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Tt.isKeyPair(this._owner)}get isPublicKey(){return Tt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Tt.isKeyPair(e)}};import{PublicKey as Al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pl}from"@solana/spl-token";import{ComputeBudgetProgram as zs,Keypair as Ys,PublicKey as fl,Transaction as js,TransactionMessage as yl,VersionedTransaction as Hs}from"@solana/web3.js";var V={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",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",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",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee"};import{TOKEN_PROGRAM_ID as bl}from"@solana/spl-token";var Qs=ae("Raydium_txUtil"),Zs=1644;function Zi(o){let e=[],t=[];return o.microLamports&&(e.push(zs.setComputeUnitPrice({microLamports:o.microLamports})),t.push(V.SetComputeUnitPrice)),o.units&&(e.push(zs.setComputeUnitLimit({units:o.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Cn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function $i(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,r=>{if(clearTimeout(i),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function fr(o,e){o.length<1&&Qs.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Qs.logWithError(`no signers provided:, ${e.toString()}`);let t=new js;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Zs}catch{return!1}}function ce(o,e){let[t,n]=fl.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function Qn({instructions:o,payer:e,signers:t}){return fr(o,[e,...t])}function Yn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ys.generate().publicKey.toString()}){let r=new yl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Hs(r).serialize()).toString("base64").length<Zs}catch{return!1}}var gl=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),wl=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Hs&&(e=gl(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function ln(o){let e=[];return o.forEach(t=>{t instanceof js&&(t.recentBlockhash||(t.recentBlockhash=bl.toBase58()),t.feePayer||(t.feePayer=Ys.generate().publicKey)),e.push(wl(t))}),console.log("simulate tx string:",e),e}function ue(o,e,t){return ce([o.toBuffer(),(t!=null?t:Pl).toBuffer(),e.toBuffer()],new Al("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as se}from"@solana/web3.js";var $s=new se("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Js=new se("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),jn=new se("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),ly=new se("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),my=new se("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),yr=new se("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ea=new se("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),dy=new se("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ta=new se("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Rn=new se("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Hn=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ji=new se("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),py=new se("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),fy=new se("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),kl=new se("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),hl=new se("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Tl=new se("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Il=new se("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),eo=new se("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),na=new se("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),yy=new se("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Bl=new se("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),xl=new se("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Sl=new se("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),to=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Kl=new se("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),no=new se("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Cl=new se("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),Zn={IDO_PROGRAM_ID_V1:kl,IDO_PROGRAM_ID_V2:hl,IDO_PROGRAM_ID_V3:Tl,IDO_PROGRAM_ID_V4:Il};var by={SERUM_MARKET:se.default,OPENBOOK_MARKET:new se("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:se.default,FarmV3:new se("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new se("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new se("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new se("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new se("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new se("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new se("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new se("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new se("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Bl,CREATE_CPMM_POOL_AUTH:xl,CREATE_CPMM_POOL_FEE_ACC:Sl,FEE_DESTINATION_ID:new se("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Kl,LCOK_CPMM_AUTH:Cl};import It from"bn.js";var $n=1e4;function ge(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=F(R({},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}}),r=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new It(r.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===$n){let u=new It(r.maximumFee.toString());return{amount:o.add(u),fee:u,expirationTime:a}}else{let u=tn(o.mul(new It($n)),new It($n-r.transferFeeBasisPoints)),c=new It(r.maximumFee.toString()),l=u.sub(o).gt(c)?o.add(c):u,m=tn(l.mul(new It(r.transferFeeBasisPoints)),new It($n)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=tn(o.mul(new It(r.transferFeeBasisPoints)),new It($n)),c=u.gt(s)?s:u;return{amount:o,fee:c,expirationTime:a}}}function Bt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function tn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new It(0))?t.add(new It(1)):t}import{PublicKey as ia,AddressLookupTableAccount as io}from"@solana/web3.js";async function br({connection:o,address:e}){let t=await Pt(o,[...new Set(e.map(i=>i.toString()))].map(i=>new ia(i))),n={};for(let i=0;i<e.length;i++){let r=t[i],s=e[i];if(!r)continue;let a=new io({key:s,state:io.deserialize(r.data)});n[s.toString()]=a,oo[s.toString()]=a}return n}var oo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new io({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:io.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"))})};import{PublicKey as Jn,sendAndConfirmTransaction as gr,Transaction as ei,TransactionMessage as ti,VersionedTransaction as ni}from"@solana/web3.js";import Rl from"axios";var ro=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Rl.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}=Zi(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:i=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==Jn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(R({},t||{})):this.build(t)}build(e){var n;let t=new ei;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async i=>{var c;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=i||{},u=r!=null?r:await Cn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),ln([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await gr(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],u=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Cn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let w of s){let A=await gr(this.connection,w,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((A,k)=>(A.recentBlockhash=f,a[k].length&&A.sign(...a[k]),A));ln(g);let w=await this.signAllTransactions(g);if(m){let A=0,k=[],B=async()=>{if(!w[A])return;let h=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:y});k.push({txId:h,status:"sent",signedTx:w[A]}),d==null||d([...k]),A++,this.connection.onSignature(h,S=>{let I=k.findIndex(C=>C.txId===h);I>-1&&(k[I].status=S.err?"error":"success"),d==null||d([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(h)};return await B(),{txIds:k.map(h=>h.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let B=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:y});A.push(B)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:r}=y,s=Re(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=R(R({},this.cluster==="devnet"?{}:oo),t),u=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let b of u)a[b]===void 0&&c.push(new Jn(b));let l=await br({connection:this.connection,address:c});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?Jn.default.toBase58():r!=null?r:await Cn(this.connection,this.blockhashCommitment),d=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ni(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var A;let{skipPreflight:g=!0,sendAndConfirm:w}=b||{};if(ln([p]),(A=this.owner)!=null&&A.isKeyPair){let k=await this.connection.sendTransaction(p,{skipPreflight:g});return w&&await $i(this.connection,k),{txId:k,signedTx:p}}if(this.signAllTransactions){let k=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(k[0],{skipPreflight:g}),signedTx:k[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],u=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),ln(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:y});await $i(this.connection,w),b.push(w)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,w=[],A=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});w.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...w]),g++,this.connection.onSignature(k,B=>{let h=w.findIndex(S=>S.txId===k);h>-1&&(w[h].status=B.err?"error":"success"),d==null||d([...w]),B.err||A()},"processed"),this.connection.getSignatureStatus(k)};return A(),{txIds:[],signedTxs:b}}else{let g=[];for(let w=0;w<b.length;w+=1){let A=await this.connection.sendTransaction(b[w],{skipPreflight:y});g.push(A)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Re(c,["computeBudgetConfig"]),i=t?Zi(t):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,d)=>F(R({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...i.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Jn(b));if(u.length<12&&Qn({instructions:p,payer:this.feePayer,signers:f})||Qn({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");Qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new ei().add(...i.instructions,...u)):s.push(new ei().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>r[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>r[p]).filter(p=>p!==void 0);Qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new ei().add(...i.instructions,...u)):s.push(new ei().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Cn(this.connection,this.blockhashCommitment);if(s.forEach(async(w,A)=>{w.recentBlockhash=b,a[A].length&&w.sign(...a[A])}),ln(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let w=[];for(let A of s){let k=await gr(this.connection,A,this.signers.find(B=>B.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});w.push(k)}return{txIds:w,signedTxs:s}}return{txIds:await Promise.all(s.map(async w=>await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let w=await this.signAllTransactions(s);if(d){let A=0,k=[],B=async()=>{if(!w[A])return;let h=await this.connection.sendRawTransaction(w[A].serialize(),{skipPreflight:f});k.push({txId:h,status:"sent",signedTx:w[A]}),p==null||p([...k]),A++,this.connection.onSignature(h,S=>{let I=k.findIndex(C=>C.txId===h);I>-1&&(k[I].status=S.err?"error":"success"),p==null||p([...k]),S.err||B()},"processed"),this.connection.getSignatureStatus(h)};return await B(),{txIds:k.map(h=>h.txId),signedTxs:w}}else{let A=[];for(let k=0;k<w.length;k+=1){let B=await this.connection.sendRawTransaction(w[k].serialize(),{skipPreflight:f});A.push(B)}return{txIds:A,signedTxs:w}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,r=Re(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=R(R({},this.cluster==="devnet"?{}:oo),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let w of a)s[w]===void 0&&u.push(new Jn(w));let c=await br({connection:this.connection,address:u});for(let[w,A]of Object.entries(c))s[w]=A;let l=t?Zi(t):{instructions:[],instructionTypes:[]},m=await Cn(this.connection,this.blockhashCommitment),d=this.signers.reduce((w,A)=>F(R({},w),{[A.publicKey.toBase58()]:A}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(w=>{let A=[...f,w],k=t?[...l.instructions,...A]:A;if(f.length<12&&Yn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Yn({instructions:A,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(w);else{if(f.length===0)throw Error("item ins too big");let B={};for(let h of[...new Set(a)])s[h]!==void 0&&(B[h]=s[h]);if(t&&Yn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new ni(h))}else{let h=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new ni(h))}y.push(Array.from(new Set(f.map(h=>h.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(h=>d[h]).filter(h=>h!==void 0)),f=[w]}}),f.length>0){let A=[...new Set(f.map(k=>k.keys.filter(B=>B.isSigner).map(B=>B.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Yn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new ni(k))}else{let k=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new ni(k))}y.push(A)}return(g=this.owner)!=null&&g.signer&&y.forEach(w=>{w.some(A=>A.publicKey.equals(this.owner.publicKey))||w.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async w=>{var S;let{sequentially:A,onTxUpdate:k,recentBlockHash:B,skipPreflight:h=!0}=w||{};if(p.map(async(I,C)=>{y[C].length&&I.sign(y[C]),B&&(I.message.recentBlockhash=B)}),ln(p),(S=this.owner)!=null&&S.isKeyPair){if(A){let I=[];for(let C of p){let x=await this.connection.sendTransaction(C,{skipPreflight:h});await $i(this.connection,x),I.push(x)}return{txIds:I,signedTxs:p}}return{txIds:await Promise.all(p.map(async I=>await this.connection.sendTransaction(I,{skipPreflight:h}))),signedTxs:p}}if(this.signAllTransactions){let I=await this.signAllTransactions(p);if(A){let C=0,x=[],L=async()=>{if(!I[C])return;let D=await this.connection.sendTransaction(I[C],{skipPreflight:h});x.push({txId:D,status:"sent",signedTx:I[C]}),k==null||k([...x]),C++,this.connection.onSignature(D,N=>{let H=x.findIndex(X=>X.txId===D);H>-1&&(x[H].status=N.err?"error":"success"),k==null||k([...x]),N.err||L()},"processed"),this.connection.getSignatureStatus(D)};return L(),{txIds:[],signedTxs:I}}else{let C=[];for(let x=0;x<I.length;x+=1){let L=await this.connection.sendTransaction(I[x],{skipPreflight:h});C.push(L)}return{txIds:C,signedTxs:I}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};var Le={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},eb=R({},Le);var oa="ray_tab_hash",wr="ray_req_hash",Ll=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(oa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(oa,o)),o},so=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=Re(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(wr)||"[]").slice(0,o-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(F(R({},t),{time:Date.now(),session:Ll()}));try{localStorage.setItem(wr,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let u=JSON.stringify(t.data).substring(0,100);r[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(wr,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(u=>u())}return so(F(R({},t),{logCount:o,removeLastLog:!0}))}};var ao=ae("Raydium_Api"),Ar=new Map;var uo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=i||1e3,this.api=ra.create({baseURL:this.urlConfigs.BASE_HOST||Le.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return ao.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(ao.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&&so({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),ao.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&&so({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ao.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Le.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Le.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Le.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ra.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,r)=>i+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Le.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Le.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Le.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Le.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Le.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Le.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Le.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Ar.has(s)?(n.push(Ar.get(s)),!1):!0),r=[];return i.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Le.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),r.forEach(a=>{Ar.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:r="default",order:s="desc",page:a=1}=e,[u,c]=[t&&st(t).toBase58(),n&&n!=="undefined"?st(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Le.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Le.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Le.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Le.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Le.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Le.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Le.JITO})).data}};var co="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",sa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as go,SystemProgram as sm}from"@solana/web3.js";import{AccountLayout as Mn,createAssociatedTokenAccountInstruction as Rr,TOKEN_PROGRAM_ID as rn,TOKEN_2022_PROGRAM_ID as am}from"@solana/spl-token";var Pr=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ae(t)}createTxBuilder(e){return this.scope.checkOwner(),new ro({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(Pr(e))}logInfo(...e){this.logger.info(Pr(e))}logAndCreateError(...e){let t=Pr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as em,SystemProgram as tm}from"@solana/web3.js";import nm from"bn.js";import{createCloseAccountInstruction as im,createInitializeAccountInstruction as om,createTransferInstruction as rm,TOKEN_PROGRAM_ID as Nn}from"@solana/spl-token";import{Keypair as Hl,PublicKey as Pa}from"@solana/web3.js";import Zl from"bn.js";import{TOKEN_PROGRAM_ID as $l}from"@solana/spl-token";function Ol(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function kr(o,...e){if(!Ol(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function hr(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function aa(o,e){kr(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var mo=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),xt=(o,e)=>o<<32-e|o>>>e;var vb=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Nl(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Tr(o){return typeof o=="string"&&(o=Nl(o)),kr(o),o}var lo=class{clone(){return this._cloneInto()}},Vb={}.toString;function ua(o){let e=n=>o().update(Tr(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Ml(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),r=BigInt(4294967295),s=Number(t>>i&r),a=Number(t&r),u=n?4:0,c=n?0:4;o.setUint32(e+u,s,n),o.setUint32(e+c,a,n)}var ca=(o,e,t)=>o&e^~o&t,la=(o,e,t)=>o&e^o&t^e&t,po=class extends lo{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=mo(this.buffer)}update(e){hr(this);let{view:t,buffer:n,blockLen:i}=this;e=Tr(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(i-this.pos,r-s);if(a===i){let u=mo(e);for(;i<=r-s;s+=i)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){hr(this),aa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Ml(n,i-8,BigInt(this.length*8),r),this.process(n,0);let a=mo(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],r)}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:i,finished:r,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=r,e.destroyed=s,i%t&&e.buffer.set(n),e}};var _l=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]),nn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),on=new Uint32Array(64),Ir=class extends po{constructor(){super(64,32,8,!1),this.A=nn[0]|0,this.B=nn[1]|0,this.C=nn[2]|0,this.D=nn[3]|0,this.E=nn[4]|0,this.F=nn[5]|0,this.G=nn[6]|0,this.H=nn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:r,F:s,G:a,H:u}=this;return[e,t,n,i,r,s,a,u]}set(e,t,n,i,r,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=r|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)on[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=on[m-15],p=on[m-2],y=xt(d,7)^xt(d,18)^d>>>3,f=xt(p,17)^xt(p,19)^p>>>10;on[m]=f+on[m-7]+y+on[m-16]|0}let{A:n,B:i,C:r,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=xt(a,6)^xt(a,11)^xt(a,25),p=l+d+ca(a,u,c)+_l[m]+on[m]|0,f=(xt(n,2)^xt(n,13)^xt(n,22))+la(n,i,r)|0;l=c,c=u,u=a,a=s+p|0,s=r,r=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,r=r+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,i,r,s,a,u,c,l)}roundClean(){on.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ma=ua(()=>new Ir);import{PublicKey as Ql}from"@solana/web3.js";import ba,{isBN as ga}from"bn.js";import{bits as vl,BitStructure as zb,blob as Vl,Blob as Qb,cstr as Yb,f32 as jb,f32be as Hb,f64 as Zb,f64be as $b,greedy as Jb,Layout as El,ns64 as eg,ns64be as tg,nu64 as Fl,nu64be as ng,offset as ig,s16 as og,s16be as rg,s24 as sg,s24be as ag,s32 as Dl,s32be as ug,s40 as cg,s40be as lg,s48 as mg,s48be as dg,s8 as pg,seq as Wl,struct as fg,Structure as ql,u16 as Ul,u16be as yg,u24 as bg,u24be as gg,u32 as Gl,u32be as wg,u40 as Ag,u40be as Pg,u48 as kg,u48be as hg,u8 as Xl,UInt as zl,union as Tg,Union as Ig,unionLayoutDiscriminator as Bg,utf8 as xg}from"@solana/buffer-layout";var fo=El,da=ql;var Br=zl;var pa=Xl,Wt=Ul;var xr=Gl;var fa=Fl;var Xe=Dl;var ya=Wl;var ye=Vl;var Sr=vl;var mn=class extends fo{constructor(t,n,i){super(t,i);this.blob=ye(t),this.signed=n}decode(t,n=0){let i=new ba(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new ba(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},yo=class extends fo{constructor(t){super(8,t);this._lower=Sr(xr(),!1),this._upper=Sr(xr(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return R(R({},i),r)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function U(o){return new Br(1,o)}function Qe(o){return new Br(4,o)}function P(o){return new mn(8,!1,o)}function J(o){return new mn(16,!1,o)}function wa(o){return new mn(1,!0,o)}function Ln(o){return new mn(8,!0,o)}function Aa(o){return new mn(16,!0,o)}var bo=class extends fo{constructor(t,n,i,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new bo(ye(32),e=>new Ql(e),e=>e.toBuffer(),o)}function _e(o){return new bo(pa(),Yl,jl,o)}function Yl(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function jl(o){return o?1:0}var Kr=class extends da{decode(e,t){return super.decode(e,t)}};function E(o,e,t){return new Kr(o,e,t)}function Y(o,e,t){let n,i=typeof e=="number"?e:ga(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=ga(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return ya(o,i,t)}var On=E([K("mint"),K("owner"),P("amount"),Qe("delegateOption"),K("delegate"),U("state"),Qe("isNativeOption"),P("isNative"),P("delegatedAmount"),Qe("closeAuthorityOption"),K("closeAuthority")]);var Yg=ae("Raydium_Util");function ka({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:r,account:s}of t.value){let a=On.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:r,mint:u,amount:c,isAssociated:ue(o,u,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),i.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Pa.default,amount:new Zl(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function it({fromPublicKey:o,programId:e=$l}){let t=Hl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Jl(o,t,e),seed:t}}function Jl(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=ma(n);return new Pa(i)}function Cr(o){let{mint:e,tokenAccount:t,owner:n,programId:i=Nn}=o;return om(t,e,n,i)}function qt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:r=Nn}=o;return im(e,t,i,n,r)}async function Ut(o){let{connection:e,amount:t,commitment:n,payer:i,owner:r,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(On.span,n),u=Z(t).add(new nm(a)),c=it({fromPublicKey:i,programId:Nn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[tm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:On.span,programId:Nn}),Cr({mint:new em(Ue.address),tokenAccount:c.publicKey,owner:r,programId:Nn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[qt({tokenAccount:c.publicKey,payer:i,owner:r})]}}function ha({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:r=Nn}){return rm(o,e,t,BigInt(String(n)),i,r)}var oi=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}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 ue(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=R(R({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:rn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:am},i.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=ka({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=rn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let r=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 r){let{publicKey:u}=a;if(u&&(!i||i&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new go(t.tokenProgram||rn),m=this.getAssociatedTokenAccount(n,new go(l)),d=(a?[]:this.tokenAccountRawInfos).filter(w=>w.accountInfo.mint.equals(n)&&(!r||w.pubkey.equals(m))).sort((w,A)=>w.accountInfo.amount.lt(A.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let w=Rr(s,m,s,n,l);if(c){let A=await this.scope.connection.getAccountInfo(m);if(A===null)(y=p.instructions)==null||y.push(w),p.instructionTypes.push(V.CreateATA);else if(!(A.owner.equals(l)&&Mn.decode(A.data).mint.equals(n)&&Mn.decode(A.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(w),p.instructionTypes.push(V.CreateATA);if(n.equals(j)&&i.amount){let A=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...A.instructions||[]),p.endInstructions.push(...A.endInstructions||[]),p.instructionTypes.push(...A.instructionTypes||[]),p.endInstructionTypes.push(...A.endInstructionTypes||[]),i.amount&&(p.instructions.push(ha({source:A.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:rn})),p.instructionTypes.push(V.TransferAmount))}return u||(p.endInstructions.push(qt({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let w=it({fromPublicKey:s,programId:l}),A=await this.scope.connection.getMinimumBalanceForRentExemption(Mn.span),k=sm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:w.seed,newAccountPubkey:w.publicKey,lamports:A+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:Mn.span,programId:l});return p.instructions.push(k,Cr({mint:n,tokenAccount:w.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),u||(p.endInstructions.push(qt({owner:s,payer:i.payer||s,tokenAccount:w.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:w.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=rn,autoUnwrapWSOLToSOL:i}){var u;await this.fetchWalletTokenAccounts();let r=(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(!r){let c=this.getAssociatedTokenAccount(t,n),l=await Rr(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],r=c}return i&&j.toBase58()===t.toBase58()&&(a.endInstructions=[qt({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:r,programId:s=rn,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new go(j).equals(r)){let p=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:i,skipCloseAccount:l});return R({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=Rr(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(rn)&&Mn.decode(f.data).mint.equals(r)&&Mn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=rn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new go(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Re(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Re(m,["tokenAccount"]);u=d,c.addInstruction(p)}return R({tokenAccount:u},c.AllTxData)}};import{PublicKey as we,SystemProgram as Im}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Bm}from"@solana/spl-token";import{PublicKey as Ba}from"@solana/web3.js";var Lr=E([U("instruction")]),Or=E([U("instruction")]),um=E([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),J("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),Y(P(),15,"padding")]),cm=E([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),J("perShareReward"),P("lastSlot"),P("perSlotReward")]),lm=E([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),J("perShareRewardA"),P("perSlotRewardA"),U("option"),K("rewardVaultB"),ye(7),P("totalRewardB"),J("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),mm=E([P(),P("state"),P("nonce"),P("validRewardTokenNum"),J("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),Y(um,5,"rewardInfos"),K("creator"),K(),Y(P(),32,"padding")]),dm=new Proxy(cm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),pm=new Proxy(lm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),wo=new Proxy(mm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:6,rewardInfos:i.rewardInfos.map(r=>{var s;return F(R({},r),{rewardType:((s=Object.entries(sn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),fm=E([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Nr=E([U("instruction"),P("nonce"),Y(fm,5,"rewardTimeInfo")]),Mr=E([U("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),_r=E([U("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),xw=E([P("state"),K("id"),K("owner"),P("deposited"),Y(P(),1,"rewardDebts")]),vr=E([P("state"),K("id"),K("owner"),P("deposited"),Y(J(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Y(P(),15)]),Sw=E([P("state"),K("id"),K("owner"),P("deposited"),Y(P(),2,"rewardDebts")]),Ta=E([P("state"),K("id"),K("owner"),P("deposited"),Y(J(),2,"rewardDebts"),Y(P(),17)]),Ia=E([P(),P("state"),K("id"),K("owner"),P("deposited"),Y(J(),5,"rewardDebts"),Y(P(),16)]),ut=E([U("instruction"),P("amount")]),ym=E([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),wa("digitShift"),Y(U(),7,"reserved1"),Y(P(),7,"reserved2")]),bm=E([ye(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),Y(U(),32,"reserved1"),Y(ym,4,"votingMints"),Ln("timeOffset"),U("bump"),Y(U(),7,"reserved2"),Y(P(),11,"reserved3")]),gm=E([Ln("startTime"),Ln("endTime"),U("kind"),Y(U(),15,"reserved")]),wm=E([Y(gm,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),_e("isUsed"),_e("allowClawback"),U("votingMintConfigIdx"),Y(U(),29,"reserved")]),Am=E([ye(8),K("voterAuthority"),K("registrar"),Y(wm,32,"deposits"),U("voterBump"),U("voterWweightRecordBump"),Y(U(),94,"reserved")]);var _w=ae("Raydium_farm_config"),xa=new Ba("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Sa=new Ba("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Ka={3:vr,5:Ta,6:Ia},Vr=o=>[3,5,6].indexOf(o)!==-1,Er=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=r[e])==null?void 0:s.call(r)},sn={"Standard SPL":0,"Option tokens":1},pt={[$s.toString()]:3,[Js.toString()]:5,[jn.toString()]:6};import{PublicKey as pe,SystemProgram as La,SYSVAR_CLOCK_PUBKEY as Ao,SYSVAR_RENT_PUBKEY as hm,TransactionInstruction as St}from"@solana/web3.js";import Oa from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as pA,createAssociatedTokenAccountInstruction as fA,TOKEN_PROGRAM_ID as an}from"@solana/spl-token";import Pm from"bn.js";var km=ae("Raydium.farm.util");function ri({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function ft({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var Ca=({programId:o,poolId:e})=>ce([e.toBuffer()],o);function Ra(o){return{isSet:new Pm(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(sn[o.rewardType])}}function Fr(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function si(o){let e=Ka[o];return e||km.logWithError("invalid version",o),e}var Tm=ae("Raydium_farm_instruction"),BA={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 ai(o){let{version:e,id:t,ledger:n,programId:i,owner:r}=o,s={3:9,5:10}[e];s||Tm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Lr.span);Lr.encode({instruction:s},a);let u=[T({pubkey:t}),T({pubkey:n}),T({pubkey:r,isWritable:!1}),T({pubkey:La.programId,isWritable:!1}),T({pubkey:hm,isWritable:!1})];return{instruction:new St({programId:i,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function Na(o){var n;let e=Buffer.alloc(Nr.span);Nr.encode({instruction:0,nonce:new Oa(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...sr,T({pubkey:o.farmId}),T({pubkey:o.farmAuthority,isWritable:!1}),T({pubkey:o.lpVault}),T({pubkey:o.lpMint,isWritable:!1}),T({pubkey:o.lockVault}),T({pubkey:o.lockMint,isWritable:!1}),T({pubkey:(n=o.lockUserAccount)!=null?n:Me}),T({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(T({pubkey:i.rewardMint,isWritable:!1}),T({pubkey:i.rewardVault}),T({pubkey:i.userRewardToken}));return{instruction:new St({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Ma(o){let e=Buffer.alloc(Or.span);Or.encode({instruction:5},e);let t=[T({pubkey:an,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.lpVault,isWritable:!1}),T({pubkey:o.rewardVault}),T({pubkey:o.userRewardToken}),T({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new St({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Dr({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let r=Buffer.alloc(Mr.span);Mr.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},r);let s=[T({pubkey:an,isWritable:!1}),T({pubkey:n.id}),T({pubkey:n.lpVault,isWritable:!1}),T({pubkey:e}),T({pubkey:t}),T({pubkey:o,isWritable:!1,isSigner:!0})];return new St({programId:n.programId,keys:s,data:r})}function Wr({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let r=Buffer.alloc(_r.span);_r.encode({instruction:4,isSet:new Oa(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(sn[i.rewardType])},r);let s=[...sr,T({pubkey:t.id}),T({pubkey:t.authority,isWritable:!1}),T({pubkey:i.mint,isWritable:!1}),T({pubkey:n}),T({pubkey:e}),T({pubkey:o,isWritable:!1,isSigner:!0})];return new St({programId:t.programId,keys:s,data:r})}function ui(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,u]=[new pe(e.programId),new pe(e.id)],c=ft({programId:a,poolId:u,owner:r,version:6}),l=Buffer.alloc(ut.span);ut.encode({instruction:2,amount:Z(s)},l);let m=[T({pubkey:an,isWritable:!1}),T({pubkey:u}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:new pe(t.lpVault)}),T({pubkey:c}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new pe(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new St({programId:a,keys:m,data:l})}function ci(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:5}),m=Buffer.alloc(ut.span);ut.encode({instruction:12,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new pe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function li(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:3}),m=Buffer.alloc(ut.span);ut.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function _a(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:3}),m=Buffer.alloc(ut.span);ut.encode({instruction:10,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function va(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:5}),m=Buffer.alloc(ut.span);ut.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new pe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function Va(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,u]=[new pe(e.programId),new pe(e.id)],c=ft({programId:a,poolId:u,owner:r,version:6}),l=Buffer.alloc(ut.span);ut.encode({instruction:1,amount:Z(s)},l);let m=[T({pubkey:an,isWritable:!1}),T({pubkey:La.programId,isWritable:!1}),T({pubkey:u}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:new pe(t.lpVault)}),T({pubkey:c}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new pe(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new St({programId:a,keys:m,data:l})}var mi=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Me)){let n=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Fr(F(R({},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:i=jn,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new we(e.lpMint.address),lockInfo:{lockMint:xa,lockVault:Sa},version:6,rewardInfos:t,programId:i},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=it({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(wo.span);u.addInstruction({instructions:[Im.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:wo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ca({programId:new we(a.programId),poolId:l.publicKey}),y=ri({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(sn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),f.push(Ra(B));let{rewardPubKey:h,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:c});S&&u.addInstruction(S),h||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let I=B.mint.equals(Me)?new we(Ue.address):B.mint;b.push({rewardMint:I,rewardVault:ri({programId:a.programId,poolId:l.publicKey,mint:I,type:"rewardVault"}),userRewardToken:h})}let{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({mint:new we(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});w&&u.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:A,instructionType:k}=Na({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:[A],instructionTypes:[k]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let r=pt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ge((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(Me)?new we(Ue.address):n.mint,l=a.rewardInfos.findIndex(g=>new we(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:Me,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:[Dr({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let r=pt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ge((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(Me)?new we(Ue.address):m.mint,p=a.rewardInfos.findIndex(A=>new we(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:Me,{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 w=Dr({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[w],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:r}=e,s=pt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,c=this.createTxBuilder(),l=i.mint.equals(Me)?new we(Ue.address):i.mint,m=ri({programId:new we(n.programId),poolId:new we(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,c.addInstruction({instructions:[Wr({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:r}=e,s=pt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Me)?new we(Ue.address):l.mint,d=ri({programId:new we(n.programId),poolId:new we(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=Wr({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(R({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:r,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=pt[d];Vr(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new we(n.programId),new we(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ft({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let A={};for(let N of this.scope.account.tokenAccounts)if(a){let H=ue(this.scope.ownerPubKey,N.mint,N.programId).publicKey;N.publicKey&&H.equals(N.publicKey)&&(A[N.mint.toString()]=N.publicKey)}else A[N.mint.toString()]=N.publicKey;let k=b.lpMint,B=A[k.address];B||this.logAndCreateError("you don't have any lp","lp zero",A);let h=[];for(let N of m){let H=s&&N.mint.address===j.toString(),X=A[N.mint.address];if(!X){let{account:W,instructionParams:Ve}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:N.mint.programId,mint:new we(N.mint.address),notUseTokenAccount:H,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!H,associatedOnly:H?!1:a,checkCreateATAOwner:u});X=W,Ve&&w.addInstruction(Ve)}A[N.mint.address]=X,h.push(X)}let S,I=await this.scope.connection.getAccountInfo(g);if(I&&(S=si(p).decode(I.data)),n.programId!==jn.toString()&&!S){let{instruction:N,instructionType:H}=ai({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[N],instructionTypes:[H]})}let C=Er({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:h});C&&this.logAndCreateError(C);let x={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:B,rewardAccounts:h,userAuxiliaryLedgers:c==null?void 0:c.map(N=>new we(N))},L=p===6?Va(x):p===5?va(x):_a(x),D={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return w.addInstruction({instructions:[L],instructionTypes:[D[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:r,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=pt[n.programId];Vr(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 x=ue(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(r)r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=ft({programId:new we(n.programId),poolId:new we(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)si(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:D}=ai({id:new we(y.id),programId:new we(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[D]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}let g=y.lpMint.address,w=s&&g===j.toString(),A=b[g.toString()];if(!A){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new we(g),notUseTokenAccount:w,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:w?!1:u,checkCreateATAOwner:c});A=C,x&&f.addInstruction(x)}b[g.toString()]=A;let k=[];for(let C of d){let x=s&&C.mint.address===j.toString(),L=b[C.mint.address];if(!L){let{account:D,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new we(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:u,checkCreateATAOwner:c});L=D,N&&f.addInstruction(N)}b[C.mint.address]=L,k.push(L)}let B=Er({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});B&&this.logAndCreateError(B);let h={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:A,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new we(C))},S=p===6?ui(h):p===5?ci(h):li(h),I={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[I[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=pt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===Me.toString()?new we(Ue.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Me,c=this.createTxBuilder(),l;if(t.equals(Me)){let y=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Fr(F(R({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new O(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:[Bm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ma({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.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:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=ue(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(R({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:w}=y,A=pt[f],k=b.address,B=n&&k===j.toString(),h=m[k];if(!h){let{account:D,instructionParams:N}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new we(k),notUseTokenAccount:B,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:r,checkCreateATAOwner:s});h=D,N&&l.addInstruction(N)}m[k.toString()]=h;let S=[];for(let D of g){let N=n&&D.mint.address===j.toString(),H=m[D.mint.address];if(!H){let{account:X,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:D.mint.programId,mint:new we(D.mint.address),notUseTokenAccount:N,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!N,associatedOnly:N?!1:r,checkCreateATAOwner:s});H=X,W&&l.addInstruction(W)}m[D.mint.address]=H,S.push(H)}let I=p[w],C={amount:dt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:I,lpAccount:h,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(D=>new we(D))},x=A===6?ui(C):A===5?ci(C):li(C),L={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[L[A]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as He}from"@solana/web3.js";import{AccountLayout as ud,NATIVE_MINT as Au,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";import{Keypair as Bo,PublicKey as q,SystemProgram as gn,TransactionInstruction as et}from"@solana/web3.js";import iu from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Hr,TOKEN_2022_PROGRAM_ID as _t,TOKEN_PROGRAM_ID as he}from"@solana/spl-token";import _m from"bn.js";import yt from"bn.js";var xe=new yt(0),ct=new yt(1),Gt=new yt(-1),lt=new yt(1).shln(64),Po=new yt(1).shln(128),qr=lt.sub(ct),di=64,Ea=Po.subn(1),Ye=-443636,$e=-Ye,bt=new yt("4295048016"),gt=new yt("79226673521066979257578248091"),ko=new yt("4295048017"),ho=new yt("79226673521066979257578248090"),Fa=16,Da="59543866431248",Wa="184467440737095516",qa="15793534762490258745",To=new yt(10).pow(new yt(6));var Ua={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:[]},nP=new yt("18446744073700000000");import re from"bn.js";function Io(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ur(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Gr(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function pi(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Ga(o,e){return pi(o,e)?null:Ur(o,e)}function Xa(o,e){return pi(o,e)?null:Gr(o,e)}var uP=Buffer.from("amm_config","utf8"),xm=Buffer.from("pool","utf8"),Sm=Buffer.from("pool_vault","utf8"),Km=Buffer.from("pool_reward_vault","utf8"),za=Buffer.from("position","utf8"),Cm=Buffer.from("tick_array","utf8"),Rm=Buffer.from("operation","utf8"),Lm=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Om=Buffer.from("observation","utf8");function Qa(o,e,t,n){return ce([xm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Xr(o,e,t){return ce([Sm,e.toBuffer(),t.toBuffer()],o)}function Ya(o,e,t){return ce([Km,e.toBuffer(),t.toBuffer()],o)}function le(o,e,t){return ce([Cm,e.toBuffer(),Io(t)],o)}function Kt(o,e,t,n){return ce([za,e.toBuffer(),Io(t),Io(n)],o)}function Je(o,e){return ce([za,e.toBuffer()],o)}function dn(o){return ce([Buffer.from("metadata","utf8"),Ft.toBuffer(),o.toBuffer()],Ft)}function fi(o){return ce([Rm],o)}function ot(o,e){return ce([Lm,e.toBuffer()],o)}function ja(o,e){return ce([Om,e.toBuffer()],o)}var Ha=Buffer.from("locked_position","utf8");function zr(o,e){return ce([Ha,e.toBuffer()],o)}function yi(o,e){return ce([Ha,e.toBuffer()],o)}import{PublicKey as Ct}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Za}from"@solana/spl-token";import ke from"bn.js";import Mt from"bn.js";var bi=class{static getfeeGrowthInside(e,t,n){let i=new Mt(0),r=new Mt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Mt(0),a=new Mt(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=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),c=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,lt),u=t.tokenFeesOwedA.add(a),c=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,lt),u=t.tokenFeesOwedA.add(a),c=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ie.wrappingSubU128(u,c.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,lt),d=c.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,i){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ie.wrappingSubU128(u,c.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,lt),d=c.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(ie.wrappingSubU128(ie.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return r}static getRewardGrowthInsideV2(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(ie.wrappingSubU128(ie.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:r,epochInfo:s}){var b,g,w,A;let a=ne.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),u=ne.getSqrtPriceX64FromTick(t.tickLower),c=ne.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+i:1-i,m=de.getAmountsFromLiquidity(a,u,c,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new Mt(new O(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),ge(new Mt(new O(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:Bt(d.expirationTime,p.expirationTime)}}};var Nm=15,me=class{static async getTickArrays(e,t,n,i,r,s,a){let u=[],c=Q.getTickArrayStartIndexByTick(i,r),l=Q.getInitializedTickArrayInRange(s,a,r,c,Math.floor(Nm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=le(t,n,l[p]);u.push(y)}let m=(await Pt(e,u)).map(p=>p!==null?gi.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(R({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,i,r,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,i,r,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Q.getNextTickArrayStartIndex(c,r,s),this.checkIsValidStartIndex(c,r))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,i,r){let s=Math.floor(e/me.tickCount(t)),a=n?Q.searchLowBitFromStart(i,r,s-1,1,t):Q.searchHightBitFromStart(i,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let r;if(i){let a=ve-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){r=u;break}a=a-1}}else{let a=0;for(;a<ve;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){r=u;break}a=a+1}}let{publicKey:s}=le(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,r,s){let a=Q.getTickArrayStartIndexByTick(i,r),u=Math.floor((i-a)/r),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<ve;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=le(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(Q.checkIsOutOfBoundary(e)){if(e>$e)return!1;let n=Q.getTickArrayStartIndexByTick(Ye,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ve*e}};var Qr=14,Xt=class{static maxTickInTickarrayBitmap(e){return e*ve*pn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let r=n*i;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!me.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=i?t-me.tickCount(n):t+me.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*ve,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(i){let l=e.shln(1024-c-1),m=Ga(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(c),m=Xa(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-me.tickCount(n)}}}},wi=class{static getBitmapOffset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Xt.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Xt.maxTickInTickarrayBitmap(e),n=-t;if($e<=t)throw Error(`extensionTickBoundary check error: ${$e}, ${t}`);if(n<=Ye)throw Error(`extensionTickBoundary check error: ${n}, ${Ye}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Q.mergeTickArrayBitmap(i).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let r=me.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:r,maxValue:s}=Xt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let u=Q.mergeTickArrayBitmap(e).shln(pn-1-a),c=pi(512,u)?null:Ur(512,u);if(c!==null){let l=t-c*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let u=Q.mergeTickArrayBitmap(e).shrn(a),c=pi(512,u)?null:Gr(512,u);if(c!==null){let l=t+c*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-me.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Xt.maxTickInTickarrayBitmap(t),i=Math.floor(n/me.tickCount(t));return e<0&&n!=0&&(i=pn-i),i}};var Se=class{static getOutputAmountAndRemainAccounts(e,t,n,i,r,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,r,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(Gt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,r){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}=le(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Gt),c,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Se.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?wi.checkTickArrayIsInit(me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=le(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=le(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/me.tickCount(e.tickSpacing)),i=t?Q.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Q.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=me.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:r}=Xt.nextInitializedTickArrayStartIndex(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=wi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ye||t>$e)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:r}){var a,u,c;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(R({},m),{perSecond:ie.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ct(d)});if(p.tokenMint.equals(Ct.default))continue;if(n<=p.openTime.toNumber()||i.eq(xe)){s.push(p);continue}let y=new ke(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ie.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),w=ie.mulDivFloor(f,p.emissionsPerSecondX64,lt),A=p.rewardTotalEmissioned.add(w);s.push(F(R({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:A,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let r of t){let s=Q.getTickArrayStartIndexByTick(r,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=Xt.maxTickInTickarrayBitmap(e),n=-t;return t>$e&&(t=me.getArrayStartIndex($e,e)+me.tickCount(e)),n<Ye&&(n=me.getArrayStartIndex(Ye,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/me.tickCount(t)*pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Ee(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of i)s.accountInfo!==null&&(r[s.pubkey.toString()]=Ja.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},r=[];for(let u of t){let c=Q.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Q.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=le(u.programId,u.id,m);r.push({pubkey:d}),i[d.toString()]=u.id}}let s=await Ee(e,r,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=i[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=gi.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=F(R({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:r=!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(Je(p,d).publicKey);let l=await Pt(t,c,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Ai.decode(d.data),y=p.poolId.toString(),f=e.find(I=>I.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),w=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:A,amountB:k}=de.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:A,amountB:k,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(I=>F(R({},I),{pendingReward:new ke(0)})),leverage:B,tokenFeeAmountA:new ke(0),tokenFeeAmountB:new ke(0)}];let h=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=h,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await Pt(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=gi.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let w=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,A=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[w].toString()],B=y[m[A].toString()],h=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=B.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:I,tokenFeeAmountB:C}=await bi.GetPositionFees(f,g,h,S),x=await bi.GetPositionRewards(f,g,h,S);g.tokenFeeAmountA=I.gte(new ke(0))?I:new ke(0),g.tokenFeeAmountB=C.gte(new ke(0))?C:new ke(0);for(let L=0;L<x.length;L++)g.rewardInfos[L].pendingReward=x[L].gte(new ke(0))?x[L]:new ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:r,slippage:s,priceLimit:a=new O(0),catchLiquidityInsufficient:u=!1}){var D;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new O(0))?c=l?bt.add(new ke(1)):gt.sub(new ke(1)):c=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,i,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:w}=Se.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((D=p.fee)!=null?D:xe),c,u),A=ge(f,d,i,!1),k=ne.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?k:new O(1).div(k),h=f.mul(new ke(Math.floor((1-s)*1e10))).div(new ke(1e10)),S=ge(h,d,i,!1),I=l?e.currentPrice:new O(1).div(e.currentPrice),C=new O(B).sub(I).abs(),x=I,L=new Fe(new O(C).mul(10**15).toFixed(0),new O(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:A,minAmountOut:S,expirationTime:Bt(p.expirationTime,A.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:L,fee:w,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=i.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(R({},c),{mint:c.address,isToken2022:c.programId===Za.toBase58()})),new Ie(F(R({},l),{mint:l.address,isToken2022:l.programId===Za.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:w,executionPrice:A,priceImpact:k,fee:B,remainingAccounts:h,executionPriceX64:S}=Se.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Ct(c.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),I=F(R({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=F(R({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=F(R({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new nt({baseToken:m,denominator:new ke(10).pow(new ke(20+m.decimals)),quoteToken:d,numerator:w.mul(new O(10**(20+d.decimals))).toFixed(0)}),D=new nt({baseToken:m,denominator:new ke(10).pow(new ke(20+m.decimals)),quoteToken:d,numerator:A.mul(new O(10**(20+d.decimals))).toFixed(0)}),N=new be(m,B);return{allTrade:p,realAmountIn:I,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:L,executionPrice:D,priceImpact:k,fee:N,remainingAccounts:h,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:r,slippage:s,priceLimit:a=new O(0)}){var x;let u=n.toBase58()===e.mintA.address,c={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new O(0))?l=u?gt.sub(new ke(1)):bt.add(new ke(1)):l=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,c[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Se.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:xe),l),b=u?e.mintB.address:e.mintA.address,g=ge(d,c[b],i,!1),w=ne.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),A=u?w:new O(1).div(w),k=d.mul(new ke(Math.floor((1+s)*1e10))).div(new ke(1e10)),B=ge(k,c[b],i,!0),h=u?e.currentPrice:new O(1).div(e.currentPrice),S=new O(A).sub(h).abs(),I=h,C=new Fe(new O(S).mul(10**15).toFixed(0),new O(I).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:B,realAmountOut:m,expirationTime:Bt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:A,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let r=e[t],s=Q.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Q.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),u=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-u,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[st(e.mintA.address).toString()],d=i[st(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=ne.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),b=ne.getSqrtPriceX64FromTick(s),g=ne.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:A}=de.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:B}=de.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),h=new O(w.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(A.toString()).div(new O(10).pow(y)).mul(d.value)),S=new O(k.toString()).div(new O(10).pow(p)).mul(m.value).add(new O(B.toString()).div(new O(10).pow(y)).mul(d.value)),I=new O(1).div(h.add(S)),x=new O(l.volumeFee).mul(365).div(c).mul(I).mul(100).toNumber(),L=3600*24*365,D=e.rewardDefaultInfos.map(N=>{var W,Ve;let H=N.mint.decimals,X=i[N.mint.address];return u<((W=N.startTime)!=null?W:0)||u>((Ve=N.endTime)!=null?Ve:0)||!N.perSecond||!X||H===void 0?0:new O(X.value).mul(new O(N.perSecond).mul(L)).div(new O(10).pow(H)).mul(I).mul(100).toNumber()});return{feeApr:x,rewardsApr:D,apr:x+D.reduce((N,H)=>N+H,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:r,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,w;let l=ne.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),m=ne.getSqrtPriceX64FromTick(n),d=ne.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new ke(new O(y.amount.sub((w=y.fee)!=null?w:xe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?de.getLiquidityFromTokenAmountA(m,d,f,!a):new ke(0);else if(l.lte(d)){let A=de.getLiquidityFromTokenAmountA(l,d,f,!a),k=de.getLiquidityFromTokenAmountB(m,l,f);b=t?A:k}else b=t?new ke(0):de.getLiquidityFromTokenAmountB(m,d,f);return Se.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:r,slippage:s,add:a}){var b,g,w,A;let u=ne.getSqrtPriceX64FromTick(n),c=ne.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=de.getAmountsFromLiquidity(ne.priceToSqrtPriceX64(new O(t.price),t.mintA.decimals,t.mintB.decimals),u,c,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),ge(m.amountB.muln(l),(A=t.mintB.extensions)==null?void 0:A.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Bt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(u=>!n[u.id]).map(u=>new Ct(u.id));(await Pt(e,i)).forEach((u,c)=>{!u||(n[i[c].toBase58()]=yn.decode(u.data))});let s=t.map(u=>ot(new Ct(u.programId),new Ct(u.id)).publicKey),a=await Se.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>F(R({},u),{[c.id]:F(R({},n[c.id]),{id:new Ct(c.id),version:6,programId:new Ct(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:F(R({},c.config),{id:new Ct(c.config.id),fundOwner:""}),currentPrice:new O(c.price),exBitmapInfo:a[ot(new Ct(c.programId),new Ct(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber(),rewardInfos:n[c.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Yr={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function $a(o){return F(R({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Yr,week:Yr,month:Yr,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:F(R({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ie=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),r=i.div(n);return i.mod(n).eq(xe)||(r=r.add(ct)),r}static mulDivFloor(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).add(n.sub(ct)).div(n)}static x64ToDecimal(e,t){return new O(e.toString()).div(O.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(O.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Po).sub(t).mod(Po)}};function De(o,e){return jr(o.mul(e),64,256)}function Mm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function jr(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ne=class{static sqrtPriceX64ToPrice(e,t,n){return ie.x64ToDecimal(e).pow(2).mul(O.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ie.decimalToX64(e.mul(O.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(xe))return e;let r=t.shln(di);if(i){let s=r,a=r.add(n.mul(e));return a.gte(s)?ie.mulDivCeil(s,e,a):ie.mulDivRoundingUp(s,ct,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return ie.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let r=n.shln(di);if(i)return e.add(r.div(t));{let s=ie.mulDivRoundingUp(r,ct,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<Ye||e>$e)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=De(n,new re("18444899583751176192"))),(t&4)!=0&&(n=De(n,new re("18443055278223355904"))),(t&8)!=0&&(n=De(n,new re("18439367220385607680"))),(t&16)!=0&&(n=De(n,new re("18431993317065453568"))),(t&32)!=0&&(n=De(n,new re("18417254355718170624"))),(t&64)!=0&&(n=De(n,new re("18387811781193609216"))),(t&128)!=0&&(n=De(n,new re("18329067761203558400"))),(t&256)!=0&&(n=De(n,new re("18212142134806163456"))),(t&512)!=0&&(n=De(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=De(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=De(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=De(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=De(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=De(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=De(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=De(n,new re("696457651848324352"))),(t&131072)!=0&&(n=De(n,new re("26294789957507116"))),(t&262144)!=0&&(n=De(n,new re("37481735321082"))),e>0&&(n=Ea.div(n)),n}static getTickFromPrice(e,t,n){return ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(gt)||e.lt(bt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),i=Mm(n,32,128),r=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new re(0))&&s<Fa;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let c=a.shrn(32),m=i.add(c).mul(new re(Da)),d=jr(m.sub(new re(Wa)),64,128).toNumber(),p=jr(m.add(new re(qa)),64,128).toNumber();return d==p?d:ne.getSqrtPriceX64FromTick(p).lte(e)?p:d}},bn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let r=bn.getTickWithPriceAndTickspacing(e,t,n,i),s=ne.getSqrtPriceX64FromTick(r);return ne.sqrtPriceX64ToPrice(s,n,i)}},de=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(di),s=t.sub(e);return i?ie.mulDivRoundingUp(ie.mulDivCeil(r,s,t),ct,e):ie.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");return i?ie.mulDivCeil(n,t.sub(e),lt):ie.mulDivFloor(n,t.sub(e),lt)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return i?ie.mulDivRoundingUp(a,ct,qr):a.shrn(di)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ie.mulDivFloor(n,qr,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return de.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=de.getLiquidityFromTokenAmountA(e,n,i,!1),a=de.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return de.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:de.getTokenAmountAFromLiquidity(t,n,i,r),amountB:new re(0)};if(e.lt(n)){let s=de.getTokenAmountAFromLiquidity(e,n,i,r),a=de.getTokenAmountBFromLiquidity(t,e,i,r);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:de.getTokenAmountBFromLiquidity(t,n,i,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,r,s,a){let{amountA:u,amountB:c}=de.getAmountsFromLiquidity(e,t,n,i,s),l=r?1+a:1-a,m=new re(new O(u.toString()).mul(l).toFixed(0)),d=new re(new O(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:r,add:s,epochInfo:a,amountAddFee:u}){var w,A,k,B;let c=ne.priceToSqrtPriceX64(new O(e.price),e.mintA.decimals,e.mintB.decimals),l=ne.getSqrtPriceX64FromTick(t),m=ne.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=de.getAmountsFromLiquidity(c,l,m,i,s),[y,f]=[ge(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,u),ge(p.amountB,(A=e.mintB.extensions)==null?void 0:A.feeConfig,a,u)],[b,g]=[ge(new re(new O(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),ge(new re(new O(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,u)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Bt(y.expirationTime,f.expirationTime)}}},fn=class{static swapCompute(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(xe))throw new Error("amountSpecified must not be 0");if(y||(y=s?bt.add(ct):gt.sub(ct)),s){if(y.lt(bt))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(gt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(xe),g={amountSpecifiedRemaining:d,amountCalculated:xe,sqrtPriceX64:m,tick:c>p?Math.min(p+me.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new re(0)},w=p,A=n[p],k=0,B=!s&&A.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(xe)&&!g.sqrtPriceX64.eq(y);){k>10;let h={};h.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(A,g.tick,l,s,B),I=S||null,C=null;if(!(I!=null&&I.liquidityGross.gtn(0))){let L=Se.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:r},w,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}w=L.nextStartIndex;let{publicKey:D}=le(e,t,w);C=D,A=n[w];try{I=Q.firstInitializedTick(A,s)}catch{throw Error("not found next tick info")}}h.tickNext=I.tick,h.initialized=I.liquidityGross.gtn(0),p!==w&&C&&(g.accounts.push(C),p=w),h.tickNext<Ye?h.tickNext=Ye:h.tickNext>$e&&(h.tickNext=$e),h.sqrtPriceNextX64=ne.getSqrtPriceX64FromTick(h.tickNext);let x;if(s&&h.sqrtPriceNextX64.lt(y)||!s&&h.sqrtPriceNextX64.gt(y)?x=y:x=h.sqrtPriceNextX64,[g.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(h.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(h.amountIn.add(h.feeAmount)),g.amountCalculated=g.amountCalculated.sub(h.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(h.amountOut),g.amountCalculated=g.amountCalculated.add(h.amountIn.add(h.feeAmount))),g.sqrtPriceX64.eq(h.sqrtPriceNextX64)){if(h.initialized){let L=I.liquidityNet;s&&(L=L.mul(Gt)),g.liquidity=de.addDelta(g.liquidity,L)}B=h.tickNext!=g.tick&&!s&&A.startTickIndex===h.tickNext,g.tick=s?h.tickNext-1:h.tickNext}else if(g.sqrtPriceX64!=h.sqrtPriceStartX64){let L=ne.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=L!=g.tick&&!s&&A.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:h,isExist:S}=me.nextInitializedTickArray(g.tick,l,s,i,r);S&&p!==h&&(g.accounts.push(le(e,t,h).publicKey),p=h)}catch{}return{allTrade:!0,amountSpecifiedRemaining:xe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,r){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=i.gte(xe);if(u){let l=ie.mulDivFloor(i,To.sub(new re(r.toString())),To);s.amountIn=a?de.getTokenAmountAFromLiquidity(t,e,n,!0):de.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?de.getTokenAmountBFromLiquidity(t,e,n,!1):de.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Gt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromOutput(e,n,i.mul(Gt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=de.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=de.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:de.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:de.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(i.mul(Gt))&&(s.amountOut=i.mul(Gt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=ie.mulDivCeil(s.amountIn,new re(r),To.sub(new re(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var ve=60,pn=512,Q=class{static getTickArrayAddressByTick(e,t,n,i){let r=Q.getTickArrayStartIndexByTick(n,i),{publicKey:s}=le(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Q.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=ve)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=me.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*me.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ve,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*ve,r=Math.floor(t/i)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*ve:e+t*ve}static mergeTickArrayBitmap(e){let t=new _m(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,r){let s=Math.floor(i/(n*ve));return[...Q.searchLowBitFromStart(e,t,s-1,r,n),...Q.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Q.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,r){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,i,r);for(let u of a){let{publicKey:c}=le(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,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.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===i)break}let u=me.tickCount(r);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.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===i)break}let u=me.tickCount(r);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ye||e>$e}static nextInitTick(e,t,n,i,r){if(me.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ve;){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 i=ne.getSqrtPriceX64FromTick(t),r=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new O(1).div(r),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),r=bn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(r),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new O(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ne.getSqrtPriceX64FromTick(t),r=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new O(1).div(r),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new O(1).div(t),r=bn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(r),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new O(1).div(a)}}};var eu=E([ye(8),U("bump"),Wt("index"),K(""),Qe("protocolFeeRate"),Qe("tradeFeeRate"),Wt("tickSpacing"),Y(P(),8,"")]),vm=E([Qe("blockTimestamp"),Ln("tickCumulative"),Y(P(),4)]),tu=E([ye(8),_e("initialized"),P("recentEpoch"),Wt("observationIndex"),K("poolId"),Y(vm,100,"observations"),Y(P(),4)]),Vm=E([U("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),J("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),J("rewardGrowthGlobalX64")]),yn=E([ye(8),U("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),U("mintDecimalsA"),U("mintDecimalsB"),Wt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Xe("tickCurrent"),Qe(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),U("status"),Y(U(),7,""),Y(Vm,3,"rewardInfos"),Y(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Y(P(),15*4-3,"padding")]),Em=E([J("growthInsideLastX64"),P("rewardAmountOwed")]),Ai=E([ye(8),U("bump"),K("nftMint"),K("poolId"),Xe("tickLower"),Xe("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Y(Em,3,"rewardInfos"),Y(P(),8,"")]),bk=E([ye(8),U("bump"),K("poolId"),Xe("tickLowerIndex"),Xe("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Y(J(),3,"rewardGrowthInside"),Y(P(),8,"")]),Fm=E([Xe("tick"),Aa("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),Y(J(),3,"rewardGrowthsOutsideX64"),Y(Qe(),13,"")]),gi=E([ye(8),K("poolId"),Xe("startTickIndex"),Y(Fm,ve,"ticks"),U("initializedTickCount"),Y(U(),115,"")]),nu=E([ye(329),Y(K(),100,"whitelistMints")]),Ja=E([ye(8),K("poolId"),Y(Y(P(),8),Qr,"positiveTickArrayBitmap"),Y(Y(P(),8),Qr,"negativeTickArrayBitmap")]),gk=E([P(),U("bump"),K("owner"),K("poolId"),K("positionId"),K("nftAccount"),Y(P(),8)]),wk=E([ye(8),U("bump"),K("lockOwner"),K("poolId"),K("positionId"),K("nftAccount"),K("lockNftMint"),P("recentEpoch"),Y(P(),8)]);tu.span;var ou=ae("Raydium_Clmm"),Rt={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]},ru=[188,37,179,131,82,150,84,73],su=[16,72,250,198,14,162,212,19],Ae=class{static createPoolInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y){let f=E([J("sqrtPriceX64"),P("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,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:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let w=Buffer.from([...Rt.createPool,...g]);return new et({keys:b,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:u}=e,[c,l]=[new q(i.address),new q(r.address)],{publicKey:m}=Qa(t,s,c,l),{publicKey:d}=ja(t,m),{publicKey:p}=Xr(t,m,c),{publicKey:y}=Xr(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,c,p,new q(i.programId||he),l,y,new q(r.programId||he),ot(t,m).publicKey,a,u)];return{signers:[],instructions:f,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,w,A,k,B,h,S,I,C,x){let L=E([Xe("tickLowerIndex"),Xe("tickUpperIndex"),Xe("tickArrayLowerStartIndex"),Xe("tickArrayUpperStartIndex"),J("liquidity"),P("amountMaxA"),P("amountMaxB"),_e("withMetadata"),U("optionBaseFlag"),_e("baseFlag")]),D=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,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:at,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:Hr,isSigner:!1,isWritable:!1},{pubkey:Ft,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:h,amountMaxA:S,amountMaxB:I,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},H);let X=Buffer.from([...Rt.openPosition,...H]);return new et({keys:N,programId:e,data:X})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let I=Bo.generate();m.push(I),y=I.publicKey}let f=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=le(d,p,f),{publicKey:w}=le(d,p,b),{publicKey:A}=ue(n.wallet,y,he),{publicKey:k}=dn(y),{publicKey:B}=Je(d,y),{publicKey:h}=Kt(d,p,i,r),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,A,k,h,g,w,B,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,r,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:h}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let I=Bo.generate();m.push(I),y=I.publicKey}let f=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=le(d,p,f),{publicKey:w}=le(d,p,b),{publicKey:A}=ue(n.wallet,y,he),{publicKey:k}=dn(y),{publicKey:B}=Je(d,y),{publicKey:h}=Kt(d,p,i,r),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,A,k,h,g,w,B,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,r,f,b,c,s,a,u,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:h},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,w,A,k,B,h,S,I,C,x){let L=E([Xe("tickLowerIndex"),Xe("tickUpperIndex"),Xe("tickArrayLowerStartIndex"),Xe("tickArrayUpperStartIndex"),J("liquidity"),P("amountMaxA"),P("amountMaxB"),_e("withMetadata"),U("optionBaseFlag"),_e("baseFlag")]),D=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],N=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,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:at,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:Hr,isSigner:!1,isWritable:!1},{pubkey:Ft,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...D],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:w,tickUpperIndex:A,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:B,liquidity:new iu(0),amountMaxA:S==="MintA"?I:C,amountMaxB:S==="MintA"?C:I,withMetadata:h==="create",baseFlag:S==="MintA",optionBaseFlag:1},H);let X=Buffer.from([...Rt.openPosition,...H]);return new et({keys:N,programId:e,data:X})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new q((await l(1))[0]);else{let I=Bo.generate();d.push(I),m=I.publicKey}let[p,y]=[new q(e.programId),new q(e.id)],f=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=le(p,y,f),{publicKey:w}=le(p,y,b),{publicKey:A}=ue(n.wallet,m,he),{publicKey:k}=dn(m),{publicKey:B}=Je(p,m),{publicKey:h}=Kt(p,y,i,r),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,A,k,h,g,w,B,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(t.mintA.address),new q(t.mintB.address),i,r,f,b,s,a,u,c,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:w,positionNftAccount:A,metadataAccount:k,personalPosition:B,protocolPosition:h},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,r){let s=E([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...Rt.closePosition,...u]);return new et({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let r=new q(e.programId),{publicKey:s}=ue(n.wallet,i.nftMint,he),{publicKey:a}=Je(r,i.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,w){let A=E([J("liquidity"),P("amountMaxA"),P("amountMaxB"),U("optionBaseFlag"),_e("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},h);let S=Buffer.from([...Rt.increaseLiquidity,...h]);return new et({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMaxA:s,amountMaxB:a}){let[u,c]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=le(u,c,l),{publicKey:p}=le(u,c,m),{publicKey:y}=ue(i.wallet,n.nftMint,he),{publicKey:f}=Je(u,n.nftMint),{publicKey:b}=Kt(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:r,baseAmount:s,otherAmountMax:a}){let[u,c]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=le(u,c,l),{publicKey:p}=le(u,c,m),{publicKey:y}=ue(i.wallet,n.nftMint,he),{publicKey:f}=Je(u,n.nftMint),{publicKey:b}=Kt(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,w){let A=E([J("liquidity"),P("amountMaxA"),P("amountMaxB"),U("optionBaseFlag"),_e("baseFlag")]),k=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(A.span);A.encode({liquidity:new iu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},h);let S=Buffer.from([...Rt.increaseLiquidity,...h]);return new et({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,w,A){let k=E([J("liquidity"),P("amountMinA"),P("amountMinB")]),B=[...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()],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:Yi,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:w},S);let I=Buffer.from([...Rt.decreaseLiquidity,...S]);return new et({keys:h,programId:e,data:I})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new q(e.programId),new q(e.id)],m=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=le(c,l,m),{publicKey:y}=le(c,l,d),{publicKey:f}=ue(i.wallet,n.nftMint,u),{publicKey:b}=Je(c,n.nftMint),{publicKey:g}=Kt(c,l,n.tickLower,n.tickUpper),w=[];for(let B=0;B<e.rewardDefaultInfos.length;B++)w.push({poolRewardVault:new q(t.rewardInfos[B].vault),ownerRewardVault:i.rewardAccounts[B],rewardMint:new q(e.rewardDefaultInfos[B].mint.address)});let A=[],k=this.decreaseLiquidityInstruction(c,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),w,r,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(c,l).publicKey:void 0);return A.push(k),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:A,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g){let w=E([P("amount"),P("otherAmountThreshold"),J("sqrtPriceLimitX64"),_e("isBaseInput")]),A=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:Yi,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...A],B=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},B);let h=Buffer.from([...Rt.swap,...B]);return new et({keys:k,programId:e,data:h})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,c,n,s,a,u,!1,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,r,s,a,u,c,l,m,d){let p=E([P("openTime"),P("endTime"),J("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Rt.initReward,...f]);return new et({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new q(e.programId),new q(e.id)],a=Ya(r,s,i.mint).publicKey,u=fi(r).publicKey,c=[this.initRewardInstruction(r,n.wallet,s,u,new q(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,r,s,a,u,c,l,m,d){let p=E([U("rewardIndex"),J("emissionsPerSecondX64"),P("openTime"),P("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...Rt.setRewardEmissions,...f]);return new et({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new q(e.programId),new q(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,u=new q(t.rewardInfos[d].vault),c=new q(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&ou.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=fi(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new q(e.config.id),n.tokenAccount,u,c,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,r,s,a){let u=E([U("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:Yi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...Rt.collectReward,...l]);return new et({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[r,s]=[new q(e.programId),new q(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,u=new q(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&ou.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,u,i,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:r,nftMint:s,getEphemeralSigners:a}){let u=[],c;if(a)c=new q((await a(1))[0]);else{let b=Bo.generate();u.push(b),c=b.publicKey}let{publicKey:l}=ue(r,s,he),{publicKey:m}=Je(n,s),d=yi(e,c).publicKey,p=ue(r,c,he).publicKey,y=dn(c).publicKey,f=Ae.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:r,lockOwner:r,positionNftAccount:l,positionId:m,lockPositionId:d,lockNftMint:c,lockNftAccount:p,metadataAccount:y,withMetadata:!0});return{address:{positionId:m,lockPositionId:d,lockNftAccount:p,lockNftMint:c,positionNftAccount:l,metadataAccount:y},instructions:[f],signers:u,instructionTypes:[V.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:r,positionNftAccount:s,positionId:a,lockPositionId:u,lockNftMint:c,lockNftAccount:l,metadataAccount:m,withMetadata:d}){let p=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ft,isSigner:!1,isWritable:!1},{pubkey:Hr,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1}],y=E([_e("withMetadata")]),f=Buffer.alloc(y.span);y.encode({withMetadata:d},f);let b=Buffer.from([...ru,...f]);return new et({keys:p,programId:e,data:b})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:r}){let{publicKey:s}=ue(i,r,he),{publicKey:a}=Je(n,r),u=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:zr(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1}];return new et({keys:u,programId:e,data:Buffer.from(ru)})}static harvestLockPositionInstruction(e){let[t,n]=[new q(e.poolKeys.programId),new q(e.poolKeys.id)],i=Q.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=Q.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=le(t,n,i),{publicKey:a}=le(t,n,r),{publicKey:u}=ue(e.owner,e.ownerPosition.nftMint,he),{publicKey:c}=Je(t,e.ownerPosition.nftMint),{publicKey:l}=Kt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new q(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new q(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:zr(e.programId,c).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new q(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new q(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:new q(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new q(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new et({keys:p,programId:e.programId,data:Buffer.from(su)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:u,positionId:c,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:w,mintB:A,rewardAccounts:k,exTickArrayBitmap:B}){let h=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[],...k.map(I=>[{pubkey:I.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:I.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{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:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},...h];return new et({keys:S,programId:e,data:Buffer.from(su)})}};var Mk=E([Qe("mintAuthorityOption"),K("mintAuthority"),P("supply"),U("decimals"),U("isInitialized"),Qe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Ek}from"@solana/web3.js";import{MintLayout as Dk,TOKEN_PROGRAM_ID as qk}from"@solana/spl-token";var xo=o=>new Ie({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),Pi=i=>{var r=i,{amount:o,isRaw:e,name:t}=r,n=Re(r,["amount","isRaw","name"]);return new be(new Ie({mint:st(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var je=i=>{var r=i,{address:o,programId:e,decimals:t}=r,n=Re(r,["address","programId","decimals"]);return R({chainId:101,address:st(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},un=o=>o?F(R({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(R({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(R({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import au from"bn.js";var Zr=new au(25),So=new au(1e4);import{PublicKey as vt,SystemProgram as Jm,SYSVAR_RENT_PUBKEY as mh,TransactionInstruction as vn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as ed,TOKEN_PROGRAM_ID as hi}from"@solana/spl-token";var $r=E([U("instruction"),P("amountIn"),P("minAmountOut")]),Jr=E([U("instruction"),P("maxAmountIn"),P("amountOut")]),ih=E([U("instruction"),U("nonce")]),Dm=E([U("instruction"),U("nonce"),P("startTime")]),Ko=E([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),P("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),P("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),P("lpReserve"),Y(P(),3,"padding")]),oh=E([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),Y(P(),64,"padding")]),es=E([U("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),ts=E([U("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var uu=E([P("fee")]);import{PublicKey as Wm}from"@solana/web3.js";var _n=new Wm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),An=5e4,qm=E([P("x"),P("y"),P("price")]),Um=E([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Y(qm,An,"DataElement")]);function Gm(o,e){return[0,An-2]}function Xm(o){return[0,An-2]}function zm(o){return[0,An-2]}function Qm(o,e,t){let[n,i]=Gm(e,t),r=n,s=i,a=0,u=e*o.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=An-2)return[a,a,!1];let c=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.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];r=a+1}}return[a,a,!1]}function ns(o,e,t){let[n,i,r]=Qm(o,e,t);if(!r)return 0;if(n===i){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,u=o.DataElement[i].x,c=o.DataElement[i].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*o.multiplier*l/p}}function wn(o,e,t){return e*o.multiplier/t}function cu(o,e,t){return e*t/o.multiplier}function Ym(o,e){let[t,n]=Xm(e),i=t,r=n,s=0,a=e;for(;i<r;){if(s=Math.floor((r+i)/2),s<=0||s>An-2)return[s,s,!1];let u=o.DataElement[s].x,c=o.DataElement[s-1].x,l=o.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)r=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function jm(o,e){let[t,n]=zm(e),i=t,r=n,s=0,a=e;for(;i<=r;){if(s=Math.floor((r+i)/2),s<=0||s>=An-2)return[s,s,!1];let u=o.DataElement[s].y,c=o.DataElement[s-1].y,l=o.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)i=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 lu(o,e,t,n){let i=n?e+t:e-t,[r,s,a]=Ym(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let u=o.DataElement[r].x,c=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.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-(i-u)*o.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-i)*o.multiplier/l),[y,f,!1,a]}}}function Hm(o,e,t,n){let i=n?e-t:e+t,[r,s,a]=jm(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let u=o.DataElement[r].x,c=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.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-i)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(i-p)/o.multiplier),[y,f,!1,a]}}}function Zm(o,e){let t=lu(o,e,0,!1);return t[3]?t[0]:0}function mu(o,e,t,n){let i=ns(o,e,t),r=wn(o,e,i),s=wn(o,t,i),a=wn(o,n,i),u=!0,[c,l,m,d]=lu(o,r,a,u);if(!d)return 0;if(m)return n*o.multiplier/c;{let p=s-l;return cu(o,p,i)}}function du(o,e,t,n){let i=ns(o,e,t),r=wn(o,e,i),s=wn(o,t,i),a=wn(o,n,i),u=!1,[c,l,m,d]=Hm(o,s,a,u);if(!d)return 0;if(m)return n*c/o.multiplier;{let p=r-l;return cu(o,p,i)}}function $m(o){let e=Um.decode(o);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 pu(o,e,t,n){let i=Zm(o,wn(o,e,ns(o,e,t)))/o.multiplier;return n?i:1/i}var ki=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(_n);e&&(this._layoutData=$m(e==null?void 0:e.data))}}};var fu=ae("Raydium_liquidity_instruction");function yu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=o,u=Buffer.alloc(es.span);es.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(r),otherAmountMin:Z(a),fixedSide:s==="base"?dt:Xs},u);let c=[T({pubkey:hi,isWritable:!1}),T({pubkey:new vt(e.id)}),T({pubkey:new vt(t.authority),isWritable:!1}),T({pubkey:new vt(t.openOrders),isWritable:!1}),T({pubkey:new vt(t.targetOrders)}),T({pubkey:new vt(e.lpMint.address)}),T({pubkey:new vt(t.vault.A)}),T({pubkey:new vt(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(T({pubkey:_n})),c.push(T({pubkey:new vt(e.marketId),isWritable:!1}),T({pubkey:n.baseTokenAccount}),T({pubkey:n.quoteTokenAccount}),T({pubkey:n.lpTokenAccount}),T({pubkey:n.owner,isWritable:!1,isSigner:!0}),T({pubkey:new vt(t.marketEventQueue),isWritable:!1})),new vn({programId:new vt(e.programId),keys:c,data:u})}function is(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:r,quoteAmountMin:s}=o,a=Ge(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let c=Buffer.alloc(ts.span);ts.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(r),quoteAmountMin:Z(s)},c);let l=[T({pubkey:hi,isWritable:!1}),T({pubkey:a.id}),T({pubkey:a.authority,isWritable:!1}),T({pubkey:a.openOrders}),T({pubkey:a.targetOrders}),T({pubkey:a.mintLp.address}),T({pubkey:a.vault.A}),T({pubkey:a.vault.B})];return u===5?l.push(T({pubkey:_n})):(l.push(T({pubkey:a.id})),l.push(T({pubkey:a.id}))),l.push(T({pubkey:a.marketProgramId,isWritable:!1}),T({pubkey:a.marketId}),T({pubkey:a.marketBaseVault}),T({pubkey:a.marketQuoteVault}),T({pubkey:a.marketAuthority,isWritable:!1}),T({pubkey:n.lpTokenAccount}),T({pubkey:n.baseTokenAccount}),T({pubkey:n.quoteTokenAccount}),T({pubkey:n.owner,isWritable:!1,isSigner:!0}),T({pubkey:a.marketEventQueue}),T({pubkey:a.marketBids}),T({pubkey:a.marketAsks})),new vn({programId:a.programId,keys:l,data:c})}return new vn({programId:a.programId,keys:[]})}function bu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:r,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:w,openTime:A,coinAmount:k,pcAmount:B,ammConfigId:h,feeDestinationId:S}){let I=E([U("instruction"),U("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),C=[{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:ed,isSigner:!1,isWritable:!1},{pubkey:Jm.programId,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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:h,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(I.span);return I.encode({instruction:1,nonce:w,openTime:A,coinAmount:k,pcAmount:B},x),{instruction:new vn({keys:C,programId:o,data:x}),instructionType:V.AmmV4CreatePool}}function td({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let r=Ge(o),s=Buffer.alloc($r.span);$r.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[T({pubkey:hi,isWritable:!1}),T({pubkey:r.id}),T({pubkey:r.authority,isWritable:!1}),T({pubkey:r.openOrders})];return i===4&&a.push(T({pubkey:r.targetOrders})),a.push(T({pubkey:r.vault.A}),T({pubkey:r.vault.B})),i===5&&a.push(T({pubkey:_n})),a.push(T({pubkey:r.marketProgramId,isWritable:!1}),T({pubkey:r.marketId}),T({pubkey:r.marketBids}),T({pubkey:r.marketAsks}),T({pubkey:r.marketEventQueue}),T({pubkey:r.marketBaseVault}),T({pubkey:r.marketQuoteVault}),T({pubkey:r.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1})),new vn({programId:r.programId,keys:a,data:s})}function nd({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let r=Ge(o),s=Buffer.alloc(Jr.span);Jr.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[T({pubkey:hi,isWritable:!1}),T({pubkey:r.id}),T({pubkey:r.authority,isWritable:!1}),T({pubkey:r.openOrders}),T({pubkey:r.targetOrders}),T({pubkey:r.vault.A}),T({pubkey:r.vault.B})];return i===5&&a.push(T({pubkey:_n})),a.push(T({pubkey:r.marketProgramId,isWritable:!1}),T({pubkey:r.marketId}),T({pubkey:r.marketBids}),T({pubkey:r.marketAsks}),T({pubkey:r.marketEventQueue}),T({pubkey:r.marketBaseVault}),T({pubkey:r.marketQuoteVault}),T({pubkey:r.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1,isSigner:!0})),new vn({programId:r.programId,keys:a,data:s})}function Co(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:r,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return td(F(R({},a),{amountIn:i,minAmountOut:r}),t);if(s==="out")return nd(F(R({},a),{maxAmountIn:i,amountOut:r}),t);fu.logWithError("invalid params","params",o)}throw fu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{PublicKey as rd}from"@solana/web3.js";import Mh from"bn.js";import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";import{PublicKey as id}from"@solana/web3.js";var od=ae("Raydium_liquidity_serum");function gu({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));i=id.createProgramAddressSync(r,o)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:i,nonce:n}}throw od.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function Ro({programId:o}){let{publicKey:e}=ce([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Pn({name:o,programId:e,marketId:t}){let{publicKey:n}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function ad({programId:o,marketId:e}){let{publicKey:t}=ce([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function rs({programId:o}){return ce([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function wu({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:u}){let c=Pn({name:"amm_associated_seed",programId:a,marketId:t}),l=Pn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=rs({programId:a}),p=Pn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Pn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Pn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=ad({programId:a,marketId:t}),g=Pn({name:"target_associated_seed",programId:a,marketId:t}),w=Pn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:A}=gu({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:A,lookupTableAccount:rd.default,configId:Ro({programId:a})}}var os={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Lo=o=>{let e={},t=sd.toBase58();return Object.keys(o).map(n=>{let i=o[n],[r,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:je({address:r,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:je({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new O(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new O(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new O(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:os,week:os,month:os,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Ro({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:je({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import We from"bn.js";var Ti=class extends Be{constructor(t){super(t);this.stableLayout=new ki({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:r}){let s=new We(new O(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=xo(t[r?"mintB":"mintA"]),[u,c]=[new We(new O(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new We(new O(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new We(new O(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=dt;s.isZero()||(d=m==="base"?Hi(s.mul(c),u):Hi(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Hi(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let y=new Fe(new We(1)).add(i),f=new Fe(new We(1)).sub(i),b=y.mul(d).quotient,g=f.mul(d).quotient,w=new be(a,d),A=new be(a,b),k=new be(a,g);return this.logDebug("anotherAmount:",w.toFixed(),"maxAnotherAmount:",A.toFixed()),{anotherAmount:w,maxAnotherAmount:A,minAnotherAmount:k,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:u,config:c,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),w=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let A=await d.getCreatedTokenAccount({mint:new He(n.lpMint.address)}),k=[f,b],B=[g,w],h=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",u),S==="quote"?(k.reverse(),B.reverse(),h.reverse(),I=u==="a"?"quote":"base"):S==="base"&&(I=u==="a"?"base":"quote");let[C,x]=k,[L,D]=B,[N,H]=h,X=i!=null?i:await this.getAmmPoolKeys(n.id),W=this.createTxBuilder(),Vt=await d.handleTokenAccount({side:"in",amount:N,mint:C.mint,tokenAccount:L,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Ve}=Vt,Qt=Re(Vt,["tokenAccount"]);W.addInstruction(Qt);let _i=await d.handleTokenAccount({side:"in",amount:H,mint:x.mint,tokenAccount:D,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Oe}=_i,mt=Re(_i,["tokenAccount"]);W.addInstruction(mt);let vi=await d.handleTokenAccount({side:"out",amount:0,mint:new He(n.lpMint.address),tokenAccount:A,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:At}=vi,Ot=Re(vi,["tokenAccount"]);return W.addInstruction(Ot),W.addInstruction({instructions:[yu({poolInfo:n,poolKeys:X,userKeys:{baseTokenAccount:Ve,quoteTokenAccount:Oe,lpTokenAccount:At,owner:this.scope.ownerPubKey},baseAmountIn:N,quoteAmountIn:H,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),W.addCustomComputeBudget(m),l===0&&await W.buildV0(),W.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:u,txVersion:c,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,y]=[new He(n.mintA.address),new He(n.mintB.address),new He(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),w=await f.getCreatedTokenAccount({mint:p}),A=this.createTxBuilder(),{bypassAssociatedCheck:k,checkCreateATAOwner:B}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:k,checkCreateATAOwner:B}),{tokenAccount:h}=x,S=Re(x,["tokenAccount"]);A.addInstruction(S);let L=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:w,bypassAssociatedCheck:k,checkCreateATAOwner:B}),{tokenAccount:I}=L,C=Re(L,["tokenAccount"]);return A.addInstruction(C),A.addInstruction({instructions:[is({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:h,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),A.addCustomComputeBudget(l),c===0?await A.buildV0():A.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(c);let g={};for(let W of this.scope.account.tokenAccountRawInfos)(g[W.accountInfo.mint.toString()]===void 0||ue(this.scope.ownerPubKey,W.accountInfo.mint,Vn).publicKey.equals(W.pubkey))&&(g[W.accountInfo.mint.toString()]=W.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let A=i.add(a!=null?a:new We(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),B=t.mintB.address===Ie.WSOL.mint.toString(),{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),h===void 0)throw new Error("base token account not found");let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:B?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!B,notUseTokenAccount:B,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),I===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=h,g[t.mintB.address]=I,s!==void 0&&!(a!=null&&a.isZero())){let W=pt[s.programId],Ve=ft({programId:new He(s.programId),poolId:new He(s.id),owner:this.scope.ownerPubKey,version:W}),Qt,Oe=await this.scope.connection.getAccountInfo(Ve);if(Oe&&(Qt=si(W).decode(Oe.data)),W!==6&&!Qt){let{instruction:Yt,instructionType:Yo}=ai({id:new He(s.id),programId:new He(s.programId),version:W,ledger:Ve,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Yt],instructionTypes:[Yo]})}let mt=[];for(let Yt of s.rewardInfos){let Yo=Yt.mint.address===Ie.WSOL.mint.toString();if(g[Yt.mint.address])mt.push(g[Yt.mint.address]);else{let{account:bs,instructionParams:gs}=await this.scope.account.getOrCreateTokenAccount({mint:new He(Yt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Yo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});bs||this.logAndCreateError("farm reward account not found:",Yt.mint.address),gs&&b.addInstruction(gs),mt.push(bs)}}let At=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ot={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:At,lpAccount:w,rewardAccounts:mt},Vt=pt[s.programId],_i=Vt===6?ui(Ot):Vt===5?ci(Ot):li(Ot),vi={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[_i],instructionTypes:[vi[Vt]]})}let x=await this.getAmmPoolKeys(t.id),L=is({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:w,baseTokenAccount:h,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:A,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[D,N]=t.mintA.address===n.mintA.address?[h,I]:[I,h],H=await this.scope.clmm.getClmmPoolKeys(n.id),X=await Ae.openPositionFromBaseInstructions(F(R({poolInfo:n,poolKeys:H,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:D,tokenAccountB:N},withMetadata:"create"},r),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...X.instructions],signers:X.signers,instructionTypes:[...X.instructionTypes],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var D;let b=c.feePayer||((D=this.scope.owner)==null?void 0:D.publicKey),g=c.useSOLBalance&&i.mint.equals(Au),w=c.useSOLBalance&&r.mint.equals(Au),A=this.createTxBuilder(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:i.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(B||{});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:b,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(A.addInstruction(S||{}),k===void 0||h===void 0)throw Error("you don't has some token account");let I=wu({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:r.mint,baseDecimals:i.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:I.id,ammAuthority:I.authority,ammOpenOrders:I.openOrders,lpMint:I.lpMint,coinMint:I.baseMint,pcMint:I.quoteMint,coinVault:I.baseVault,pcVault:I.quoteVault,withdrawQueue:I.withdrawQueue,ammTargetOrders:I.targetOrders,poolTempLp:I.lpVault,marketProgramId:I.marketProgramId,marketId:I.marketId,ammConfigId:I.configId,feeDestinationId:y},{instruction:x,instructionType:L}=bu(F(R({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:h,userLpVault:ue(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:u,coinAmount:s,pcAmount:a}));return A.addInstruction({instructions:[x],instructionTypes:[L]}),A.addCustomComputeBudget(f),A.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=Ro({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return uu.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:r,slippage:s}){let[a,u]=[i.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,w=t.version===4,A;if(w)A=new O(f.toString()).div(10**g).div(new O(y.toString()).div(10**b));else{let N=pu(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);p==="quote"?A=new O(1e6).div(N*1e6):A=new O(N*1e6).div(1e6)}let k=n,B=new We(0),h=new We(0);if(!k.isZero())if(w){h=tn(k.mul(Zr),So);let N=k.sub(h),H=y.add(N);B=f.mul(N).div(H)}else{h=k.mul(new We(2)).div(new We(1e4));let N=k.sub(h);p==="quote"?B=new We(mu(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),N.toNumber())):B=new We(du(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),N.toNumber()))}let S=new We(new O(B.toString()).mul(1-s).toFixed(0)),I=B,C=S,x=new O(B.toString()).div(new O(k.sub(h).toString()).toFixed(0));!k.isZero()&&!B.isZero()&&(x=new O(B.toString()).div(10**g).div(new O(k.sub(h).toString()).div(10**b)));let L=A.sub(x).div(A).mul(100);return{amountOut:I,minAmountOut:C,currentPrice:A,executionPrice:x,priceImpact:L,fee:h}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:u}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",u.toString());let c=i.toString()===t.mintA.address,[l,m]=c?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new O(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,u],p=c?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new O(f.toString()).div(10**t[c?"mintB":"mintA"].decimals).div(new O(y.toString()).div(10**t[c?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(b).toString()} ${l.symbol||l.address}`);let g=new We(0),w=n;if(!w.isZero()){w.gt(f)&&(w=f.sub(new We(1)));let C=f.sub(w);g=y.mul(w).div(C).mul(So).div(So.sub(Zr))}let A=new We(new O(g.toString()).mul(1+s).toFixed(0)),k=g,B=A;this.logDebug("amountIn:",new O(k.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new O(B.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let h=null;!g.isZero()&&!w.isZero()&&(h=new O(w.toString()).div(10**m.decimals).div(new O(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${h.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new O(1).div(h).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(k.toString()),I=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${I.toString()}%`),{amountIn:k,maxAmountIn:B,currentPrice:b,executionPrice:h,priceImpact:I}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:r,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),w=y&&b.address===j.toBase58(),{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),A||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:A,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:d});m.addInstruction(h||{}),B===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:B,outputTokenUseSolBalance:w,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),I=4;return t.pooltype.includes("StablePool")&&(I=5),m.addInstruction({instructions:[Co({version:I,poolKeys:S,userKeys:{tokenAccountIn:A,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:i,amountOut:r,fixedSide:a})],instructionTypes:[I===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await Ee(this.scope.connection,t.map(l=>({pubkey:new He(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Ko.decode(m.accountInfo.data);r[String(t[l])]=F(R({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ee(this.scope.connection,s.map(l=>({pubkey:new He(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new We(ud.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=F(R({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new O(p.toString()).div(new O(10).pow(m.quoteDecimal.toString())).div(new O(d.toString()).div(new O(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Lo({[t]:n}),r=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as z}from"@solana/web3.js";import rt from"bn.js";import{AccountLayout as Pu,TOKEN_PROGRAM_ID as Ii}from"@solana/spl-token";var Bi=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var A;let{programId:t,owner:n=((A=this.scope.owner)==null?void 0:A.publicKey)||z.default,mint1:i,mint2:r,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new rt(new z(i.address).toBuffer()).gt(new rt(new z(r.address).toBuffer()))?[r,i,new O(1).div(a)]:[i,r,a],g=ne.priceToSqrtPriceX64(b,y.decimals,f.decimals),w=await Ae.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:u,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(c),p.versionBuild({txVersion:d,extInfo:{address:F(R({},w.address),{programId:t.toString(),id:w.address.poolId.toString(),mintA:y,mintB:f,openTime:u.toString(),vault:{A:w.address.mintAVault.toString(),B:w.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:R({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Ua),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,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,w=n.useSOLBalance&&e.mintA.address===j.toString(),A=n.useSOLBalance&&e.mintB.address===j.toString(),[k,B]=s==="MintA"?[a,u]:[u,a],{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||k.isZero()?{payer:this.scope.ownerPubKey,amount:k}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});h&&(b=h),f.addInstruction(S||{});let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});I&&(g=I),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let x=t||await this.getClmmPoolKeys(e.id),L=await Ae.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:F(R({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:R({},L.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,w=n.useSOLBalance&&e.mintA.address===j.toBase58(),A=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(B||{});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:A||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});h&&(g=h),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=t||await this.getClmmPoolKeys(e.id),C=await Ae.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:i,amountMaxB:r,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(C),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===j.toString(),g=u.useSOLBalance&&t.mintB.address===j.toString(),{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});w&&(y=w),p.addInstruction(A||{});let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(B||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=n!=null?n:await this.getClmmPoolKeys(t.id),S=Ae.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:h,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:r,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===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(w||{});let{account:A,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A&&(y=A),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),h=Ae.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:r,otherAmountMax:s});return d.addInstruction(h),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:h.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=r.useSOLBalance&&t.mintA.address===j.toString(),f=r.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=w,A&&p.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,B&&p.addInstruction(B);let h=[];for(let x of t.rewardDefaultInfos){let L=r.useSOLBalance&&x.mint.address===j.toString(),D;if(x.mint.address===t.mintA.address)D=b;else if(x.mint.address===t.mintB.address)D=g;else{let{account:N,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(x.mint.programId),mint:new z(x.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});D=N,H&&p.addInstruction(H)}h.push(D)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),I=await Ae.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:h},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:I.instructions,instructionTypes:[V.ClmmDecreasePosition]});let C=R({},I.address);if(r.closePosition){let x=await Ae.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i});p.addInstruction({endInstructions:x.instructions,endInstructionTypes:x.instructionTypes}),C=R(R({},C),x.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:C}})}async lockPosition(e){let{programId:t=Hn,authProgramId:n=Ji,poolProgramId:i=Rn,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:u}=e,c=this.createTxBuilder(),l=await Ae.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint});return c.addInstruction(l),c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:l.address})}async harvestLockPosition(e){let{programId:t=Hn,authProgramId:n=Ji,clmmProgram:i=Rn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=Ai.decode(y.data),b=a.useSOLBalance&&d.mintA.address===j.toString(),g=a.useSOLBalance&&d.mintB.address===j.toString(),w,A,{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new z(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});w=k,B&&p.addInstruction(B);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new z(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:c});A=h,S&&p.addInstruction(S);let I={},C=[];for(let Oe of d.rewardInfos){let mt=a.useSOLBalance&&Oe.mint.address===j.toString(),At=I[Oe.mint.address];if(!At){let{account:Ot,instructionParams:Vt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(Oe.mint.programId),mint:new z(Oe.mint.address),notUseTokenAccount:mt,owner:this.scope.ownerPubKey,skipCloseAccount:!mt,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:mt?!1:u});At=Ot,Vt&&p.addInstruction(Vt)}I[Oe.mint.address]=At,C.push(At)}let x=yi(t,s.lockNftMint).publicKey,L=ue(this.scope.ownerPubKey,s.lockNftMint,Ii).publicKey,D=Q.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),N=Q.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:H}=le(new z(d.programId),s.poolId,D),{publicKey:X}=le(new z(d.programId),s.poolId,N),{publicKey:W}=Kt(new z(d.programId),s.poolId,f.tickLower,f.tickUpper),Ve=[];for(let Oe=0;Oe<d.rewardInfos.length;Oe++)Ve.push({poolRewardVault:new z(d.rewardInfos[Oe].vault),ownerRewardVault:C[Oe],rewardMint:new z(d.rewardInfos[Oe].mint.address)});let Qt=await Ae.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:s.lockOwner,lockNftMint:s.lockNftMint,lockNftAccount:L,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:W,vaultA:new z(d.vault.A),vaultB:new z(d.vault.B),tickArrayLower:H,tickArrayUpper:X,userVaultA:w,userVaultB:A,mintA:new z(d.mintA.address),mintB:new z(d.mintB.address),rewardAccounts:Ve});return p.addInstruction({instructions:[Qt],instructionTypes:[V.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Ae.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return r.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!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()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(n.mint.address),mint:new z(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new O(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:i,checkCreateATAOwner:r});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Ae.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new z(n.mint.programId),mint:new z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new O(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Ae.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new z(m.mint.programId),mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});l=R(R({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!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(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new O(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:i,checkCreateATAOwner:r});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Ae.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new O(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Ae.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});c.addInstruction(b),l=R(R({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:r=!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(j),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(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:i,checkCreateATAOwner:r});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Ae.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:i=!0,checkCreateATAOwner:r=!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(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(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:i,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Ae.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=R(R({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=u.useSOLBalance&&e.mintA.address===j.toBase58(),g=u.useSOLBalance&&e.mintB.address===j.toBase58(),w;!s||s.equals(new O(0))?w=f?bt.add(new rt(1)):gt.sub(new rt(1)):w=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=h,S&&y.addInstruction(S)}let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=h,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Ae.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},inputMint:new z(n),amountIn:i,amountOutMin:r,sqrtPriceLimitX64:w,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=u.useSOLBalance&&e.mintA.address===j.toBase58(),g=u.useSOLBalance&&e.mintB.address===j.toBase58(),w;!s||s.equals(new O(0))?w=n.toString()===e.mintB.address?bt.add(new rt(1)):gt.sub(new rt(1)):w=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let A;if(!A){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});A=h,S&&y.addInstruction(S)}let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=h,S&&y.addInstruction(S)}(!A||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:A,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Ae.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:A,tokenAccountB:k},outputMint:new z(n),amountOut:i,amountInMax:r,sqrtPriceLimitX64:w,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:u,computeBudgetConfig:c}){var d;let l={};for(let p of this.scope.account.tokenAccountRawInfos)r?ue(this.scope.ownerPubKey,p.accountInfo.mint,a).publicKey.equals(p.pubkey)&&(l[p.accountInfo.mint.toString()]=p.pubkey):l[p.accountInfo.mint.toString()]=p.pubkey;let m=this.createTxBuilder();for(let p of Object.values(e)){if(t[p.id]===void 0||!t[p.id].find(h=>!h.liquidity.isZero()||h.rewardInfos.find(S=>!S.rewardAmountOwed.isZero())))continue;let y=p,f=i.useSOLBalance&&y.mintA.address===j.toString(),b=i.useSOLBalance&&y.mintB.address===j.toString(),g=l[y.mintA.address];if(!g){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new z(y.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:f?!1:r,checkCreateATAOwner:s});g=h,S&&m.addInstruction(S)}let w=l[y.mintB.address];if(!w){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new z(y.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:b?!1:r,checkCreateATAOwner:s});w=h,S&&m.addInstruction(S)}l[y.mintA.address]=g,l[y.mintB.address]=w;let A=[];for(let h of y.rewardDefaultInfos){let S=i.useSOLBalance&&h.mint.address===j.toString(),I=l[h.mint.address];if(!I){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(h.mint.programId),mint:new z(h.mint.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r});I=C,x&&m.addInstruction(x)}l[h.mint.address]=I,A.push(I)}let k=await this.getClmmPoolKeys(y.id),B=[];for(let h=0;h<k.rewardInfos.length;h++)B.push({poolRewardVault:new z(k.rewardInfos[h].vault),ownerRewardVault:A[h],rewardMint:new z(k.rewardInfos[h].mint.address)});for(let h of t[p.id]){let S=(d=n==null?void 0:n[p.id])==null?void 0:d[h.nftMint.toBase58()];if(S){let I=ue(this.scope.ownerPubKey,S.lockNftMint,Ii).publicKey,C=Q.getTickArrayStartIndexByTick(h.tickLower,k.config.tickSpacing),x=Q.getTickArrayStartIndexByTick(h.tickUpper,k.config.tickSpacing),{publicKey:L}=le(new z(k.programId),S.poolId,C),{publicKey:D}=le(new z(k.programId),S.poolId,x),{publicKey:N}=Kt(new z(k.programId),S.poolId,h.tickLower,h.tickUpper),H=yi(Hn,S.lockNftMint).publicKey,X=Ae.harvestLockPositionInstructionV2({programId:Hn,auth:Ji,lockPositionId:H,clmmProgram:Rn,lockOwner:S.lockOwner,lockNftMint:S.lockNftMint,lockNftAccount:I,positionNftAccount:S.nftAccount,positionId:S.positionId,poolId:S.poolId,protocolPosition:N,vaultA:new z(k.vault.A),vaultB:new z(k.vault.B),tickArrayLower:L,tickArrayUpper:D,userVaultA:g,userVaultB:w,mintA:new z(k.mintA.address),mintB:new z(k.mintB.address),rewardAccounts:B});m.addInstruction({instructions:[X],instructionTypes:[V.ClmmHarvestLockPosition],lookupTableAddress:k.lookupTableAccount?[k.lookupTableAccount]:[]})}else{let I=Ae.decreaseLiquidityInstructions({poolInfo:y,poolKeys:k,ownerPosition:h,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w,rewardAccounts:A},liquidity:new rt(0),amountMinA:new rt(0),amountMinB:new rt(0)});m.addInstruction(I)}}}return u===0?m.sizeCheckBuildV0({computeBudgetConfig:c}):m.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(fi(e).publicKey);return t?nu.decode(t.data).whitelistMints.filter(i=>!i.equals(z.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new rt(1))).map(s=>Je(new z(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return i.forEach(s=>{if(!s)return;let a=Ai.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ee(this.scope.connection,e.map(r=>({pubkey:new z(r)})),t),i={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=yn.decode(s.accountInfo.data),u=ne.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[r])]=F(R({},a),{currentPrice:u,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),i=await Ee(this.scope.connection,Array.from(n).map(u=>({pubkey:new z(u)}))),r={};i.forEach(u=>{!u.accountInfo||(r[u.pubkey.toBase58()]=eu.decode(u.accountInfo.data))});let s=await Se.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:je({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||Ii.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?un((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:je({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||Ii.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?un((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:F(R({},r[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Se.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await xn({connection:this.scope.connection,mints:Array.from(n).map(m=>new z(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await Ee(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=$a(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(Pu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(Pu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=F(R({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:u.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(z.default)).map(m=>({mint:je({address:m.tokenMint.toBase58(),programId:Ii.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:u,poolKeys:c,computePoolInfo:r[e],tickData:s}}};import{PublicKey as G}from"@solana/web3.js";import{AccountLayout as hd,NATIVE_MINT as Wo,TOKEN_PROGRAM_ID as Lt}from"@solana/spl-token";import as from"bn.js";import _o from"decimal.js-light";import xi from"bn.js";function Oo(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function cd(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=Oo(o,e);return n.gt(En)&&(t=t.add(new xi(1)),e=o.div(t),n=Oo(o,t),n.gt(En)&&(e=e.add(new xi(1)))),[t,e]}var En=new xi(0),No=class{static swapWithoutFees(e,t,n){let i=t.mul(n),r=t.add(e),[s,a]=cd(i,r),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,i,r){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return Oo(e.mul(n),t).gt(En)&&s.gt(En)&&(s=s.add(new xi(1))),Oo(e.mul(i),t).gt(En)&&a.gt(En)&&(a=a.add(new xi(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import hu from"bn.js";var ss=new hu(1e6);function ld(o,e,t){return o.mul(e).add(t).sub(new hu(1)).div(t)}function ku(o,e,t){return o.mul(e).div(t)}var Mo=class{static tradingFee(e,t){return ld(e,t,ss)}static protocolFee(e,t){return ku(e,t,ss)}static fundFee(e,t){return ku(e,t,ss)}};var vo=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let r=Mo.tradingFee(e,i),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:u}=No.swapWithoutFees(s,t,n),c=a.add(r);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:r,outputMint:s,outputAmount:a}){let[u,c,l,m,d]=t.address===s.toString()?[i,r,e.decimals,t.decimals,e.address]:[r,i,t.decimals,e.decimals,t.address],p=new _o(c.toString()).div(10**m).div(new _o(u.toString()).div(10**l)),y=a.gte(c)?c.sub(new as(1)):a,f=c.sub(y),b=tn(u.mul(y),f),g=tn(b.mul(new as(1e6)),new as(1e6).sub(n)),w=g.sub(b),A=new _o(y.toString()).div(10**m).div(new _o(g.toString()).div(10**l)),k=p.isZero()?0:A.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:w,priceImpact:k}}};import Ke from"bn.js";import{PublicKey as Si,TransactionInstruction as kn,Keypair as wd,SystemProgram as Ad}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Bu,TOKEN_2022_PROGRAM_ID as cs,TOKEN_PROGRAM_ID as cn}from"@solana/spl-token";var md=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),lI=Buffer.from("amm_config","utf8"),dd=Buffer.from("pool","utf8"),pd=Buffer.from("pool_lp_mint","utf8"),fd=Buffer.from("pool_vault","utf8"),yd=Buffer.from("observation","utf8");function Fn(o){return ce([md],o)}function us(o,e,t,n){return ce([dd,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function bd(o,e){return ce([pd,e.toBuffer()],o)}function Tu(o,e,t){return ce([fd,e.toBuffer(),t.toBuffer()],o)}function Vo(o,e){return ce([yd,e.toBuffer()],o)}function Iu({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let r=Fn(e).publicKey,s=o||us(e,t,n,i).publicKey,a=bd(e,s).publicKey,u=Tu(e,s,n).publicKey,c=Tu(e,s,i).publicKey,l=Vo(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:u,vaultB:c,observationId:l}}var gd=Buffer.from("locked_liquidity","utf8");function Eo(o,e){return ce([gd,e.toBuffer()],o)}var Pd=ae("Raydium_cpmm"),hn={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],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function xu(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,w,A){let k=E([P("amountMaxA"),P("amountMaxB"),P("openTime")]),B=us(o,t,r,s).publicKey,h=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(B),isWritable:!0},{pubkey:r,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:cn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Bu,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1}],S=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:w,openTime:A},S),new kn({keys:h,programId:o,data:Buffer.from([...hn.initialize,...S])})}function Su(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y){let f=E([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:cs,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 Pd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new kn({keys:b,programId:o,data:Buffer.from([...hn.deposit,...g])})}function Ku(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y){let f=E([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:en,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new kn({keys:b,programId:o,data:Buffer.from([...hn.withdraw,...g])})}function Fo(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y,f){let b=E([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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}],w=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},w),new kn({keys:g,programId:o,data:Buffer.from([...hn.swapBaseInput,...w])})}function Cu(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y,f){let b=E([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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}],w=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},w),new kn({keys:g,programId:o,data:Buffer.from([...hn.swapBaseOutput,...w])})}async function Ru(o){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,r=[],[s,a]=[new Si(t.id),new Si(t.lpMint.address)],u;if(i)u=new Si((await i(1))[0]);else{let b=wd.generate();r.push(b),u=b.publicKey}let{publicKey:c}=ue(e.feePayer,u,cn),{publicKey:l}=dn(u),{publicKey:m}=Eo(o.lockProgram,u),{publicKey:d}=ue(e.feePayer,a,cn),{publicKey:p}=ue(o.lockAuthProgram,a,cn),y=kd({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:u,nftAccount:c,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new Si(n.vault.A),poolVaultB:new Si(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(f=o.withMetadata)!=null?f:!0});return{address:{nftMint:u,nftAccount:c,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[V.CpmmLockLp],lookupTableAddress:[]}}function kd({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:r,nftAccount:s,poolId:a,lockPda:u,mintLp:c,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{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:at,isSigner:!1,isWritable:!1},{pubkey:Ad.programId,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:Bu,isSigner:!1,isWritable:!1},{pubkey:Ft,isSigner:!1,isWritable:!1}],w=E([P("lpAmount"),_e("withMetadata")]),A=Buffer.alloc(w.span);w.encode({lpAmount:f,withMetadata:b},A);let k=Buffer.from([...hn.lockCpLiquidity,...A]);return new kn({keys:g,programId:o,data:k})}function Lu({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:r,mintLp:s,userVaultA:a,userVaultB:u,poolVaultA:c,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:f!=null?f:eo,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:na,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1}],w=E([P("lpFeeAmount")]),A=Buffer.alloc(w.span);w.encode({lpFeeAmount:y},A);let k=Buffer.from([...hn.collectCpFee,...A]);return new kn({keys:g,programId:o,data:k})}var Ou=E([ye(8),U("bump"),_e("disableCreatePool"),Wt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),Y(P(),16)]),Do=E([ye(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),U("bump"),U("status"),U("lpDecimals"),U("mintDecimalA"),U("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),Y(P(),32)]);var Ki=class extends Be{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ee(this.scope.connection,e.map(m=>({pubkey:new G(m)}))),i={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Do.decode(d.accountInfo.data);i[String(e[m])]=F(R({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await Ee(this.scope.connection,m.map(p=>({pubkey:new G(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Ou.decode(y.data)}}let u={},c=await Ee(this.scope.connection,s.map(m=>({pubkey:new G(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new Ke(hd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(R({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new O(y.toString()).div(new O(10).pow(d.mintDecimalB)).div(new O(p.toString()).div(new O(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var u,c,l,m;let r=e[i],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return F(R({},n),{[i]:F(R({},r),{id:new G(i),configInfo:r.configInfo,version:7,authority:Fn(r.programId).publicKey,mintA:je({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?un((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:je({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?un((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await xn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=je({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?un(n[t.mintA.toBase58()].feeConfig):void 0}}),r=je({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?un(n[t.mintB.toBase58()].feeConfig):void 0}}),s=je({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Lt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new O(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new O(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:u,feeConfig:c,computeBudgetConfig:l}=p,m=Re(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var H,X,W;let y=r.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),f=new Ke(new G(m.mintA.address).toBuffer()).lte(new Ke(new G(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[w,A]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],k=r.useSOLBalance&&b.address===Wo.toBase58(),B=r.useSOLBalance&&g.address===Wo.toBase58(),[h,S]=[new G(b.address),new G(g.address)],I=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:y,amount:w}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:s,checkCreateATAOwner:a});I.addInstruction(x||{});let{account:L,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({mint:new G(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:y,amount:A}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(D||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let N=Iu({poolId:e,programId:t,configId:new G(c.id),mintA:h,mintB:S});return I.addInstruction({instructions:[xu(t,this.scope.ownerPubKey,new G(c.id),N.authority,N.poolId,h,S,N.lpMint,C,L,ue(this.scope.ownerPubKey,N.lpMint).publicKey,N.vaultA,N.vaultB,n,new G((X=b.programId)!=null?X:Lt),new G((W=g.programId)!=null?W:Lt),N.observationId,w,A,i)],instructionTypes:[V.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.versionBuild({txVersion:u,extInfo:{address:F(R({},N),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:c})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(R({},t),{lpAmount:new O(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Fe(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new O(i.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,A=t.mintA.address===Wo.toString(),k=t.mintB.address===Wo.toString(),B=this.createTxBuilder(),[h,S]=[new G(t.mintA.address),new G(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||(r?i:w).isZero()?{payer:this.scope.ownerPubKey,amount:r?i:w}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(C||{});let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(r?w:i).isZero()?{payer:this.scope.ownerPubKey,amount:r?w:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(L||{}),!I&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let D=await m.getCreatedTokenAccount({mint:new G(t.lpMint.address)}),Ve=await m.handleTokenAccount({side:"out",amount:0,mint:new G(t.lpMint.address),tokenAccount:D,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:N}=Ve,H=Re(Ve,["tokenAccount"]);B.addInstruction(H);let X=n!=null?n:await this.getCpmmPoolKeys(t.id),W=new Fe(new Ke(1)).sub(s);return B.addInstruction({instructions:[Su(new G(t.programId),this.scope.ownerPubKey,new G(X.authority),new G(t.id),N,I,x,new G(X.vault.A),new G(X.vault.B),h,S,new G(t.lpMint.address),a?a==null?void 0:a.liquidity:W.mul(f).quotient,r?b.amount:w,r?w:b.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),B.addCustomComputeBudget(u),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var N,H;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Fe(new Ke(1)).sub(r),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(i.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(i.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,w]=[new G(t.mintA.address),new G(t.mintB.address)],A=g.equals(j),k=w.equals(j),B,h,{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:A,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,associatedOnly:!A,checkCreateATAOwner:!1});B=S,I&&b.addInstruction(I);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});h=C,x&&b.addInstruction(x),(!B||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new G(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let D=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Ku(new G(t.programId),this.scope.ownerPubKey,new G(D.authority),new G(t.id),L,B,h,new G(D.vault.A),new G(D.vault.B),g,w,new G(t.lpMint.address),i,l.sub((N=p.fee)!=null?N:new Ke(0)),m.sub((H=y.fee)!=null?H:new Ke(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:D.lookupTableAccount?[D.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,L,D,N,H;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:r,inputAmount:s,swapResult:a,slippage:u=0,config:c,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},c),f=this.createTxBuilder(),[b,g]=[new G(t.mintA.address),new G(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ke((1+u)*1e4)).div(new Ke(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ke((1-u)*1e4)).div(new Ke(1e4));let w=t.mintA.address===j.toBase58(),A=t.mintB.address===j.toBase58(),{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new G((C=t.mintA.programId)!=null?C:Lt),owner:this.scope.ownerPubKey,createInfo:w||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});B&&f.addInstruction(B);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new G((x=t.mintB.programId)!=null?x:Lt),owner:this.scope.ownerPubKey,createInfo:A||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!k||!h)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:h,mintAUseSOLBalance:w,mintBUseSOLBalance:A,associatedOnly:y});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?Cu(new G(t.programId),this.scope.ownerPubKey,new G(I.authority),new G(I.config.id),new G(t.id),i?k:h,i?h:k,new G(I.vault[i?"A":"B"]),new G(I.vault[i?"B":"A"]),new G((N=t[i?"mintA":"mintB"].programId)!=null?N:Lt),new G((H=t[i?"mintB":"mintA"].programId)!=null?H:Lt),i?b:g,i?g:b,Vo(new G(t.programId),new G(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Fo(new G(t.programId),this.scope.ownerPubKey,new G(I.authority),new G(I.config.id),new G(t.id),i?k:h,i?h:k,new G(I.vault[i?"A":"B"]),new G(I.vault[i?"B":"A"]),new G((L=t[i?"mintA":"mintB"].programId)!=null?L:Lt),new G((D=t[i?"mintB":"mintA"].programId)!=null?D:Lt),i?b:g,i?g:b,Vo(new G(t.programId),new G(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?V.CpmmSwapBaseOut:V.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var c,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(c=e.poolKeys)!=null?c:await this.getCpmmPoolKeys(t.id),u=await Ru({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:to,lockAuthProgram:(d=e.authProgram)!=null?d:no,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(u),s.addCustomComputeBudget(i),s.versionBuild({txVersion:r,extInfo:u.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:r=to,authProgram:s=no,cpmmProgram:a,computeBudgetConfig:u,txVersion:c}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new G(t.mintA.address),new G(t.mintB.address)],y=d.equals(j),f=p.equals(j),b,g,{account:w,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=w,A&&m.addInstruction(A);let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=k,B&&m.addInstruction(B),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let h=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=ue(l,i,Lt),{publicKey:I}=Eo(r,i),{publicKey:C}=ue(s,new G(t.lpMint.address),Lt);return m.addInstruction({instructions:[Lu({programId:r!=null?r:to,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:no,nftMint:i,nftAccount:S,lockPda:I,poolId:new G(t.id),mintLp:new G(h.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new G(h.vault.A),poolVaultB:new G(h.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[V.CpmmCollectLockFee]}),m.addCustomComputeBudget(u),m.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let r=n.toString()===e.mintB.address,s=vo.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new O(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new Ke((1-i)*1e4)).div(new Ke(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:r,epochInfo:s,baseIn:a}){var k,B,h,S,I,C,x,L,D;let u=1-Number(r.toSignificant())/100,c=new Ke(new O(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=ge(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((k=l.fee)!=null?k:new Ke(0)),d=new Ke(new O(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,O.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(h=(B=l.fee)==null?void 0:B.toString())!=null?h:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:dt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let N=Td(y,t,n,d);this.logDebug("lpAmountData:",{amountA:N.amountA.toString(),amountB:N.amountB.toString()}),f=ge(N[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Fe(new Ke(1)).add(r),g=new Fe(new Ke(1)).sub(r),w=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Ke(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),A=ge(g.mul(f.amount.sub((I=f.fee)!=null?I:new Ke(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",w.amount.toString(),"maxAnotherAmountFee:",(D=(L=w.fee)==null?void 0:L.toString())!=null?D:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:w,minAnotherAmount:A,liquidity:y}}};function Td(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Ke(1)));let r=o.mul(t).div(n);return!r.isZero()&&!o.mul(t).mod(n).isZero()&&(r=r.add(new Ke(1))),{amountA:i,amountB:r}}import{PublicKey as In}from"@solana/web3.js";import{createTransferInstruction as Eu,TOKEN_PROGRAM_ID as Ce,TOKEN_2022_PROGRAM_ID as Go}from"@solana/spl-token";import Xo from"bn.js";var Nu={[yr.toBase58()]:3},Mu={3:yr};var ls=E([ye(5),ye(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),ye(7)]),_u={3:ls};import{PublicKey as vu}from"@solana/web3.js";var qo=ae("Serum"),Uo=class{static getProgramId(e){let t=Mu[e];return t||qo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Nu[t];return n||qo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=_u[e];return t||qo.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,r;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));r=vu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:r,nonce:i}}return qo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:vu.default,nonce:i}}};import{PublicKey as te,SystemProgram as Id,TransactionInstruction as Bd}from"@solana/web3.js";import Tn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as xd,TOKEN_2022_PROGRAM_ID as Sd,TOKEN_PROGRAM_ID as Kd}from"@solana/spl-token";function Cd(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y){var h;let f=[],b=[T({pubkey:Kd,isWritable:!1}),T({pubkey:Sd,isWritable:!1}),T({pubkey:xd,isWritable:!1}),T({pubkey:Id.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})];b.push(T({pubkey:t})),b.push(T({pubkey:i}));let g=[u,c],w=[l,m],A=[r,s,a];for(let S=0;S<g.length;S++){let I=g[S],C=A[S]===I.mintA.address;if(b.push(T({pubkey:new te(I.programId),isWritable:!1})),S===g.length-1?b.push(T({pubkey:i})):b.push(T({pubkey:n})),b.push(T({pubkey:new te(A[S])})),b.push(T({pubkey:new te(A[S+1])})),I.version===6){let x=w[S];b.push(T({pubkey:new te(x.config.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),b.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),b.push(T({pubkey:new te(I.observationId)})),b.push(T({pubkey:en})),b.push(T({pubkey:ot(new te(I.programId),new te(I.id)).publicKey})),f.push(Rd(I.sqrtPriceX64.toString(),C));for(let L of(h=y[S])!=null?h:[])b.push(T({pubkey:new te(L)}))}else if(I.version===5){let x=w[S];b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.authority),isWritable:!1})),b.push(T({pubkey:new te(x.marketProgramId)})),b.push(T({pubkey:new te(x.marketAuthority)})),b.push(T({pubkey:ta,isWritable:!1})),b.push(T({pubkey:new te(x.openOrders)})),b.push(T({pubkey:new te(x.vault.A)})),b.push(T({pubkey:new te(x.vault.B)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.marketId)})),b.push(T({pubkey:new te(x.marketBids)})),b.push(T({pubkey:new te(x.marketAsks)})),b.push(T({pubkey:new te(x.marketEventQueue)})),b.push(T({pubkey:new te(x.marketBaseVault)})),b.push(T({pubkey:new te(x.marketQuoteVault)}))}else if(I.version===4){let x=w[S],L=I.status!==1;b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.authority),isWritable:!1})),b.push(T({pubkey:new te(L?x.id:x.marketProgramId)})),b.push(T({pubkey:new te(L?x.id:x.marketAuthority)})),b.push(T({pubkey:new te(L?x.id:x.openOrders)})),b.push(T({pubkey:new te(x.vault.A)})),b.push(T({pubkey:new te(x.vault.B)})),b.push(T({pubkey:new te(L?x.id:x.marketId)})),b.push(T({pubkey:new te(L?x.id:x.marketBids)})),b.push(T({pubkey:new te(L?x.id:x.marketAsks)})),b.push(T({pubkey:new te(L?x.id:x.marketEventQueue)})),b.push(T({pubkey:new te(L?x.id:x.marketBaseVault)})),b.push(T({pubkey:new te(L?x.id:x.marketQuoteVault)}))}else if(I.version===7){let x=w[S];b.push(T({pubkey:new te(x.authority)})),b.push(T({pubkey:new te(x.config.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),b.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),b.push(T({pubkey:new te(I.observationId)}))}else throw Error("pool type error")}let k=E([U("insId"),P("amountIn"),P("amountOut"),Y(J(),f.length,"clmmPriceLimit")]),B=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},B),new Bd({keys:b,programId:o,data:B})}function Rd(o,e){if(o)if(e){let t=new Tn(o).div(new Tn(25));return t.gt(ko)?t:ko}else{let t=new Tn(o).mul(new Tn(25));return t.lt(ho)?t:ho}else return e?ko:ho}function Vu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,r,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ge(m),p=t.equals(d.mintA.address)?bt.add(ct):gt.sub(ct);return Ae.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?r:new Tn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Fo(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new te(m[d?"mintA":"mintB"].address),new te(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Co({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new Tn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Cd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new Tn(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var zt=new Xo(0),Ci=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:i=1}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<r.length;c++)u.gte(r[c].amount)?(s.addInstruction({instructions:[qt({tokenAccount:r[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(r[c].amount)):s.addInstruction({instructions:[qt({tokenAccount:r[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),r=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(j),m=c.amount.token.mint.equals(j),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Go:Ce,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?Go:Ce);else{let{account:k,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Go:Ce,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[qt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ce})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Go:Ce)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),A=Vu({routeProgram:r,inputMint:d,swapInfo:F(R({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[Eu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]}),k.addInstruction(A);let{transactions:B}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[Eu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(A),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:A.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:A.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ea,clmm:n=Rn,cpmm:i=eo}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ko.offsetOf("baseMint"),length:64}}),s=E([K("baseMint"),K("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),u=E([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:yn.span}],dataSlice:{offset:yn.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:Do.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:r}){e=e.toString()===In.default.toString()?j:e,t=t.toString()===In.default.toString()?j:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&u[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Lo(r),a={};Object.values(s).forEach(f=>{i.delete(f.mintA.address),a[f.mintA.address]={address:new In(f.mintA.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(f.mintB.address),a[f.mintB.address]={address:new In(f.mintB.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ce)?(i.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(b),f.mintProgramB.equals(Ce)?(i.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let c=await xn({connection:this.scope.connection,mints:Array.from(i).map(f=>new In(f))});a=R(R({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(R({},f),{[b]:F(R({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:r,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,w,A,k,B,h,S,I,C;let m=l===void 0?new Xo(0):e.raw.mul(new Xo(l.feeBps.toNumber())).div(new Xo(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(R({},t),{address:st(t.address).toString()}),b=[];for(let x of n)try{b.push(F(R({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",x.version,x.id.toString(),L.message)}this.logDebug("direct done");for(let[x,L]of Object.entries(i)){let D={chainId:101,address:x,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},N=L.in.map(X=>{try{return{pool:X,data:this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:u,epochInfo:c,slippage:a,outputToken:D,amountIn:p})}}catch(W){this.logDebug("route in error",X.version,X.id.toString(),W.message);return}}).sort((X,W)=>{var Oe,mt,At,Ot;let Ve=X===void 0?zt:X.data.amountOut.amount.raw.sub((mt=(Oe=X.data.amountOut.fee)==null?void 0:Oe.raw)!=null?mt:zt),Qt=W===void 0?zt:W.data.amountOut.amount.raw.sub((Ot=(At=W.data.amountOut.fee)==null?void 0:At.raw)!=null?Ot:zt);return Ve.lt(Qt)?1:-1})[0];if(N===void 0)continue;let H=new be(xo(D),N.data.amountOut.amount.raw.sub((w=(g=N.data.amountOut.fee)==null?void 0:g.raw)!=null?w:zt));for(let X of L.out)try{let W=this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:H});b.push(F(R({},W),{allTrade:!!(N.data.allTrade&&W.allTrade),amountIn:N.data.amountIn,amountOut:W.amountOut,minAmountOut:W.minAmountOut,currentPrice:void 0,executionPrice:new O(new nt({baseToken:N.data.amountIn.amount.token,denominator:N.data.amountIn.amount.raw,quoteToken:W.amountOut.amount.token,numerator:W.amountOut.amount.raw.sub((k=(A=W.amountOut.fee)==null?void 0:A.raw)!=null?k:zt)}).toFixed()),priceImpact:new O(N.data.priceImpact.add(W.priceImpact).toFixed()),fee:[N.data.fee[0],W.fee[0]],routeType:"route",poolInfoList:[N.pool,X],remainingAccounts:[N.data.remainingAccounts[0],W.remainingAccounts[0]],minMiddleAmountFee:(B=W.amountOut.fee)!=null&&B.raw?new be(N.data.amountOut.amount.token,((S=(h=N.data.amountOut.fee)==null?void 0:h.raw)!=null?S:zt).add((C=(I=W.amountOut.fee)==null?void 0:I.raw)!=null?C:zt)):void 0,middleToken:N.data.amountOut.amount.token,poolReady:N.data.poolReady&&W.poolReady,poolType:[N.data.poolType,W.poolType],feeConfig:y,expirationTime:Bt(N.data.expirationTime,W.expirationTime)}))}catch(W){this.logDebug("route out error",X.version,X.id.toString(),W.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,L)=>x.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(zt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:r,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:w,executionPriceX64:A}=Se.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new O(y.toFixed()),executionPrice:new O(f.toFixed()),priceImpact:new O(b.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[A],expirationTime:Bt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:Pi(F(R({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Pi(F(R({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:Pi(F(R({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Pi(F(R({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(i.size>0){let c=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ee(this.scope.connection,Array.from(s).map(l=>({pubkey:new In(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=ls.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Uo.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(R({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=R({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:rs({programId:new In(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:Fn(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:je({address:c.mintLp.toBase58(),programId:Ce.toBase58(),decimals:c.lpDecimals}),config:F(R({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{PublicKey as Ld,Transaction as ms,TransactionInstruction as Od}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Nd}from"@solana/spl-token";import Fu from"bn.js";var Ze=class extends Be{static getPdaPoolId(e,t){return ce([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return ce([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Fu(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>Ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ze.getPdaOwnerId(t,m,i,l).publicKey));let u=await Pt(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!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let g=Ze.POOL_LAYOUT.decode(f.data),w=Ze.OWNER_LAYOUT.decode(b.data),A=g.openTime.toNumber(),k=g.endTime.toNumber(),B=w.tokenInfo.map(I=>I.debtAmount.gt(new Fu(0))).filter(I=>!I).length!==3,h=r>A&&r<k&&g.status===1,S=B&&h;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:w.lpAmount,project:Ze.VERSION_PROJECT[m],openTime:A,endTime:k,canClaim:S,canClaimErrorType:B?h?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((I,C)=>({mintAddress:I.mintAddress,mintVault:I.mintVault,mintDecimals:I.mintDecimals,perLpLoss:I.perLpLoss,debtAmount:w.tokenInfo[C].debtAmount.add(w.tokenInfo[C].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r=[];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(Ie.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(Ie.WSOL.mint),associatedOnly:u.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(c)}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r={};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(Ie.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return fr(u,[i,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ms().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ms().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ms().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=E([]),r=[{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:Nd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Od({keys:r,programId:e,data:a})}},wt=Ze;wt.CLAIMED_NUM=3,wt.POOL_LAYOUT=E([ye(8),U("bump"),U("status"),P("openTime"),P("endTime"),K("ammId"),Y(E([U("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),Y(P(),10,"padding")]),wt.OWNER_LAYOUT=E([ye(8),U("bump"),U("version"),K("poolId"),K("owner"),P("lpAmount"),Y(E([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),Y(P(),4,"padding")]),wt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Ld(e)),wt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},wt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ri}from"@solana/web3.js";import Li from"bn.js";import{TOKEN_PROGRAM_ID as Gu}from"@solana/spl-token";import{SystemProgram as Bn,SYSVAR_RENT_PUBKEY as _d,Transaction as Du,TransactionInstruction as vd}from"@solana/web3.js";import{createInitializeAccountInstruction as Wu,TOKEN_PROGRAM_ID as qu}from"@solana/spl-token";function Md(o="accountFlags"){let e=new yo(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ds=E([ye(5),Md("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),ye(7)]);function Vd({programId:o,marketInfo:e}){let t=E([U("version"),Qe("instruction"),P("baseLotSize"),P("quoteLotSize"),Wt("feeRateBps"),P("vaultSignerNonce"),P("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:_d,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}:[]),i=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},i),new vd({keys:n,programId:o,data:i})}async function Uu({connection:o,wallet:e,marketInfo:t}){var s,a,u,c,l,m,d,p;let n=new Du,i=await o.getMinimumBalanceForRentExemption(165);n.add(Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:qu}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:qu}),Wu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Wu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let r=new Du;return r.add(Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(ds.span),space:ds.span,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:await o.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:(c=t.eventQueueSpace)!=null?c:262144+12,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Vd({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:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:r,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Dn=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,txVersion:c,computeBudgetConfig:l}){let m=this.scope.ownerPubKey,d=it({fromPublicKey:m,programId:r}),p=it({fromPublicKey:m,programId:r}),y=it({fromPublicKey:m,programId:r}),f=it({fromPublicKey:m,programId:r}),b=it({fromPublicKey:m,programId:r}),g=it({fromPublicKey:m,programId:Gu}),w=it({fromPublicKey:m,programId:Gu}),A=0,k=new Li(100);function B(){let D=new Li(0);for(;;)try{return{vaultOwner:Ri.createProgramAddressSync([d.publicKey.toBuffer(),D.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:D}}catch{if(D.iaddn(1),D.gt(new Li(25555)))throw Error("find vault owner error")}}let{vaultOwner:h,vaultSignerNonce:S}=B(),I=new Li(Math.round(10**e.decimals*n)),C=new Li(Math.round(n*10**t.decimals*i));if(I.eq(dt))throw Error("lot size is too small");if(C.eq(dt))throw Error("tick size or lot size is too small");let x=await Uu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:d,baseMint:e.mint,quoteMint:t.mint,baseVault:g,quoteVault:w,vaultOwner:h,requestQueue:p,eventQueue:y,bids:f,asks:b,feeRateBps:A,quoteDustThreshold:k,vaultSignerNonce:S,baseLotSize:I,quoteLotSize:C,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u}}),L=this.createTxBuilder();L.addInstruction({instructions:x[0].transaction.instructions,signers:x[0].signer});for await(let D of x.slice(1,x.length))L.addInstruction({instructions:D.transaction.instructions,signers:D.signer,instructionTypes:D.instructionTypes});return c===0?L.sizeCheckBuildV0({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new Ri(e.mint),quoteMin:new Ri(t.mint)}}):L.sizeCheckBuild({computeBudgetConfig:l,address:{marketId:d.publicKey,requestQueue:p.publicKey,eventQueue:y.publicKey,bids:f.publicKey,asks:b.publicKey,baseVault:g.publicKey,quoteVault:w.publicKey,baseMint:new Ri(e.mint),quoteMin:new Ri(t.mint)}})}};import{PublicKey as Ni}from"@solana/web3.js";import Qu from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Fd,TransactionInstruction as Xu}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zu}from"@solana/spl-token";var Ed=E([U("instruction"),fa("amount")]),Oi=E([U("instruction")]);function zo({programId:o},e){let t=[{pubkey:zu,isSigner:!1,isWritable:!1},{pubkey:qs,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,r])=>({pubkey:r,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Oi.span);return Oi.encode({instruction:2},n),new Xu({keys:t,programId:o,data:n})}function ps(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Oi.span);Oi.encode({instruction:2},s);let a=[{pubkey:zu,isWritable:!1,isSigner:!1},{pubkey:Fd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Xu({programId:e.programId,keys:a,data:s})}var Dd={[Zn.IDO_PROGRAM_ID_V1.toString()]:1,[Zn.IDO_PROGRAM_ID_V2.toString()]:2,[Zn.IDO_PROGRAM_ID_V3.toString()]:3,[Zn.IDO_PROGRAM_ID_V4.toString()]:4},Wn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:r}){let s=this.createTxBuilder(),a=Dd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ge(t),[c,l]=[!new Qu(e.coin).isZero(),!new Qu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(j),{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:i});!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(j),{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:i});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?[zo({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Ni(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[zo({programId:new Ni(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Ni(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[zo({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Ni(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});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 Ni(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ps(F(R({},g),{side:"base"}))]:[],...l?[ps(F(R({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as Wd}from"@solana/web3.js";import{MintLayout as qd,TOKEN_2022_PROGRAM_ID as fs,TOKEN_PROGRAM_ID as ys}from"@solana/spl-token";var Mi=class extends Be{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Jt.address,Jt),this._mintGroup.official.add(Jt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,F(R({},c),{priority:-1}))}),r.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,F(R({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?fs.toBase58():ys.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(R({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?fs.toBase58():ys.toBase58(),tags:c.freezeAuthority?[...c.tags||[],"hasFreeze"]:c.tags})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(R({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?fs.toBase58():ys.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Jt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(R({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new Wd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=qd.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 Qo=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Tt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=r,this._apiCacheTime=u||5*60*1e3,this.logger=ae("Raydium"),this.farm=new mi({scope:this,moduleName:"Raydium_Farm"}),this.account=new oi({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ti({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Mi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ci({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Bi({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ki({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new wt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Dn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Wn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Ud({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:r,logRequests:s,urlConfigs:a}=t,u=new uo({cluster:n,timeout:i,urlConfigs:a,logCount:r,logRequests:s}),c=new Qo(F(R({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(co);return this._owner.publicKey}setOwner(e){return this._owner=e?new Tt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(sa);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(co),new Error(co)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>F(R({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{Qo as Raydium};
1
+ var Yu=Object.defineProperty,ju=Object.defineProperties;var Hu=Object.getOwnPropertyDescriptors;var Vi=Object.getOwnPropertySymbols;var As=Object.prototype.hasOwnProperty,Ps=Object.prototype.propertyIsEnumerable;var ws=(o,e,t)=>e in o?Yu(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,R=(o,e)=>{for(var t in e||(e={}))As.call(e,t)&&ws(o,t,e[t]);if(Vi)for(var t of Vi(e))Ps.call(e,t)&&ws(o,t,e[t]);return o},F=(o,e)=>ju(o,Hu(e));var Re=(o,e)=>{var t={};for(var n in o)As.call(o,n)&&e.indexOf(n)<0&&(t[n]=o[n]);if(o!=null&&Vi)for(var n of Vi(o))e.indexOf(n)<0&&Ps.call(o,n)&&(t[n]=o[n]);return t};import{merge as Ud}from"lodash";import ra from"axios";import{PublicKey as Ts}from"@solana/web3.js";import{get as ks,set as Zu}from"lodash";var jo=class{constructor(e){this.logLevel=e.logLevel!==void 0?e.logLevel:0,this.name=e.name}set level(e){this.logLevel=e}get time(){return Date.now().toString()}get moduleName(){return this.name}isLogLevel(e){return e<=this.logLevel}error(...e){return this.isLogLevel(0)?(console.error(this.time,this.name,"sdk logger error",...e),this):this}logWithError(...e){let t=e.map(n=>typeof n=="object"?JSON.stringify(n):n).join(", ");throw new Error(t)}warning(...e){return this.isLogLevel(1)?(console.warn(this.time,this.name,"sdk logger warning",...e),this):this}info(...e){return this.isLogLevel(2)?(console.info(this.time,this.name,"sdk logger info",...e),this):this}debug(...e){return this.isLogLevel(3)?(console.debug(this.time,this.name,"sdk logger debug",...e),this):this}},hs={},$u={};function ae(o){let e=ks(hs,o);if(!e){let t=ks($u,o);e=new jo({name:o,logLevel:t}),Zu(hs,o,e)}return e}import{MINT_SIZE as Ju,TOKEN_PROGRAM_ID as ec,getTransferFeeConfig as tc,unpackMint as nc}from"@solana/spl-token";var Ho=ae("Raydium_accountInfo_util");async function Pt(o,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:r=100}=R({batchRequest:!1},t),s=Zo(e,r),a=new Array(s.length).fill([]);if(n){let u=s.map(m=>{let d=o._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),c=Zo(u,10);a=(await(await Promise.all(c.map(async m=>await o._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&Ho.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:y,lamports:f,owner:b,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&Ho.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:y,lamports:f,owner:new Ts(b),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(u=>o.getMultipleAccountsInfo(u,i)))}catch(u){u instanceof Error&&Ho.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${u.message}`)}return a.flat()}async function Ee(o,e,t){let n=await Pt(o,e.map(i=>i.pubkey),t);return e.map((i,r)=>F(R({},i),{accountInfo:n[r]}))}async function xn({connection:o,mints:e,config:t}){var r,s,a;if(e.length===0)return{};let n=await Ee(o,e.map(u=>({pubkey:st(u)})),t),i={};for(let u of n){if(!u.accountInfo||u.accountInfo.data.length<Ju){console.log("invalid mint account",u.pubkey.toBase58());continue}let c=nc(u.pubkey,u.accountInfo,(r=u.accountInfo)==null?void 0:r.owner);i[u.pubkey.toString()]=F(R({},c),{programId:((s=u.accountInfo)==null?void 0:s.owner)||ec,feeConfig:(a=tc(c))!=null?a:void 0})}return i[Ts.default.toBase58()]=i[j.toBase58()],i}import Dt from"bn.js";var Sn=9e15,$t=1e9,$o="0123456789abcdef",Fi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Di="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",Jo={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-Sn,maxE:Sn,crypto:!1},Ss,Et,oe=!0,qi="[DecimalError] ",Zt=qi+"Invalid argument: ",Ks=qi+"Precision limit exceeded",Cs=qi+"crypto unavailable",Rs="[object Decimal]",ze=Math.floor,Ne=Math.pow,ic=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,oc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,rc=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Ls=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,ht=1e7,ee=7,sc=9007199254740991,ac=Fi.length-1,er=Di.length-1,v={toStringTag:Rs};v.absoluteValue=v.abs=function(){var o=new this.constructor(this);return o.s<0&&(o.s=1),$(o)};v.ceil=function(){return $(new this.constructor(this),this.e+1,2)};v.clampedTo=v.clamp=function(o,e){var t,n=this,i=n.constructor;if(o=new i(o),e=new i(e),!o.s||!e.s)return new i(NaN);if(o.gt(e))throw Error(Zt+e);return t=n.cmp(o),t<0?o:n.cmp(e)>0?e:new i(n)};v.comparedTo=v.cmp=function(o){var e,t,n,i,r=this,s=r.d,a=(o=new r.constructor(o)).d,u=r.s,c=o.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(r.e!==o.e)return r.e>o.e^u<0?1:-1;for(n=s.length,i=a.length,e=0,t=n<i?n:i;e<t;++e)if(s[e]!==a[e])return s[e]>a[e]^u<0?1:-1;return n===i?0:n>i^u<0?1:-1};v.cosine=v.cos=function(){var o,e,t=this,n=t.constructor;return t.d?t.d[0]?(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ee,n.rounding=1,t=uc(n,vs(n,t)),n.precision=o,n.rounding=e,$(Et==2||Et==3?t.neg():t,o,e,!0)):new n(1):new n(NaN)};v.cubeRoot=v.cbrt=function(){var o,e,t,n,i,r,s,a,u,c,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(oe=!1,r=l.s*Ne(l.s*l,1/3),!r||Math.abs(r)==1/0?(t=qe(l.d),o=l.e,(r=(o-t.length+1)%3)&&(t+=r==1||r==-2?"0":"00"),r=Ne(t,1/3),o=ze((o+1)/3)-(o%3==(o<0?-1:2)),r==1/0?t="5e"+o:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+o),n=new m(t),n.s=l.s):n=new m(r.toString()),s=(o=m.precision)+3;;)if(a=n,u=a.times(a).times(a),c=u.plus(l),n=Pe(c.plus(l).times(a),c.plus(u),s+2,1),qe(a.d).slice(0,s)===(t=qe(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&($(a,o+1,0),a.times(a).times(a).eq(l))){n=a;break}s+=4,i=1}else{(!+t||!+t.slice(1)&&t.charAt(0)=="5")&&($(n,o+1,1),e=!n.times(n).times(n).eq(l));break}return oe=!0,$(n,o,m.rounding,e)};v.decimalPlaces=v.dp=function(){var o,e=this.d,t=NaN;if(e){if(o=e.length-1,t=(o-ze(this.e/ee))*ee,o=e[o],o)for(;o%10==0;o/=10)t--;t<0&&(t=0)}return t};v.dividedBy=v.div=function(o){return Pe(this,new this.constructor(o))};v.dividedToIntegerBy=v.divToInt=function(o){var e=this,t=e.constructor;return $(Pe(e,new t(o),0,1,1),t.precision,t.rounding)};v.equals=v.eq=function(o){return this.cmp(o)===0};v.floor=function(){return $(new this.constructor(this),this.e+1,3)};v.greaterThan=v.gt=function(o){return this.cmp(o)>0};v.greaterThanOrEqualTo=v.gte=function(o){var e=this.cmp(o);return e==1||e===0};v.hyperbolicCosine=v.cosh=function(){var o,e,t,n,i,r=this,s=r.constructor,a=new s(1);if(!r.isFinite())return new s(r.s?1/0:NaN);if(r.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(r.e,r.sd())+4,s.rounding=1,i=r.d.length,i<32?(o=Math.ceil(i/3),e=(1/Gi(4,o)).toString()):(o=16,e="2.3283064365386962890625e-10"),r=Kn(s,1,r.times(e),new s(1),!0);for(var u,c=o,l=new s(8);c--;)u=r.times(r),r=a.minus(u.times(l.minus(u.times(l))));return $(r,s.precision=t,s.rounding=n,!0)};v.hyperbolicSine=v.sinh=function(){var o,e,t,n,i=this,r=i.constructor;if(!i.isFinite()||i.isZero())return new r(i);if(e=r.precision,t=r.rounding,r.precision=e+Math.max(i.e,i.sd())+4,r.rounding=1,n=i.d.length,n<3)i=Kn(r,2,i,i,!0);else{o=1.4*Math.sqrt(n),o=o>16?16:o|0,i=i.times(1/Gi(5,o)),i=Kn(r,2,i,i,!0);for(var s,a=new r(5),u=new r(16),c=new r(20);o--;)s=i.times(i),i=i.times(a.plus(s.times(u.times(s).plus(c))))}return r.precision=e,r.rounding=t,$(i,e,t,!0)};v.hyperbolicTangent=v.tanh=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+7,n.rounding=1,Pe(t.sinh(),t.cosh(),n.precision=o,n.rounding=e)):new n(t.s)};v.inverseCosine=v.acos=function(){var o,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,r=t.rounding;return n!==-1?n===0?e.isNeg()?kt(t,i,r):new t(0):new t(NaN):e.isZero()?kt(t,i+4,r).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),o=kt(t,i+4,r).times(.5),t.precision=i,t.rounding=r,o.minus(e))};v.inverseHyperbolicCosine=v.acosh=function(){var o,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(o=n.precision,e=n.rounding,n.precision=o+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,oe=!1,t=t.times(t).minus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln()):new n(t)};v.inverseHyperbolicSine=v.asinh=function(){var o,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,oe=!1,t=t.times(t).plus(1).sqrt().plus(t),oe=!0,n.precision=o,n.rounding=e,t.ln())};v.inverseHyperbolicTangent=v.atanh=function(){var o,e,t,n,i=this,r=i.constructor;return i.isFinite()?i.e>=0?new r(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(o=r.precision,e=r.rounding,n=i.sd(),Math.max(n,o)<2*-i.e-1?$(new r(i),o,e,!0):(r.precision=t=n-i.e,i=Pe(i.plus(1),new r(1).minus(i),t+o,1),r.precision=o+4,r.rounding=1,i=i.ln(),r.precision=o,r.rounding=e,i.times(.5))):new r(NaN)};v.inverseSine=v.asin=function(){var o,e,t,n,i=this,r=i.constructor;return i.isZero()?new r(i):(e=i.abs().cmp(1),t=r.precision,n=r.rounding,e!==-1?e===0?(o=kt(r,t+4,n).times(.5),o.s=i.s,o):new r(NaN):(r.precision=t+6,r.rounding=1,i=i.div(new r(1).minus(i.times(i)).sqrt().plus(1)).atan(),r.precision=t,r.rounding=n,i.times(2)))};v.inverseTangent=v.atan=function(){var o,e,t,n,i,r,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<=er)return s=kt(l,m+4,d).times(.25),s.s=c.s,s}else{if(!c.s)return new l(NaN);if(m+4<=er)return s=kt(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/ee+2|0),o=t;o;--o)c=c.div(c.times(c).plus(1).sqrt().plus(1));for(oe=!1,e=Math.ceil(a/ee),n=1,u=c.times(c),s=new l(c),i=c;o!==-1;)if(i=i.times(u),r=s.minus(i.div(n+=2)),i=i.times(u),s=r.plus(i.div(n+=2)),s.d[e]!==void 0)for(o=e;s.d[o]===r.d[o]&&o--;);return t&&(s=s.times(2<<t-1)),oe=!0,$(s,l.precision=m,l.rounding=d,!0)};v.isFinite=function(){return!!this.d};v.isInteger=v.isInt=function(){return!!this.d&&ze(this.e/ee)>this.d.length-2};v.isNaN=function(){return!this.s};v.isNegative=v.isNeg=function(){return this.s<0};v.isPositive=v.isPos=function(){return this.s>0};v.isZero=function(){return!!this.d&&this.d[0]===0};v.lessThan=v.lt=function(o){return this.cmp(o)<0};v.lessThanOrEqualTo=v.lte=function(o){return this.cmp(o)<1};v.logarithm=v.log=function(o){var e,t,n,i,r,s,a,u,c=this,l=c.constructor,m=l.precision,d=l.rounding,p=5;if(o==null)o=new l(10),e=!0;else{if(o=new l(o),t=o.d,o.s<0||!t||!t[0]||o.eq(1))return new l(NaN);e=o.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)r=!0;else{for(i=t[0];i%10===0;)i/=10;r=i!==1}if(oe=!1,a=m+p,s=Ht(c,a),n=e?Wi(l,a+10):Ht(o,a),u=Pe(s,n,a,1),qn(u.d,i=m,d))do if(a+=10,s=Ht(c,a),n=e?Wi(l,a+10):Ht(o,a),u=Pe(s,n,a,1),!r){+qe(u.d).slice(i+1,i+15)+1==1e14&&(u=$(u,m+1,0));break}while(qn(u.d,i+=10,d));return oe=!0,$(u,m,d)};v.minus=v.sub=function(o){var e,t,n,i,r,s,a,u,c,l,m,d,p=this,y=p.constructor;if(o=new y(o),!p.d||!o.d)return!p.s||!o.s?o=new y(NaN):p.d?o.s=-o.s:o=new y(o.d||p.s!==o.s?p:NaN),o;if(p.s!=o.s)return o.s=-o.s,p.plus(o);if(c=p.d,d=o.d,a=y.precision,u=y.rounding,!c[0]||!d[0]){if(d[0])o.s=-o.s;else if(c[0])o=new y(p);else return new y(u===3?-0:0);return oe?$(o,a,u):o}if(t=ze(o.e/ee),l=ze(p.e/ee),c=c.slice(),r=l-t,r){for(m=r<0,m?(e=c,r=-r,s=d.length):(e=d,t=l,s=c.length),n=Math.max(Math.ceil(a/ee),s)+2,r>n&&(r=n,e.length=1),e.reverse(),n=r;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}r=0}for(m&&(e=c,c=d,d=e,o.s=-o.s),s=c.length,n=d.length-s;n>0;--n)c[s++]=0;for(n=d.length;n>r;){if(c[--n]<d[n]){for(i=n;i&&c[--i]===0;)c[i]=ht-1;--c[i],c[n]+=ht}c[n]-=d[n]}for(;c[--s]===0;)c.pop();for(;c[0]===0;c.shift())--t;return c[0]?(o.d=c,o.e=Ui(c,t),oe?$(o,a,u):o):new y(u===3?-0:0)};v.modulo=v.mod=function(o){var e,t=this,n=t.constructor;return o=new n(o),!t.d||!o.s||o.d&&!o.d[0]?new n(NaN):!o.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(oe=!1,n.modulo==9?(e=Pe(t,o.abs(),0,3,1),e.s*=o.s):e=Pe(t,o,0,n.modulo,1),e=e.times(o),oe=!0,t.minus(e))};v.naturalExponential=v.exp=function(){return tr(this)};v.naturalLogarithm=v.ln=function(){return Ht(this)};v.negated=v.neg=function(){var o=new this.constructor(this);return o.s=-o.s,$(o)};v.plus=v.add=function(o){var e,t,n,i,r,s,a,u,c,l,m=this,d=m.constructor;if(o=new d(o),!m.d||!o.d)return!m.s||!o.s?o=new d(NaN):m.d||(o=new d(o.d||m.s===o.s?m:NaN)),o;if(m.s!=o.s)return o.s=-o.s,m.minus(o);if(c=m.d,l=o.d,a=d.precision,u=d.rounding,!c[0]||!l[0])return l[0]||(o=new d(m)),oe?$(o,a,u):o;if(r=ze(m.e/ee),n=ze(o.e/ee),c=c.slice(),i=r-n,i){for(i<0?(t=c,i=-i,s=l.length):(t=l,n=r,s=c.length),r=Math.ceil(a/ee),s=r>s?r+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=c.length,i=l.length,s-i<0&&(i=s,t=l,l=c,c=t),e=0;i;)e=(c[--i]=c[i]+l[i]+e)/ht|0,c[i]%=ht;for(e&&(c.unshift(e),++n),s=c.length;c[--s]==0;)c.pop();return o.d=c,o.e=Ui(c,n),oe?$(o,a,u):o};v.precision=v.sd=function(o){var e,t=this;if(o!==void 0&&o!==!!o&&o!==1&&o!==0)throw Error(Zt+o);return t.d?(e=Os(t.d),o&&t.e+1>e&&(e=t.e+1)):e=NaN,e};v.round=function(){var o=this,e=o.constructor;return $(new e(o),o.e+1,e.rounding)};v.sine=v.sin=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+Math.max(t.e,t.sd())+ee,n.rounding=1,t=lc(n,vs(n,t)),n.precision=o,n.rounding=e,$(Et>2?t.neg():t,o,e,!0)):new n(NaN)};v.squareRoot=v.sqrt=function(){var o,e,t,n,i,r,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(oe=!1,c=Math.sqrt(+s),c==0||c==1/0?(e=qe(a),(e.length+u)%2==0&&(e+="0"),c=Math.sqrt(e),u=ze((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(r=n,n=r.plus(Pe(s,r,t+2,1)).times(.5),qe(r.d).slice(0,t)===(e=qe(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&($(r,u+1,0),r.times(r).eq(s))){n=r;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,u+1,1),o=!n.times(n).eq(s));break}return oe=!0,$(n,u,l.rounding,o)};v.tangent=v.tan=function(){var o,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(o=n.precision,e=n.rounding,n.precision=o+10,n.rounding=1,t=t.sin(),t.s=1,t=Pe(t,new n(1).minus(t.times(t)).sqrt(),o+10,0),n.precision=o,n.rounding=e,$(Et==2||Et==4?t.neg():t,o,e,!0)):new n(NaN)};v.times=v.mul=function(o){var e,t,n,i,r,s,a,u,c,l=this,m=l.constructor,d=l.d,p=(o=new m(o)).d;if(o.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!o.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?o.s/0:o.s*0);for(t=ze(l.e/ee)+ze(o.e/ee),u=d.length,c=p.length,u<c&&(r=d,d=p,p=r,s=u,u=c,c=s),r=[],s=u+c,n=s;n--;)r.push(0);for(n=c;--n>=0;){for(e=0,i=u+n;i>n;)a=r[i]+p[n]*d[i-n-1]+e,r[i--]=a%ht|0,e=a/ht|0;r[i]=(r[i]+e)%ht|0}for(;!r[--s];)r.pop();return e?++t:r.shift(),o.d=r,o.e=Ui(r,t),oe?$(o,m.precision,m.rounding):o};v.toBinary=function(o,e){return ir(this,2,o,e)};v.toDecimalPlaces=v.toDP=function(o,e){var t=this,n=t.constructor;return t=new n(t),o===void 0?t:(tt(o,0,$t),e===void 0?e=n.rounding:tt(e,0,8),$(t,o+t.e+1,e))};v.toExponential=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Nt(n,!0):(tt(o,0,$t),e===void 0?e=i.rounding:tt(e,0,8),n=$(new i(n),o+1,e),t=Nt(n,!0,o+1)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toFixed=function(o,e){var t,n,i=this,r=i.constructor;return o===void 0?t=Nt(i):(tt(o,0,$t),e===void 0?e=r.rounding:tt(e,0,8),n=$(new r(i),o+i.e+1,e),t=Nt(n,!1,o+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};v.toFraction=function(o){var e,t,n,i,r,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),r=e.e=Os(y)-p.e-1,s=r%ee,e.d[0]=Ne(10,s<0?ee+s:s),o==null)o=r>0?e:c;else{if(a=new f(o),!a.isInt()||a.lt(c))throw Error(Zt+a);o=a.gt(e)?r>0?e:c:a}for(oe=!1,a=new f(qe(y)),l=f.precision,f.precision=r=y.length*ee*2;m=Pe(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(o)!=1;)t=n,n=i,i=c,c=u.plus(m.times(i)),u=i,i=e,e=a.minus(m.times(i)),a=i;return i=Pe(o.minus(t),n,0,1,1),u=u.plus(i.times(c)),t=t.plus(i.times(n)),u.s=c.s=p.s,d=Pe(c,n,r,1).minus(p).abs().cmp(Pe(u,t,r,1).minus(p).abs())<1?[c,n]:[u,t],f.precision=l,oe=!0,d};v.toHexadecimal=v.toHex=function(o,e){return ir(this,16,o,e)};v.toNearest=function(o,e){var t=this,n=t.constructor;if(t=new n(t),o==null){if(!t.d)return t;o=new n(1),e=n.rounding}else{if(o=new n(o),e===void 0?e=n.rounding:tt(e,0,8),!t.d)return o.s?t:o;if(!o.d)return o.s&&(o.s=t.s),o}return o.d[0]?(oe=!1,t=Pe(t,o,0,e,1).times(o),oe=!0,$(t)):(o.s=t.s,t=o),t};v.toNumber=function(){return+this};v.toOctal=function(o,e){return ir(this,8,o,e)};v.toPower=v.pow=function(o){var e,t,n,i,r,s,a=this,u=a.constructor,c=+(o=new u(o));if(!a.d||!o.d||!a.d[0]||!o.d[0])return new u(Ne(+a,c));if(a=new u(a),a.eq(1))return a;if(n=u.precision,r=u.rounding,o.eq(1))return $(a,n,r);if(e=ze(o.e/ee),e>=o.d.length-1&&(t=c<0?-c:c)<=sc)return i=Ns(u,a,t,n),o.s<0?new u(1).div(i):$(i,n,r);if(s=a.s,s<0){if(e<o.d.length-1)return new u(NaN);if((o.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ne(+a,c),e=t==0||!isFinite(t)?ze(c*(Math.log("0."+qe(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):(oe=!1,u.rounding=a.s=1,t=Math.min(12,(e+"").length),i=tr(o.times(Ht(a,n+t)),n),i.d&&(i=$(i,n+5,1),qn(i.d,n,r)&&(e=n+10,i=$(tr(o.times(Ht(a,e+t)),e),e+5,1),+qe(i.d).slice(n+1,n+15)+1==1e14&&(i=$(i,n+1,0)))),i.s=s,oe=!0,u.rounding=r,$(i,n,r))};v.toPrecision=function(o,e){var t,n=this,i=n.constructor;return o===void 0?t=Nt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(tt(o,1,$t),e===void 0?e=i.rounding:tt(e,0,8),n=$(new i(n),o,e),t=Nt(n,o<=n.e||n.e<=i.toExpNeg,o)),n.isNeg()&&!n.isZero()?"-"+t:t};v.toSignificantDigits=v.toSD=function(o,e){var t=this,n=t.constructor;return o===void 0?(o=n.precision,e=n.rounding):(tt(o,1,$t),e===void 0?e=n.rounding:tt(e,0,8)),$(new n(t),o,e)};v.toString=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()&&!o.isZero()?"-"+t:t};v.truncated=v.trunc=function(){return $(new this.constructor(this),this.e+1,1)};v.valueOf=v.toJSON=function(){var o=this,e=o.constructor,t=Nt(o,o.e<=e.toExpNeg||o.e>=e.toExpPos);return o.isNeg()?"-"+t:t};function qe(o){var e,t,n,i=o.length-1,r="",s=o[0];if(i>0){for(r+=s,e=1;e<i;e++)n=o[e]+"",t=ee-n.length,t&&(r+=jt(t)),r+=n;s=o[e],n=s+"",t=ee-n.length,t&&(r+=jt(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return r+s}function tt(o,e,t){if(o!==~~o||o<e||o>t)throw Error(Zt+o)}function qn(o,e,t,n){var i,r,s,a;for(r=o[0];r>=10;r/=10)--e;return--e<0?(e+=ee,i=0):(i=Math.ceil((e+1)/ee),e%=ee),r=Ne(10,ee-e),a=o[i]%r|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==r||t>3&&a+1==r/2)&&(o[i+1]/r/100|0)==Ne(10,e-2)-1||(a==r/2||a==0)&&(o[i+1]/r/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==r||!n&&t>3&&a+1==r/2)&&(o[i+1]/r/1e3|0)==Ne(10,e-3)-1,s}function Ei(o,e,t){for(var n,i=[0],r,s=0,a=o.length;s<a;){for(r=i.length;r--;)i[r]*=e;for(i[0]+=$o.indexOf(o.charAt(s++)),n=0;n<i.length;n++)i[n]>t-1&&(i[n+1]===void 0&&(i[n+1]=0),i[n+1]+=i[n]/t|0,i[n]%=t)}return i.reverse()}function uc(o,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/Gi(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),o.precision+=t,e=Kn(o,1,e.times(i),new o(1));for(var r=t;r--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return o.precision-=t,e}var Pe=function(){function o(n,i,r){var s,a=0,u=n.length;for(n=n.slice();u--;)s=n[u]*i+a,n[u]=s%r|0,a=s/r|0;return a&&n.unshift(a),n}function e(n,i,r,s){var a,u;if(r!=s)u=r>s?1:-1;else for(a=u=0;a<r;a++)if(n[a]!=i[a]){u=n[a]>i[a]?1:-1;break}return u}function t(n,i,r,s){for(var a=0;r--;)n[r]-=a,a=n[r]<i[r]?1:0,n[r]=a*s+n[r]-i[r];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,r,s,a,u){var c,l,m,d,p,y,f,b,g,A,w,k,I,h,S,B,C,x,L,W,O=n.constructor,H=n.s==i.s?1:-1,X=n.d,D=i.d;if(!X||!X[0]||!D||!D[0])return new O(!n.s||!i.s||(X?D&&X[0]==D[0]:!D)?NaN:X&&X[0]==0||!D?H*0:H/0);for(u?(p=1,l=n.e-i.e):(u=ht,p=ee,l=ze(n.e/p)-ze(i.e/p)),L=D.length,C=X.length,g=new O(H),A=g.d=[],m=0;D[m]==(X[m]||0);m++);if(D[m]>(X[m]||0)&&l--,r==null?(h=r=O.precision,s=O.rounding):a?h=r+(n.e-i.e)+1:h=r,h<0)A.push(1),y=!0;else{if(h=h/p+2|0,m=0,L==1){for(d=0,D=D[0],h++;(m<C||d)&&h--;m++)S=d*u+(X[m]||0),A[m]=S/D|0,d=S%D|0;y=d||m<C}else{for(d=u/(D[0]+1)|0,d>1&&(D=o(D,d,u),X=o(X,d,u),L=D.length,C=X.length),B=L,w=X.slice(0,L),k=w.length;k<L;)w[k++]=0;W=D.slice(),W.unshift(0),x=D[0],D[1]>=u/2&&++x;do d=0,c=e(D,w,L,k),c<0?(I=w[0],L!=k&&(I=I*u+(w[1]||0)),d=I/x|0,d>1?(d>=u&&(d=u-1),f=o(D,d,u),b=f.length,k=w.length,c=e(f,w,b,k),c==1&&(d--,t(f,L<b?W:D,b,u))):(d==0&&(c=d=1),f=D.slice()),b=f.length,b<k&&f.unshift(0),t(w,f,k,u),c==-1&&(k=w.length,c=e(D,w,L,k),c<1&&(d++,t(w,L<k?W:D,k,u))),k=w.length):c===0&&(d++,w=[0]),A[m++]=d,c&&w[0]?w[k++]=X[B]||0:(w=[X[B]],k=1);while((B++<C||w[0]!==void 0)&&h--);y=w[0]!==void 0}A[0]||A.shift()}if(p==1)g.e=l,Ss=y;else{for(m=1,d=A[0];d>=10;d/=10)m++;g.e=m+l*p-1,$(g,a?r+g.e+1:r,s,y)}return g}}();function $(o,e,t,n){var i,r,s,a,u,c,l,m,d,p=o.constructor;e:if(e!=null){if(m=o.d,!m)return o;for(i=1,a=m[0];a>=10;a/=10)i++;if(r=e-i,r<0)r+=ee,s=e,l=m[d=0],u=l/Ne(10,i-s-1)%10|0;else if(d=Math.ceil((r+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=u=0,i=1,r%=ee,s=r-ee+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;r%=ee,s=r-ee+i,u=s<0?0:l/Ne(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ne(10,i-s-1)),c=t<4?(u||n)&&(t==0||t==(o.s<0?3:2)):u>5||u==5&&(t==4||n||t==6&&(r>0?s>0?l/Ne(10,i-s):0:m[d-1])%10&1||t==(o.s<0?8:7)),e<1||!m[0])return m.length=0,c?(e-=o.e+1,m[0]=Ne(10,(ee-e%ee)%ee),o.e=-e||0):m[0]=o.e=0,o;if(r==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ne(10,ee-r),m[d]=s>0?(l/Ne(10,i-s)%Ne(10,s)|0)*a:0),c)for(;;)if(d==0){for(r=1,s=m[0];s>=10;s/=10)r++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;r!=a&&(o.e++,m[0]==ht&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=ht)break;m[d--]=0,a=1}for(r=m.length;m[--r]===0;)m.pop()}return oe&&(o.e>p.maxE?(o.d=null,o.e=NaN):o.e<p.minE&&(o.e=0,o.d=[0])),o}function Nt(o,e,t){if(!o.isFinite())return _s(o);var n,i=o.e,r=qe(o.d),s=r.length;return e?(t&&(n=t-s)>0?r=r.charAt(0)+"."+r.slice(1)+jt(n):s>1&&(r=r.charAt(0)+"."+r.slice(1)),r=r+(o.e<0?"e":"e+")+o.e):i<0?(r="0."+jt(-i-1)+r,t&&(n=t-s)>0&&(r+=jt(n))):i>=s?(r+=jt(i+1-s),t&&(n=t-i-1)>0&&(r=r+"."+jt(n))):((n=i+1)<s&&(r=r.slice(0,n)+"."+r.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(r+="."),r+=jt(n))),r}function Ui(o,e){var t=o[0];for(e*=ee;t>=10;t/=10)e++;return e}function Wi(o,e,t){if(e>ac)throw oe=!0,t&&(o.precision=t),Error(Ks);return $(new o(Fi),e,1,!0)}function kt(o,e,t){if(e>er)throw Error(Ks);return $(new o(Di),e,t,!0)}function Os(o){var e=o.length-1,t=e*ee+1;if(e=o[e],e){for(;e%10==0;e/=10)t--;for(e=o[0];e>=10;e/=10)t++}return t}function jt(o){for(var e="";o--;)e+="0";return e}function Ns(o,e,t,n){var i,r=new o(1),s=Math.ceil(n/ee+4);for(oe=!1;;){if(t%2&&(r=r.times(e),Bs(r.d,s)&&(i=!0)),t=ze(t/2),t===0){t=r.d.length-1,i&&r.d[t]===0&&++r.d[t];break}e=e.times(e),Bs(e.d,s)}return oe=!0,r}function Is(o){return o.d[o.d.length-1]&1}function Ms(o,e,t){for(var n,i=new o(e[0]),r=0;++r<e.length;)if(n=new o(e[r]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function tr(o,e){var t,n,i,r,s,a,u,c=0,l=0,m=0,d=o.constructor,p=d.rounding,y=d.precision;if(!o.d||!o.d[0]||o.e>17)return new d(o.d?o.d[0]?o.s<0?0:1/0:1:o.s?o.s<0?0:o:0/0);for(e==null?(oe=!1,u=y):u=e,a=new d(.03125);o.e>-2;)o=o.times(a),m+=5;for(n=Math.log(Ne(2,m))/Math.LN10*2+5|0,u+=n,t=r=s=new d(1),d.precision=u;;){if(r=$(r.times(o),u,1),t=t.times(++l),a=s.plus(Pe(r,t,u,1)),qe(a.d).slice(0,u)===qe(s.d).slice(0,u)){for(i=m;i--;)s=$(s.times(s),u,1);if(e==null)if(c<3&&qn(s.d,u-n,p,c))d.precision=u+=10,t=r=a=new d(1),l=0,c++;else return $(s,d.precision=y,p,oe=!0);else return d.precision=y,s}s=a}}function Ht(o,e){var t,n,i,r,s,a,u,c,l,m,d,p=1,y=10,f=o,b=f.d,g=f.constructor,A=g.rounding,w=g.precision;if(f.s<0||!b||!b[0]||!f.e&&b[0]==1&&b.length==1)return new g(b&&!b[0]?-1/0:f.s!=1?NaN:b?0:f);if(e==null?(oe=!1,l=w):l=e,g.precision=l+=y,t=qe(b),n=t.charAt(0),Math.abs(r=f.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)f=f.times(o),t=qe(f.d),n=t.charAt(0),p++;r=f.e,n>1?(f=new g("0."+t),r++):f=new g(n+"."+t.slice(1))}else return c=Wi(g,l+2,w).times(r+""),f=Ht(new g(n+"."+t.slice(1)),l-y).plus(c),g.precision=w,e==null?$(f,w,A,oe=!0):f;for(m=f,u=s=f=Pe(f.minus(1),f.plus(1),l,1),d=$(f.times(f),l,1),i=3;;){if(s=$(s.times(d),l,1),c=u.plus(Pe(s,new g(i),l,1)),qe(c.d).slice(0,l)===qe(u.d).slice(0,l))if(u=u.times(2),r!==0&&(u=u.plus(Wi(g,l+2,w).times(r+""))),u=Pe(u,new g(p),l,1),e==null)if(qn(u.d,l-y,A,a))g.precision=l+=y,c=s=f=Pe(m.minus(1),m.plus(1),l,1),d=$(f.times(f),l,1),i=a=1;else return $(u,g.precision=w,A,oe=!0);else return g.precision=w,u;u=c,i+=2}}function _s(o){return String(o.s*o.s/0)}function nr(o,e){var t,n,i;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(i=e.length;e.charCodeAt(i-1)===48;--i);if(e=e.slice(n,i),e){if(i-=n,o.e=t=t-n-1,o.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<i){for(n&&o.d.push(+e.slice(0,n)),i-=ee;n<i;)o.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=i;for(;n--;)e+="0";o.d.push(+e),oe&&(o.e>o.constructor.maxE?(o.d=null,o.e=NaN):o.e<o.constructor.minE&&(o.e=0,o.d=[0]))}else o.e=0,o.d=[0];return o}function cc(o,e){var t,n,i,r,s,a,u,c,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Ls.test(e))return nr(o,e)}else if(e==="Infinity"||e==="NaN")return+e||(o.s=NaN),o.e=NaN,o.d=null,o;if(oc.test(e))t=16,e=e.toLowerCase();else if(ic.test(e))t=2;else if(rc.test(e))t=8;else throw Error(Zt+e);for(r=e.search(/p/i),r>0?(u=+e.slice(r+1),e=e.substring(2,r)):e=e.slice(2),r=e.indexOf("."),s=r>=0,n=o.constructor,s&&(e=e.replace(".",""),a=e.length,r=a-r,i=Ns(n,new n(t),r,r*2)),c=Ei(e,t,ht),l=c.length-1,r=l;c[r]===0;--r)c.pop();return r<0?new n(o.s*0):(o.e=Ui(c,l),o.d=c,oe=!1,s&&(o=Pe(o,i,a*4)),u&&(o=o.times(Math.abs(u)<54?Ne(2,u):Un.pow(2,u))),oe=!0,o)}function lc(o,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:Kn(o,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/Gi(5,t)),e=Kn(o,2,e,e);for(var i,r=new o(5),s=new o(16),a=new o(20);t--;)i=e.times(e),e=e.times(r.plus(i.times(s.times(i).minus(a))));return e}function Kn(o,e,t,n,i){var r,s,a,u,c=1,l=o.precision,m=Math.ceil(l/ee);for(oe=!1,u=t.times(t),a=new o(n);;){if(s=Pe(a.times(u),new o(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=Pe(s.times(u),new o(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(r=m;s.d[r]===a.d[r]&&r--;);if(r==-1)break}r=a,a=n,n=s,s=r,c++}return oe=!0,s.d.length=m+1,s}function Gi(o,e){for(var t=o;--e;)t*=o;return t}function vs(o,e){var t,n=e.s<0,i=kt(o,o.precision,1),r=i.times(.5);if(e=e.abs(),e.lte(r))return Et=n?4:1,e;if(t=e.divToInt(i),t.isZero())Et=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(r))return Et=Is(t)?n?2:3:n?4:1,e;Et=Is(t)?n?1:4:n?3:2}return e.minus(i).abs()}function ir(o,e,t,n){var i,r,s,a,u,c,l,m,d,p=o.constructor,y=t!==void 0;if(y?(tt(t,1,$t),n===void 0?n=p.rounding:tt(n,0,8)):(t=p.precision,n=p.rounding),!o.isFinite())l=_s(o);else{for(l=Nt(o),s=l.indexOf("."),y?(i=2,e==16?t=t*4-3:e==8&&(t=t*3-2)):i=e,s>=0&&(l=l.replace(".",""),d=new p(1),d.e=l.length-s,d.d=Ei(Nt(d),10,i),d.e=d.d.length),m=Ei(l,10,i),r=u=m.length;m[--u]==0;)m.pop();if(!m[0])l=y?"0p+0":"0";else{if(s<0?r--:(o=new p(o),o.d=m,o.e=r,o=Pe(o,d,t,n,0,i),m=o.d,r=o.e,c=Ss),s=m[t],a=i/2,c=c||m[t+1]!==void 0,c=n<4?(s!==void 0||c)&&(n===0||n===(o.s<0?3:2)):s>a||s===a&&(n===4||c||n===6&&m[t-1]&1||n===(o.s<0?8:7)),m.length=t,c)for(;++m[--t]>i-1;)m[t]=0,t||(++r,m.unshift(1));for(u=m.length;!m[u-1];--u);for(s=0,l="";s<u;s++)l+=$o.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=Ei(l,i,e),u=m.length;!m[u-1];--u);for(s=1,l="1.";s<u;s++)l+=$o.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(r<0?"p":"p+")+r}else if(r<0){for(;++r;)l="0"+l;l="0."+l}else if(++r>u)for(r-=u;r--;)l+="0";else r<u&&(l=l.slice(0,r)+"."+l.slice(r))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return o.s<0?"-"+l:l}function Bs(o,e){if(o.length>e)return o.length=e,!0}function mc(o){return new this(o).abs()}function dc(o){return new this(o).acos()}function pc(o){return new this(o).acosh()}function fc(o,e){return new this(o).plus(e)}function yc(o){return new this(o).asin()}function bc(o){return new this(o).asinh()}function gc(o){return new this(o).atan()}function wc(o){return new this(o).atanh()}function Ac(o,e){o=new this(o),e=new this(e);var t,n=this.precision,i=this.rounding,r=n+4;return!o.s||!e.s?t=new this(NaN):!o.d&&!e.d?(t=kt(this,r,1).times(e.s>0?.25:.75),t.s=o.s):!e.d||o.isZero()?(t=e.s<0?kt(this,n,i):new this(0),t.s=o.s):!o.d||e.isZero()?(t=kt(this,r,1).times(.5),t.s=o.s):e.s<0?(this.precision=r,this.rounding=1,t=this.atan(Pe(o,e,r,1)),e=kt(this,r,1),this.precision=n,this.rounding=i,t=o.s<0?t.minus(e):t.plus(e)):t=this.atan(Pe(o,e,r,1)),t}function Pc(o){return new this(o).cbrt()}function kc(o){return $(o=new this(o),o.e+1,2)}function hc(o,e,t){return new this(o).clamp(e,t)}function Tc(o){if(!o||typeof o!="object")throw Error(qi+"Object expected");var e,t,n,i=o.defaults===!0,r=["precision",1,$t,"rounding",0,8,"toExpNeg",-Sn,0,"toExpPos",0,Sn,"maxE",0,Sn,"minE",-Sn,0,"modulo",0,9];for(e=0;e<r.length;e+=3)if(t=r[e],i&&(this[t]=Jo[t]),(n=o[t])!==void 0)if(ze(n)===n&&n>=r[e+1]&&n<=r[e+2])this[t]=n;else throw Error(Zt+t+": "+n);if(t="crypto",i&&(this[t]=Jo[t]),(n=o[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(Cs);else this[t]=!1;else throw Error(Zt+t+": "+n);return this}function Ic(o){return new this(o).cos()}function Bc(o){return new this(o).cosh()}function Vs(o){var e,t,n;function i(r){var s,a,u,c=this;if(!(c instanceof i))return new i(r);if(c.constructor=i,xs(r)){c.s=r.s,oe?!r.d||r.e>i.maxE?(c.e=NaN,c.d=null):r.e<i.minE?(c.e=0,c.d=[0]):(c.e=r.e,c.d=r.d.slice()):(c.e=r.e,c.d=r.d?r.d.slice():r.d);return}if(u=typeof r,u==="number"){if(r===0){c.s=1/r<0?-1:1,c.e=0,c.d=[0];return}if(r<0?(r=-r,c.s=-1):c.s=1,r===~~r&&r<1e7){for(s=0,a=r;a>=10;a/=10)s++;oe?s>i.maxE?(c.e=NaN,c.d=null):s<i.minE?(c.e=0,c.d=[0]):(c.e=s,c.d=[r]):(c.e=s,c.d=[r]);return}else if(r*0!==0){r||(c.s=NaN),c.e=NaN,c.d=null;return}return nr(c,r.toString())}else if(u!=="string")throw Error(Zt+r);return(a=r.charCodeAt(0))===45?(r=r.slice(1),c.s=-1):(a===43&&(r=r.slice(1)),c.s=1),Ls.test(r)?nr(c,r):cc(c,r)}if(i.prototype=v,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.EUCLID=9,i.config=i.set=Tc,i.clone=Vs,i.isDecimal=xs,i.abs=mc,i.acos=dc,i.acosh=pc,i.add=fc,i.asin=yc,i.asinh=bc,i.atan=gc,i.atanh=wc,i.atan2=Ac,i.cbrt=Pc,i.ceil=kc,i.clamp=hc,i.cos=Ic,i.cosh=Bc,i.div=xc,i.exp=Sc,i.floor=Kc,i.hypot=Cc,i.ln=Rc,i.log=Lc,i.log10=Nc,i.log2=Oc,i.max=Mc,i.min=_c,i.mod=vc,i.mul=Vc,i.pow=Ec,i.random=Fc,i.round=Dc,i.sign=Wc,i.sin=qc,i.sinh=Uc,i.sqrt=Gc,i.sub=Xc,i.sum=zc,i.tan=Qc,i.tanh=Yc,i.trunc=jc,o===void 0&&(o={}),o&&o.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)o.hasOwnProperty(t=n[e++])||(o[t]=this[t]);return i.config(o),i}function xc(o,e){return new this(o).div(e)}function Sc(o){return new this(o).exp()}function Kc(o){return $(o=new this(o),o.e+1,3)}function Cc(){var o,e,t=new this(0);for(oe=!1,o=0;o<arguments.length;)if(e=new this(arguments[o++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return oe=!0,new this(1/0);t=e}return oe=!0,t.sqrt()}function xs(o){return o instanceof Un||o&&o.toStringTag===Rs||!1}function Rc(o){return new this(o).ln()}function Lc(o,e){return new this(o).log(e)}function Oc(o){return new this(o).log(2)}function Nc(o){return new this(o).log(10)}function Mc(){return Ms(this,arguments,"lt")}function _c(){return Ms(this,arguments,"gt")}function vc(o,e){return new this(o).mod(e)}function Vc(o,e){return new this(o).mul(e)}function Ec(o,e){return new this(o).pow(e)}function Fc(o){var e,t,n,i,r=0,s=new this(1),a=[];if(o===void 0?o=this.precision:tt(o,1,$t),n=Math.ceil(o/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));r<n;)i=e[r],i>=429e7?e[r]=crypto.getRandomValues(new Uint32Array(1))[0]:a[r++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);r<n;)i=e[r]+(e[r+1]<<8)+(e[r+2]<<16)+((e[r+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,r):(a.push(i%1e7),r+=4);r=n/4}else throw Error(Cs);else for(;r<n;)a[r++]=Math.random()*1e7|0;for(n=a[--r],o%=ee,n&&o&&(i=Ne(10,ee-o),a[r]=(n/i|0)*i);a[r]===0;r--)a.pop();if(r<0)t=0,a=[0];else{for(t=-1;a[0]===0;t-=ee)a.shift();for(n=1,i=a[0];i>=10;i/=10)n++;n<ee&&(t-=ee-n)}return s.e=t,s.d=a,s}function Dc(o){return $(o=new this(o),o.e+1,this.rounding)}function Wc(o){return o=new this(o),o.d?o.d[0]?o.s:0*o.s:o.s||NaN}function qc(o){return new this(o).sin()}function Uc(o){return new this(o).sinh()}function Gc(o){return new this(o).sqrt()}function Xc(o,e){return new this(o).sub(e)}function zc(){var o=0,e=arguments,t=new this(e[o]);for(oe=!1;t.s&&++o<e.length;)t=t.plus(e[o]);return oe=!0,$(t,this.precision,this.rounding)}function Qc(o){return new this(o).tan()}function Yc(o){return new this(o).tanh()}function jc(o){return $(o=new this(o),o.e+1,1)}v[Symbol.for("nodejs.util.inspect.custom")]=v.toString;v[Symbol.toStringTag]="Decimal";var Un=v.constructor=Vs(Jo);Fi=new Un(Fi);Di=new Un(Di);var N=Un;import il from"big.js";import Qi from"bn.js";import Hc from"toformat";var Zc=Hc,Gn=Zc;import zi from"big.js";import Jc from"bn.js";import el from"decimal.js-light";import Xn from"bn.js";var Es=9007199254740991;function Z(o){let e=ae("Raydium_parseBigNumberish");if(o instanceof Xn)return o;if(typeof o=="string"){if(o.match(/^-?[0-9]+$/))return new Xn(o);e.logWithError(`invalid BigNumberish string: ${o}`)}return typeof o=="number"?(o%1&&e.logWithError(`BigNumberish number underflow: ${o}`),(o>=Es||o<=-Es)&&e.logWithError(`BigNumberish number overflow: ${o}`),new Xn(String(o))):typeof o=="bigint"?new Xn(o.toString()):(e.error(`invalid BigNumberish value: ${o}`),new Xn(0))}var Xi=ae("module/fraction"),or=Gn(zi),zn=Gn(el),tl={[0]:zn.ROUND_DOWN,[1]:zn.ROUND_HALF_UP,[2]:zn.ROUND_UP},nl={[0]:zi.roundDown,[1]:zi.roundHalfUp,[2]:zi.roundUp},fe=class{constructor(e,t=new Jc(1)){this.numerator=Z(e),this.denominator=Z(t)}get quotient(){return this.numerator.div(this.denominator)}invert(){return new fe(this.denominator,this.numerator)}add(e){let t=e instanceof fe?e:new fe(Z(e));return this.denominator.eq(t.denominator)?new fe(this.numerator.add(t.numerator),this.denominator):new fe(this.numerator.mul(t.denominator).add(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}sub(e){let t=e instanceof fe?e:new fe(Z(e));return this.denominator.eq(t.denominator)?new fe(this.numerator.sub(t.numerator),this.denominator):new fe(this.numerator.mul(t.denominator).sub(t.numerator.mul(this.denominator)),this.denominator.mul(t.denominator))}mul(e){let t=e instanceof fe?e:new fe(Z(e));return new fe(this.numerator.mul(t.numerator),this.denominator.mul(t.denominator))}div(e){let t=e instanceof fe?e:new fe(Z(e));return new fe(this.numerator.mul(t.denominator),this.denominator.mul(t.numerator))}toSignificant(e,t={groupSeparator:""},n=1){Number.isInteger(e)||Xi.logWithError(`${e} is not an integer.`),e<=0&&Xi.logWithError(`${e} is not positive.`),zn.set({precision:e+1,rounding:tl[n]});let i=new zn(this.numerator.toString()).div(this.denominator.toString()).toSignificantDigits(e);return i.toFormat(i.decimalPlaces(),t)}toFixed(e,t={groupSeparator:""},n=1){return Number.isInteger(e)||Xi.logWithError(`${e} is not an integer.`),e<0&&Xi.logWithError(`${e} is negative.`),or.DP=e,or.RM=nl[n]||1,new or(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var ol=ae("Raydium_amount"),Fs=Gn(il);function rl(o,e){let t="0",n="0";if(o.includes(".")){let i=o.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):ol.logWithError(`invalid number string, num: ${o}`)}else t=o;return[t,n.slice(0,e)||n]}var be=class extends fe{constructor(t,n,i=!0,r){let s=new Qi(0),a=rr.pow(new Qi(t.decimals));if(i)s=Z(n);else{let u=new Qi(0),c=new Qi(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=rl(n.toString(),t.decimals);u=Z(l),c=Z(m)}u=u.mul(a),s=u.add(c)}super(s,a);this.logger=ae(r||"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,i=0){return super.toSignificant(t,n,i)}toFixed(t=this.token.decimals,n,i=0){return t>this.token.decimals&&this.logger.logWithError("decimals overflow"),super.toFixed(t,n,i)}toExact(t={groupSeparator:""}){return Fs.DP=this.token.decimals,new Fs(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as sl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Ds}from"@solana/spl-token";var Jt={chainId:101,address:sl.default.toBase58(),programId:Ds.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},Ue={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Ds.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as lr}from"@solana/web3.js";import{PublicKey as Te,SystemProgram as Ws,SYSVAR_RENT_PUBKEY as al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ul}from"@solana/spl-token";function T({pubkey:o,isSigner:e=!1,isWritable:t=!0}){return{pubkey:o,isWritable:t,isSigner:e}}var sr=[T({pubkey:ul,isWritable:!1}),T({pubkey:Ws.programId,isWritable:!1}),T({pubkey:al,isWritable:!1})];function ar({publicKey:o,transformSol:e}){let t=ur(o.toString());if(t instanceof Te)return e&&t.equals(Me)?j:t;if(e&&t.toString()===Me.toBase58())return j;if(typeof t=="string"){if(t===Te.default.toBase58())return Te.default;try{return new Te(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function ur(o){try{return new Te(o)}catch{return o}}var Yi=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),en=new Te("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),at=new Te("SysvarRent111111111111111111111111111111111"),qs=new Te("SysvarC1ock11111111111111111111111111111111"),Ft=new Te("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),cl=new Te("Sysvar1nstructions1111111111111111111111111"),cr=Ws.programId,Op=new Te("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Np=new Te("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Mp=new Te("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),_p=new Te("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),vp=new Te("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Vp=new Te("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),Ep=new Te("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Fp=new Te("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),Dp=new Te("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),Wp=new Te("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),qp=new Te("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),j=new Te("So11111111111111111111111111111111111111112"),Me=Te.default;function st(o){return ar({publicKey:o,transformSol:!0})}var mr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:r=!1,isToken2022:s=!1}){if(e===Me.toBase58()||e instanceof lr&&Me.equals(e)){this.decimals=Ue.decimals,this.symbol=Ue.symbol,this.name=Ue.name,this.mint=new lr(Ue.address),this.isToken2022=!1;return}this.decimals=t,this.symbol=n||e.toString().substring(0,6),this.name=i||e.toString().substring(0,6),this.mint=r?lr.default:ar({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ie=mr;Ie.WSOL=new mr(F(R({},Ue),{mint:Ue.address}));var dr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},ji=dr;ji.SOL=new dr(Jt);import ll from"bn.js";var Us=new fe(new ll(100)),Fe=class extends fe{toSignificant(e=5,t,n){return this.mul(Us).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(Us).toFixed(e,t,n)}};var ml=ae("Raydium_price"),nt=class extends fe{constructor(t){let{baseToken:n,quoteToken:i,numerator:r,denominator:s}=t;super(r,s);this.baseToken=n,this.quoteToken=i,this.scalar=new fe(pr(n.decimals),pr(i.decimals))}get raw(){return new fe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new nt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&ml.logWithError("mul token not equals");let n=super.mul(t);return new nt({baseToken:this.baseToken,quoteToken:t.quoteToken,denominator:n.denominator,numerator:n.numerator})}toSignificant(t=this.quoteToken.decimals,n,i){return this.adjusted.toSignificant(t,n,i)}toFixed(t=this.quoteToken.decimals,n,i){return this.adjusted.toFixed(t,n,i)}};import{PublicKey as dl}from"@solana/web3.js";import pl from"bn.js";function Gs(o){return typeof o=="object"&&o!==null&&![Ie,be,dl,fe,pl,nt,Fe].some(e=>typeof e=="object"&&o instanceof e)}function Ge(o){return typeof o=="string"?ur(o):Array.isArray(o)?o.map(e=>Ge(e)):Gs(o)?Object.fromEntries(Object.entries(o).map(([e,t])=>[e,Ge(t)])):o}var dt=new Dt(0),Xs=new Dt(1),Ef=new Dt(2),Ff=new Dt(3),Df=new Dt(5),rr=new Dt(10),Wf=new Dt(100),qf=new Dt(1e3),Uf=new Dt(1e4);function pr(o){return rr.pow(Z(o))}function Hi(o,e){let t=o.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function Zo(o,e=1,t=[]){let n=[...o];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var Tt=class{constructor(e){this._owner=e}get publicKey(){return Tt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Tt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Tt.isKeyPair(this._owner)}get isPublicKey(){return Tt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Tt.isKeyPair(e)}};import{PublicKey as Al}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Pl}from"@solana/spl-token";import{ComputeBudgetProgram as zs,Keypair as Ys,PublicKey as fl,Transaction as js,TransactionMessage as yl,VersionedTransaction as Hs}from"@solana/web3.js";var V={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",ClmmLockPosition:"ClmmLockPosition",ClmmHarvestLockPosition:"ClmmHarvestLockPosition",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",CpmmLockLp:"CpmmLockLp",CpmmCollectLockFee:"CpmmCollectLockFee"};import{TOKEN_PROGRAM_ID as bl}from"@solana/spl-token";var Qs=ae("Raydium_txUtil"),Zs=1644;function Zi(o){let e=[],t=[];return o.microLamports&&(e.push(zs.setComputeUnitPrice({microLamports:o.microLamports})),t.push(V.SetComputeUnitPrice)),o.units&&(e.push(zs.setComputeUnitLimit({units:o.units})),t.push(V.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Cn(o,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=o.getLatestBlockhash)==null?void 0:n.call(o,{commitment:t})))==null?void 0:i.blockhash}async function $i(o,e){return o.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);o.onSignature(e,r=>{if(clearTimeout(i),!r.err){t("");return}n(r.err.toString())},"confirmed")})}function fr(o,e){o.length<1&&Qs.logWithError(`no instructions provided: ${o.toString()}`),e.length<1&&Qs.logWithError(`no signers provided:, ${e.toString()}`);let t=new js;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...o);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<Zs}catch{return!1}}function ce(o,e){let[t,n]=fl.findProgramAddressSync(o,e);return{publicKey:t,nonce:n}}function Qn({instructions:o,payer:e,signers:t}){return fr(o,[e,...t])}function Yn({instructions:o,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=Ys.generate().publicKey.toString()}){let r=new yl({payerKey:e,recentBlockhash:n,instructions:o}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new Hs(r).serialize()).toString("base64").length<Zs}catch{return!1}}var gl=o=>Buffer.isBuffer(o)?o:o instanceof Uint8Array?Buffer.from(o.buffer,o.byteOffset,o.byteLength):Buffer.from(o),wl=o=>{let e=o.serialize({requireAllSignatures:!1,verifySignatures:!1});o instanceof Hs&&(e=gl(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function ln(o){let e=[];return o.forEach(t=>{t instanceof js&&(t.recentBlockhash||(t.recentBlockhash=bl.toBase58()),t.feePayer||(t.feePayer=Ys.generate().publicKey)),e.push(wl(t))}),console.log("simulate tx string:",e),e}function ue(o,e,t){return ce([o.toBuffer(),(t!=null?t:Pl).toBuffer(),e.toBuffer()],new Al("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as se}from"@solana/web3.js";var $s=new se("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),Js=new se("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),jn=new se("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),ly=new se("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),my=new se("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),yr=new se("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ea=new se("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),dy=new se("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ta=new se("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),Rn=new se("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),Hn=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Ji=new se("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),py=new se("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),fy=new se("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),kl=new se("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),hl=new se("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Tl=new se("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),Il=new se("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),eo=new se("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),na=new se("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),yy=new se("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Bl=new se("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),xl=new se("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Sl=new se("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),to=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),Kl=new se("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),no=new se("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Cl=new se("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),Zn={IDO_PROGRAM_ID_V1:kl,IDO_PROGRAM_ID_V2:hl,IDO_PROGRAM_ID_V3:Tl,IDO_PROGRAM_ID_V4:Il};var by={SERUM_MARKET:se.default,OPENBOOK_MARKET:new se("EoTcMgcDRTJVZDMZWBoU6rhYHZfkNTVEAfz3uUJRcYGj"),UTIL1216:se.default,FarmV3:new se("85BFyr98MbCUU9MVTEgzx1nbhWACbJqLzho6zd6DZcWL"),FarmV5:new se("EcLzTrNg9V7qhcdyXDe2qjtPkiGzDM2UbdRaeaadU5r2"),FarmV6:new se("Farm2hJLcqPtPg8M4rR6DMrsRNc5TPm5Cs4bVQrMe2T7"),AmmV4:new se("HWy1jotHpo6UqeQxx49dpYYdQB8wj9Qk9MdxwjLvDHB8"),AmmStable:new se("DDg4VmQaJV9ogWce7LpcjBA9bv22wRp5uaTPa5pGjijF"),CLMM:new se("devi51mZmdwUJGU9hjN27vEz64Gps7uUefqxg27EAtH"),CLMM_LOCK_PROGRAM_ID:new se("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),CLMM_LOCK_AUTH_ID:new se("8qmHNvu2Kr2C7U8mJL4Vz1vTDxMhVuXKREwU7TNoaVEo"),Router:new se("BVChZ3XFEwTMUk1o9i3HAf91H6mFxSwa5X2wFAWhYPhU"),CREATE_CPMM_POOL_PROGRAM:Bl,CREATE_CPMM_POOL_AUTH:xl,CREATE_CPMM_POOL_FEE_ACC:Sl,FEE_DESTINATION_ID:new se("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:Kl,LCOK_CPMM_AUTH:Cl};import It from"bn.js";var $n=1e4;function ge(o,e,t,n){if(e===void 0)return{amount:o,fee:void 0,expirationTime:void 0};let i=F(R({},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}}),r=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new It(r.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(r.transferFeeBasisPoints===$n){let u=new It(r.maximumFee.toString());return{amount:o.add(u),fee:u,expirationTime:a}}else{let u=tn(o.mul(new It($n)),new It($n-r.transferFeeBasisPoints)),c=new It(r.maximumFee.toString()),l=u.sub(o).gt(c)?o.add(c):u,m=tn(l.mul(new It(r.transferFeeBasisPoints)),new It($n)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let u=tn(o.mul(new It(r.transferFeeBasisPoints)),new It($n)),c=u.gt(s)?s:u;return{amount:o,fee:c,expirationTime:a}}}function Bt(o,e){return o===void 0?e:e===void 0?o:Math.min(o,e)}function tn(o,e){let{div:t,mod:n}=o.divmod(e);return n.gt(new It(0))?t.add(new It(1)):t}import{PublicKey as ia,AddressLookupTableAccount as io}from"@solana/web3.js";async function br({connection:o,address:e}){let t=await Pt(o,[...new Set(e.map(i=>i.toString()))].map(i=>new ia(i))),n={};for(let i=0;i<e.length;i++){let r=t[i],s=e[i];if(!r)continue;let a=new io({key:s,state:io.deserialize(r.data)});n[s.toString()]=a,oo[s.toString()]=a}return n}var oo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new io({key:new ia("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:io.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"))})};import{PublicKey as Jn,sendAndConfirmTransaction as gr,Transaction as ei,TransactionMessage as ti,VersionedTransaction as ni}from"@solana/web3.js";import Rl from"axios";var ro=class{constructor(e){this.instructions=[];this.endInstructions=[];this.lookupTableAddress=[];this.signers=[];this.instructionTypes=[];this.endInstructionTypes=[];this.connection=e.connection,this.feePayer=e.feePayer,this.signAllTransactions=e.signAllTransactions,this.owner=e.owner,this.cluster=e.cluster,this.blockhashCommitment=e.blockhashCommitment,this.api=e.api}get AllTxData(){return{instructions:this.instructions,endInstructions:this.endInstructions,signers:this.signers,instructionTypes:this.instructionTypes,endInstructionTypes:this.endInstructionTypes,lookupTableAddress:this.lookupTableAddress}}get allInstructions(){return[...this.instructions,...this.endInstructions]}async getComputeBudgetConfig(){var n;let e=(await Rl.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}=Zi(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:i=[],endInstructionTypes:r=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...r),this.lookupTableAddress.push(...s.filter(a=>a!==Jn.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(R({},t||{})):this.build(t)}build(e){var n;let t=new ei;return this.allInstructions.length&&t.add(...this.allInstructions),t.feePayer=this.feePayer,((n=this.owner)==null?void 0:n.signer)&&!this.signers.some(i=>i.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer),{builder:this,transaction:t,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async i=>{var c;let{recentBlockHash:r,skipPreflight:s=!0,sendAndConfirm:a}=i||{},u=r!=null?r:await Cn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=u,this.signers.length&&t.sign(...this.signers),ln([t]),(c=this.owner)!=null&&c.isKeyPair)return{txId:a?await gr(this.connection,t,this.signers.find(m=>m.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:s}):await this.connection.sendRawTransaction(t.serialize(),{skipPreflight:s}),signedTx:t};if(this.signAllTransactions){let l=await this.signAllTransactions([t]);return{txId:await this.connection.sendRawTransaction(l[0].serialize(),{skipPreflight:s}),signedTx:l[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:e||{}}}buildMultiTx(e){var c;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),r=t.filter(l=>l.transaction.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],u=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:u,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{},f=p!=null?p:await Cn(this.connection,this.blockhashCommitment);if((b=this.owner)!=null&&b.isKeyPair){if(m){let g=[];for(let A of s){let w=await gr(this.connection,A,this.signers.find(k=>k.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:s}}return{txIds:await await Promise.all(s.map(async g=>(g.recentBlockhash=f,await this.connection.sendRawTransaction(g.serialize(),{skipPreflight:y})))),signedTxs:s}}if(this.signAllTransactions){let g=s.map((w,k)=>(w.recentBlockhash=f,a[k].length&&w.sign(...a[k]),w));ln(g);let A=await this.signAllTransactions(g);if(m){let w=0,k=[],I=async()=>{if(!A[w])return;let h=await this.connection.sendRawTransaction(A[w].serialize(),{skipPreflight:y});k.push({txId:h,status:"sent",signedTx:A[w]}),d==null||d([...k]),w++,this.connection.onSignature(h,S=>{let B=k.findIndex(C=>C.txId===h);B>-1&&(k[B].status=S.err?"error":"success"),d==null||d([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(h)};return await I(),{txIds:k.map(h=>h.txId),signedTxs:A}}else{let w=[];for(let k=0;k<A.length;k+=1){let I=await this.connection.sendRawTransaction(A[k].serialize(),{skipPreflight:y});w.push(I)}return{txIds:w,signedTxs:A}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async versionMultiBuild({extraPreBuildData:e,txVersion:t,extInfo:n}){return t===0?await this.buildV0MultiTx({extraPreBuildData:e,buildProps:n||{}}):this.buildMultiTx({extraPreBuildData:e,extInfo:n})}async buildV0(e){var f;let y=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:r}=y,s=Re(y,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=R(R({},this.cluster==="devnet"?{}:oo),t),u=Array.from(new Set([...n,...this.lookupTableAddress])),c=[];for(let b of u)a[b]===void 0&&c.push(new Jn(b));let l=await br({connection:this.connection,address:c});for(let[b,g]of Object.entries(l))a[b]=g;let m=i?Jn.default.toBase58():r!=null?r:await Cn(this.connection,this.blockhashCommitment),d=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((f=this.owner)==null?void 0:f.signer)&&!this.signers.some(b=>b.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ni(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async b=>{var w;let{skipPreflight:g=!0,sendAndConfirm:A}=b||{};if(ln([p]),(w=this.owner)!=null&&w.isKeyPair){let k=await this.connection.sendTransaction(p,{skipPreflight:g});return A&&await $i(this.connection,k),{txId:k,signedTx:p}}if(this.signAllTransactions){let k=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(k[0],{skipPreflight:g}),signedTx:k[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var c;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),r=t.filter(l=>l.builder.instructions.length>0),s=[i,...r.map(l=>l.transaction)],a=[this.signers,...r.map(l=>l.signers)],u=[...this.instructionTypes,...r.map(l=>l.instructionTypes).flat()];return(c=this.owner)!=null&&c.signer&&a.forEach(l=>{l.some(m=>m.publicKey.equals(this.owner.publicKey))||this.signers.push(this.owner.signer)}),s.forEach(async(l,m)=>{l.sign(a[m])}),{builder:this,transactions:s,signers:a,instructionTypes:u,buildProps:n,execute:async l=>{var f;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:y=!0}=l||{};if(p&&s.forEach(b=>b.message.recentBlockhash=p),ln(s),(f=this.owner)!=null&&f.isKeyPair){if(m){let b=[];for(let g of s){let A=await this.connection.sendTransaction(g,{skipPreflight:y});await $i(this.connection,A),b.push(A)}return{txIds:b,signedTxs:s}}return{txIds:await Promise.all(s.map(async b=>await this.connection.sendTransaction(b,{skipPreflight:y}))),signedTxs:s}}if(this.signAllTransactions){let b=await this.signAllTransactions(s);if(m){let g=0,A=[],w=async()=>{if(!b[g])return;let k=await this.connection.sendTransaction(b[g],{skipPreflight:y});A.push({txId:k,status:"sent",signedTx:b[g]}),d==null||d([...A]),g++,this.connection.onSignature(k,I=>{let h=A.findIndex(S=>S.txId===k);h>-1&&(A[h].status=I.err?"error":"success"),d==null||d([...A]),I.err||w()},"processed"),this.connection.getSignatureStatus(k)};return w(),{txIds:[],signedTxs:b}}else{let g=[];for(let A=0;A<b.length;A+=1){let w=await this.connection.sendTransaction(b[A],{skipPreflight:y});g.push(w)}return{txIds:g,signedTxs:b}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var l;let c=e||{},{computeBudgetConfig:t}=c,n=Re(c,["computeBudgetConfig"]),i=t?Zi(t):{instructions:[],instructionTypes:[]},r=this.signers.reduce((m,d)=>F(R({},m),{[d.publicKey.toBase58()]:d}),{}),s=[],a=[],u=[];if(this.allInstructions.forEach(m=>{let d=[...u,m],p=t?[...i.instructions,...d]:d,f=[...new Set(d.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat()).values()].map(b=>new Jn(b));if(u.length<12&&Qn({instructions:p,payer:this.feePayer,signers:f})||Qn({instructions:d,payer:this.feePayer,signers:f}))u.push(m);else{if(u.length===0)throw Error("item ins too big");Qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:f})?s.push(new ei().add(...i.instructions,...u)):s.push(new ei().add(...u)),a.push(Array.from(new Set(u.map(b=>b.keys.filter(g=>g.isSigner).map(g=>g.pubkey.toString())).flat())).map(b=>r[b]).filter(b=>b!==void 0)),u=[m]}}),u.length>0){let d=[...new Set(u.map(p=>p.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(p=>r[p]).filter(p=>p!==void 0);Qn({instructions:t?[...i.instructions,...u]:[...u],payer:this.feePayer,signers:d.map(p=>p.publicKey)})?s.push(new ei().add(...i.instructions,...u)):s.push(new ei().add(...u)),a.push(d)}return s.forEach(m=>m.feePayer=this.feePayer),(l=this.owner)!=null&&l.signer&&a.forEach(m=>{m.some(d=>d.publicKey.equals(this.owner.publicKey))||m.push(this.owner.signer)}),{builder:this,transactions:s,signers:a,instructionTypes:this.instructionTypes,execute:async m=>{var g;let{sequentially:d,onTxUpdate:p,recentBlockHash:y,skipPreflight:f=!0}=m||{},b=y!=null?y:await Cn(this.connection,this.blockhashCommitment);if(s.forEach(async(A,w)=>{A.recentBlockhash=b,a[w].length&&A.sign(...a[w])}),ln(s),(g=this.owner)!=null&&g.isKeyPair){if(d){let A=[];for(let w of s){let k=await gr(this.connection,w,this.signers.find(I=>I.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:f});A.push(k)}return{txIds:A,signedTxs:s}}return{txIds:await Promise.all(s.map(async A=>await this.connection.sendRawTransaction(A.serialize(),{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let A=await this.signAllTransactions(s);if(d){let w=0,k=[],I=async()=>{if(!A[w])return;let h=await this.connection.sendRawTransaction(A[w].serialize(),{skipPreflight:f});k.push({txId:h,status:"sent",signedTx:A[w]}),p==null||p([...k]),w++,this.connection.onSignature(h,S=>{let B=k.findIndex(C=>C.txId===h);B>-1&&(k[B].status=S.err?"error":"success"),p==null||p([...k]),S.err||I()},"processed"),this.connection.getSignatureStatus(h)};return await I(),{txIds:k.map(h=>h.txId),signedTxs:A}}else{let w=[];for(let k=0;k<A.length;k+=1){let I=await this.connection.sendRawTransaction(A[k].serialize(),{skipPreflight:f});w.push(I)}return{txIds:w,signedTxs:A}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuildV0(e){var g;let b=e||{},{computeBudgetConfig:t,lookupTableCache:n={},lookupTableAddress:i=[]}=b,r=Re(b,["computeBudgetConfig","lookupTableCache","lookupTableAddress"]),s=R(R({},this.cluster==="devnet"?{}:oo),n),a=Array.from(new Set([...this.lookupTableAddress,...i])),u=[];for(let A of a)s[A]===void 0&&u.push(new Jn(A));let c=await br({connection:this.connection,address:u});for(let[A,w]of Object.entries(c))s[A]=w;let l=t?Zi(t):{instructions:[],instructionTypes:[]},m=await Cn(this.connection,this.blockhashCommitment),d=this.signers.reduce((A,w)=>F(R({},A),{[w.publicKey.toBase58()]:w}),{}),p=[],y=[],f=[];if(this.allInstructions.forEach(A=>{let w=[...f,A],k=t?[...l.instructions,...w]:w;if(f.length<12&&Yn({instructions:k,payer:this.feePayer,lookupTableAddressAccount:s})||Yn({instructions:w,payer:this.feePayer,lookupTableAddressAccount:s}))f.push(A);else{if(f.length===0)throw Error("item ins too big");let I={};for(let h of[...new Set(a)])s[h]!==void 0&&(I[h]=s[h]);if(t&&Yn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let h=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new ni(h))}else{let h=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new ni(h))}y.push(Array.from(new Set(f.map(h=>h.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat())).map(h=>d[h]).filter(h=>h!==void 0)),f=[A]}}),f.length>0){let w=[...new Set(f.map(k=>k.keys.filter(I=>I.isSigner).map(I=>I.pubkey.toString())).flat()).values()].map(k=>d[k]).filter(k=>k!==void 0);if(t&&Yn({instructions:[...l.instructions,...f],payer:this.feePayer,lookupTableAddressAccount:s,recentBlockhash:m})){let k=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...l.instructions,...f]}).compileToV0Message(Object.values(s));p.push(new ni(k))}else{let k=new ti({payerKey:this.feePayer,recentBlockhash:m,instructions:[...f]}).compileToV0Message(Object.values(s));p.push(new ni(k))}y.push(w)}return(g=this.owner)!=null&&g.signer&&y.forEach(A=>{A.some(w=>w.publicKey.equals(this.owner.publicKey))||A.push(this.owner.signer)}),{builder:this,transactions:p,buildProps:e,signers:y,instructionTypes:this.instructionTypes,execute:async A=>{var S;let{sequentially:w,onTxUpdate:k,recentBlockHash:I,skipPreflight:h=!0}=A||{};if(p.map(async(B,C)=>{y[C].length&&B.sign(y[C]),I&&(B.message.recentBlockhash=I)}),ln(p),(S=this.owner)!=null&&S.isKeyPair){if(w){let B=[];for(let C of p){let x=await this.connection.sendTransaction(C,{skipPreflight:h});await $i(this.connection,x),B.push(x)}return{txIds:B,signedTxs:p}}return{txIds:await Promise.all(p.map(async B=>await this.connection.sendTransaction(B,{skipPreflight:h}))),signedTxs:p}}if(this.signAllTransactions){let B=await this.signAllTransactions(p);if(w){let C=0,x=[],L=async()=>{if(!B[C])return;let W=await this.connection.sendTransaction(B[C],{skipPreflight:h});x.push({txId:W,status:"sent",signedTx:B[C]}),k==null||k([...x]),C++,this.connection.onSignature(W,O=>{let H=x.findIndex(X=>X.txId===W);H>-1&&(x[H].status=O.err?"error":"success"),k==null||k([...x]),O.err||L()},"processed"),this.connection.getSignatureStatus(W)};return L(),{txIds:[],signedTxs:B}}else{let C=[];for(let x=0;x<B.length;x+=1){let L=await this.connection.sendTransaction(B[x],{skipPreflight:h});C.push(L)}return{txIds:C,signedTxs:B}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:r||{}}}};var Le={BASE_HOST:"https://api-v3.raydium.io",OWNER_BASE_HOST:"https://owner-v1.raydium.io",SERVICE_BASE_HOST:"https://service.raydium.io",MONITOR_BASE_HOST:"https://monitor.raydium.io",SERVICE_1_BASE_HOST:"https://service-v1.raydium.io",SEND_TRANSACTION:"/send-transaction",FARM_ARP:"/main/farm/info",FARM_ARP_LINE:"/main/farm-apr-tv",CLMM_CONFIG:"/main/clmm-config",CPMM_CONFIG:"/main/cpmm-config",VERSION:"/main/version",CHECK_AVAILABILITY:"/v3/main/AvailabilityCheckAPI",RPCS:"/main/rpcs",INFO:"/main/info",STAKE_POOLS:"/main/stake-pools",CHAIN_TIME:"/main/chain-time",TOKEN_LIST:"/mint/list",MINT_INFO_ID:"/mint/ids",JUP_TOKEN_LIST:"https://tokens.jup.ag/tokens?tags=lst,community",POOL_LIST:"/pools/info/list",POOL_SEARCH_BY_ID:"/pools/info/ids",POOL_SEARCH_MINT:"/pools/info/mint",POOL_SEARCH_LP:"/pools/info/lps",POOL_KEY_BY_ID:"/pools/key/ids",POOL_LIQUIDITY_LINE:"/pools/line/liquidity",POOL_POSITION_LINE:"/pools/line/position",FARM_INFO:"/farms/info/ids",FARM_LP_INFO:"/farms/info/lp",FARM_KEYS:"/farms/key/ids",OWNER_CREATED_FARM:"/create-pool/{owner}",OWNER_IDO:"/main/ido/{owner}",OWNER_STAKE_FARMS:"/position/stake/{owner}",OWNER_LOCK_POSITION:"/position/clmm-lock/{owner}",IDO_KEYS:"/ido/key/ids",SWAP_HOST:"https://transaction-v1.raydium.io",SWAP_COMPUTE:"/compute/",SWAP_TX:"/transaction/",MINT_PRICE:"/mint/price",MIGRATE_CONFIG:"/main/migrate-lp",PRIORITY_FEE:"/main/auto-fee",JITO:"https://mainnet.block-engine.jito.wtf",JITO_TRANSACTION:"/api/v1/transactions",JITO_BUNDLE:"/api/v1/bundles",CPMM_LOCK:"https://dynamic-ipfs.raydium.io/lock/cpmm/position"},eb=R({},Le);var oa="ray_tab_hash",wr="ray_req_hash",Ll=()=>{if(typeof window===void 0)return"";let o=sessionStorage.getItem(oa);return o||(o=`ray-${Date.now()}`,sessionStorage.setItem(oa,o)),o},so=async n=>{var i=n,{logCount:o=1e3,removeLastLog:e}=i,t=Re(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let r=JSON.parse(localStorage.getItem(wr)||"[]").slice(0,o-1);e&&r.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),r.unshift(F(R({},t),{time:Date.now(),session:Ll()}));try{localStorage.setItem(wr,JSON.stringify(r))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(r[0].data=a+(a.length>100?"...":"");!s;){r.pop();let u=JSON.stringify(t.data).substring(0,100);r[0].data=u+(u.length>100?"...":"");try{localStorage.setItem(wr,JSON.stringify(r)),s=!0}catch{s=!1}}return new Promise(u=>u())}return so(F(R({},t),{logCount:o,removeLastLog:!0}))}};var ao=ae("Raydium_Api"),Ar=new Map;var uo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:r}){this.cluster=e,this.urlConfigs=r||{},this.logCount=i||1e3,this.api=ra.create({baseURL:this.urlConfigs.BASE_HOST||Le.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:u,url:c}=s;return ao.debug(`${a==null?void 0:a.toUpperCase()} ${u}${c}`),s},s=>(ao.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&&so({status:c,url:`${m}${d}`,params:a.params,data:u,logCount:this.logCount}),ao.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&&so({status:c,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),ao.error(`${l.toUpperCase()} ${m}${d} ${c||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Le.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Le.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Le.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ra.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,r)=>i+r,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Le.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Le.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Le.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Le.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Le.MINT_INFO_ID)+`?mints=${e.map(n=>n.toString()).join(",")}`)).data}async getPoolList(e={}){let{type:t="all",sort:n="liquidity",order:i="desc",page:r=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Le.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${r}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Le.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Ar.has(s)?(n.push(Ar.get(s)),!1):!0),r=[];return i.length&&(r=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Le.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),r.forEach(a=>{Ar.set(a.id,a)})),n.concat(r)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:r="default",order:s="desc",page:a=1}=e,[u,c]=[t&&st(t).toBase58(),n&&n!=="undefined"?st(n).toBase58():""],[l,m]=c&&u>c?[c,u]:[u,c];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Le.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${r}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Le.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Le.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Le.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Le.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Le.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Le.JITO})).data}};var co="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",sa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as go,SystemProgram as sm}from"@solana/web3.js";import{AccountLayout as Mn,createAssociatedTokenAccountInstruction as Rr,TOKEN_PROGRAM_ID as rn,TOKEN_2022_PROGRAM_ID as am}from"@solana/spl-token";var Pr=(...o)=>o.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Be=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ae(t)}createTxBuilder(e){return this.scope.checkOwner(),new ro({connection:this.scope.connection,feePayer:e||this.scope.ownerPubKey,cluster:this.scope.cluster,owner:this.scope.owner,blockhashCommitment:this.scope.blockhashCommitment,api:this.scope.api,signAllTransactions:this.scope.signAllTransactions})}logDebug(...e){this.logger.debug(Pr(e))}logInfo(...e){this.logger.info(Pr(e))}logAndCreateError(...e){let t=Pr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as em,SystemProgram as tm}from"@solana/web3.js";import nm from"bn.js";import{createCloseAccountInstruction as im,createInitializeAccountInstruction as om,createTransferInstruction as rm,TOKEN_PROGRAM_ID as Nn}from"@solana/spl-token";import{Keypair as Hl,PublicKey as Pa}from"@solana/web3.js";import Zl from"bn.js";import{TOKEN_PROGRAM_ID as $l}from"@solana/spl-token";function Ol(o){return o instanceof Uint8Array||o!=null&&typeof o=="object"&&o.constructor.name==="Uint8Array"}function kr(o,...e){if(!Ol(o))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(o.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${o.length}`)}function hr(o,e=!0){if(o.destroyed)throw new Error("Hash instance has been destroyed");if(e&&o.finished)throw new Error("Hash#digest() has already been called")}function aa(o,e){kr(o);let t=e.outputLen;if(o.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var mo=o=>new DataView(o.buffer,o.byteOffset,o.byteLength),xt=(o,e)=>o<<32-e|o>>>e;var vb=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Nl(o){if(typeof o!="string")throw new Error(`utf8ToBytes expected string, got ${typeof o}`);return new Uint8Array(new TextEncoder().encode(o))}function Tr(o){return typeof o=="string"&&(o=Nl(o)),kr(o),o}var lo=class{clone(){return this._cloneInto()}},Vb={}.toString;function ua(o){let e=n=>o().update(Tr(n)).digest(),t=o();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>o(),e}function Ml(o,e,t,n){if(typeof o.setBigUint64=="function")return o.setBigUint64(e,t,n);let i=BigInt(32),r=BigInt(4294967295),s=Number(t>>i&r),a=Number(t&r),u=n?4:0,c=n?0:4;o.setUint32(e+u,s,n),o.setUint32(e+c,a,n)}var ca=(o,e,t)=>o&e^~o&t,la=(o,e,t)=>o&e^o&t^e&t,po=class extends lo{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=mo(this.buffer)}update(e){hr(this);let{view:t,buffer:n,blockLen:i}=this;e=Tr(e);let r=e.length;for(let s=0;s<r;){let a=Math.min(i-this.pos,r-s);if(a===i){let u=mo(e);for(;i<=r-s;s+=i)this.process(u,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){hr(this),aa(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:r}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let m=s;m<i;m++)t[m]=0;Ml(n,i-8,BigInt(this.length*8),r),this.process(n,0);let a=mo(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],r)}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:i,finished:r,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=r,e.destroyed=s,i%t&&e.buffer.set(n),e}};var _l=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]),nn=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),on=new Uint32Array(64),Ir=class extends po{constructor(){super(64,32,8,!1),this.A=nn[0]|0,this.B=nn[1]|0,this.C=nn[2]|0,this.D=nn[3]|0,this.E=nn[4]|0,this.F=nn[5]|0,this.G=nn[6]|0,this.H=nn[7]|0}get(){let{A:e,B:t,C:n,D:i,E:r,F:s,G:a,H:u}=this;return[e,t,n,i,r,s,a,u]}set(e,t,n,i,r,s,a,u){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=r|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)on[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=on[m-15],p=on[m-2],y=xt(d,7)^xt(d,18)^d>>>3,f=xt(p,17)^xt(p,19)^p>>>10;on[m]=f+on[m-7]+y+on[m-16]|0}let{A:n,B:i,C:r,D:s,E:a,F:u,G:c,H:l}=this;for(let m=0;m<64;m++){let d=xt(a,6)^xt(a,11)^xt(a,25),p=l+d+ca(a,u,c)+_l[m]+on[m]|0,f=(xt(n,2)^xt(n,13)^xt(n,22))+la(n,i,r)|0;l=c,c=u,u=a,a=s+p|0,s=r,r=i,i=n,n=p+f|0}n=n+this.A|0,i=i+this.B|0,r=r+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,i,r,s,a,u,c,l)}roundClean(){on.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var ma=ua(()=>new Ir);import{PublicKey as Ql}from"@solana/web3.js";import ba,{isBN as ga}from"bn.js";import{bits as vl,BitStructure as zb,blob as Vl,Blob as Qb,cstr as Yb,f32 as jb,f32be as Hb,f64 as Zb,f64be as $b,greedy as Jb,Layout as El,ns64 as eg,ns64be as tg,nu64 as Fl,nu64be as ng,offset as ig,s16 as og,s16be as rg,s24 as sg,s24be as ag,s32 as Dl,s32be as ug,s40 as cg,s40be as lg,s48 as mg,s48be as dg,s8 as pg,seq as Wl,struct as fg,Structure as ql,u16 as Ul,u16be as yg,u24 as bg,u24be as gg,u32 as Gl,u32be as wg,u40 as Ag,u40be as Pg,u48 as kg,u48be as hg,u8 as Xl,UInt as zl,union as Tg,Union as Ig,unionLayoutDiscriminator as Bg,utf8 as xg}from"@solana/buffer-layout";var fo=El,da=ql;var Br=zl;var pa=Xl,Wt=Ul;var xr=Gl;var fa=Fl;var Xe=Dl;var ya=Wl;var ye=Vl;var Sr=vl;var mn=class extends fo{constructor(t,n,i){super(t,i);this.blob=ye(t),this.signed=n}decode(t,n=0){let i=new ba(this.blob.decode(t,n),10,"le");return this.signed?i.fromTwos(this.span*8).clone():i}encode(t,n,i=0){return typeof t=="number"&&(t=new ba(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},yo=class extends fo{constructor(t){super(8,t);this._lower=Sr(xr(),!1),this._upper=Sr(xr(),!1)}addBoolean(t){this._lower.fields.length<32?this._lower.addBoolean(t):this._upper.addBoolean(t)}decode(t,n=0){let i=this._lower.decode(t,n),r=this._upper.decode(t,n+this._lower.span);return R(R({},i),r)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function U(o){return new Br(1,o)}function Qe(o){return new Br(4,o)}function P(o){return new mn(8,!1,o)}function J(o){return new mn(16,!1,o)}function wa(o){return new mn(1,!0,o)}function Ln(o){return new mn(8,!0,o)}function Aa(o){return new mn(16,!0,o)}var bo=class extends fo{constructor(t,n,i,r){super(t.span,r);this.layout=t,this.decoder=n,this.encoder=i}decode(t,n){return this.decoder(this.layout.decode(t,n))}encode(t,n,i){return this.layout.encode(this.encoder(t),n,i)}getSpan(t,n){return this.layout.getSpan(t,n)}};function K(o){return new bo(ye(32),e=>new Ql(e),e=>e.toBuffer(),o)}function _e(o){return new bo(pa(),Yl,jl,o)}function Yl(o){if(o===0)return!1;if(o===1)return!0;throw new Error("Invalid bool: "+o)}function jl(o){return o?1:0}var Kr=class extends da{decode(e,t){return super.decode(e,t)}};function E(o,e,t){return new Kr(o,e,t)}function Y(o,e,t){let n,i=typeof e=="number"?e:ga(e)?e.toNumber():new Proxy(e,{get(r,s){if(!n){let a=Reflect.get(r,"count");n=ga(a)?a.toNumber():a,Reflect.set(r,"count",n)}return Reflect.get(r,s)},set(r,s,a){return s==="count"&&(n=a),Reflect.set(r,s,a)}});return ya(o,i,t)}var On=E([K("mint"),K("owner"),P("amount"),Qe("delegateOption"),K("delegate"),U("state"),Qe("isNativeOption"),P("isNative"),P("delegatedAmount"),Qe("closeAuthorityOption"),K("closeAuthority")]);var Yg=ae("Raydium_Util");function ka({owner:o,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:r,account:s}of t.value){let a=On.decode(s.data),{mint:u,amount:c}=a;n.push({publicKey:r,mint:u,amount:c,isAssociated:ue(o,u,s.owner).publicKey.equals(r),isNative:!1,programId:s.owner}),i.push({pubkey:r,accountInfo:a,programId:s.owner})}return e&&n.push({mint:Pa.default,amount:new Zl(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function it({fromPublicKey:o,programId:e=$l}){let t=Hl.generate().publicKey.toBase58().slice(0,32);return{publicKey:Jl(o,t,e),seed:t}}function Jl(o,e,t){let n=Buffer.concat([o.toBuffer(),Buffer.from(e),t.toBuffer()]),i=ma(n);return new Pa(i)}function Cr(o){let{mint:e,tokenAccount:t,owner:n,programId:i=Nn}=o;return om(t,e,n,i)}function qt(o){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:r=Nn}=o;return im(e,t,i,n,r)}async function Ut(o){let{connection:e,amount:t,commitment:n,payer:i,owner:r,skipCloseAccount:s}=o,a=await e.getMinimumBalanceForRentExemption(On.span,n),u=Z(t).add(new nm(a)),c=it({fromPublicKey:i,programId:Nn});return{addresses:{newAccount:c.publicKey},signers:[],instructions:[tm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:c.seed,newAccountPubkey:c.publicKey,lamports:u.toNumber(),space:On.span,programId:Nn}),Cr({mint:new em(Ue.address),tokenAccount:c.publicKey,owner:r,programId:Nn})],instructionTypes:[V.CreateAccount,V.InitAccount],endInstructionTypes:s?[]:[V.CloseAccount],endInstructions:s?[]:[qt({tokenAccount:c.publicKey,payer:i,owner:r})]}}function ha({source:o,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:r=Nn}){return rm(o,e,t,BigInt(String(n)),i,r)}var oi=class extends Be{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._clientOwnedToken=!!(n||i)}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 ue(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=R(R({},{}),t),[r,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:rn},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:am},i.commitment)]),{tokenAccounts:u,tokenAccountRawInfos:c}=ka({owner:this.scope.ownerPubKey,solAccountResp:r,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=u,this._tokenAccountRawInfos=c,this._accountFetchTime=Date.now(),this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>this.fetchWalletTokenAccounts({forceUpdate:!0}),t==null?void 0:t.commitment),{tokenAccounts:u,tokenAccountRawInfos:c}}async getCreatedTokenAccount({mint:t,programId:n=rn,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let r=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 r){let{publicKey:u}=a;if(u&&(!i||i&&s.equals(u)))return u}}async getOrCreateTokenAccount(t){var y,f,b,g;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:r,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:u=!1,checkCreateATAOwner:c=!1}=t,l=new go(t.tokenProgram||rn),m=this.getAssociatedTokenAccount(n,new go(l)),d=(a?[]:this.tokenAccountRawInfos).filter(A=>A.accountInfo.mint.equals(n)&&(!r||A.pubkey.equals(m))).sort((A,w)=>A.accountInfo.amount.lt(w.accountInfo.amount)?1:-1);if(i===void 0||d.length>0)return d.length>0?{account:d[0].pubkey}:{};let p={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(r){let A=Rr(s,m,s,n,l);if(c){let w=await this.scope.connection.getAccountInfo(m);if(w===null)(y=p.instructions)==null||y.push(A),p.instructionTypes.push(V.CreateATA);else if(!(w.owner.equals(l)&&Mn.decode(w.data).mint.equals(n)&&Mn.decode(w.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${m.toString()}`)}else p.instructions.push(A),p.instructionTypes.push(V.CreateATA);if(n.equals(j)&&i.amount){let w=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(f=i.amount)!=null?f:0,skipCloseAccount:u});p.instructions.push(...w.instructions||[]),p.endInstructions.push(...w.endInstructions||[]),p.instructionTypes.push(...w.instructionTypes||[]),p.endInstructionTypes.push(...w.endInstructionTypes||[]),i.amount&&(p.instructions.push(ha({source:w.addresses.newAccount,destination:m,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:rn})),p.instructionTypes.push(V.TransferAmount))}return u||(p.endInstructions.push(qt({owner:s,payer:i.payer||s,tokenAccount:m,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:m,instructionParams:p}}else{let A=it({fromPublicKey:s,programId:l}),w=await this.scope.connection.getMinimumBalanceForRentExemption(Mn.span),k=sm.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:A.seed,newAccountPubkey:A.publicKey,lamports:w+Number((g=(b=i.amount)==null?void 0:b.toString())!=null?g:0),space:Mn.span,programId:l});return p.instructions.push(k,Cr({mint:n,tokenAccount:A.publicKey,owner:this.scope.ownerPubKey,programId:l})),p.instructionTypes.push(V.CreateAccount),p.instructionTypes.push(V.InitAccount),u||(p.endInstructions.push(qt({owner:s,payer:i.payer||s,tokenAccount:A.publicKey,programId:l})),p.endInstructionTypes.push(V.CloseAccount)),{account:A.publicKey,instructionParams:p}}}async checkOrCreateAta({mint:t,programId:n=rn,autoUnwrapWSOLToSOL:i}){var u;await this.fetchWalletTokenAccounts();let r=(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(!r){let c=this.getAssociatedTokenAccount(t,n),l=await Rr(s,c,s,t,n);a.instructions=[l],a.instructionTypes=[V.CreateATA],r=c}return i&&j.toBase58()===t.toBase58()&&(a.endInstructions=[qt({owner:s,payer:s,tokenAccount:r,programId:n})],a.endInstructionTypes=[V.CloseAccount]),{pubKey:r,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:r,programId:s=rn,tokenAccount:a,payer:u=this.scope.ownerPubKey,bypassAssociatedCheck:c,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(r,s);if(new go(j).equals(r)){let p=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:u,amount:i,skipCloseAccount:l});return R({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!c){let p=[],y=Rr(this.scope.ownerPubKey,d,this.scope.ownerPubKey,r,s);if(m){let f=await this.scope.connection.getAccountInfo(d);if(f===null)p.push(y);else if(!(f.owner.equals(rn)&&Mn.decode(f.data).mint.equals(r)&&Mn.decode(f.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${r.toString()}, ata: ${d.toString()}`)}else p.push(y);return{tokenAccount:d,instructions:p,instructionTypes:[V.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=rn,amount:r,useSOLBalance:s,handleTokenAccount:a}=t,u,c=this.createTxBuilder();if(n.equals(new go(j))&&s){let l=await this.handleTokenAccount({side:"in",amount:r||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Re(l,["tokenAccount"]);u=d,c.addInstruction(p)}else if(u=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!u&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Re(m,["tokenAccount"]);u=d,c.addInstruction(p)}return R({tokenAccount:u},c.AllTxData)}};import{PublicKey as we,SystemProgram as Im}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Bm}from"@solana/spl-token";import{PublicKey as Ba}from"@solana/web3.js";var Lr=E([U("instruction")]),Or=E([U("instruction")]),um=E([P("rewardState"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardLastUpdateTime"),P("totalReward"),P("totalRewardEmissioned"),P("rewardClaimed"),P("rewardPerSecond"),J("accRewardPerShare"),K("rewardVault"),K("rewardMint"),K("rewardSender"),P("rewardType"),Y(P(),15,"padding")]),cm=E([P("state"),P("nonce"),K("lpVault"),K("rewardVault"),K(),K(),P(),P(),P("totalReward"),J("perShareReward"),P("lastSlot"),P("perSlotReward")]),lm=E([P("state"),P("nonce"),K("lpVault"),K("rewardVaultA"),P("totalRewardA"),J("perShareRewardA"),P("perSlotRewardA"),U("option"),K("rewardVaultB"),ye(7),P("totalRewardB"),J("perShareRewardB"),P("perSlotRewardB"),P("lastSlot"),K()]),mm=E([P(),P("state"),P("nonce"),P("validRewardTokenNum"),J("rewardMultiplier"),P("rewardPeriodMax"),P("rewardPeriodMin"),P("rewardPeriodExtend"),K("lpMint"),K("lpVault"),Y(um,5,"rewardInfos"),K("creator"),K(),Y(P(),32,"padding")]),dm=new Proxy(cm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(o,e,t)}}),pm=new Proxy(lm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:5,rewardInfos:[{rewardVault:i.rewardVaultA,totalReward:i.totalRewardA,perSlotReward:i.perSlotRewardA,perShareReward:i.perShareRewardA},{rewardVault:i.rewardVaultB,totalReward:i.totalRewardB,perSlotReward:i.perSlotRewardB,perShareReward:i.perShareRewardB}]})}:Reflect.get(o,e,t)}}),wo=new Proxy(mm,{get(o,e,t){return e==="decode"?(...n)=>{let i=o.decode(...n);return F(R({},i),{version:6,rewardInfos:i.rewardInfos.map(r=>{var s;return F(R({},r),{rewardType:((s=Object.entries(sn).find(a=>String(a[1])===r.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(o,e,t)}}),fm=E([P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),Nr=E([U("instruction"),P("nonce"),Y(fm,5,"rewardTimeInfo")]),Mr=E([U("instruction"),P("rewardReopenTime"),P("rewardEndTime"),P("rewardPerSecond")]),_r=E([U("instruction"),P("isSet"),P("rewardPerSecond"),P("rewardOpenTime"),P("rewardEndTime"),P("rewardType")]),xw=E([P("state"),K("id"),K("owner"),P("deposited"),Y(P(),1,"rewardDebts")]),vr=E([P("state"),K("id"),K("owner"),P("deposited"),Y(J(),1,"rewardDebts"),P(""),P("voteLockedBalance"),Y(P(),15)]),Sw=E([P("state"),K("id"),K("owner"),P("deposited"),Y(P(),2,"rewardDebts")]),Ta=E([P("state"),K("id"),K("owner"),P("deposited"),Y(J(),2,"rewardDebts"),Y(P(),17)]),Ia=E([P(),P("state"),K("id"),K("owner"),P("deposited"),Y(J(),5,"rewardDebts"),Y(P(),16)]),ut=E([U("instruction"),P("amount")]),ym=E([K("mint"),K("grantAuthority"),P("baselineVoteWeightScaledFactor"),P("maxExtraLockupVoteWeightScaledFactor"),P("lockupSaturationSecs"),wa("digitShift"),Y(U(),7,"reserved1"),Y(P(),7,"reserved2")]),bm=E([ye(8),K("governanceProgramId"),K("realm"),K("realmGoverningTokenMint"),K("realmAuthority"),Y(U(),32,"reserved1"),Y(ym,4,"votingMints"),Ln("timeOffset"),U("bump"),Y(U(),7,"reserved2"),Y(P(),11,"reserved3")]),gm=E([Ln("startTime"),Ln("endTime"),U("kind"),Y(U(),15,"reserved")]),wm=E([Y(gm,1,"lockup"),P("amountDeposited_native"),P("amountInitiallyLockedNative"),_e("isUsed"),_e("allowClawback"),U("votingMintConfigIdx"),Y(U(),29,"reserved")]),Am=E([ye(8),K("voterAuthority"),K("registrar"),Y(wm,32,"deposits"),U("voterBump"),U("voterWweightRecordBump"),Y(U(),94,"reserved")]);var _w=ae("Raydium_farm_config"),xa=new Ba("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Sa=new Ba("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Ka={3:vr,5:Ta,6:Ia},Vr=o=>[3,5,6].indexOf(o)!==-1,Er=o=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=o,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,r={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${i}`},5:()=>{if(t.length!==n.length)return`rewardInfos and rewardTokenAccounts lengths not equal: ${i}`},6:()=>{if(!n.length||t.length!==n.length)return`no rewardTokenAccounts or rewardInfos and rewardTokenAccounts lengths not equal: ${i}`}};return(s=r[e])==null?void 0:s.call(r)},sn={"Standard SPL":0,"Option tokens":1},pt={[$s.toString()]:3,[Js.toString()]:5,[jn.toString()]:6};import{PublicKey as pe,SystemProgram as La,SYSVAR_CLOCK_PUBKEY as Ao,SYSVAR_RENT_PUBKEY as hm,TransactionInstruction as St}from"@solana/web3.js";import Oa from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as pA,createAssociatedTokenAccountInstruction as fA,TOKEN_PROGRAM_ID as an}from"@solana/spl-token";import Pm from"bn.js";var km=ae("Raydium.farm.util");function ri({programId:o,poolId:e,mint:t,type:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],o);return i}function ft({programId:o,poolId:e,owner:t,version:n}){let{publicKey:i}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],o);return i}var Ca=({programId:o,poolId:e})=>ce([e.toBuffer()],o);function Ra(o){return{isSet:new Pm(1),rewardPerSecond:Z(o.perSecond),rewardOpenTime:Z(o.openTime),rewardEndTime:Z(o.endTime),rewardType:Z(sn[o.rewardType])}}function Fr(o){return Z(o.endTime).sub(Z(o.openTime)).mul(Z(o.perSecond))}function si(o){let e=Ka[o];return e||km.logWithError("invalid version",o),e}var Tm=ae("Raydium_farm_instruction"),BA={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 ai(o){let{version:e,id:t,ledger:n,programId:i,owner:r}=o,s={3:9,5:10}[e];s||Tm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Lr.span);Lr.encode({instruction:s},a);let u=[T({pubkey:t}),T({pubkey:n}),T({pubkey:r,isWritable:!1}),T({pubkey:La.programId,isWritable:!1}),T({pubkey:hm,isWritable:!1})];return{instruction:new St({programId:i,keys:u,data:a}),instructionType:V.FarmV3CreateLedger}}function Na(o){var n;let e=Buffer.alloc(Nr.span);Nr.encode({instruction:0,nonce:new Oa(o.nonce),rewardTimeInfo:o.rewardInfoConfig},e);let t=[...sr,T({pubkey:o.farmId}),T({pubkey:o.farmAuthority,isWritable:!1}),T({pubkey:o.lpVault}),T({pubkey:o.lpMint,isWritable:!1}),T({pubkey:o.lockVault}),T({pubkey:o.lockMint,isWritable:!1}),T({pubkey:(n=o.lockUserAccount)!=null?n:Me}),T({pubkey:o.owner,isWritable:!1,isSigner:!0})];for(let i of o.rewardInfo)t.push(T({pubkey:i.rewardMint,isWritable:!1}),T({pubkey:i.rewardVault}),T({pubkey:i.userRewardToken}));return{instruction:new St({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6Create}}function Ma(o){let e=Buffer.alloc(Or.span);Or.encode({instruction:5},e);let t=[T({pubkey:an,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.lpVault,isWritable:!1}),T({pubkey:o.rewardVault}),T({pubkey:o.userRewardToken}),T({pubkey:o.owner,isWritable:!1,isSigner:!0})];return{instruction:new St({programId:o.programId,keys:t,data:e}),instructionType:V.FarmV6CreatorWithdraw}}function Dr({payer:o,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let r=Buffer.alloc(Mr.span);Mr.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},r);let s=[T({pubkey:an,isWritable:!1}),T({pubkey:n.id}),T({pubkey:n.lpVault,isWritable:!1}),T({pubkey:e}),T({pubkey:t}),T({pubkey:o,isWritable:!1,isSigner:!0})];return new St({programId:n.programId,keys:s,data:r})}function Wr({payer:o,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let r=Buffer.alloc(_r.span);_r.encode({instruction:4,isSet:new Oa(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(sn[i.rewardType])},r);let s=[...sr,T({pubkey:t.id}),T({pubkey:t.authority,isWritable:!1}),T({pubkey:i.mint,isWritable:!1}),T({pubkey:n}),T({pubkey:e}),T({pubkey:o,isWritable:!1,isSigner:!0})];return new St({programId:t.programId,keys:s,data:r})}function ui(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,u]=[new pe(e.programId),new pe(e.id)],c=ft({programId:a,poolId:u,owner:r,version:6}),l=Buffer.alloc(ut.span);ut.encode({instruction:2,amount:Z(s)},l);let m=[T({pubkey:an,isWritable:!1}),T({pubkey:u}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:new pe(t.lpVault)}),T({pubkey:c}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new pe(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new St({programId:a,keys:m,data:l})}function ci(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:5}),m=Buffer.alloc(ut.span);ut.encode({instruction:12,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new pe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function li(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:3}),m=Buffer.alloc(ut.span);ut.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function _a(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:3}),m=Buffer.alloc(ut.span);ut.encode({instruction:10,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function va(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s,userAuxiliaryLedgers:a}=o,[u,c]=[new pe(e.programId),new pe(e.id)],l=ft({programId:u,poolId:c,owner:r,version:5}),m=Buffer.alloc(ut.span);ut.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:c}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new pe(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new pe(t.rewardInfos[0].vault)}),T({pubkey:Ao,isWritable:!1}),T({pubkey:an,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new pe(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new St({programId:u,keys:d,data:m})}function Va(o){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:r,amount:s}=o,[a,u]=[new pe(e.programId),new pe(e.id)],c=ft({programId:a,poolId:u,owner:r,version:6}),l=Buffer.alloc(ut.span);ut.encode({instruction:1,amount:Z(s)},l);let m=[T({pubkey:an,isWritable:!1}),T({pubkey:La.programId,isWritable:!1}),T({pubkey:u}),T({pubkey:new pe(t.authority),isWritable:!1}),T({pubkey:new pe(t.lpVault)}),T({pubkey:c}),T({pubkey:r,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new pe(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new St({programId:a,keys:m,data:l})}var mi=class extends Be{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Me)){let n=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Fr(F(R({},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:i=jn,txVersion:r}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new we(e.lpMint.address),lockInfo:{lockMint:xa,lockVault:Sa},version:6,rewardInfos:t,programId:i},u=this.createTxBuilder(),c=n!=null?n:this.scope.ownerPubKey,l=it({fromPublicKey:c,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(wo.span);u.addInstruction({instructions:[Im.createAccountWithSeed({fromPubkey:c,basePubkey:c,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:wo.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ca({programId:new we(a.programId),poolId:l.publicKey}),y=ri({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),f=[],b=[];for(let I of a.rewardInfos){I.openTime>=I.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",I.openTime.toString()),isNaN(sn[I.rewardType])&&this.logAndCreateError("rewardType error",I.rewardType),Number(I.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",I.perSecond),f.push(Ra(I));let{rewardPubKey:h,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:I,payer:c});S&&u.addInstruction(S),h||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let B=I.mint.equals(Me)?new we(Ue.address):I.mint;b.push({rewardMint:B,rewardVault:ri({programId:a.programId,poolId:l.publicKey,mint:B,type:"rewardVault"}),userRewardToken:h})}let{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({mint:new we(a.lockInfo.lockMint),owner:this.scope.ownerPubKey,skipCloseAccount:!1,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:!1});A&&u.addInstruction(A),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:w,instructionType:k}=Na({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:y,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:b,rewardInfoConfig:f,nonce:p});return u.addInstruction({instructions:[w],instructionTypes:[k]}).versionBuild({txVersion:r,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:y,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var b;let r=pt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ge((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(Me)?new we(Ue.address):n.mint,l=a.rewardInfos.findIndex(g=>new we(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:Me,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:[Dr({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:y,farmKeys:a,rewardInfo:n})],instructionTypes:[V.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let r=pt[e.programId];r!==6&&this.logAndCreateError("invalid farm version ",r);let s=Ge((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(Me)?new we(Ue.address):m.mint,p=a.rewardInfos.findIndex(w=>new we(w.mint.address).equals(d)),y=s.rewardInfos[p];y||this.logAndCreateError("configuration does not exist","rewardMint",d);let f=(l=y.vault)!=null?l:Me,{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 A=Dr({payer:this.scope.ownerPubKey,rewardVault:f,userRewardTokenPub:b,farmKeys:a,rewardInfo:m});c.addInstruction({instructions:[A],instructionTypes:[V.FarmV6Restart]})}return c.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:r}=e,s=pt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,c=this.createTxBuilder(),l=i.mint.equals(Me)?new we(Ue.address):i.mint,m=ri({programId:new we(n.programId),poolId:new we(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:u});return p&&c.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,c.addInstruction({instructions:[Wr({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[V.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:r}=e,s=pt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=Ge((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),u=r!=null?r:this.scope.ownerPubKey,c=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Me)?new we(Ue.address):l.mint,d=ri({programId:new we(n.programId),poolId:new we(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=Wr({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:F(R({},l),{mint:m})});c.addInstruction({instructions:[f],instructionTypes:[V.FarmV6CreatorAddReward]})}return c.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:r,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=pt[d];Vr(p)||this.logAndCreateError("invalid farm program:",n.programId);let[y,f]=[new we(n.programId),new we(n.id)],b=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=ft({programId:y,poolId:f,owner:this.scope.ownerPubKey,version:p}),A=this.createTxBuilder();A.addCustomComputeBudget(l);let w={};for(let O of this.scope.account.tokenAccounts)if(a){let H=ue(this.scope.ownerPubKey,O.mint,O.programId).publicKey;O.publicKey&&H.equals(O.publicKey)&&(w[O.mint.toString()]=O.publicKey)}else w[O.mint.toString()]=O.publicKey;let k=b.lpMint,I=w[k.address];I||this.logAndCreateError("you don't have any lp","lp zero",w);let h=[];for(let O of m){let H=s&&O.mint.address===j.toString(),X=w[O.mint.address];if(!X){let{account:D,instructionParams:Ve}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:O.mint.programId,mint:new we(O.mint.address),notUseTokenAccount:H,createInfo:{payer:r||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!H,associatedOnly:H?!1:a,checkCreateATAOwner:u});X=D,Ve&&A.addInstruction(Ve)}w[O.mint.address]=X,h.push(X)}let S,B=await this.scope.connection.getAccountInfo(g);if(B&&(S=si(p).decode(B.data)),n.programId!==jn.toString()&&!S){let{instruction:O,instructionType:H}=ai({id:f,programId:y,version:p,ledger:g,owner:this.scope.ownerPubKey});A.addInstruction({instructions:[O],instructionTypes:[H]})}let C=Er({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:h});C&&this.logAndCreateError(C);let x={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:b,lpAccount:I,rewardAccounts:h,userAuxiliaryLedgers:c==null?void 0:c.map(O=>new we(O))},L=p===6?Va(x):p===5?va(x):_a(x),W={3:V.FarmV3Deposit,5:V.FarmV5Deposit,6:V.FarmV6Deposit};return A.addInstruction({instructions:[L],instructionTypes:[W[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:r,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=pt[n.programId];Vr(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 x=ue(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(b[C.mint.toString()]=C.publicKey)}else b[C.mint.toString()]=C.publicKey;if(r)r.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else{let C=ft({programId:new we(n.programId),poolId:new we(n.id),owner:this.scope.ownerPubKey,version:p}),x=await this.scope.connection.getAccountInfo(C);if(x)si(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:L,instructionType:W}=ai({id:new we(y.id),programId:new we(y.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});f.addInstruction({instructions:[L],instructionTypes:[W]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}let g=y.lpMint.address,A=s&&g===j.toString(),w=b[g.toString()];if(!w){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.lpMint.programId,mint:new we(g),notUseTokenAccount:A,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:A?!1:u,checkCreateATAOwner:c});w=C,x&&f.addInstruction(x)}b[g.toString()]=w;let k=[];for(let C of d){let x=s&&C.mint.address===j.toString(),L=b[C.mint.address];if(!L){let{account:W,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:C.mint.programId,mint:new we(C.mint.address),notUseTokenAccount:x,createInfo:{payer:a||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!x,associatedOnly:x?!1:u,checkCreateATAOwner:c});L=W,O&&f.addInstruction(O)}b[C.mint.address]=L,k.push(L)}let I=Er({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:k});I&&this.logAndCreateError(I);let h={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:w,rewardAccounts:k,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new we(C))},S=p===6?ui(h):p===5?ci(h):li(h),B={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};return f.addInstruction({instructions:[S],instructionTypes:[B[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=Ge((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),r=pt[e.programId];r!==6&&this.logAndCreateError("invalid farm version",r);let s=e.rewardInfos.findIndex(y=>y.mint.address===Me.toString()?new we(Ue.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let u=(p=a==null?void 0:a.vault)!=null?p:Me,c=this.createTxBuilder(),l;if(t.equals(Me)){let y=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Fr(F(R({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new N(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:[Bm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[V.CreateATA]})):l=y}let{instruction:m,instructionType:d}=Ma({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.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:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:u,computeBudgetConfig:c}=e,l=this.createTxBuilder(),m={};for(let y of this.scope.account.tokenAccounts)if(r){let f=ue(this.scope.ownerPubKey,y.mint).publicKey;y.publicKey&&f.equals(y.publicKey)&&(m[y.mint.toString()]=y.publicKey)}else m[y.mint.toString()]=y.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(y=>y.id).join(",")})).reduce((y,f)=>F(R({},y),{[f.id]:f}),{});for(let y of Object.values(t)){let{programId:f,lpMint:b,rewardInfos:g,id:A}=y,w=pt[f],k=b.address,I=n&&k===j.toString(),h=m[k];if(!h){let{account:W,instructionParams:O}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:b.programId,mint:new we(k),notUseTokenAccount:I,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:I?!1:r,checkCreateATAOwner:s});h=W,O&&l.addInstruction(O)}m[k.toString()]=h;let S=[];for(let W of g){let O=n&&W.mint.address===j.toString(),H=m[W.mint.address];if(!H){let{account:X,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:W.mint.programId,mint:new we(W.mint.address),notUseTokenAccount:O,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!O,associatedOnly:O?!1:r,checkCreateATAOwner:s});H=X,D&&l.addInstruction(D)}m[W.mint.address]=H,S.push(H)}let B=p[A],C={amount:dt,owner:this.scope.ownerPubKey,farmInfo:y,farmKeys:B,lpAccount:h,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(W=>new we(W))},x=w===6?ui(C):w===5?ci(C):li(C),L={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[L[w]]})}return u===1?l.sizeCheckBuild({computeBudgetConfig:c}):l.sizeCheckBuildV0({computeBudgetConfig:c})}};import{PublicKey as He}from"@solana/web3.js";import{AccountLayout as ud,NATIVE_MINT as Au,TOKEN_PROGRAM_ID as Vn}from"@solana/spl-token";import{Keypair as Bo,PublicKey as q,SystemProgram as gn,TransactionInstruction as et}from"@solana/web3.js";import iu from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Hr,TOKEN_2022_PROGRAM_ID as _t,TOKEN_PROGRAM_ID as he}from"@solana/spl-token";import _m from"bn.js";import yt from"bn.js";var xe=new yt(0),ct=new yt(1),Gt=new yt(-1),lt=new yt(1).shln(64),Po=new yt(1).shln(128),qr=lt.sub(ct),di=64,Ea=Po.subn(1),Ye=-443636,$e=-Ye,bt=new yt("4295048016"),gt=new yt("79226673521066979257578248091"),ko=new yt("4295048017"),ho=new yt("79226673521066979257578248090"),Fa=16,Da="59543866431248",Wa="184467440737095516",qa="15793534762490258745",To=new yt(10).pow(new yt(6));var Ua={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:[]},nP=new yt("18446744073700000000");import re from"bn.js";function Io(o){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,o,!1),new Uint8Array(e)}function Ur(o,e){let t=0;for(let n=o-1;n>=0&&!e.testn(n);n--)t++;return t}function Gr(o,e){let t=0;for(let n=0;n<o&&!e.testn(n);n++)t++;return t}function pi(o,e){for(let t=0;t<o;t++)if(e.testn(t))return!1;return!0}function Ga(o,e){return pi(o,e)?null:Ur(o,e)}function Xa(o,e){return pi(o,e)?null:Gr(o,e)}var uP=Buffer.from("amm_config","utf8"),xm=Buffer.from("pool","utf8"),Sm=Buffer.from("pool_vault","utf8"),Km=Buffer.from("pool_reward_vault","utf8"),za=Buffer.from("position","utf8"),Cm=Buffer.from("tick_array","utf8"),Rm=Buffer.from("operation","utf8"),Lm=Buffer.from("pool_tick_array_bitmap_extension","utf8"),Om=Buffer.from("observation","utf8");function Qa(o,e,t,n){return ce([xm,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function Xr(o,e,t){return ce([Sm,e.toBuffer(),t.toBuffer()],o)}function Ya(o,e,t){return ce([Km,e.toBuffer(),t.toBuffer()],o)}function le(o,e,t){return ce([Cm,e.toBuffer(),Io(t)],o)}function Kt(o,e,t,n){return ce([za,e.toBuffer(),Io(t),Io(n)],o)}function Je(o,e){return ce([za,e.toBuffer()],o)}function dn(o){return ce([Buffer.from("metadata","utf8"),Ft.toBuffer(),o.toBuffer()],Ft)}function fi(o){return ce([Rm],o)}function ot(o,e){return ce([Lm,e.toBuffer()],o)}function ja(o,e){return ce([Om,e.toBuffer()],o)}var Ha=Buffer.from("locked_position","utf8");function zr(o,e){return ce([Ha,e.toBuffer()],o)}function yi(o,e){return ce([Ha,e.toBuffer()],o)}import{PublicKey as Ct}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as Za}from"@solana/spl-token";import ke from"bn.js";import Mt from"bn.js";var bi=class{static getfeeGrowthInside(e,t,n){let i=new Mt(0),r=new Mt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,r=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),r=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Mt(0),a=new Mt(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=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),c=ie.wrappingSubU128(ie.wrappingSubU128(e.feeGrowthGlobalX64B,r),a);return{feeGrowthInsideX64A:u,feeGrowthInsideBX64:c}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,lt),u=t.tokenFeesOwedA.add(a),c=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:r,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=ie.mulDivFloor(ie.wrappingSubU128(r,t.feeGrowthInsideLastX64A),t.liquidity,lt),u=t.tokenFeesOwedA.add(a),c=ie.mulDivFloor(ie.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,lt),l=t.tokenFeesOwedB.add(c);return{tokenFeeAmountA:u,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let r=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ie.wrappingSubU128(u,c.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,lt),d=c.rewardAmountOwed.add(m);r.push(d)}return r}static GetPositionRewards(e,t,n,i){let r=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let u=s[a],c=t.rewardInfos[a],l=ie.wrappingSubU128(u,c.growthInsideLastX64),m=ie.mulDivFloor(l,t.liquidity,lt),d=c.rewardAmountOwed.add(m);r.push(d)}return r}static getRewardGrowthInside(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(ie.wrappingSubU128(ie.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return r}static getRewardGrowthInsideV2(e,t,n,i){let r=[];for(let s=0;s<i.length;s++){let a=new Mt(0);t.liquidityGross.eqn(0)?a=i[s].rewardGrowthGlobalX64:e<t.tick?a=i[s].rewardGrowthGlobalX64.sub(t.rewardGrowthsOutsideX64[s]):a=t.rewardGrowthsOutsideX64[s];let u=new Mt(0);n.liquidityGross.eqn(0)||(e<n.tick?u=n.rewardGrowthsOutsideX64[s]:u=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),r.push(ie.wrappingSubU128(ie.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),u))}return r}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:r,epochInfo:s}){var b,g,A,w;let a=ne.priceToSqrtPriceX64(new N(e.price),e.mintA.decimals,e.mintB.decimals),u=ne.getSqrtPriceX64FromTick(t.tickLower),c=ne.getSqrtPriceX64FromTick(t.tickUpper),l=r?1+i:1-i,m=de.getAmountsFromLiquidity(a,u,c,n,r),[d,p]=[ge(m.amountA,(b=e.mintA.extensions)==null?void 0:b.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[y,f]=[ge(new Mt(new N(m.amountA.toString()).mul(l).toFixed(0)),(A=e.mintA.extensions)==null?void 0:A.feeConfig,s,!0),ge(new Mt(new N(m.amountB.toString()).mul(l).toFixed(0)),(w=e.mintB.extensions)==null?void 0:w.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Bt(d.expirationTime,p.expirationTime)}}};var Nm=15,me=class{static async getTickArrays(e,t,n,i,r,s,a){let u=[],c=Q.getTickArrayStartIndexByTick(i,r),l=Q.getInitializedTickArrayInRange(s,a,r,c,Math.floor(Nm/2));for(let p=0;p<l.length;p++){let{publicKey:y}=le(t,n,l[p]);u.push(y)}let m=(await Pt(e,u)).map(p=>p!==null?gi.decode(p.data):null),d={};for(let p=0;p<u.length;p++){let y=m[p];y!==null&&(d[y.startTickIndex]=F(R({},y),{address:u[p]}))}return d}static nextInitializedTick(e,t,n,i,r,s){let{initializedTick:a,tickArrayAddress:u,tickArrayStartTickIndex:c}=this.nextInitializedTickInOneArray(e,t,n,i,r,s);for(;a==null||a.liquidityGross.lten(0);){if(c=Q.getNextTickArrayStartIndex(c,r,s),this.checkIsValidStartIndex(c,r))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,i,r){let s=Math.floor(e/me.tickCount(t)),a=n?Q.searchLowBitFromStart(i,r,s-1,1,t):Q.searchHightBitFromStart(i,r,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let r;if(i){let a=ve-1;for(;a>=0;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){r=u;break}a=a-1}}else{let a=0;for(;a<ve;){let u=n.ticks[a];if(u.liquidityGross.gtn(0)){r=u;break}a=a+1}}let{publicKey:s}=le(e,t,n.startTickIndex);return{nextTick:r,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,r,s){let a=Q.getTickArrayStartIndexByTick(i,r),u=Math.floor((i-a)/r),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<ve;){let d=c.ticks[u];if(d.liquidityGross.gtn(0)){l=d;break}u=u+1}let{publicKey:m}=le(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(Q.checkIsOutOfBoundary(e)){if(e>$e)return!1;let n=Q.getTickArrayStartIndexByTick(Ye,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return ve*e}};var Qr=14,Xt=class{static maxTickInTickarrayBitmap(e){return e*ve*pn}static getBitmapTickBoundary(e,t){let n=this.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n);e<0&&Math.abs(e)%n!=0&&(i+=1);let r=n*i;return e<0?{minValue:-r,maxValue:-r+n}:{minValue:r,maxValue:r+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!me.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let r=this.maxTickInTickarrayBitmap(n),s=i?t-me.tickCount(n):t+me.tickCount(n);if(s<-r||s>=r)return{isInit:!1,tickIndex:t};let a=n*ve,u=s/a+512;s<0&&s%a!=0&&u--;let c=Math.abs(u);if(i){let l=e.shln(1024-c-1),m=Ga(1024,l);if(m!==null){let d=(c-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-r}}else{let l=e.shrn(c),m=Xa(1024,l);if(m!==null){let d=(c+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:r-me.tickCount(n)}}}},wi=class{static getBitmapOffset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Xt.maxTickInTickarrayBitmap(t),i=Math.floor(Math.abs(e)/n)-1;return e<0&&Math.abs(e)%n===0&&i--,i}static getBitmap(e,t,n){let i=this.getBitmapOffset(e,t);return e<0?{offset:i,tickarrayBitmap:n.negativeTickArrayBitmap[i]}:{offset:i,tickarrayBitmap:n.positiveTickArrayBitmap[i]}}static checkExtensionBoundary(e,t){let{positiveTickBoundary:n,negativeTickBoundary:i}=this.extensionTickBoundary(t);if(e>=i&&e<n)throw Error("checkExtensionBoundary -> InvalidTickArrayBoundary")}static extensionTickBoundary(e){let t=Xt.maxTickInTickarrayBitmap(e),n=-t;if($e<=t)throw Error(`extensionTickBoundary check error: ${$e}, ${t}`);if(n<=Ye)throw Error(`extensionTickBoundary check error: ${n}, ${Ye}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),r=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Q.mergeTickArrayBitmap(i).testn(r),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let r=me.tickCount(t),s=n?e-r:e+r,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:r,maxValue:s}=Xt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let u=Q.mergeTickArrayBitmap(e).shln(pn-1-a),c=pi(512,u)?null:Ur(512,u);if(c!==null){let l=t-c*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:r}}else{let u=Q.mergeTickArrayBitmap(e).shrn(a),c=pi(512,u)?null:Gr(512,u);if(c!==null){let l=t+c*me.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-me.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Xt.maxTickInTickarrayBitmap(t),i=Math.floor(n/me.tickCount(t));return e<0&&n!=0&&(i=pn-i),i}};var Se=class{static getOutputAmountAndRemainAccounts(e,t,n,i,r,s=!1){let a=n.toBase58()===e.mintA.address,u=[],{isExist:c,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!c||l===void 0||!m)throw new Error("Invalid tick array");u.push(m);let{allTrade:d,amountCalculated:p,accounts:y,sqrtPriceX64:f,feeAmount:b}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,r,s);return u.push(...y),{allTrade:d,expectedAmountOut:p.mul(Gt),remainingAccounts:u,executionPrice:f,feeAmount:b}}static getInputAmountAndRemainAccounts(e,t,n,i,r){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}=le(e.programId,e.id,f.nextStartIndex);a.push(b)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:y}=fn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Gt),c,r);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:y}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Se.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?wi.checkTickArrayIsInit(me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Q.checkTickArrayIsInitialized(Q.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=le(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:r,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,me.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(r){let{publicKey:a}=le(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/me.tickCount(e.tickSpacing)),i=t?Q.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Q.searchLowBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n-1,1,e.tickSpacing);return i.length>0?{isExist:!0,nextStartIndex:i[0]}:{isExist:!1,nextStartIndex:0}}static nextInitializedTickArrayStartIndex(e,t,n){for(t=me.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:r}=Xt.nextInitializedTickArrayStartIndex(Q.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:r};t=r;let{isInit:s,tickIndex:a}=wi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<Ye||t>$e)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:r}){var a,u,c;let s=[];for(let l=0;l<r.length;l++){let m=r[l],d=(c=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?c:(u=await e.getAccountInfo(m.tokenMint))==null?void 0:u.owner;if(d===void 0)throw Error("get new reward mint info error");let p=F(R({},m),{perSecond:ie.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new Ct(d)});if(p.tokenMint.equals(Ct.default))continue;if(n<=p.openTime.toNumber()||i.eq(xe)){s.push(p);continue}let y=new ke(Math.min(p.endTime.toNumber(),n)),f=y.sub(p.lastUpdateTime),b=ie.mulDivFloor(f,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(b),A=ie.mulDivFloor(f,p.emissionsPerSecondX64,lt),w=p.rewardTotalEmissioned.add(A);s.push(F(R({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:w,lastUpdateTime:y}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let r of t){let s=Q.getTickArrayStartIndexByTick(r,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=Xt.maxTickInTickarrayBitmap(e),n=-t;return t>$e&&(t=me.getArrayStartIndex($e,e)+me.tickCount(e)),n<Ye&&(n=me.getArrayStartIndex(Ye,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!me.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/me.tickCount(t)*pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await Ee(e,t.map(s=>({pubkey:s})),{batchRequest:n}),r={};for(let s of i)s.accountInfo!==null&&(r[s.pubkey.toString()]=Ja.decode(s.accountInfo.data));return r}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},r=[];for(let u of t){let c=Q.getTickArrayStartIndexByTick(u.tickCurrent,u.tickSpacing),l=Q.getInitializedTickArrayInRange(u.tickArrayBitmap,u.exBitmapInfo,u.tickSpacing,c,7);for(let m of l){let{publicKey:d}=le(u.programId,u.id,m);r.push({pubkey:d}),i[d.toString()]=u.id}}let s=await Ee(e,r,{batchRequest:n}),a={};for(let u of s){if(!u.accountInfo)continue;let c=i[u.pubkey.toString()];if(!c)continue;a[c.toString()]===void 0&&(a[c.toString()]={});let l=gi.decode(u.accountInfo.data);a[c.toString()][l.startTickIndex]=F(R({},l),{address:u.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:r=!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(Je(p,d).publicKey);let l=await Pt(t,c,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Ai.decode(d.data),y=p.poolId.toString(),f=e.find(B=>B.state.id.toBase58()===y);if(f===void 0)continue;let b=f.state,g=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickLower,baseIn:!0}),A=Q._getTickPriceLegacy({poolInfo:b,tick:p.tickUpper,baseIn:!0}),{amountA:w,amountB:k}=de.getAmountsFromLiquidity(b.sqrtPriceX64,g.tickSqrtPriceX64,A.tickSqrtPriceX64,p.liquidity,!1),I=1/(1-Math.sqrt(Math.sqrt(g.price.div(A.price).toNumber())));f.positionAccount=[...(a=f.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:A.price,amountA:w,amountB:k,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(B=>F(R({},B),{pendingReward:new ke(0)})),leverage:I,tokenFeeAmountA:new ke(0),tokenFeeAmountB:new ke(0)}];let h=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickLower,f.state.tickSpacing),S=await Q.getTickArrayAddressByTick(f.state.programId,p.poolId,p.tickUpper,f.state.tickSpacing);m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=h,m[`${f.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(r){let d=Object.values(m),p=await Pt(t,d,{batchRequest:i}),y={};for(let f=0;f<d.length;f++){let b=p[f];if(b===null)continue;let g=d[f].toString();y[g]=gi.decode(b.data)}for(let{state:f,positionAccount:b}of e)if(!!b)for(let g of b){let A=`${f.programId.toString()}-${f.id.toString()}-${g.tickLower}`,w=`${f.programId.toString()}-${f.id.toString()}-${g.tickUpper}`,k=y[m[A].toString()],I=y[m[w].toString()],h=k.ticks[Q.getTickOffsetInArray(g.tickLower,f.tickSpacing)],S=I.ticks[Q.getTickOffsetInArray(g.tickUpper,f.tickSpacing)],{tokenFeeAmountA:B,tokenFeeAmountB:C}=await bi.GetPositionFees(f,g,h,S),x=await bi.GetPositionRewards(f,g,h,S);g.tokenFeeAmountA=B.gte(new ke(0))?B:new ke(0),g.tokenFeeAmountB=C.gte(new ke(0))?C:new ke(0);for(let L=0;L<x.length;L++)g.rewardInfos[L].pendingReward=x[L].gte(new ke(0))?x[L]:new ke(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:r,slippage:s,priceLimit:a=new N(0),catchLiquidityInsufficient:u=!1}){var W;let c,l=n.toBase58()===e.mintA.address,[m,d]=l?[e.mintA.extensions.feeConfig,e.mintB.extensions.feeConfig]:[e.mintB.extensions.feeConfig,e.mintA.extensions.feeConfig];a.equals(new N(0))?c=l?bt.add(new ke(1)):gt.sub(new ke(1)):c=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(r,m,i,!1),{allTrade:y,expectedAmountOut:f,remainingAccounts:b,executionPrice:g,feeAmount:A}=Se.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((W=p.fee)!=null?W:xe),c,u),w=ge(f,d,i,!1),k=ne.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),I=l?k:new N(1).div(k),h=f.mul(new ke(Math.floor((1-s)*1e10))).div(new ke(1e10)),S=ge(h,d,i,!1),B=l?e.currentPrice:new N(1).div(e.currentPrice),C=new N(I).sub(B).abs(),x=B,L=new Fe(new N(C).mul(10**15).toFixed(0),new N(x).mul(10**15).toFixed(0));return{allTrade:y,realAmountIn:p,amountOut:w,minAmountOut:S,expirationTime:Bt(p.expirationTime,w.expirationTime),currentPrice:e.currentPrice,executionPrice:I,priceImpact:L,fee:A,remainingAccounts:b,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:r,epochInfo:s,catchLiquidityInsufficient:a=!1}){let u=i.address===e.mintB.address,[c,l]=u?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ie(F(R({},c),{mint:c.address,isToken2022:c.programId===Za.toBase58()})),new Ie(F(R({},l),{mint:l.address,isToken2022:l.programId===Za.toBase58()}))],{allTrade:p,realAmountIn:y,amountOut:f,minAmountOut:b,expirationTime:g,currentPrice:A,executionPrice:w,priceImpact:k,fee:I,remainingAccounts:h,executionPriceX64:S}=Se.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new Ct(c.address),amountIn:n,slippage:r,epochInfo:s,catchLiquidityInsufficient:a}),B=F(R({},y),{amount:new be(m,y.amount),fee:y.fee===void 0?void 0:new be(m,y.fee)}),C=F(R({},f),{amount:new be(d,f.amount),fee:f.fee===void 0?void 0:new be(d,f.fee)}),x=F(R({},b),{amount:new be(d,b.amount),fee:b.fee===void 0?void 0:new be(d,b.fee)}),L=new nt({baseToken:m,denominator:new ke(10).pow(new ke(20+m.decimals)),quoteToken:d,numerator:A.mul(new N(10**(20+d.decimals))).toFixed(0)}),W=new nt({baseToken:m,denominator:new ke(10).pow(new ke(20+m.decimals)),quoteToken:d,numerator:w.mul(new N(10**(20+d.decimals))).toFixed(0)}),O=new be(m,I);return{allTrade:p,realAmountIn:B,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:L,executionPrice:W,priceImpact:k,fee:O,remainingAccounts:h,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:r,slippage:s,priceLimit:a=new N(0)}){var x;let u=n.toBase58()===e.mintA.address,c={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new N(0))?l=u?gt.sub(new ke(1)):bt.add(new ke(1)):l=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(r,c[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:y,feeAmount:f}=Se.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:xe),l),b=u?e.mintB.address:e.mintA.address,g=ge(d,c[b],i,!1),A=ne.sqrtPriceX64ToPrice(y,e.mintA.decimals,e.mintB.decimals),w=u?A:new N(1).div(A),k=d.mul(new ke(Math.floor((1+s)*1e10))).div(new ke(1e10)),I=ge(k,c[b],i,!0),h=u?e.currentPrice:new N(1).div(e.currentPrice),S=new N(w).sub(h).abs(),B=h,C=new Fe(new N(S).mul(10**15).toFixed(0),new N(B).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:I,realAmountOut:m,expirationTime:Bt(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:w,priceImpact:C,fee:f,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var y,f,b;let r=e[t],s=Q.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Q.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),u=Math.max(s,r.priceMin),l=Math.min(a,r.priceMax)-u,m=a-s,d=r.priceMax-r.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:r.feeApr*p,rewardsApr:[((y=r.rewardApr[0])!=null?y:0)*p,((f=r.rewardApr[1])!=null?f:0)*p,((b=r.rewardApr[2])!=null?b:0)*p],apr:r.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:r,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:u}){let c=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[st(e.mintA.address).toString()],d=i[st(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=ne.priceToSqrtPriceX64(new N(e.price),e.mintA.decimals,e.mintB.decimals),b=ne.getSqrtPriceX64FromTick(s),g=ne.getSqrtPriceX64FromTick(a),{amountSlippageA:A,amountSlippageB:w}=de.getAmountsFromLiquidityWithSlippage(f,b,g,t,!1,!1,0),{amountSlippageA:k,amountSlippageB:I}=de.getAmountsFromLiquidityWithSlippage(f,b,g,r,!1,!1,0),h=new N(A.toString()).div(new N(10).pow(p)).mul(m.value).add(new N(w.toString()).div(new N(10).pow(y)).mul(d.value)),S=new N(k.toString()).div(new N(10).pow(p)).mul(m.value).add(new N(I.toString()).div(new N(10).pow(y)).mul(d.value)),B=new N(1).div(h.add(S)),x=new N(l.volumeFee).mul(365).div(c).mul(B).mul(100).toNumber(),L=3600*24*365,W=e.rewardDefaultInfos.map(O=>{var D,Ve;let H=O.mint.decimals,X=i[O.mint.address];return u<((D=O.startTime)!=null?D:0)||u>((Ve=O.endTime)!=null?Ve:0)||!O.perSecond||!X||H===void 0?0:new N(X.value).mul(new N(O.perSecond).mul(L)).div(new N(10).pow(H)).mul(B).mul(100).toNumber()});return{feeApr:x,rewardsApr:W,apr:x+W.reduce((O,H)=>O+H,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:r,slippage:s,add:a,epochInfo:u,amountHasFee:c}){var g,A;let l=ne.priceToSqrtPriceX64(new N(e.price),e.mintA.decimals,e.mintB.decimals),m=ne.getSqrtPriceX64FromTick(n),d=ne.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,y=ge(r,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,u,!c),f=new ke(new N(y.amount.sub((A=y.fee)!=null?A:xe).toString()).mul(p).toFixed(0)),b;if(l.lte(m))b=t?de.getLiquidityFromTokenAmountA(m,d,f,!a):new ke(0);else if(l.lte(d)){let w=de.getLiquidityFromTokenAmountA(l,d,f,!a),k=de.getLiquidityFromTokenAmountB(m,l,f);b=t?w:k}else b=t?new ke(0):de.getLiquidityFromTokenAmountB(m,d,f);return Se.getAmountsFromLiquidity({epochInfo:u,poolInfo:e,tickLower:n,tickUpper:i,liquidity:b,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:r,slippage:s,add:a}){var b,g,A,w;let u=ne.getSqrtPriceX64FromTick(n),c=ne.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=de.getAmountsFromLiquidity(ne.priceToSqrtPriceX64(new N(t.price),t.mintA.decimals,t.mintB.decimals),u,c,r,a),[d,p]=[ge(m.amountA,(b=t.mintA.extensions)==null?void 0:b.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[y,f]=[ge(m.amountA.muln(l),(A=t.mintA.extensions)==null?void 0:A.feeConfig,e,!0),ge(m.amountB.muln(l),(w=t.mintB.extensions)==null?void 0:w.feeConfig,e,!0)];return{liquidity:r,amountA:d,amountB:p,amountSlippageA:y,amountSlippageB:f,expirationTime:Bt(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(u=>!n[u.id]).map(u=>new Ct(u.id));(await Pt(e,i)).forEach((u,c)=>{!u||(n[i[c].toBase58()]=yn.decode(u.data))});let s=t.map(u=>ot(new Ct(u.programId),new Ct(u.id)).publicKey),a=await Se.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((u,c)=>F(R({},u),{[c.id]:F(R({},n[c.id]),{id:new Ct(c.id),version:6,programId:new Ct(c.programId),mintA:c.mintA,mintB:c.mintB,ammConfig:F(R({},c.config),{id:new Ct(c.config.id),fundOwner:""}),currentPrice:new N(c.price),exBitmapInfo:a[ot(new Ct(c.programId),new Ct(c.id)).publicKey.toBase58()],startTime:n[c.id].startTime.toNumber(),rewardInfos:n[c.id].rewardInfos})}),{})}static async fetchComputeClmmInfo({connection:e,poolInfo:t,rpcData:n}){return(await this.fetchComputeMultipleClmmInfo({connection:e,rpcDataMap:n?{[t.id]:n}:void 0,poolList:[t]}))[t.id]}};var Yr={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function $a(o){return F(R({},o),{type:"Concentrated",programId:o.programId.toString(),id:o.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:o.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:o.ammConfig.tradeFeeRate,openTime:o.startTime.toString(),tvl:0,day:Yr,week:Yr,month:Yr,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:F(R({},o.ammConfig),{id:o.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var ie=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),r=i.div(n);return i.mod(n).eq(xe)||(r=r.add(ct)),r}static mulDivFloor(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(xe))throw new Error("division by 0");return e.mul(t).add(n.sub(ct)).div(n)}static x64ToDecimal(e,t){return new N(e.toString()).div(N.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new re(e.mul(N.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Po).sub(t).mod(Po)}};function De(o,e){return jr(o.mul(e),64,256)}function Mm(o,e,t){let n=o.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function jr(o,e,t){let n=o.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ne=class{static sqrtPriceX64ToPrice(e,t,n){return ie.x64ToDecimal(e).pow(2).mul(N.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return ie.decimalToX64(e.mul(N.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!0):this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!0)}static getNextSqrtPriceX64FromOutput(e,t,n,i){if(!e.gt(xe))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(xe))throw new Error("liquidity must greater than 0");return i?this.getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,!1):this.getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,!1)}static getNextSqrtPriceFromTokenAmountARoundingUp(e,t,n,i){if(n.eq(xe))return e;let r=t.shln(di);if(i){let s=r,a=r.add(n.mul(e));return a.gte(s)?ie.mulDivCeil(s,e,a):ie.mulDivRoundingUp(s,ct,s.div(e).add(n))}else{let s=n.mul(e);if(!r.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=r.sub(s);return ie.mulDivCeil(r,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let r=n.shln(di);if(i)return e.add(r.div(t));{let s=ie.mulDivRoundingUp(r,ct,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<Ye||e>$e)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new re("18445821805675395072"):new re("18446744073709551616");return(t&2)!=0&&(n=De(n,new re("18444899583751176192"))),(t&4)!=0&&(n=De(n,new re("18443055278223355904"))),(t&8)!=0&&(n=De(n,new re("18439367220385607680"))),(t&16)!=0&&(n=De(n,new re("18431993317065453568"))),(t&32)!=0&&(n=De(n,new re("18417254355718170624"))),(t&64)!=0&&(n=De(n,new re("18387811781193609216"))),(t&128)!=0&&(n=De(n,new re("18329067761203558400"))),(t&256)!=0&&(n=De(n,new re("18212142134806163456"))),(t&512)!=0&&(n=De(n,new re("17980523815641700352"))),(t&1024)!=0&&(n=De(n,new re("17526086738831433728"))),(t&2048)!=0&&(n=De(n,new re("16651378430235570176"))),(t&4096)!=0&&(n=De(n,new re("15030750278694412288"))),(t&8192)!=0&&(n=De(n,new re("12247334978884435968"))),(t&16384)!=0&&(n=De(n,new re("8131365268886854656"))),(t&32768)!=0&&(n=De(n,new re("3584323654725218816"))),(t&65536)!=0&&(n=De(n,new re("696457651848324352"))),(t&131072)!=0&&(n=De(n,new re("26294789957507116"))),(t&262144)!=0&&(n=De(n,new re("37481735321082"))),e>0&&(n=Ea.div(n)),n}static getTickFromPrice(e,t,n){return ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(gt)||e.lt(bt))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new re(t-64),i=Mm(n,32,128),r=new re("8000000000000000","hex"),s=0,a=new re(0),u=t>=64?e.shrn(t-63):e.shln(63-t);for(;r.gt(new re(0))&&s<Fa;){u=u.mul(u);let y=u.shrn(127);u=u.shrn(63+y.toNumber()),a=a.add(r.mul(y)),r=r.shrn(1),s+=1}let c=a.shrn(32),m=i.add(c).mul(new re(Da)),d=jr(m.sub(new re(Wa)),64,128).toNumber(),p=jr(m.add(new re(qa)),64,128).toNumber();return d==p?d:ne.getSqrtPriceX64FromTick(p).lte(e)?p:d}},bn=class{static getTickWithPriceAndTickspacing(e,t,n,i){let s=ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,n,i))/t;return s<0?s=Math.floor(s):s=Math.ceil(s),s*t}static roundPriceWithTickspacing(e,t,n,i){let r=bn.getTickWithPriceAndTickspacing(e,t,n,i),s=ne.getSqrtPriceX64FromTick(r);return ne.sqrtPriceX64ToPrice(s,n,i)}},de=class{static addDelta(e,t){return e.add(t)}static getTokenAmountAFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");let r=n.ushln(di),s=t.sub(e);return i?ie.mulDivRoundingUp(ie.mulDivCeil(r,s,t),ct,e):ie.mulDivFloor(r,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(xe))throw new Error("sqrtPriceX64A must greater than 0");return i?ie.mulDivCeil(n,t.sub(e),lt):ie.mulDivFloor(n,t.sub(e),lt)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let r=n.mul(e).mul(t),s=t.sub(e),a=r.div(s);return i?ie.mulDivRoundingUp(a,ct,qr):a.shrn(di)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),ie.mulDivFloor(n,qr,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return de.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=de.getLiquidityFromTokenAmountA(e,n,i,!1),a=de.getLiquidityFromTokenAmountB(t,e,r);return s.lt(a)?s:a}else return de.getLiquidityFromTokenAmountB(t,n,r)}static getAmountsFromLiquidity(e,t,n,i,r){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:de.getTokenAmountAFromLiquidity(t,n,i,r),amountB:new re(0)};if(e.lt(n)){let s=de.getTokenAmountAFromLiquidity(e,n,i,r),a=de.getTokenAmountBFromLiquidity(t,e,i,r);return{amountA:s,amountB:a}}else return{amountA:new re(0),amountB:de.getTokenAmountBFromLiquidity(t,n,i,r)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,r,s,a){let{amountA:u,amountB:c}=de.getAmountsFromLiquidity(e,t,n,i,s),l=r?1+a:1-a,m=new re(new N(u.toString()).mul(l).toFixed(0)),d=new re(new N(c.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:r,add:s,epochInfo:a,amountAddFee:u}){var A,w,k,I;let c=ne.priceToSqrtPriceX64(new N(e.price),e.mintA.decimals,e.mintB.decimals),l=ne.getSqrtPriceX64FromTick(t),m=ne.getSqrtPriceX64FromTick(n),d=s?1+r:1-r,p=de.getAmountsFromLiquidity(c,l,m,i,s),[y,f]=[ge(p.amountA,(A=e.mintA.extensions)==null?void 0:A.feeConfig,a,u),ge(p.amountB,(w=e.mintB.extensions)==null?void 0:w.feeConfig,a,u)],[b,g]=[ge(new re(new N(p.amountA.toString()).mul(d).toFixed(0)),(k=e.mintA.extensions)==null?void 0:k.feeConfig,a,u),ge(new re(new N(p.amountB.toString()).mul(d).toFixed(0)),(I=e.mintB.extensions)==null?void 0:I.feeConfig,a,u)];return{liquidity:i,amountA:y,amountB:f,amountSlippageA:b,amountSlippageB:g,expirationTime:Bt(y.expirationTime,f.expirationTime)}}},fn=class{static swapCompute(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f=!1){if(d.eq(xe))throw new Error("amountSpecified must not be 0");if(y||(y=s?bt.add(ct):gt.sub(ct)),s){if(y.lt(bt))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(gt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(y.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let b=d.gt(xe),g={amountSpecifiedRemaining:d,amountCalculated:xe,sqrtPriceX64:m,tick:c>p?Math.min(p+me.tickCount(l)-1,c):p,accounts:[],liquidity:u,feeAmount:new re(0)},A=p,w=n[p],k=0,I=!s&&w.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(xe)&&!g.sqrtPriceX64.eq(y);){k>10;let h={};h.sqrtPriceStartX64=g.sqrtPriceX64;let S=Q.nextInitTick(w,g.tick,l,s,I),B=S||null,C=null;if(!(B!=null&&B.liquidityGross.gtn(0))){let L=Se.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:r},A,s);if(!L.isExist){if(f)return{allTrade:!1,amountSpecifiedRemaining:g.amountSpecifiedRemaining,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts};throw Error("swapCompute LiquidityInsufficient")}A=L.nextStartIndex;let{publicKey:W}=le(e,t,A);C=W,w=n[A];try{B=Q.firstInitializedTick(w,s)}catch{throw Error("not found next tick info")}}h.tickNext=B.tick,h.initialized=B.liquidityGross.gtn(0),p!==A&&C&&(g.accounts.push(C),p=A),h.tickNext<Ye?h.tickNext=Ye:h.tickNext>$e&&(h.tickNext=$e),h.sqrtPriceNextX64=ne.getSqrtPriceX64FromTick(h.tickNext);let x;if(s&&h.sqrtPriceNextX64.lt(y)||!s&&h.sqrtPriceNextX64.gt(y)?x=y:x=h.sqrtPriceNextX64,[g.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=fn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(h.feeAmount),b?(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.sub(h.amountIn.add(h.feeAmount)),g.amountCalculated=g.amountCalculated.sub(h.amountOut)):(g.amountSpecifiedRemaining=g.amountSpecifiedRemaining.add(h.amountOut),g.amountCalculated=g.amountCalculated.add(h.amountIn.add(h.feeAmount))),g.sqrtPriceX64.eq(h.sqrtPriceNextX64)){if(h.initialized){let L=B.liquidityNet;s&&(L=L.mul(Gt)),g.liquidity=de.addDelta(g.liquidity,L)}I=h.tickNext!=g.tick&&!s&&w.startTickIndex===h.tickNext,g.tick=s?h.tickNext-1:h.tickNext}else if(g.sqrtPriceX64!=h.sqrtPriceStartX64){let L=ne.getTickFromSqrtPriceX64(g.sqrtPriceX64);I=L!=g.tick&&!s&&w.startTickIndex===L,g.tick=L}++k}try{let{nextStartIndex:h,isExist:S}=me.nextInitializedTickArray(g.tick,l,s,i,r);S&&p!==h&&(g.accounts.push(le(e,t,h).publicKey),p=h)}catch{}return{allTrade:!0,amountSpecifiedRemaining:xe,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,r){let s={sqrtPriceX64Next:new re(0),amountIn:new re(0),amountOut:new re(0),feeAmount:new re(0)},a=e.gte(t),u=i.gte(xe);if(u){let l=ie.mulDivFloor(i,To.sub(new re(r.toString())),To);s.amountIn=a?de.getTokenAmountAFromLiquidity(t,e,n,!0):de.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?de.getTokenAmountBFromLiquidity(t,e,n,!1):de.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Gt).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromOutput(e,n,i.mul(Gt),a);let c=t.eq(s.sqrtPriceX64Next);return a?(c&&u||(s.amountIn=de.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),c&&!u||(s.amountOut=de.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=c&&u?s.amountIn:de.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=c&&!u?s.amountOut:de.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!u&&s.amountOut.gt(i.mul(Gt))&&(s.amountOut=i.mul(Gt)),u&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=ie.mulDivCeil(s.amountIn,new re(r),To.sub(new re(r))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var ve=60,pn=512,Q=class{static getTickArrayAddressByTick(e,t,n,i){let r=Q.getTickArrayStartIndexByTick(n,i),{publicKey:s}=le(e,t,r);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Q.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=ve)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=me.tickCount(t),i=e/n;return e<0&&e%n!=0?i=Math.ceil(i)-1:i=Math.floor(i),i}static getTickArrayStartIndexByTick(e,t){return this.getTickArrayBitIndex(e,t)*me.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*ve,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*ve,r=Math.floor(t/i)+512,s=Math.abs(r);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*ve:e+t*ve}static mergeTickArrayBitmap(e){let t=new _m(0);for(let n=0;n<e.length;n++)t=t.add(e[n].shln(64*n));return t}static getInitializedTickArrayInRange(e,t,n,i,r){let s=Math.floor(i/(n*ve));return[...Q.searchLowBitFromStart(e,t,s-1,r,n),...Q.searchHightBitFromStart(e,t,s,r,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Q.searchHightBitFromStart(e,t,0,pn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,r){let s=[],a=Q.getAllInitializedTickArrayStartIndex(n,i,r);for(let u of a){let{publicKey:c}=le(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,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.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===i)break}let u=me.tickCount(r);return a.map(c=>c*u)}static searchHightBitFromStart(e,t,n,i,r){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(c=>Q.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===i)break}let u=me.tickCount(r);return a.map(c=>c*u)}static checkIsOutOfBoundary(e){return e<Ye||e>$e}static nextInitTick(e,t,n,i,r){if(me.getArrayStartIndex(t,n)!=e.startTickIndex)return null;let a=Math.floor((t-e.startTickIndex)/n);if(i)for(;a>=0;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a-1}else for(r||(a=a+1);a<ve;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=ve-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<ve;){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 i=ne.getSqrtPriceX64FromTick(t),r=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new N(1).div(r),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new N(1).div(t),r=bn.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(r),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new N(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ne.getSqrtPriceX64FromTick(t),r=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:r,tickSqrtPriceX64:i}:{tick:t,price:new N(1).div(r),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new N(1).div(t),r=bn.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(r),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:r,price:a}:{tick:r,price:new N(1).div(a)}}};var eu=E([ye(8),U("bump"),Wt("index"),K(""),Qe("protocolFeeRate"),Qe("tradeFeeRate"),Wt("tickSpacing"),Y(P(),8,"")]),vm=E([Qe("blockTimestamp"),Ln("tickCumulative"),Y(P(),4)]),tu=E([ye(8),_e("initialized"),P("recentEpoch"),Wt("observationIndex"),K("poolId"),Y(vm,100,"observations"),Y(P(),4)]),Vm=E([U("rewardState"),P("openTime"),P("endTime"),P("lastUpdateTime"),J("emissionsPerSecondX64"),P("rewardTotalEmissioned"),P("rewardClaimed"),K("tokenMint"),K("tokenVault"),K("creator"),J("rewardGrowthGlobalX64")]),yn=E([ye(8),U("bump"),K("ammConfig"),K("creator"),K("mintA"),K("mintB"),K("vaultA"),K("vaultB"),K("observationId"),U("mintDecimalsA"),U("mintDecimalsB"),Wt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Xe("tickCurrent"),Qe(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),P("protocolFeesTokenA"),P("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),U("status"),Y(U(),7,""),Y(Vm,3,"rewardInfos"),Y(P(),16,"tickArrayBitmap"),P("totalFeesTokenA"),P("totalFeesClaimedTokenA"),P("totalFeesTokenB"),P("totalFeesClaimedTokenB"),P("fundFeesTokenA"),P("fundFeesTokenB"),P("startTime"),Y(P(),15*4-3,"padding")]),Em=E([J("growthInsideLastX64"),P("rewardAmountOwed")]),Ai=E([ye(8),U("bump"),K("nftMint"),K("poolId"),Xe("tickLower"),Xe("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Y(Em,3,"rewardInfos"),Y(P(),8,"")]),bk=E([ye(8),U("bump"),K("poolId"),Xe("tickLowerIndex"),Xe("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),P("tokenFeesOwedA"),P("tokenFeesOwedB"),Y(J(),3,"rewardGrowthInside"),Y(P(),8,"")]),Fm=E([Xe("tick"),Aa("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),Y(J(),3,"rewardGrowthsOutsideX64"),Y(Qe(),13,"")]),gi=E([ye(8),K("poolId"),Xe("startTickIndex"),Y(Fm,ve,"ticks"),U("initializedTickCount"),Y(U(),115,"")]),nu=E([ye(329),Y(K(),100,"whitelistMints")]),Ja=E([ye(8),K("poolId"),Y(Y(P(),8),Qr,"positiveTickArrayBitmap"),Y(Y(P(),8),Qr,"negativeTickArrayBitmap")]),gk=E([P(),U("bump"),K("owner"),K("poolId"),K("positionId"),K("nftAccount"),Y(P(),8)]),wk=E([ye(8),U("bump"),K("lockOwner"),K("poolId"),K("positionId"),K("nftAccount"),K("lockNftMint"),P("recentEpoch"),Y(P(),8)]);tu.span;var ou=ae("Raydium_Clmm"),Rt={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]},ru=[188,37,179,131,82,150,84,73],su=[16,72,250,198,14,162,212,19],Ae=class{static createPoolInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y){let f=E([J("sqrtPriceX64"),P("startTime")]),b=[{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,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:r,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);f.encode({sqrtPriceX64:p,startTime:y},g);let A=Buffer.from([...Rt.createPool,...g]);return new et({keys:b,programId:e,data:A})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:r,ammConfigId:s,initialPriceX64:a,startTime:u}=e,[c,l]=[new q(i.address),new q(r.address)],{publicKey:m}=Qa(t,s,c,l),{publicKey:d}=ja(t,m),{publicKey:p}=Xr(t,m,c),{publicKey:y}=Xr(t,m,l),f=[this.createPoolInstruction(t,m,n,s,d,c,p,new q(i.programId||he),l,y,new q(r.programId||he),ot(t,m).publicKey,a,u)];return{signers:[],instructions:f,instructionTypes:[V.CreateAccount,V.ClmmCreatePool],address:{poolId:m,observationId:d,mintAVault:p,mintBVault:y},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,A,w,k,I,h,S,B,C,x){let L=E([Xe("tickLowerIndex"),Xe("tickUpperIndex"),Xe("tickArrayLowerStartIndex"),Xe("tickArrayUpperStartIndex"),J("liquidity"),P("amountMaxA"),P("amountMaxB"),_e("withMetadata"),U("optionBaseFlag"),_e("baseFlag")]),W=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,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:at,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:Hr,isSigner:!1,isWritable:!1},{pubkey:Ft,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:h,amountMaxA:S,amountMaxB:B,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},H);let X=Buffer.from([...Rt.openPosition,...H]);return new et({keys:O,programId:e,data:X})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let B=Bo.generate();m.push(B),y=B.publicKey}let f=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=le(d,p,f),{publicKey:A}=le(d,p,b),{publicKey:w}=ue(n.wallet,y,he),{publicKey:k}=dn(y),{publicKey:I}=Je(d,y),{publicKey:h}=Kt(d,p,i,r),S=this.openPositionFromLiquidityInstruction(d,n.feePayer,p,n.wallet,y,w,k,h,g,A,I,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,r,f,b,s,a,u,c);return{signers:m,instructions:[S],instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:y,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:k,personalPosition:I,protocolPosition:h}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:u,withMetadata:c,getEphemeralSigners:l}){let m=[],[d,p]=[new q(e.programId),new q(e.id)],y;if(l)y=new q((await l(1))[0]);else{let B=Bo.generate();m.push(B),y=B.publicKey}let f=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=le(d,p,f),{publicKey:A}=le(d,p,b),{publicKey:w}=ue(n.wallet,y,he),{publicKey:k}=dn(y),{publicKey:I}=Je(d,y),{publicKey:h}=Kt(d,p,i,r),S=this.openPositionFromBaseInstruction(d,n.feePayer,p,n.wallet,y,w,k,h,g,A,I,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),i,r,f,b,c,s,a,u,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(d,p).publicKey:void 0);return{address:{nftMint:y,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:k,personalPosition:I,protocolPosition:h},instructions:[S],signers:m,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,A,w,k,I,h,S,B,C,x){let L=E([Xe("tickLowerIndex"),Xe("tickUpperIndex"),Xe("tickArrayLowerStartIndex"),Xe("tickArrayUpperStartIndex"),J("liquidity"),P("amountMaxA"),P("amountMaxB"),_e("withMetadata"),U("optionBaseFlag"),_e("baseFlag")]),W=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],O=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,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:at,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:Hr,isSigner:!1,isWritable:!1},{pubkey:Ft,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...W],H=Buffer.alloc(L.span);L.encode({tickLowerIndex:A,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:I,liquidity:new iu(0),amountMaxA:S==="MintA"?B:C,amountMaxB:S==="MintA"?C:B,withMetadata:h==="create",baseFlag:S==="MintA",optionBaseFlag:1},H);let X=Buffer.from([...Rt.openPosition,...H]);return new et({keys:O,programId:e,data:X})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,liquidity:s,amountMaxA:a,amountMaxB:u,withMetadata:c,getEphemeralSigners:l}){let m,d=[];if(l)m=new q((await l(1))[0]);else{let B=Bo.generate();d.push(B),m=B.publicKey}let[p,y]=[new q(e.programId),new q(e.id)],f=Q.getTickArrayStartIndexByTick(i,e.config.tickSpacing),b=Q.getTickArrayStartIndexByTick(r,e.config.tickSpacing),{publicKey:g}=le(p,y,f),{publicKey:A}=le(p,y,b),{publicKey:w}=ue(n.wallet,m,he),{publicKey:k}=dn(m),{publicKey:I}=Je(p,m),{publicKey:h}=Kt(p,y,i,r),S=this.openPositionFromLiquidityInstruction(p,n.wallet,y,n.wallet,m,w,k,h,g,A,I,n.tokenAccountA,n.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(t.mintA.address),new q(t.mintB.address),i,r,f,b,s,a,u,c,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[f,b])?ot(p,y).publicKey:void 0);return{address:{nftMint:m,tickArrayLower:g,tickArrayUpper:A,positionNftAccount:w,metadataAccount:k,personalPosition:I,protocolPosition:h},instructions:[S],signers:d,instructionTypes:[V.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,r){let s=E([]),a=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1}],u=Buffer.alloc(s.span);s.encode({},u);let c=Buffer.from([...Rt.closePosition,...u]);return new et({keys:a,programId:e,data:c})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i}){let r=new q(e.programId),{publicKey:s}=ue(n.wallet,i.nftMint,he),{publicKey:a}=Je(r,i.nftMint),u=[];return u.push(this.closePositionInstruction(r,n.wallet,i.nftMint,s,a)),{address:{positionNftAccount:s,personalPosition:a},signers:[],instructions:u,instructionTypes:[V.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,A){let w=E([J("liquidity"),P("amountMaxA"),P("amountMaxB"),U("optionBaseFlag"),_e("baseFlag")]),k=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(w.span);w.encode({liquidity:f,amountMaxA:b,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},h);let S=Buffer.from([...Rt.increaseLiquidity,...h]);return new et({keys:I,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMaxA:s,amountMaxB:a}){let[u,c]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=le(u,c,l),{publicKey:p}=le(u,c,m),{publicKey:y}=ue(i.wallet,n.nftMint,he),{publicKey:f}=Je(u,n.nftMint),{publicKey:b}=Kt(u,c,n.tickLower,n.tickUpper),g=this.increasePositionFromLiquidityInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},signers:[],instructions:[g],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:r,baseAmount:s,otherAmountMax:a}){let[u,c]=[new q(e.programId),new q(e.id)],l=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),m=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:d}=le(u,c,l),{publicKey:p}=le(u,c,m),{publicKey:y}=ue(i.wallet,n.nftMint,he),{publicKey:f}=Je(u,n.nftMint),{publicKey:b}=Kt(u,c,n.tickLower,n.tickUpper);return{address:{tickArrayLower:d,tickArrayUpper:p,positionNftAccount:y,personalPosition:f,protocolPosition:b},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,y,f,c,b,d,p,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),r,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[l,m])?ot(u,c).publicKey:void 0)],signers:[],instructionTypes:[V.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,A){let w=E([J("liquidity"),P("amountMaxA"),P("amountMaxB"),U("optionBaseFlag"),_e("baseFlag")]),k=[...A?[{pubkey:A,isSigner:!1,isWritable:!0}]:[]],I=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...k],h=Buffer.alloc(w.span);w.encode({liquidity:new iu(0),amountMaxA:f==="MintA"?b:g,amountMaxB:f==="MintA"?g:b,baseFlag:f==="MintA",optionBaseFlag:1},h);let S=Buffer.from([...Rt.increaseLiquidity,...h]);return new et({keys:I,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,A,w){let k=E([J("liquidity"),P("amountMinA"),P("amountMinB")]),I=[...w?[{pubkey:w,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()],h=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:Yi,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...I],S=Buffer.alloc(k.span);k.encode({liquidity:b,amountMinA:g,amountMinB:A},S);let B=Buffer.from([...Rt.decreaseLiquidity,...S]);return new et({keys:h,programId:e,data:B})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:r,amountMinA:s,amountMinB:a,programId:u}){let[c,l]=[new q(e.programId),new q(e.id)],m=Q.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Q.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=le(c,l,m),{publicKey:y}=le(c,l,d),{publicKey:f}=ue(i.wallet,n.nftMint,u),{publicKey:b}=Je(c,n.nftMint),{publicKey:g}=Kt(c,l,n.tickLower,n.tickUpper),A=[];for(let I=0;I<e.rewardDefaultInfos.length;I++)A.push({poolRewardVault:new q(t.rewardInfos[I].vault),ownerRewardVault:i.rewardAccounts[I],rewardMint:new q(e.rewardDefaultInfos[I].mint.address)});let w=[],k=this.decreaseLiquidityInstruction(c,i.wallet,f,b,l,g,p,y,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),A,r,s,a,Se.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?ot(c,l).publicKey:void 0);return w.push(k),{address:{tickArrayLower:p,tickArrayUpper:y,positionNftAccount:f,personalPosition:b,protocolPosition:g},signers:[],instructions:w,instructionTypes:[V.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g){let A=E([P("amount"),P("otherAmountThreshold"),J("sqrtPriceLimitX64"),_e("isBaseInput")]),w=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],k=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,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:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:Yi,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...w],I=Buffer.alloc(A.span);A.encode({amount:p,otherAmountThreshold:y,sqrtPriceLimitX64:f,isBaseInput:b},I);let h=Buffer.from([...Rt.swap,...I]);return new et({keys:k,programId:e,data:h})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:r,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===r.toString(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),b?i.tokenAccountA:i.tokenAccountB,b?i.tokenAccountB:i.tokenAccountA,b?d:p,b?p:d,b?y:f,b?f:y,c,n,s,a,u,!0,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:r,amountOut:s,amountInMax:a,sqrtPriceLimitX64:u,remainingAccounts:c}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[y,f]=[new q(e.mintA.address),new q(e.mintB.address)],b=e.mintA.address===r.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),b?i.tokenAccountB:i.tokenAccountA,b?i.tokenAccountA:i.tokenAccountB,b?p:d,b?d:p,b?f:y,b?y:f,c,n,s,a,u,!1,ot(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[V.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,r,s,a,u,c,l,m,d){let p=E([P("openTime"),P("endTime"),J("emissionsPerSecondX64")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1}],f=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},f);let b=Buffer.from([...Rt.initReward,...f]);return new et({keys:y,programId:e,data:b})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new q(e.programId),new q(e.id)],a=Ya(r,s,i.mint).publicKey,u=fi(r).publicKey,c=[this.initRewardInstruction(r,n.wallet,s,u,new q(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:u},signers:[],instructions:c,instructionTypes:[V.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,r,s,a,u,c,l,m,d){let p=E([U("rewardIndex"),J("emissionsPerSecondX64"),P("openTime"),P("endTime")]),y=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0}],f=Buffer.alloc(p.span);p.encode({rewardIndex:c,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},f);let b=Buffer.from([...Rt.setRewardEmissions,...f]);return new et({keys:y,programId:e,data:b})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[r,s]=[new q(e.programId),new q(e.id)],a,u,c;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,u=new q(t.rewardInfos[d].vault),c=new q(t.rewardInfos[d].mint.address));(a===void 0||u===void 0)&&ou.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=fi(r).publicKey,m=[this.setRewardInstruction(r,n.wallet,s,l,new q(e.config.id),n.tokenAccount,u,c,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:u,operationId:l},signers:[],instructions:m,instructionTypes:[V.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,r,s,a){let u=E([U("rewardIndex")]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:Yi,isSigner:!1,isWritable:!1}],l=Buffer.alloc(u.span);u.encode({rewardIndex:a},l);let m=Buffer.from([...Rt.collectReward,...l]);return new et({keys:c,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[r,s]=[new q(e.programId),new q(e.id)],a,u;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,u=new q(t.rewardInfos[l].vault));(a===void 0||u===void 0)&&ou.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let c=[this.collectRewardInstruction(r,n.wallet,s,n.tokenAccount,u,i,a)];return{address:{rewardVault:u},signers:[],instructions:c,instructionTypes:[V.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:r,nftMint:s,getEphemeralSigners:a}){let u=[],c;if(a)c=new q((await a(1))[0]);else{let b=Bo.generate();u.push(b),c=b.publicKey}let{publicKey:l}=ue(r,s,he),{publicKey:m}=Je(n,s),d=yi(e,c).publicKey,p=ue(r,c,he).publicKey,y=dn(c).publicKey,f=Ae.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:r,lockOwner:r,positionNftAccount:l,positionId:m,lockPositionId:d,lockNftMint:c,lockNftAccount:p,metadataAccount:y,withMetadata:!0});return{address:{positionId:m,lockPositionId:d,lockNftAccount:p,lockNftMint:c,positionNftAccount:l,metadataAccount:y},instructions:[f],signers:u,instructionTypes:[V.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:r,positionNftAccount:s,positionId:a,lockPositionId:u,lockNftMint:c,lockNftAccount:l,metadataAccount:m,withMetadata:d}){let p=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!0,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:Ft,isSigner:!1,isWritable:!1},{pubkey:Hr,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1}],y=E([_e("withMetadata")]),f=Buffer.alloc(y.span);y.encode({withMetadata:d},f);let b=Buffer.from([...ru,...f]);return new et({keys:p,programId:e,data:b})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:r}){let{publicKey:s}=ue(i,r,he),{publicKey:a}=Je(n,r),u=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!0,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:zr(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:gn.programId,isSigner:!1,isWritable:!1}];return new et({keys:u,programId:e,data:Buffer.from(ru)})}static harvestLockPositionInstruction(e){let[t,n]=[new q(e.poolKeys.programId),new q(e.poolKeys.id)],i=Q.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),r=Q.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=le(t,n,i),{publicKey:a}=le(t,n,r),{publicKey:u}=ue(e.owner,e.ownerPosition.nftMint,he),{publicKey:c}=Je(t,e.ownerPosition.nftMint),{publicKey:l}=Kt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let y=0;y<e.poolKeys.rewardInfos.length;y++)m.push({poolRewardVault:new q(e.poolKeys.rewardInfos[y].vault),ownerRewardVault:e.ownerRewardAccounts[y],rewardMint:new q(e.poolKeys.rewardInfos[y].mint.address)});let d=[...m.map(y=>[{pubkey:y.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:y.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:zr(e.programId,c).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:new q(e.poolKeys.vault.A),isSigner:!1,isWritable:!0},{pubkey:new q(e.poolKeys.vault.B),isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:e.userVaultA,isSigner:!1,isWritable:!0},{pubkey:e.userVaultB,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:new q(e.poolKeys.mintA.address),isSigner:!1,isWritable:!1},{pubkey:new q(e.poolKeys.mintB.address),isSigner:!1,isWritable:!1},...d];return new et({keys:p,programId:e.programId,data:Buffer.from(su)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:r,lockNftMint:s,lockNftAccount:a,positionNftAccount:u,positionId:c,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:y,tickArrayUpper:f,userVaultA:b,userVaultB:g,mintA:A,mintB:w,rewardAccounts:k,exTickArrayBitmap:I}){let h=[...I?[{pubkey:I,isSigner:!1,isWritable:!0}]:[],...k.map(B=>[{pubkey:B.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:B.rewardMint,isSigner:!1,isWritable:!1}]).flat()],S=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{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:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:he,isSigner:!1,isWritable:!1},{pubkey:_t,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1},{pubkey:A,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},...h];return new et({keys:S,programId:e,data:Buffer.from(su)})}};var Mk=E([Qe("mintAuthorityOption"),K("mintAuthority"),P("supply"),U("decimals"),U("isInitialized"),Qe("freezeAuthorityOption"),K("freezeAuthority")]);import{PublicKey as Ek}from"@solana/web3.js";import{MintLayout as Dk,TOKEN_PROGRAM_ID as qk}from"@solana/spl-token";var xo=o=>new Ie({mint:o.address,decimals:o.decimals,symbol:o.symbol,name:o.name}),Pi=i=>{var r=i,{amount:o,isRaw:e,name:t}=r,n=Re(r,["amount","isRaw","name"]);return new be(new Ie({mint:st(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),o,e,t)};var je=i=>{var r=i,{address:o,programId:e,decimals:t}=r,n=Re(r,["address","programId","decimals"]);return R({chainId:101,address:st(o).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},un=o=>o?F(R({},o),{transferFeeConfigAuthority:o.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:o.withdrawWithheldAuthority.toBase58(),withheldAmount:o.withheldAmount.toString(),olderTransferFee:F(R({},o.olderTransferFee),{epoch:o.olderTransferFee.epoch.toString(),maximumFee:o.olderTransferFee.maximumFee.toString()}),newerTransferFee:F(R({},o.newerTransferFee),{epoch:o.newerTransferFee.epoch.toString(),maximumFee:o.newerTransferFee.maximumFee.toString()})}):void 0;import au from"bn.js";var Zr=new au(25),So=new au(1e4);import{PublicKey as vt,SystemProgram as Jm,SYSVAR_RENT_PUBKEY as mh,TransactionInstruction as vn}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as ed,TOKEN_PROGRAM_ID as hi}from"@solana/spl-token";var $r=E([U("instruction"),P("amountIn"),P("minAmountOut")]),Jr=E([U("instruction"),P("maxAmountIn"),P("amountOut")]),ih=E([U("instruction"),U("nonce")]),Dm=E([U("instruction"),U("nonce"),P("startTime")]),Ko=E([P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalValue"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),P("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),P("swapQuote2BaseFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("withdrawQueue"),K("lpVault"),K("owner"),P("lpReserve"),Y(P(),3,"padding")]),oh=E([P("accountType"),P("status"),P("nonce"),P("maxOrder"),P("depth"),P("baseDecimal"),P("quoteDecimal"),P("state"),P("resetFlag"),P("minSize"),P("volMaxCutRatio"),P("amountWaveRatio"),P("baseLotSize"),P("quoteLotSize"),P("minPriceMultiplier"),P("maxPriceMultiplier"),P("systemDecimalsValue"),P("abortTradeFactor"),P("priceTickMultiplier"),P("priceTick"),P("minSeparateNumerator"),P("minSeparateDenominator"),P("tradeFeeNumerator"),P("tradeFeeDenominator"),P("pnlNumerator"),P("pnlDenominator"),P("swapFeeNumerator"),P("swapFeeDenominator"),P("baseNeedTakePnl"),P("quoteNeedTakePnl"),P("quoteTotalPnl"),P("baseTotalPnl"),P("poolOpenTime"),P("punishPcAmount"),P("punishCoinAmount"),P("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),P("swapQuote2BaseFee"),P("swapBase2QuoteFee"),K("baseVault"),K("quoteVault"),K("baseMint"),K("quoteMint"),K("lpMint"),K("modelDataAccount"),K("openOrders"),K("marketId"),K("marketProgramId"),K("targetOrders"),K("owner"),Y(P(),64,"padding")]),es=E([U("instruction"),P("baseAmountIn"),P("quoteAmountIn"),P("fixedSide"),P("otherAmountMin")]),ts=E([U("instruction"),P("lpAmount"),P("baseAmountMin"),P("quoteAmountMin")]);var uu=E([P("fee")]);import{PublicKey as Wm}from"@solana/web3.js";var _n=new Wm("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),An=5e4,qm=E([P("x"),P("y"),P("price")]),Um=E([P("accountType"),P("status"),P("multiplier"),P("validDataCount"),Y(qm,An,"DataElement")]);function Gm(o,e){return[0,An-2]}function Xm(o){return[0,An-2]}function zm(o){return[0,An-2]}function Qm(o,e,t){let[n,i]=Gm(e,t),r=n,s=i,a=0,u=e*o.multiplier/t;for(;r<=s;){if(a=Math.floor((s+r)/2),a===0||a>=An-2)return[a,a,!1];let c=o.DataElement[a].x*o.multiplier/o.DataElement[a].y,l=o.DataElement[a-1].x*o.multiplier/o.DataElement[a-1].y,m=o.DataElement[a+1].x*o.multiplier/o.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];r=a+1}}return[a,a,!1]}function ns(o,e,t){let[n,i,r]=Qm(o,e,t);if(!r)return 0;if(n===i){let s=o.DataElement[n].x;return e*o.multiplier/s}else{let s=o.DataElement[n].x,a=o.DataElement[n].y,u=o.DataElement[i].x,c=o.DataElement[i].y,l=t*(u*a-s*c),m=s*l,d=(u-s)*(e*a-s*t)*c,p=m+d;return e*o.multiplier*l/p}}function wn(o,e,t){return e*o.multiplier/t}function cu(o,e,t){return e*t/o.multiplier}function Ym(o,e){let[t,n]=Xm(e),i=t,r=n,s=0,a=e;for(;i<r;){if(s=Math.floor((r+i)/2),s<=0||s>An-2)return[s,s,!1];let u=o.DataElement[s].x,c=o.DataElement[s-1].x,l=o.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)r=s-1;else{if(a>c&&a<u)return[s-1,s,!0];if(a>u&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function jm(o,e){let[t,n]=zm(e),i=t,r=n,s=0,a=e;for(;i<=r;){if(s=Math.floor((r+i)/2),s<=0||s>=An-2)return[s,s,!1];let u=o.DataElement[s].y,c=o.DataElement[s-1].y,l=o.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)i=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 lu(o,e,t,n){let i=n?e+t:e-t,[r,s,a]=Ym(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].y,!1,a];{let u=o.DataElement[r].x,c=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.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-(i-u)*o.multiplier/m):(y=l+(m-l)*(e-u)/(c-u),f=p+(c-i)*o.multiplier/l),[y,f,!1,a]}}}function Hm(o,e,t,n){let i=n?e-t:e+t,[r,s,a]=jm(o,i);if(!a)return[0,0,!1,a];if(r===s)return[o.DataElement[s].price,o.DataElement[s].x,!1,a];{let u=o.DataElement[r].x,c=o.DataElement[s].x,l=o.DataElement[r].price,m=o.DataElement[s].price,d=o.DataElement[r].y,p=o.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-i)/o.multiplier):(y=l+(m-l)*(d-e)/(d-p),f=c-l*(i-p)/o.multiplier),[y,f,!1,a]}}}function Zm(o,e){let t=lu(o,e,0,!1);return t[3]?t[0]:0}function mu(o,e,t,n){let i=ns(o,e,t),r=wn(o,e,i),s=wn(o,t,i),a=wn(o,n,i),u=!0,[c,l,m,d]=lu(o,r,a,u);if(!d)return 0;if(m)return n*o.multiplier/c;{let p=s-l;return cu(o,p,i)}}function du(o,e,t,n){let i=ns(o,e,t),r=wn(o,e,i),s=wn(o,t,i),a=wn(o,n,i),u=!1,[c,l,m,d]=Hm(o,s,a,u);if(!d)return 0;if(m)return n*c/o.multiplier;{let p=r-l;return cu(o,p,i)}}function $m(o){let e=Um.decode(o);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 pu(o,e,t,n){let i=Zm(o,wn(o,e,ns(o,e,t)))/o.multiplier;return n?i:1/i}var ki=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(_n);e&&(this._layoutData=$m(e==null?void 0:e.data))}}};var fu=ae("Raydium_liquidity_instruction");function yu(o){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:r,fixedSide:s,otherAmountMin:a}=o,u=Buffer.alloc(es.span);es.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(r),otherAmountMin:Z(a),fixedSide:s==="base"?dt:Xs},u);let c=[T({pubkey:hi,isWritable:!1}),T({pubkey:new vt(e.id)}),T({pubkey:new vt(t.authority),isWritable:!1}),T({pubkey:new vt(t.openOrders),isWritable:!1}),T({pubkey:new vt(t.targetOrders)}),T({pubkey:new vt(e.lpMint.address)}),T({pubkey:new vt(t.vault.A)}),T({pubkey:new vt(t.vault.B)})];return e.pooltype.includes("StablePool")&&c.push(T({pubkey:_n})),c.push(T({pubkey:new vt(e.marketId),isWritable:!1}),T({pubkey:n.baseTokenAccount}),T({pubkey:n.quoteTokenAccount}),T({pubkey:n.lpTokenAccount}),T({pubkey:n.owner,isWritable:!1,isSigner:!0}),T({pubkey:new vt(t.marketEventQueue),isWritable:!1})),new vn({programId:new vt(e.programId),keys:c,data:u})}function is(o){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:r,quoteAmountMin:s}=o,a=Ge(t),u=4;if(e.pooltype.includes("StablePool")&&(u=5),u===4||u===5){let c=Buffer.alloc(ts.span);ts.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(r),quoteAmountMin:Z(s)},c);let l=[T({pubkey:hi,isWritable:!1}),T({pubkey:a.id}),T({pubkey:a.authority,isWritable:!1}),T({pubkey:a.openOrders}),T({pubkey:a.targetOrders}),T({pubkey:a.mintLp.address}),T({pubkey:a.vault.A}),T({pubkey:a.vault.B})];return u===5?l.push(T({pubkey:_n})):(l.push(T({pubkey:a.id})),l.push(T({pubkey:a.id}))),l.push(T({pubkey:a.marketProgramId,isWritable:!1}),T({pubkey:a.marketId}),T({pubkey:a.marketBaseVault}),T({pubkey:a.marketQuoteVault}),T({pubkey:a.marketAuthority,isWritable:!1}),T({pubkey:n.lpTokenAccount}),T({pubkey:n.baseTokenAccount}),T({pubkey:n.quoteTokenAccount}),T({pubkey:n.owner,isWritable:!1,isSigner:!0}),T({pubkey:a.marketEventQueue}),T({pubkey:a.marketBids}),T({pubkey:a.marketAsks})),new vn({programId:a.programId,keys:l,data:c})}return new vn({programId:a.programId,keys:[]})}function bu({programId:o,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:r,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:A,openTime:w,coinAmount:k,pcAmount:I,ammConfigId:h,feeDestinationId:S}){let B=E([U("instruction"),U("nonce"),P("openTime"),P("pcAmount"),P("coinAmount")]),C=[{pubkey:hi,isSigner:!1,isWritable:!1},{pubkey:ed,isSigner:!1,isWritable:!1},{pubkey:Jm.programId,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!1,isWritable:!0},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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:h,isSigner:!1,isWritable:!1},{pubkey:S,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!0,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(B.span);return B.encode({instruction:1,nonce:A,openTime:w,coinAmount:k,pcAmount:I},x),{instruction:new vn({keys:C,programId:o,data:x}),instructionType:V.AmmV4CreatePool}}function td({poolKeys:o,userKeys:e,amountIn:t,minAmountOut:n},i){let r=Ge(o),s=Buffer.alloc($r.span);$r.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[T({pubkey:hi,isWritable:!1}),T({pubkey:r.id}),T({pubkey:r.authority,isWritable:!1}),T({pubkey:r.openOrders})];return i===4&&a.push(T({pubkey:r.targetOrders})),a.push(T({pubkey:r.vault.A}),T({pubkey:r.vault.B})),i===5&&a.push(T({pubkey:_n})),a.push(T({pubkey:r.marketProgramId,isWritable:!1}),T({pubkey:r.marketId}),T({pubkey:r.marketBids}),T({pubkey:r.marketAsks}),T({pubkey:r.marketEventQueue}),T({pubkey:r.marketBaseVault}),T({pubkey:r.marketQuoteVault}),T({pubkey:r.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1})),new vn({programId:r.programId,keys:a,data:s})}function nd({poolKeys:o,userKeys:e,maxAmountIn:t,amountOut:n},i){let r=Ge(o),s=Buffer.alloc(Jr.span);Jr.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[T({pubkey:hi,isWritable:!1}),T({pubkey:r.id}),T({pubkey:r.authority,isWritable:!1}),T({pubkey:r.openOrders}),T({pubkey:r.targetOrders}),T({pubkey:r.vault.A}),T({pubkey:r.vault.B})];return i===5&&a.push(T({pubkey:_n})),a.push(T({pubkey:r.marketProgramId,isWritable:!1}),T({pubkey:r.marketId}),T({pubkey:r.marketBids}),T({pubkey:r.marketAsks}),T({pubkey:r.marketEventQueue}),T({pubkey:r.marketBaseVault}),T({pubkey:r.marketQuoteVault}),T({pubkey:r.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1,isSigner:!0})),new vn({programId:r.programId,keys:a,data:s})}function Co(o){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:r,fixedSide:s}=o;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return td(F(R({},a),{amountIn:i,minAmountOut:r}),t);if(s==="out")return nd(F(R({},a),{maxAmountIn:i,amountOut:r}),t);fu.logWithError("invalid params","params",o)}throw fu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{PublicKey as rd}from"@solana/web3.js";import Mh from"bn.js";import{TOKEN_PROGRAM_ID as sd}from"@solana/spl-token";import{PublicKey as id}from"@solana/web3.js";var od=ae("Raydium_liquidity_serum");function gu({programId:o,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let r=t.concat(Buffer.from([n]),Buffer.alloc(7));i=id.createProgramAddressSync(r,o)}catch(r){if(r instanceof TypeError)throw r;n++;continue}return{publicKey:i,nonce:n}}throw od.logWithError("unable to find a viable program address nonce","params",{programId:o,marketId:e}),new Error("unable to find a viable program address nonce")}function Ro({programId:o}){let{publicKey:e}=ce([Buffer.from("amm_config_account_seed","utf-8")],o);return e}function Pn({name:o,programId:e,marketId:t}){let{publicKey:n}=ce([e.toBuffer(),t.toBuffer(),Buffer.from(o,"utf-8")],e);return n}function ad({programId:o,marketId:e}){let{publicKey:t}=ce([o.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],o);return t}function rs({programId:o}){return ce([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],o)}function wu({version:o,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:r,quoteDecimals:s,programId:a,marketProgramId:u}){let c=Pn({name:"amm_associated_seed",programId:a,marketId:t}),l=Pn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=rs({programId:a}),p=Pn({name:"coin_vault_associated_seed",programId:a,marketId:t}),y=Pn({name:"pc_vault_associated_seed",programId:a,marketId:t}),f=Pn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),b=ad({programId:a,marketId:t}),g=Pn({name:"target_associated_seed",programId:a,marketId:t}),A=Pn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:w}=gu({programId:u,marketId:t});return{id:c,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:r,quoteDecimals:s,lpDecimals:r,version:o,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:y,lpVault:f,openOrders:b,targetOrders:g,withdrawQueue:A,marketVersion:e,marketProgramId:u,marketId:t,marketAuthority:w,lookupTableAccount:rd.default,configId:Ro({programId:a})}}var os={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Lo=o=>{let e={},t=sd.toBase58();return Object.keys(o).map(n=>{let i=o[n],[r,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:je({address:r,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:je({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new N(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new N(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new N(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:os,week:os,month:os,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Ro({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:je({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import We from"bn.js";var Ti=class extends Be{constructor(t){super(t);this.stableLayout=new ki({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:r}){let s=new We(new N(n).mul(10**t[r?"mintA":"mintB"].decimals).toFixed(0)),a=xo(t[r?"mintB":"mintA"]),[u,c]=[new We(new N(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new We(new N(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new We(new N(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,N.ROUND_DOWN));this.logDebug("baseReserve:",u.toString(),"quoteReserve:",c.toString()),this.logDebug("tokenIn:",r?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",r?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",u.toString(),"quoteReserve",c.toString());let m=r?"base":"quote";this.logDebug("input side:",m);let d=dt;s.isZero()||(d=m==="base"?Hi(s.mul(c),u):Hi(s.mul(u),c)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=Hi(s.mul(l),m==="base"?u:c);this.logDebug("liquidity:",p.toString());let y=new Fe(new We(1)).add(i),f=new Fe(new We(1)).sub(i),b=y.mul(d).quotient,g=f.mul(d).quotient,A=new be(a,d),w=new be(a,b),k=new be(a,g);return this.logDebug("anotherAmount:",A.toFixed(),"maxAnotherAmount:",w.toFixed()),{anotherAmount:A,maxAnotherAmount:w,minAnotherAmount:k,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:r,amountInB:s,otherAmountMin:a,fixedSide:u,config:c,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",r,"amountInB:",s),(r.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:r.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),[f,b]=[r.token,s.token],g=await d.getCreatedTokenAccount({mint:f.mint,associatedOnly:!1}),A=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1});!g&&!A&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let w=await d.getCreatedTokenAccount({mint:new He(n.lpMint.address)}),k=[f,b],I=[g,A],h=[r.raw,s.raw],S=r.token.mint.toBase58()===n.mintA.address?"base":"quote",B="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",u),S==="quote"?(k.reverse(),I.reverse(),h.reverse(),B=u==="a"?"quote":"base"):S==="base"&&(B=u==="a"?"base":"quote");let[C,x]=k,[L,W]=I,[O,H]=h,X=i!=null?i:await this.getAmmPoolKeys(n.id),D=this.createTxBuilder(),Vt=await d.handleTokenAccount({side:"in",amount:O,mint:C.mint,tokenAccount:L,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Ve}=Vt,Qt=Re(Vt,["tokenAccount"]);D.addInstruction(Qt);let _i=await d.handleTokenAccount({side:"in",amount:H,mint:x.mint,tokenAccount:W,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:Oe}=_i,mt=Re(_i,["tokenAccount"]);D.addInstruction(mt);let vi=await d.handleTokenAccount({side:"out",amount:0,mint:new He(n.lpMint.address),tokenAccount:w,bypassAssociatedCheck:p,checkCreateATAOwner:y}),{tokenAccount:At}=vi,Ot=Re(vi,["tokenAccount"]);return D.addInstruction(Ot),D.addInstruction({instructions:[yu({poolInfo:n,poolKeys:X,userKeys:{baseTokenAccount:Ve,quoteTokenAccount:Oe,lpTokenAccount:At,owner:this.scope.ownerPubKey},baseAmountIn:O,quoteAmountIn:H,otherAmountMin:a.raw,fixedSide:B})],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5AddLiquidity:V.AmmV4AddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),D.addCustomComputeBudget(m),l===0&&await D.buildV0(),D.build()}async removeLiquidity(t){this.scope.availability.removeStandardPosition===!1&&this.logAndCreateError("remove liquidity feature disabled in your region");let{poolInfo:n,poolKeys:i,lpAmount:r,baseAmountMin:s,quoteAmountMin:a,config:u,txVersion:c,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,y]=[new He(n.mintA.address),new He(n.mintB.address),new He(n.lpMint.address)];this.logDebug("lpAmount:",r),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),r.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",r.toString());let{account:f}=this.scope,b=await f.getCreatedTokenAccount({mint:y,associatedOnly:!1});b||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",f.tokenAccounts);let g=await f.getCreatedTokenAccount({mint:d}),A=await f.getCreatedTokenAccount({mint:p}),w=this.createTxBuilder(),{bypassAssociatedCheck:k,checkCreateATAOwner:I}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),x=await f.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:k,checkCreateATAOwner:I}),{tokenAccount:h}=x,S=Re(x,["tokenAccount"]);w.addInstruction(S);let L=await f.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:A,bypassAssociatedCheck:k,checkCreateATAOwner:I}),{tokenAccount:B}=L,C=Re(L,["tokenAccount"]);return w.addInstruction(C),w.addInstruction({instructions:[is({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:b,baseTokenAccount:h,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:r,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity]}),w.addCustomComputeBudget(l),c===0?await w.buildV0():w.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:r,farmInfo:s,userFarmLpAmount:a,base:u,computeBudgetConfig:c,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=Vn,checkCreateATAOwner:p=!0,getEphemeralSigners:y,txVersion:f}){if((this.scope.availability.removeStandardPosition===!1||this.scope.availability.createConcentratedPosition===!1)&&this.logAndCreateError("remove liquidity or create position feature disabled in your region"),!(t.mintA.address===n.mintA.address||t.mintA.address===n.mintB.address)||!(t.mintB.address===n.mintA.address||t.mintB.address===n.mintB.address))throw Error("mint check error");let b=this.createTxBuilder();b.addCustomComputeBudget(c);let g={};for(let D of this.scope.account.tokenAccountRawInfos)(g[D.accountInfo.mint.toString()]===void 0||ue(this.scope.ownerPubKey,D.accountInfo.mint,Vn).publicKey.equals(D.pubkey))&&(g[D.accountInfo.mint.toString()]=D.pubkey);let A=g[t.lpMint.address];if(A===void 0)throw Error("find lp account error in trade accounts");let w=i.add(a!=null?a:new We(0)),k=t.mintA.address===Ie.WSOL.mint.toString(),I=t.mintB.address===Ie.WSOL.mint.toString(),{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(S||{}),h===void 0)throw new Error("base token account not found");let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:I?{payer:this.scope.ownerPubKey,amount:0}:void 0,skipCloseAccount:!I,notUseTokenAccount:I,associatedOnly:!0,checkCreateATAOwner:p});if(b.addInstruction(C||{}),B===void 0)throw new Error("quote token account not found");if(g[t.mintA.address]=h,g[t.mintB.address]=B,s!==void 0&&!(a!=null&&a.isZero())){let D=pt[s.programId],Ve=ft({programId:new He(s.programId),poolId:new He(s.id),owner:this.scope.ownerPubKey,version:D}),Qt,Oe=await this.scope.connection.getAccountInfo(Ve);if(Oe&&(Qt=si(D).decode(Oe.data)),D!==6&&!Qt){let{instruction:Yt,instructionType:Yo}=ai({id:new He(s.id),programId:new He(s.programId),version:D,ledger:Ve,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[Yt],instructionTypes:[Yo]})}let mt=[];for(let Yt of s.rewardInfos){let Yo=Yt.mint.address===Ie.WSOL.mint.toString();if(g[Yt.mint.address])mt.push(g[Yt.mint.address]);else{let{account:bs,instructionParams:gs}=await this.scope.account.getOrCreateTokenAccount({mint:new He(Yt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Yo,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});bs||this.logAndCreateError("farm reward account not found:",Yt.mint.address),gs&&b.addInstruction(gs),mt.push(bs)}}let At=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],Ot={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:At,lpAccount:A,rewardAccounts:mt},Vt=pt[s.programId],_i=Vt===6?ui(Ot):Vt===5?ci(Ot):li(Ot),vi={3:V.FarmV3Withdraw,5:V.FarmV5Withdraw,6:V.FarmV6Withdraw};b.addInstruction({instructions:[_i],instructionTypes:[vi[Vt]]})}let x=await this.getAmmPoolKeys(t.id),L=is({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:A,baseTokenAccount:h,quoteTokenAccount:B,owner:this.scope.ownerPubKey},lpAmount:w,baseAmountMin:0,quoteAmountMin:0});b.addInstruction({instructions:[L],instructionTypes:[t.pooltype.includes("StablePool")?V.AmmV5RemoveLiquidity:V.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[W,O]=t.mintA.address===n.mintA.address?[h,B]:[B,h],H=await this.scope.clmm.getClmmPoolKeys(n.id),X=await Ae.openPositionFromBaseInstructions(F(R({poolInfo:n,poolKeys:H,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:W,tokenAccountB:O},withMetadata:"create"},r),{base:u,getEphemeralSigners:y}));return b.addInstruction({instructions:[...X.instructions],signers:X.signers,instructionTypes:[...X.instructionTypes],lookupTableAddress:H.lookupTableAccount?[H.lookupTableAccount]:[]}),f===0?b.sizeCheckBuildV0():b.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:r,baseAmount:s,quoteAmount:a,startTime:u,ownerInfo:c,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:y,computeBudgetConfig:f}){var W;let b=c.feePayer||((W=this.scope.owner)==null?void 0:W.publicKey),g=c.useSOLBalance&&i.mint.equals(Au),A=c.useSOLBalance&&r.mint.equals(Au),w=this.createTxBuilder(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:b,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});w.addInstruction(I||{});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:r.mint,owner:this.scope.ownerPubKey,createInfo:A?{payer:b,amount:a}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:l,checkCreateATAOwner:m});if(w.addInstruction(S||{}),k===void 0||h===void 0)throw Error("you don't has some token account");let B=wu({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:r.mint,baseDecimals:i.decimals,quoteDecimals:r.decimals,programId:t,marketProgramId:n.programId}),C={programId:t,ammId:B.id,ammAuthority:B.authority,ammOpenOrders:B.openOrders,lpMint:B.lpMint,coinMint:B.baseMint,pcMint:B.quoteMint,coinVault:B.baseVault,pcVault:B.quoteVault,withdrawQueue:B.withdrawQueue,ammTargetOrders:B.targetOrders,poolTempLp:B.lpVault,marketProgramId:B.marketProgramId,marketId:B.marketId,ammConfigId:B.configId,feeDestinationId:y},{instruction:x,instructionType:L}=bu(F(R({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:k,userPcVault:h,userLpVault:ue(this.scope.ownerPubKey,B.lpMint,d).publicKey,nonce:B.nonce,openTime:u,coinAmount:s,pcAmount:a}));return w.addInstruction({instructions:[x],instructionTypes:[L]}),w.addCustomComputeBudget(f),w.versionBuild({txVersion:p,extInfo:{address:C}})}async getCreatePoolFee({programId:t}){let n=Ro({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return uu.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:r,slippage:s}){let[a,u]=[i.toString(),r.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(u!==t.mintA.address&&u!==t.mintB.address)throw new Error("toke not match");let{baseReserve:c,quoteReserve:l}=t,m=[c,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[y,f]=m,[b,g]=d,A=t.version===4,w;if(A)w=new N(f.toString()).div(10**g).div(new N(y.toString()).div(10**b));else{let O=pu(this.stableLayout.stableModelData,c.toNumber(),l.toNumber(),!1);p==="quote"?w=new N(1e6).div(O*1e6):w=new N(O*1e6).div(1e6)}let k=n,I=new We(0),h=new We(0);if(!k.isZero())if(A){h=tn(k.mul(Zr),So);let O=k.sub(h),H=y.add(O);I=f.mul(O).div(H)}else{h=k.mul(new We(2)).div(new We(1e4));let O=k.sub(h);p==="quote"?I=new We(mu(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),O.toNumber())):I=new We(du(this.stableLayout.stableModelData,l.toNumber(),c.toNumber(),O.toNumber()))}let S=new We(new N(I.toString()).mul(1-s).toFixed(0)),B=I,C=S,x=new N(I.toString()).div(new N(k.sub(h).toString()).toFixed(0));!k.isZero()&&!I.isZero()&&(x=new N(I.toString()).div(10**g).div(new N(k.sub(h).toString()).div(10**b)));let L=w.sub(x).div(w).mul(100);return{amountOut:B,minAmountOut:C,currentPrice:w,executionPrice:x,priceImpact:L,fee:h}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:r,slippage:s}){let{baseReserve:a,quoteReserve:u}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),r.toString()!==t.mintA.address&&r.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",u.toString());let c=i.toString()===t.mintA.address,[l,m]=c?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new N(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,u],p=c?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[y,f]=d,b=new N(f.toString()).div(10**t[c?"mintB":"mintA"].decimals).div(new N(y.toString()).div(10**t[c?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${b.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new N(1).div(b).toString()} ${l.symbol||l.address}`);let g=new We(0),A=n;if(!A.isZero()){A.gt(f)&&(A=f.sub(new We(1)));let C=f.sub(A);g=y.mul(A).div(C).mul(So).div(So.sub(Zr))}let w=new We(new N(g.toString()).mul(1+s).toFixed(0)),k=g,I=w;this.logDebug("amountIn:",new N(k.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new N(I.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let h=null;!g.isZero()&&!A.isZero()&&(h=new N(A.toString()).div(10**m.decimals).div(new N(g.toString()).div(10**l.decimals)),this.logDebug("executionPrice:",`1 ${m.symbol||m.address} \u2248 ${h.toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`),this.logDebug("executionPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new N(1).div(h).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=b.mul(k.toString()),B=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${B.toString()}%`),{amountIn:k,maxAmountIn:I,currentPrice:b,executionPrice:h,priceImpact:B}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:r,inputMint:s,fixedSide:a,txVersion:u,config:c,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:y=!0}=c||{},[f,b]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&f.address===j.toBase58(),A=y&&b.address===j.toBase58(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(f.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(k||{}),w||this.logAndCreateError("input token account not found",{token:f.symbol||f.address,tokenAccountIn:w,inputTokenUseSolBalance:g,associatedOnly:d});let{account:I,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:Vn,mint:new He(b.address),owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:d});m.addInstruction(h||{}),I===void 0&&this.logAndCreateError("output token account not found",{token:b.symbol||b.address,tokenAccountOut:I,outputTokenUseSolBalance:A,associatedOnly:d});let S=n||await this.getAmmPoolKeys(t.id),B=4;return t.pooltype.includes("StablePool")&&(B=5),m.addInstruction({instructions:[Co({version:B,poolKeys:S,userKeys:{tokenAccountIn:w,tokenAccountOut:I,owner:this.scope.ownerPubKey},amountIn:i,amountOut:r,fixedSide:a})],instructionTypes:[B===4?V.AmmV4SwapBaseIn:V.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:u})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await Ee(this.scope.connection,t.map(l=>({pubkey:new He(l)})),n),r={},s=[];for(let l=0;l<t.length;l++){let m=i[l];if(m===null||!m.accountInfo)throw Error("fetch pool info error: "+String(t[l]));let d=Ko.decode(m.accountInfo.data);r[String(t[l])]=F(R({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},u=await Ee(this.scope.connection,s.map(l=>({pubkey:new He(l)})),n);for(let l=0;l<s.length;l++){let m=u[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new We(ud.decode(m.data).amount.toString())}let c={};for(let[l,m]of Object.entries(r)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);c[l]=F(R({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new N(p.toString()).div(new N(10).pow(m.quoteDecimal.toString())).div(new N(d.toString()).div(new N(10).pow(m.baseDecimal.toString())))})}return c}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Lo({[t]:n}),r=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:r,poolKeys:s[0]}}};import{PublicKey as z}from"@solana/web3.js";import rt from"bn.js";import{AccountLayout as Pu,TOKEN_PROGRAM_ID as Ii}from"@solana/spl-token";var Bi=class extends Be{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var w;let{programId:t,owner:n=((w=this.scope.owner)==null?void 0:w.publicKey)||z.default,mint1:i,mint2:r,ammConfig:s,initialPrice:a,startTime:u,computeBudgetConfig:c,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[y,f,b]=new rt(new z(i.address).toBuffer()).gt(new rt(new z(r.address).toBuffer()))?[r,i,new N(1).div(a)]:[i,r,a],g=ne.priceToSqrtPriceX64(b,y.decimals,f.decimals),A=await Ae.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:y,mintB:f,ammConfigId:s.id,initialPriceX64:g,startTime:u,forerunCreate:!m&&l});return p.addInstruction(A),p.addCustomComputeBudget(c),p.versionBuild({txVersion:d,extInfo:{address:F(R({},A.address),{programId:t.toString(),id:A.address.poolId.toString(),mintA:y,mintB:f,openTime:u.toString(),vault:{A:A.address.mintAVault.toString(),B:A.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:R({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:A.address.poolId.toString(),mintA:y,mintB:f,feeRate:s.tradeFeeRate,openTime:u.toString(),programId:t.toString(),price:b.toNumber(),config:{id:s.id.toString(),index:s.index,protocolFeeRate:s.protocolFeeRate,tradeFeeRate:s.tradeFeeRate,tickSpacing:s.tickSpacing,fundFeeRate:s.fundFeeRate,description:s.description,defaultRange:0,defaultRangePoint:[]},burnPercent:0},Ua),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:r,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,A=n.useSOLBalance&&e.mintA.address===j.toString(),w=n.useSOLBalance&&e.mintB.address===j.toString(),[k,I]=s==="MintA"?[a,u]:[u,a],{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.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});h&&(b=h),f.addInstruction(S||{});let{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||I.isZero()?{payer:this.scope.ownerPubKey,amount:I}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});B&&(g=B),f.addInstruction(C||{}),(!b||!g)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:b==null?void 0:b.toBase58(),ownerTokenAccountB:g==null?void 0:g.toBase58()});let x=t||await this.getClmmPoolKeys(e.id),L=await Ae.openPositionFromBaseInstructions({poolInfo:e,poolKeys:x,ownerInfo:F(R({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g}),tickLower:i,tickUpper:r,base:s,baseAmount:a,otherAmountMax:u,withMetadata:m,getEphemeralSigners:d});return f.addInstruction(L),f.addCustomComputeBudget(p),f.versionBuild({txVersion:y,extInfo:R({},L.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:r,tickLower:s,tickUpper:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:y}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let f=this.createTxBuilder(),b=null,g=null,A=n.useSOLBalance&&e.mintA.address===j.toBase58(),w=n.useSOLBalance&&e.mintB.address===j.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:A||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!A,notUseTokenAccount:A,associatedOnly:A?!1:c,checkCreateATAOwner:l});k&&(b=k),f.addInstruction(I||{});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:w||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:w?!1:c,checkCreateATAOwner:l});h&&(g=h),f.addInstruction(S||{}),(b===void 0||g===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=t||await this.getClmmPoolKeys(e.id),C=await Ae.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:B,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g},tickLower:s,tickUpper:a,liquidity:u,amountMaxA:i,amountMaxB:r,withMetadata:m,getEphemeralSigners:y});return f.addInstruction(C),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d,extInfo:{address:C.address}})}async increasePositionFromLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:r,amountMaxB:s,liquidity:a,ownerInfo:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),y,f,b=u.useSOLBalance&&t.mintA.address===j.toString(),g=u.useSOLBalance&&t.mintB.address===j.toString(),{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||r.isZero()?{payer:this.scope.ownerPubKey,amount:r}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:l});A&&(y=A),p.addInstruction(w||{});let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:g||s.isZero()?{payer:this.scope.ownerPubKey,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:l});k&&(f=k),p.addInstruction(I||{}),!y&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=n!=null?n:await this.getClmmPoolKeys(t.id),S=Ae.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:h,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:y,tokenAccountB:f},liquidity:a,amountMaxA:r,amountMaxB:s});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){let{poolInfo:t,ownerPosition:n,base:i,baseAmount:r,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===j.toString(),b=a.useSOLBalance&&t.mintB.address===j.toString(),{account:g,instructionParams:A}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:f||(i==="MintA"?r:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?r:s}:void 0,skipCloseAccount:!f,associatedOnly:f?!1:u,checkCreateATAOwner:c});g&&(p=g),d.addInstruction(A||{});let{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?s:r).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:r}:void 0,notUseTokenAccount:b,skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});w&&(y=w),d.addInstruction(k||{}),!p&&!y&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let I=await this.getClmmPoolKeys(t.id),h=Ae.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:I,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:y},base:i,baseAmount:r,otherAmountMax:s});return d.addInstruction(h),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:h.address}})}async decreaseLiquidity(e){let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:r,amountMinA:s,amountMinB:a,liquidity:u,associatedOnly:c=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let p=this.createTxBuilder(),y=r.useSOLBalance&&t.mintA.address===j.toString(),f=r.useSOLBalance&&t.mintB.address===j.toString(),b,g,{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:l});b=A,w&&p.addInstruction(w);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:f?!1:c,checkCreateATAOwner:l});g=k,I&&p.addInstruction(I);let h=[];for(let x of t.rewardDefaultInfos){let L=r.useSOLBalance&&x.mint.address===j.toString(),W;if(x.mint.address===t.mintA.address)W=b;else if(x.mint.address===t.mintB.address)W=g;else{let{account:O,instructionParams:H}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(x.mint.programId),mint:new z(x.mint.address),notUseTokenAccount:L,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!L,associatedOnly:L?!1:c,checkCreateATAOwner:l});W=O,H&&p.addInstruction(H)}h.push(W)}!b&&!g&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let S=n!=null?n:await this.getClmmPoolKeys(t.id),B=await Ae.decreaseLiquidityInstructions({poolInfo:t,poolKeys:S,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:b,tokenAccountB:g,rewardAccounts:h},liquidity:u,amountMinA:s,amountMinB:a});p.addInstruction({instructions:B.instructions,instructionTypes:[V.ClmmDecreasePosition]});let C=R({},B.address);if(r.closePosition){let x=await Ae.closePositionInstructions({poolInfo:t,poolKeys:S,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i});p.addInstruction({endInstructions:x.instructions,endInstructionTypes:x.instructionTypes}),C=R(R({},C),x.address)}return p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:C}})}async lockPosition(e){let{programId:t=Hn,authProgramId:n=Ji,poolProgramId:i=Rn,ownerPosition:r,payer:s,computeBudgetConfig:a,txVersion:u}=e,c=this.createTxBuilder(),l=await Ae.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:r.nftMint});return c.addInstruction(l),c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:l.address})}async harvestLockPosition(e){let{programId:t=Hn,authProgramId:n=Ji,clmmProgram:i=Rn,poolKeys:r,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:u=!0,checkCreateATAOwner:c=!1,computeBudgetConfig:l,txVersion:m}=e,d=r||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),y=await this.scope.connection.getAccountInfo(s.positionId);y||this.logger.logWithError("position not found",s.positionId);let f=Ai.decode(y.data),b=a.useSOLBalance&&d.mintA.address===j.toString(),g=a.useSOLBalance&&d.mintB.address===j.toString(),A,w,{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new z(d.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:c});A=k,I&&p.addInstruction(I);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new z(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:u,checkCreateATAOwner:c});w=h,S&&p.addInstruction(S);let B={},C=[];for(let Oe of d.rewardInfos){let mt=a.useSOLBalance&&Oe.mint.address===j.toString(),At=B[Oe.mint.address];if(!At){let{account:Ot,instructionParams:Vt}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(Oe.mint.programId),mint:new z(Oe.mint.address),notUseTokenAccount:mt,owner:this.scope.ownerPubKey,skipCloseAccount:!mt,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:mt?!1:u});At=Ot,Vt&&p.addInstruction(Vt)}B[Oe.mint.address]=At,C.push(At)}let x=yi(t,s.lockNftMint).publicKey,L=ue(this.scope.ownerPubKey,s.lockNftMint,Ii).publicKey,W=Q.getTickArrayStartIndexByTick(f.tickLower,d.config.tickSpacing),O=Q.getTickArrayStartIndexByTick(f.tickUpper,d.config.tickSpacing),{publicKey:H}=le(new z(d.programId),s.poolId,W),{publicKey:X}=le(new z(d.programId),s.poolId,O),{publicKey:D}=Kt(new z(d.programId),s.poolId,f.tickLower,f.tickUpper),Ve=[];for(let Oe=0;Oe<d.rewardInfos.length;Oe++)Ve.push({poolRewardVault:new z(d.rewardInfos[Oe].vault),ownerRewardVault:C[Oe],rewardMint:new z(d.rewardInfos[Oe].mint.address)});let Qt=await Ae.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:s.lockOwner,lockNftMint:s.lockNftMint,lockNftAccount:L,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:D,vaultA:new z(d.vault.A),vaultB:new z(d.vault.B),tickArrayLower:H,tickArrayUpper:X,userVaultA:A,userVaultB:w,mintA:new z(d.mintA.address),mintB:new z(d.mintB.address),rewardAccounts:Ve});return p.addInstruction({instructions:[Qt],instructionTypes:[V.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let r=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=Ae.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n});return r.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!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()===j.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(n.mint.address),mint:new z(n.mint.address),notUseTokenAccount:!!c,skipCloseAccount:!c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new N(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:c?!1:i,checkCreateATAOwner:r});d&&u.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),y=Ae.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new z(n.mint.programId),mint:new z(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return u.addInstruction(y),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:y.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let c=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===j.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new N(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});f&&c.addInstruction(f),y||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),g=Ae.initRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:y},rewardInfo:{programId:new z(m.mint.programId),mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});l=R(R({},l),g.address),c.addInstruction(g)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:r=!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(j),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:c,owner:this.scope.ownerPubKey,createInfo:c?{payer:t.feePayer||this.scope.ownerPubKey,amount:new rt(new N(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:i,checkCreateATAOwner:r});m&&u.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=Ae.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:ie.decimalToX64(n.perSecond)}});return u.addInstruction(p),u.addCustomComputeBudget(s),u.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:u}){let c=this.createTxBuilder(),l={};for(let m of i){m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let d=n.useSOLBalance&&m.mint.address===j.toString(),{account:p,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(m.mint.programId),mint:new z(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new rt(new N(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:r,checkCreateATAOwner:s});y&&c.addInstruction(y),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let f=t!=null?t:await this.getClmmPoolKeys(e.id),b=Ae.setRewardInstructions({poolInfo:e,poolKeys:f,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new z(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:ie.decimalToX64(m.perSecond)}});c.addInstruction(b),l=R(R({},l),b.address)}return c.addCustomComputeBudget(a),c.versionBuild({txVersion:u,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:r=!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(j),{account:c,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(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:i,checkCreateATAOwner:r});l&&a.addInstruction(l),c||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=Ae.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:i=!0,checkCreateATAOwner:r=!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(j),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(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:i,checkCreateATAOwner:r});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),y=Ae.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:u});s.addInstruction(y),a=R(R({},a),y.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:r,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintA.address,b=u.useSOLBalance&&e.mintA.address===j.toBase58(),g=u.useSOLBalance&&e.mintB.address===j.toBase58(),A;!s||s.equals(new N(0))?A=f?bt.add(new rt(1)):gt.sub(new rt(1)):A=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?i:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=h,S&&y.addInstruction(S)}let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=h,S&&y.addInstruction(S)}(!w||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Ae.makeSwapBaseInInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:k},inputMint:new z(n),amountIn:i,amountOutMin:r,sqrtPriceLimitX64:A,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:r,priceLimit:s,observationId:a,ownerInfo:u,remainingAccounts:c,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let y=this.createTxBuilder(),f=n.toString()===e.mintB.address,b=u.useSOLBalance&&e.mintA.address===j.toBase58(),g=u.useSOLBalance&&e.mintB.address===j.toBase58(),A;!s||s.equals(new N(0))?A=n.toString()===e.mintB.address?bt.add(new rt(1)):gt.sub(new rt(1)):A=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let w;if(!w){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new z(e.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:b||!f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?r:0}:void 0,associatedOnly:b?!1:l,checkCreateATAOwner:m});w=h,S&&y.addInstruction(S)}let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new z(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||f?{payer:u.feePayer||this.scope.ownerPubKey,amount:f?0:r}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});k=h,S&&y.addInstruction(S)}(!w||!k)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:w,ownerTokenAccountB:k,mintAUseSOLBalance:b,mintBUseSOLBalance:g,associatedOnly:l});let I=t!=null?t:await this.getClmmPoolKeys(e.id);return y.addInstruction(Ae.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:I,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:w,tokenAccountB:k},outputMint:new z(n),amountOut:i,amountInMax:r,sqrtPriceLimitX64:A,remainingAccounts:c})),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:r=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:u,computeBudgetConfig:c}){var d;let l={};for(let p of this.scope.account.tokenAccountRawInfos)r?ue(this.scope.ownerPubKey,p.accountInfo.mint,a).publicKey.equals(p.pubkey)&&(l[p.accountInfo.mint.toString()]=p.pubkey):l[p.accountInfo.mint.toString()]=p.pubkey;let m=this.createTxBuilder();for(let p of Object.values(e)){if(t[p.id]===void 0||!t[p.id].find(h=>!h.liquidity.isZero()||h.rewardInfos.find(S=>!S.rewardAmountOwed.isZero())))continue;let y=p,f=i.useSOLBalance&&y.mintA.address===j.toString(),b=i.useSOLBalance&&y.mintB.address===j.toString(),g=l[y.mintA.address];if(!g){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintA.programId,mint:new z(y.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,skipCloseAccount:!f,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:f?!1:r,checkCreateATAOwner:s});g=h,S&&m.addInstruction(S)}let A=l[y.mintB.address];if(!A){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.mintB.programId,mint:new z(y.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,skipCloseAccount:!b,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:b?!1:r,checkCreateATAOwner:s});A=h,S&&m.addInstruction(S)}l[y.mintA.address]=g,l[y.mintB.address]=A;let w=[];for(let h of y.rewardDefaultInfos){let S=i.useSOLBalance&&h.mint.address===j.toString(),B=l[h.mint.address];if(!B){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new z(h.mint.programId),mint:new z(h.mint.address),notUseTokenAccount:S,owner:this.scope.ownerPubKey,skipCloseAccount:!S,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:S?!1:r});B=C,x&&m.addInstruction(x)}l[h.mint.address]=B,w.push(B)}let k=await this.getClmmPoolKeys(y.id),I=[];for(let h=0;h<k.rewardInfos.length;h++)I.push({poolRewardVault:new z(k.rewardInfos[h].vault),ownerRewardVault:w[h],rewardMint:new z(k.rewardInfos[h].mint.address)});for(let h of t[p.id]){let S=(d=n==null?void 0:n[p.id])==null?void 0:d[h.nftMint.toBase58()];if(S){let B=ue(this.scope.ownerPubKey,S.lockNftMint,Ii).publicKey,C=Q.getTickArrayStartIndexByTick(h.tickLower,k.config.tickSpacing),x=Q.getTickArrayStartIndexByTick(h.tickUpper,k.config.tickSpacing),{publicKey:L}=le(new z(k.programId),S.poolId,C),{publicKey:W}=le(new z(k.programId),S.poolId,x),{publicKey:O}=Kt(new z(k.programId),S.poolId,h.tickLower,h.tickUpper),H=yi(Hn,S.lockNftMint).publicKey,X=Ae.harvestLockPositionInstructionV2({programId:Hn,auth:Ji,lockPositionId:H,clmmProgram:Rn,lockOwner:S.lockOwner,lockNftMint:S.lockNftMint,lockNftAccount:B,positionNftAccount:S.nftAccount,positionId:S.positionId,poolId:S.poolId,protocolPosition:O,vaultA:new z(k.vault.A),vaultB:new z(k.vault.B),tickArrayLower:L,tickArrayUpper:W,userVaultA:g,userVaultB:A,mintA:new z(k.mintA.address),mintB:new z(k.mintB.address),rewardAccounts:I});m.addInstruction({instructions:[X],instructionTypes:[V.ClmmHarvestLockPosition],lookupTableAddress:k.lookupTableAccount?[k.lookupTableAccount]:[]})}else{let B=Ae.decreaseLiquidityInstructions({poolInfo:y,poolKeys:k,ownerPosition:h,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:A,rewardAccounts:w},liquidity:new rt(0),amountMinA:new rt(0),amountMinB:new rt(0)});m.addInstruction(B)}}}return u===0?m.sizeCheckBuildV0({computeBudgetConfig:c}):m.sizeCheckBuild({computeBudgetConfig:c})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(fi(e).publicKey);return t?nu.decode(t.data).whitelistMints.filter(i=>!i.equals(z.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new rt(1))).map(s=>Je(new z(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),r=[];return i.forEach(s=>{if(!s)return;let a=Ai.decode(s.data);r.push(a)}),r}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await Ee(this.scope.connection,e.map(r=>({pubkey:new z(r)})),t),i={};for(let r=0;r<e.length;r++){let s=n[r];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[r]));let a=yn.decode(s.accountInfo.data),u=ne.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[r])]=F(R({},a),{currentPrice:u,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(u=>e[u].ammConfig.toBase58())),i=await Ee(this.scope.connection,Array.from(n).map(u=>({pubkey:new z(u)}))),r={};i.forEach(u=>{!u.accountInfo||(r[u.pubkey.toBase58()]=eu.decode(u.accountInfo.data))});let s=await Se.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(u=>{var m,d,p,y;let[c,l]=[e[u].mintA.toBase58(),e[u].mintB.toBase58()];return{id:u,programId:e[u].programId.toBase58(),mintA:je({address:c,decimals:e[u].mintDecimalsA,programId:t[c].programId.toBase58()||Ii.toBase58(),extensions:{feeConfig:(m=t[c])!=null&&m.feeConfig?un((d=t[c])==null?void 0:d.feeConfig):void 0}}),mintB:je({address:l,decimals:e[u].mintDecimalsB,programId:t[l].programId.toBase58()||Ii.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?un((y=t[l])==null?void 0:y.feeConfig):void 0}}),price:e[u].currentPrice,config:F(R({},r[e[u].ammConfig.toBase58()]),{id:e[u].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Se.fetchMultiplePoolTickArrays({connection:this.scope.connection,poolKeys:Object.values(s)});return{computeClmmPoolInfo:s,computePoolTickData:a}}async getPoolInfoFromRpc(e){var l;let t=await this.getRpcClmmPoolInfo({poolId:e}),n=new Set([t.mintA.toBase58(),t.mintB.toBase58()]),i=await xn({connection:this.scope.connection,mints:Array.from(n).map(m=>new z(m))}),{computeClmmPoolInfo:r,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await Ee(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),u=$a(r[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");u.mintAmountA=Number(Pu.decode(a[0].accountInfo.data).amount.toString()),u.mintAmountB=Number(Pu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let c=F(R({},r[e]),{id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:u.config,rewardInfos:r[e].rewardInfos.filter(m=>!m.tokenVault.equals(z.default)).map(m=>({mint:je({address:m.tokenMint.toBase58(),programId:Ii.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:u,poolKeys:c,computePoolInfo:r[e],tickData:s}}};import{PublicKey as G}from"@solana/web3.js";import{AccountLayout as hd,NATIVE_MINT as Wo,TOKEN_PROGRAM_ID as Lt}from"@solana/spl-token";import as from"bn.js";import _o from"decimal.js-light";import xi from"bn.js";function Oo(o,e){if(e.isZero())throw Error("divisor is zero");return o.mod(e)}function cd(o,e){if(e.isZero())throw Error("rhs is zero");let t=o.div(e);if(t.isZero())throw Error("quotient is zero");let n=Oo(o,e);return n.gt(En)&&(t=t.add(new xi(1)),e=o.div(t),n=Oo(o,t),n.gt(En)&&(e=e.add(new xi(1)))),[t,e]}var En=new xi(0),No=class{static swapWithoutFees(e,t,n){let i=t.mul(n),r=t.add(e),[s,a]=cd(i,r),u=a.sub(t),c=n.sub(s);if(c.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:u,destinationAmountSwapped:c}}static lpTokensToTradingTokens(e,t,n,i,r){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(r===0)return{tokenAmount0:s,tokenAmount1:a};if(r===1)return Oo(e.mul(n),t).gt(En)&&s.gt(En)&&(s=s.add(new xi(1))),Oo(e.mul(i),t).gt(En)&&a.gt(En)&&(a=a.add(new xi(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import hu from"bn.js";var ss=new hu(1e6);function ld(o,e,t){return o.mul(e).add(t).sub(new hu(1)).div(t)}function ku(o,e,t){return o.mul(e).div(t)}var Mo=class{static tradingFee(e,t){return ld(e,t,ss)}static protocolFee(e,t){return ku(e,t,ss)}static fundFee(e,t){return ku(e,t,ss)}};var vo=class{static validate_supply(e,t){if(e.isZero())throw Error("tokenAmount0 is zero");if(t.isZero())throw Error("tokenAmount1 is zero")}static swap(e,t,n,i){let r=Mo.tradingFee(e,i),s=e.sub(r),{sourceAmountSwapped:a,destinationAmountSwapped:u}=No.swapWithoutFees(s,t,n),c=a.add(r);return{newSwapSourceAmount:t.add(c),newSwapDestinationAmount:n.sub(u),sourceAmountSwapped:c,destinationAmountSwapped:u,tradeFee:r}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:r,outputMint:s,outputAmount:a}){let[u,c,l,m,d]=t.address===s.toString()?[i,r,e.decimals,t.decimals,e.address]:[r,i,t.decimals,e.decimals,t.address],p=new _o(c.toString()).div(10**m).div(new _o(u.toString()).div(10**l)),y=a.gte(c)?c.sub(new as(1)):a,f=c.sub(y),b=tn(u.mul(y),f),g=tn(b.mul(new as(1e6)),new as(1e6).sub(n)),A=g.sub(b),w=new _o(y.toString()).div(10**m).div(new _o(g.toString()).div(10**l)),k=p.isZero()?0:w.sub(p).div(p).abs().toNumber();return{amountRealOut:y,amountIn:g,amountInWithoutFee:b,tradeFee:A,priceImpact:k}}};import Ke from"bn.js";import{PublicKey as Si,TransactionInstruction as kn,Keypair as wd,SystemProgram as Ad}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Bu,TOKEN_2022_PROGRAM_ID as cs,TOKEN_PROGRAM_ID as cn}from"@solana/spl-token";var md=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),lI=Buffer.from("amm_config","utf8"),dd=Buffer.from("pool","utf8"),pd=Buffer.from("pool_lp_mint","utf8"),fd=Buffer.from("pool_vault","utf8"),yd=Buffer.from("observation","utf8");function Fn(o){return ce([md],o)}function us(o,e,t,n){return ce([dd,e.toBuffer(),t.toBuffer(),n.toBuffer()],o)}function bd(o,e){return ce([pd,e.toBuffer()],o)}function Tu(o,e,t){return ce([fd,e.toBuffer(),t.toBuffer()],o)}function Vo(o,e){return ce([yd,e.toBuffer()],o)}function Iu({poolId:o,programId:e,configId:t,mintA:n,mintB:i}){let r=Fn(e).publicKey,s=o||us(e,t,n,i).publicKey,a=bd(e,s).publicKey,u=Tu(e,s,n).publicKey,c=Tu(e,s,i).publicKey,l=Vo(e,s).publicKey;return{poolId:s,configId:t,authority:r,lpMint:a,vaultA:u,vaultB:c,observationId:l}}var gd=Buffer.from("locked_liquidity","utf8");function Eo(o,e){return ce([gd,e.toBuffer()],o)}var Pd=ae("Raydium_cpmm"),hn={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],lockCpLiquidity:[216,157,29,78,38,51,31,26],collectCpFee:[8,30,51,199,209,184,247,133]};function xu(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y,f,b,g,A,w){let k=E([P("amountMaxA"),P("amountMaxB"),P("openTime")]),I=us(o,t,r,s).publicKey,h=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!i.equals(I),isWritable:!0},{pubkey:r,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:cn,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:Bu,isSigner:!1,isWritable:!1},{pubkey:cr,isSigner:!1,isWritable:!1},{pubkey:at,isSigner:!1,isWritable:!1}],S=Buffer.alloc(k.span);return k.encode({amountMaxA:g,amountMaxB:A,openTime:w},S),new kn({keys:h,programId:o,data:Buffer.from([...hn.initialize,...S])})}function Su(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y){let f=E([P("lpAmount"),P("amountMaxA"),P("amountMaxB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:cs,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 Pd.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:y.toString()}),f.encode({lpAmount:d,amountMaxA:p,amountMaxB:y},g),new kn({keys:b,programId:o,data:Buffer.from([...hn.deposit,...g])})}function Ku(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y){let f=E([P("lpAmount"),P("amountMinA"),P("amountMinB")]),b=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:en,isSigner:!1,isWritable:!1}],g=Buffer.alloc(f.span);return f.encode({lpAmount:d,amountMinA:p,amountMinB:y},g),new kn({keys:b,programId:o,data:Buffer.from([...hn.withdraw,...g])})}function Fo(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y,f){let b=E([P("amountIn"),P("amounOutMin")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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}],A=Buffer.alloc(b.span);return b.encode({amountIn:y,amounOutMin:f},A),new kn({keys:g,programId:o,data:Buffer.from([...hn.swapBaseInput,...A])})}function Cu(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y,f){let b=E([P("amountInMax"),P("amountOut")]),g=[{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:r,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}],A=Buffer.alloc(b.span);return b.encode({amountInMax:y,amountOut:f},A),new kn({keys:g,programId:o,data:Buffer.from([...hn.swapBaseOutput,...A])})}async function Ru(o){var f;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=o,r=[],[s,a]=[new Si(t.id),new Si(t.lpMint.address)],u;if(i)u=new Si((await i(1))[0]);else{let b=wd.generate();r.push(b),u=b.publicKey}let{publicKey:c}=ue(e.feePayer,u,cn),{publicKey:l}=dn(u),{publicKey:m}=Eo(o.lockProgram,u),{publicKey:d}=ue(e.feePayer,a,cn),{publicKey:p}=ue(o.lockAuthProgram,a,cn),y=kd({programId:o.lockProgram,auth:o.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:u,nftAccount:c,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new Si(n.vault.A),poolVaultB:new Si(n.vault.B),metadataAccount:l,lpAmount:o.lpAmount,withMetadata:(f=o.withMetadata)!=null?f:!0});return{address:{nftMint:u,nftAccount:c,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[y],signers:r,instructionTypes:[V.CpmmLockLp],lookupTableAddress:[]}}function kd({programId:o,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:r,nftAccount:s,poolId:a,lockPda:u,mintLp:c,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:y,lpAmount:f,withMetadata:b}){let g=[{pubkey:e,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:r,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{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:at,isSigner:!1,isWritable:!1},{pubkey:Ad.programId,isSigner:!1,isWritable:!1},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:Bu,isSigner:!1,isWritable:!1},{pubkey:Ft,isSigner:!1,isWritable:!1}],A=E([P("lpAmount"),_e("withMetadata")]),w=Buffer.alloc(A.span);A.encode({lpAmount:f,withMetadata:b},w);let k=Buffer.from([...hn.lockCpLiquidity,...w]);return new kn({keys:g,programId:o,data:k})}function Lu({programId:o,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:r,mintLp:s,userVaultA:a,userVaultB:u,poolVaultA:c,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:y,cpmmProgram:f,cpmmAuthProgram:b}){let g=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:f!=null?f:eo,isSigner:!1,isWritable:!1},{pubkey:b!=null?b:na,isSigner:!1,isWritable:!1},{pubkey:r,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:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:d,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:cn,isSigner:!1,isWritable:!1},{pubkey:cs,isSigner:!1,isWritable:!1},{pubkey:en,isSigner:!1,isWritable:!1}],A=E([P("lpFeeAmount")]),w=Buffer.alloc(A.span);A.encode({lpFeeAmount:y},w);let k=Buffer.from([...hn.collectCpFee,...w]);return new kn({keys:g,programId:o,data:k})}var Ou=E([ye(8),U("bump"),_e("disableCreatePool"),Wt("index"),P("tradeFeeRate"),P("protocolFeeRate"),P("fundFeeRate"),P("createPoolFee"),K("protocolOwner"),K("fundOwner"),Y(P(),16)]),Do=E([ye(8),K("configId"),K("poolCreator"),K("vaultA"),K("vaultB"),K("mintLp"),K("mintA"),K("mintB"),K("mintProgramA"),K("mintProgramB"),K("observationId"),U("bump"),U("status"),U("lpDecimals"),U("mintDecimalA"),U("mintDecimalB"),P("lpAmount"),P("protocolFeesMintA"),P("protocolFeesMintB"),P("fundFeesMintA"),P("fundFeesMintB"),P("openTime"),Y(P(),32)]);var Ki=class extends Be{constructor(e){super(e)}async load(){this.checkDisabled()}async getCpmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async getRpcPoolInfo(e,t){return(await this.getRpcPoolInfos([e],t))[e]}async getRpcPoolInfos(e,t){let n=await Ee(this.scope.connection,e.map(m=>({pubkey:new G(m)}))),i={},r=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=Do.decode(d.accountInfo.data);i[String(e[m])]=F(R({},p),{programId:d.accountInfo.owner}),r.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...r],d=await Ee(this.scope.connection,m.map(p=>({pubkey:new G(p)})));for(let p=0;p<m.length;p++){let y=d[p].accountInfo;if(y===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Ou.decode(y.data)}}let u={},c=await Ee(this.scope.connection,s.map(m=>({pubkey:new G(m)})));for(let m=0;m<s.length;m++){let d=c[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);u[String(s[m])]=new Ke(hd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=u[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),y=u[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=F(R({},d),{baseReserve:p,quoteReserve:y,vaultAAmount:u[d.vaultA.toString()],vaultBAmount:u[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new N(y.toString()).div(new N(10).pow(d.mintDecimalB)).div(new N(p.toString()).div(new N(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var u,c,l,m;let r=e[i],[s,a]=[r.mintA.toBase58(),r.mintB.toBase58()];return F(R({},n),{[i]:F(R({},r),{id:new G(i),configInfo:r.configInfo,version:7,authority:Fn(r.programId).publicKey,mintA:je({address:s,decimals:r.mintDecimalA,programId:r.mintProgramA.toBase58(),extensions:{feeConfig:(u=t[s])!=null&&u.feeConfig?un((c=t[s])==null?void 0:c.feeConfig):void 0}}),mintB:je({address:a,decimals:r.mintDecimalB,programId:r.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?un((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await xn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=je({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?un(n[t.mintA.toBase58()].feeConfig):void 0}}),r=je({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?un(n[t.mintB.toBase58()].feeConfig):void 0}}),s=je({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Lt.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},u={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};return{poolInfo:{programId:t.programId.toBase58(),id:e,type:"Standard",lpMint:s,lpPrice:0,lpAmount:t.lpAmount.toNumber(),config:a,mintA:i,mintB:r,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new N(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new N(t.vaultBAmount.toString()).div(10**r.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:u,week:u,month:u,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:r,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Fn(t.programId).publicKey.toBase58(),mintLp:s,config:a},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:r,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:u,feeConfig:c,computeBudgetConfig:l}=p,m=Re(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var H,X,D;let y=r.feePayer||((H=this.scope.owner)==null?void 0:H.publicKey),f=new Ke(new G(m.mintA.address).toBuffer()).lte(new Ke(new G(m.mintB.address).toBuffer())),[b,g]=f?[m.mintA,m.mintB]:[m.mintB,m.mintA],[A,w]=f?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],k=r.useSOLBalance&&b.address===Wo.toBase58(),I=r.useSOLBalance&&g.address===Wo.toBase58(),[h,S]=[new G(b.address),new G(g.address)],B=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:b.programId,owner:this.scope.ownerPubKey,createInfo:k?{payer:y,amount:A}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:s,checkCreateATAOwner:a});B.addInstruction(x||{});let{account:L,instructionParams:W}=await this.scope.account.getOrCreateTokenAccount({mint:new G(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:I?{payer:y,amount:w}:void 0,notUseTokenAccount:I,skipCloseAccount:!I,associatedOnly:I?!1:s,checkCreateATAOwner:a});if(B.addInstruction(W||{}),C===void 0||L===void 0)throw Error("you don't has some token account");let O=Iu({poolId:e,programId:t,configId:new G(c.id),mintA:h,mintB:S});return B.addInstruction({instructions:[xu(t,this.scope.ownerPubKey,new G(c.id),O.authority,O.poolId,h,S,O.lpMint,C,L,ue(this.scope.ownerPubKey,O.lpMint).publicKey,O.vaultA,O.vaultB,n,new G((X=b.programId)!=null?X:Lt),new G((D=g.programId)!=null?D:Lt),O.observationId,A,w,i)],instructionTypes:[V.CpmmCreatePool]}),B.addCustomComputeBudget(l),B.versionBuild({txVersion:u,extInfo:{address:F(R({},O),{mintA:b,mintB:g,programId:t,poolFeeAccount:n,feeConfig:c})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:r,slippage:s,computeResult:a,computeBudgetConfig:u,config:c,txVersion:l}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),i.isZero()&&this.logAndCreateError("amounts must greater than zero","amountInA",{amountInA:i.toString()});let{account:m}=this.scope,{bypassAssociatedCheck:d,checkCreateATAOwner:p}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),y=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:f,inputAmountFee:b,anotherAmount:g}=a||this.computePairAmount({poolInfo:F(R({},t),{lpAmount:new N(y.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:y.baseReserve,quoteReserve:y.quoteReserve,slippage:new Fe(0),baseIn:r,epochInfo:await this.scope.fetchEpochInfo(),amount:new N(i.toString()).div(10**(r?t.mintA.decimals:t.mintB.decimals))}),A=g.amount,w=t.mintA.address===Wo.toString(),k=t.mintB.address===Wo.toString(),I=this.createTxBuilder(),[h,S]=[new G(t.mintA.address),new G(t.mintB.address)],{account:B,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:w||(r?i:A).isZero()?{payer:this.scope.ownerPubKey,amount:r?i:A}:void 0,skipCloseAccount:!w,notUseTokenAccount:w,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(C||{});let{account:x,instructionParams:L}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:k||(r?A:i).isZero()?{payer:this.scope.ownerPubKey,amount:r?A:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});I.addInstruction(L||{}),!B&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let W=await m.getCreatedTokenAccount({mint:new G(t.lpMint.address)}),Ve=await m.handleTokenAccount({side:"out",amount:0,mint:new G(t.lpMint.address),tokenAccount:W,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:O}=Ve,H=Re(Ve,["tokenAccount"]);I.addInstruction(H);let X=n!=null?n:await this.getCpmmPoolKeys(t.id),D=new Fe(new Ke(1)).sub(s);return I.addInstruction({instructions:[Su(new G(t.programId),this.scope.ownerPubKey,new G(X.authority),new G(t.id),O,B,x,new G(X.vault.A),new G(X.vault.B),h,S,new G(t.lpMint.address),a?a==null?void 0:a.liquidity:D.mul(f).quotient,r?b.amount:A,r?A:b.amount)],instructionTypes:[V.CpmmAddLiquidity],lookupTableAddress:X.lookupTableAccount?[X.lookupTableAccount]:[]}),I.addCustomComputeBudget(u),I.versionBuild({txVersion:l})}async withdrawLiquidity(e){var O,H;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:r,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let u=new Fe(new Ke(1)).sub(r),c=await this.getRpcPoolInfo(t.id),[l,m]=[u.mul(i.mul(c.baseReserve).div(c.lpAmount)).quotient,u.mul(i.mul(c.quoteReserve).div(c.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,y]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:f}=this.scope,b=this.createTxBuilder(),[g,A]=[new G(t.mintA.address),new G(t.mintB.address)],w=g.equals(j),k=A.equals(j),I,h,{account:S,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:w,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!w,associatedOnly:!w,checkCreateATAOwner:!1});I=S,B&&b.addInstruction(B);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});h=C,x&&b.addInstruction(x),(!I||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",f.tokenAccounts);let L=await f.getCreatedTokenAccount({mint:new G(t.lpMint.address)});L||this.logAndCreateError("cannot found lp token account","tokenAccounts",f.tokenAccounts);let W=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[Ku(new G(t.programId),this.scope.ownerPubKey,new G(W.authority),new G(t.id),L,I,h,new G(W.vault.A),new G(W.vault.B),g,A,new G(t.lpMint.address),i,l.sub((O=p.fee)!=null?O:new Ke(0)),m.sub((H=y.fee)!=null?H:new Ke(0)))],instructionTypes:[V.CpmmWithdrawLiquidity],lookupTableAddress:W.lookupTableAccount?[W.lookupTableAccount]:[]}),b.addCustomComputeBudget(s),b.versionBuild({txVersion:a})}async swap(e){var C,x,L,W,O,H;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:r,inputAmount:s,swapResult:a,slippage:u=0,config:c,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:y}=R({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},c),f=this.createTxBuilder(),[b,g]=[new G(t.mintA.address),new G(t.mintB.address)];r?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new Ke((1+u)*1e4)).div(new Ke(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new Ke((1-u)*1e4)).div(new Ke(1e4));let A=t.mintA.address===j.toBase58(),w=t.mintB.address===j.toBase58(),{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({mint:b,tokenProgram:new G((C=t.mintA.programId)!=null?C:Lt),owner:this.scope.ownerPubKey,createInfo:A||!i?{payer:this.scope.ownerPubKey,amount:i?a.sourceAmountSwapped:0}:void 0,notUseTokenAccount:A,skipCloseAccount:!A,associatedOnly:A?!1:y,checkCreateATAOwner:p});I&&f.addInstruction(I);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new G((x=t.mintB.programId)!=null?x:Lt),owner:this.scope.ownerPubKey,createInfo:w||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:y,checkCreateATAOwner:p});S&&f.addInstruction(S),(!k||!h)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:k,mintBTokenAcc:h,mintAUseSOLBalance:A,mintBUseSOLBalance:w,associatedOnly:y});let B=n!=null?n:await this.getCpmmPoolKeys(t.id);return f.addInstruction({instructions:[r?Cu(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),i?k:h,i?h:k,new G(B.vault[i?"A":"B"]),new G(B.vault[i?"B":"A"]),new G((O=t[i?"mintA":"mintB"].programId)!=null?O:Lt),new G((H=t[i?"mintB":"mintA"].programId)!=null?H:Lt),i?b:g,i?g:b,Vo(new G(t.programId),new G(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Fo(new G(t.programId),this.scope.ownerPubKey,new G(B.authority),new G(B.config.id),new G(t.id),i?k:h,i?h:k,new G(B.vault[i?"A":"B"]),new G(B.vault[i?"B":"A"]),new G((L=t[i?"mintA":"mintB"].programId)!=null?L:Lt),new G((W=t[i?"mintB":"mintA"].programId)!=null?W:Lt),i?b:g,i?g:b,Vo(new G(t.programId),new G(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[r?V.CpmmSwapBaseOut:V.ClmmSwapBaseIn]}),f.addCustomComputeBudget(l),f.versionBuild({txVersion:m})}async lockLp(e){var c,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:r}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(c=e.poolKeys)!=null?c:await this.getCpmmPoolKeys(t.id),u=await Ru({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:to,lockAuthProgram:(d=e.authProgram)!=null?d:no,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(u),s.addCustomComputeBudget(i),s.versionBuild({txVersion:r,extInfo:u.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:r=to,authProgram:s=no,cpmmProgram:a,computeBudgetConfig:u,txVersion:c}=e;n.isZero()&&this.logAndCreateError("lpFeeAmount must greater than zero",{lpAmount:n.toString()});let l=e.feePayer||this.scope.ownerPubKey,m=this.createTxBuilder(),[d,p]=[new G(t.mintA.address),new G(t.mintB.address)],y=d.equals(j),f=p.equals(j),b,g,{account:A,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new G(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:!y,checkCreateATAOwner:!1});b=A,w&&m.addInstruction(w);let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new G(t.mintB.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});g=k,I&&m.addInstruction(I),(!b||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:b,tokenAccountB:g});let h=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=ue(l,i,Lt),{publicKey:B}=Eo(r,i),{publicKey:C}=ue(s,new G(t.lpMint.address),Lt);return m.addInstruction({instructions:[Lu({programId:r!=null?r:to,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:no,nftMint:i,nftAccount:S,lockPda:B,poolId:new G(t.id),mintLp:new G(h.mintLp.address),userVaultA:b,userVaultB:g,poolVaultA:new G(h.vault.A),poolVaultB:new G(h.vault.B),mintA:d,mintB:p,lockLpVault:C,lpFeeAmount:n,cpmmProgram:a==null?void 0:a.programId,cpmmAuthProgram:a==null?void 0:a.authProgram})],instructionTypes:[V.CpmmCollectLockFee]}),m.addCustomComputeBudget(u),m.versionBuild({txVersion:c})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let r=n.toString()===e.mintB.address,s=vo.swap(t,r?e.baseReserve:e.quoteReserve,r?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new N(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),u=s.destinationAmountSwapped.mul(new Ke((1-i)*1e4)).div(new Ke(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:u,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:r,epochInfo:s,baseIn:a}){var k,I,h,S,B,C,x,L,W;let u=1-Number(r.toSignificant())/100,c=new Ke(new N(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(u).toFixed(0)),l=ge(c,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=c.sub((k=l.fee)!=null?k:new Ke(0)),d=new Ke(new N(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,N.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",c.toString(),"amountInFee:",(h=(I=l.fee)==null?void 0:I.toString())!=null?h:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${r.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let y=m.mul(d).div(p==="base"?t:n),f={amount:dt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let O=Td(y,t,n,d);this.logDebug("lpAmountData:",{amountA:O.amountA.toString(),amountB:O.amountB.toString()}),f=ge(O[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let b=new Fe(new Ke(1)).add(r),g=new Fe(new Ke(1)).sub(r),A=ge(b.mul(f.amount.sub((S=f.fee)!=null?S:new Ke(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),w=ge(g.mul(f.amount.sub((B=f.fee)!=null?B:new Ke(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",f.amount.toString(),"anotherAmountFee:",(x=(C=f.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",A.amount.toString(),"maxAnotherAmountFee:",(W=(L=A.fee)==null?void 0:L.toString())!=null?W:0),{inputAmountFee:l,anotherAmount:f,maxAnotherAmount:A,minAnotherAmount:w,liquidity:y}}};function Td(o,e,t,n){let i=o.mul(e).div(n);!i.isZero()&&!o.mul(e).mod(n).isZero()&&(i=i.add(new Ke(1)));let r=o.mul(t).div(n);return!r.isZero()&&!o.mul(t).mod(n).isZero()&&(r=r.add(new Ke(1))),{amountA:i,amountB:r}}import{PublicKey as In}from"@solana/web3.js";import{createTransferInstruction as Eu,TOKEN_PROGRAM_ID as Ce,TOKEN_2022_PROGRAM_ID as Go}from"@solana/spl-token";import Xo from"bn.js";var Nu={[yr.toBase58()]:3},Mu={3:yr};var ls=E([ye(5),ye(8),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),ye(7)]),_u={3:ls};import{PublicKey as vu}from"@solana/web3.js";var qo=ae("Serum"),Uo=class{static getProgramId(e){let t=Mu[e];return t||qo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=Nu[t];return n||qo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=_u[e];return t||qo.logWithError(!!t,"invalid version","version",e),t}static getLayouts(e){return{state:this.getStateLayout(e)}}static getAssociatedAuthority({programId:e,marketId:t}){let n=[t.toBuffer()],i=0,r;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));r=vu.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:r,nonce:i}}return qo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:vu.default,nonce:i}}};import{PublicKey as te,SystemProgram as Id,TransactionInstruction as Bd}from"@solana/web3.js";import Tn from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as xd,TOKEN_2022_PROGRAM_ID as Sd,TOKEN_PROGRAM_ID as Kd}from"@solana/spl-token";function Cd(o,e,t,n,i,r,s,a,u,c,l,m,d,p,y){var h;let f=[],b=[T({pubkey:Kd,isWritable:!1}),T({pubkey:Sd,isWritable:!1}),T({pubkey:xd,isWritable:!1}),T({pubkey:Id.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})];b.push(T({pubkey:t})),b.push(T({pubkey:i}));let g=[u,c],A=[l,m],w=[r,s,a];for(let S=0;S<g.length;S++){let B=g[S],C=w[S]===B.mintA.address;if(b.push(T({pubkey:new te(B.programId),isWritable:!1})),S===g.length-1?b.push(T({pubkey:i})):b.push(T({pubkey:n})),b.push(T({pubkey:new te(w[S])})),b.push(T({pubkey:new te(w[S+1])})),B.version===6){let x=A[S];b.push(T({pubkey:new te(x.config.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),b.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),b.push(T({pubkey:new te(B.observationId)})),b.push(T({pubkey:en})),b.push(T({pubkey:ot(new te(B.programId),new te(B.id)).publicKey})),f.push(Rd(B.sqrtPriceX64.toString(),C));for(let L of(h=y[S])!=null?h:[])b.push(T({pubkey:new te(L)}))}else if(B.version===5){let x=A[S];b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.authority),isWritable:!1})),b.push(T({pubkey:new te(x.marketProgramId)})),b.push(T({pubkey:new te(x.marketAuthority)})),b.push(T({pubkey:ta,isWritable:!1})),b.push(T({pubkey:new te(x.openOrders)})),b.push(T({pubkey:new te(x.vault.A)})),b.push(T({pubkey:new te(x.vault.B)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.marketId)})),b.push(T({pubkey:new te(x.marketBids)})),b.push(T({pubkey:new te(x.marketAsks)})),b.push(T({pubkey:new te(x.marketEventQueue)})),b.push(T({pubkey:new te(x.marketBaseVault)})),b.push(T({pubkey:new te(x.marketQuoteVault)}))}else if(B.version===4){let x=A[S],L=B.status!==1;b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(x.authority),isWritable:!1})),b.push(T({pubkey:new te(L?x.id:x.marketProgramId)})),b.push(T({pubkey:new te(L?x.id:x.marketAuthority)})),b.push(T({pubkey:new te(L?x.id:x.openOrders)})),b.push(T({pubkey:new te(x.vault.A)})),b.push(T({pubkey:new te(x.vault.B)})),b.push(T({pubkey:new te(L?x.id:x.marketId)})),b.push(T({pubkey:new te(L?x.id:x.marketBids)})),b.push(T({pubkey:new te(L?x.id:x.marketAsks)})),b.push(T({pubkey:new te(L?x.id:x.marketEventQueue)})),b.push(T({pubkey:new te(L?x.id:x.marketBaseVault)})),b.push(T({pubkey:new te(L?x.id:x.marketQuoteVault)}))}else if(B.version===7){let x=A[S];b.push(T({pubkey:new te(x.authority)})),b.push(T({pubkey:new te(x.config.id)})),b.push(T({pubkey:new te(x.id)})),b.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),b.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),b.push(T({pubkey:new te(B.observationId)}))}else throw Error("pool type error")}let k=E([U("insId"),P("amountIn"),P("amountOut"),Y(J(),f.length,"clmmPriceLimit")]),I=Buffer.alloc(k.span);return k.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:f},I),new Bd({keys:b,programId:o,data:I})}function Rd(o,e){if(o)if(e){let t=new Tn(o).div(new Tn(25));return t.gt(ko)?t:ko}else{let t=new Tn(o).mul(new Tn(25));return t.lt(ho)?t:ho}else return e?ko:ho}function Vu({routeProgram:o,ownerInfo:e,inputMint:t,swapInfo:n}){var i,r,s,a,u,c,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=Ge(m),p=t.equals(d.mintA.address)?bt.add(ct):gt.sub(ct);return Ae.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((r=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?r:new Tn(0)),sqrtPriceLimitX64:p,remainingAccounts:(s=n.remainingAccounts[0])!=null?s:[]})}else if(n.poolInfo[0].version===7){let m=n.poolInfo[0],d=t.toString()===n.poolInfo[0].mintA.address;return{signers:[],instructions:[Fo(m.programId,e.wallet,m.authority,m.configId,m.id,e.sourceToken,e.destinationToken,d?m.vaultA:m.vaultB,d?m.vaultB:m.vaultA,d?m.mintProgramA:m.mintProgramB,d?m.mintProgramB:m.mintProgramA,new te(m[d?"mintA":"mintB"].address),new te(m[d?"mintB":"mintA"].address),m.observationId,n.amountIn.amount.raw,n.minAmountOut.amount.raw)],lookupTableAddress:[],instructionTypes:[d?V.CpmmSwapBaseIn:V.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Co({poolKeys:m,version:n.poolInfo[0].pooltype.includes("StablePool")?5:4,userKeys:{tokenAccountIn:e.sourceToken,tokenAccountOut:e.destinationToken,owner:e.wallet},amountIn:n.amountIn.amount.raw,amountOut:n.minAmountOut.amount.raw.sub((u=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?u:new Tn(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?V.AmmV5SwapBaseIn:V.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],y=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Cd(o,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,y,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(c=n.minAmountOut.fee)==null?void 0:c.raw)!=null?l:new Tn(0)),n.remainingAccounts)],instructionTypes:[V.RouteSwap],lookupTableAddress:[p.lookupTableAccount,y.lookupTableAccount].filter(f=>f!==void 0),address:{}}}else throw Error("route type error")}var zt=new Xo(0),Ci=class extends Be{constructor(e){super(e)}async getWSolAccounts(){this.scope.checkOwner(),await this.scope.account.fetchWalletTokenAccounts();let e=this.scope.account.tokenAccounts.filter(t=>t.mint.equals(j));return e.sort((t,n)=>t.isAssociated?1:n.isAssociated||t.amount.lt(n.amount)?-1:1),e}async unWrapWSol(e){let{amount:t,tokenProgram:n,txVersion:i=1}=e,r=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let u=Z(t);for(let c=0;c<r.length;c++)u.gte(r[c].amount)?(s.addInstruction({instructions:[qt({tokenAccount:r[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),u.sub(r[c].amount)):s.addInstruction({instructions:[qt({tokenAccount:r[c].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]});return s.versionBuild({txVersion:i})}async wrapWSol(e,t,n){let i=this.createTxBuilder(),r=await Ut({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(r),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:r,txVersion:s}){let a=this.createTxBuilder(),u=e.amountIn,c=e.amountOut,l=u.amount.token.mint.equals(j),m=c.amount.token.mint.equals(j),d=u.amount.token.mint,p=c.amount.token.mint,{account:y,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Go:Ce,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:u.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(f&&a.addInstruction(f),y===void 0)throw Error("input account check error");let b;if(e.routeType==="route")b=this.scope.account.getAssociatedTokenAccount(p,c.amount.token.isToken2022?Go:Ce);else{let{account:k,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Go:Ce,mint:p,notUseTokenAccount:m,owner:this.scope.ownerPubKey,skipCloseAccount:!0,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:m?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});b=k,I&&a.addInstruction(I)}m&&a.addInstruction({endInstructions:[qt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:b,programId:Ce})],endInstructionTypes:[V.CloseAccount]});let g;if(e.routeType==="route"){let k=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(k.mint,k.isToken2022?Go:Ce)}let A=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),w=Vu({routeProgram:r,inputMint:d,swapInfo:F(R({},e),{poolInfo:[...e.poolInfoList],poolKey:A,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:y,routeToken:g,destinationToken:b}});if(e.feeConfig!==void 0){let k=this.createTxBuilder();k.addInstruction({instructions:[Eu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]}),k.addInstruction(w);let{transactions:I}=s===0?await k.sizeCheckBuildV0():await k.sizeCheckBuild();I.length<2&&a.addInstruction({instructions:[Eu(y,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[V.TransferAmount]})}return a.addInstruction(w),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:w.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:w.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ea,clmm:n=Rn,cpmm:i=eo}=e||{},r=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:Ko.offsetOf("baseMint"),length:64}}),s=E([K("baseMint"),K("quoteMint")]),a=r.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),u=E([K("mintA"),K("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:yn.span}],dataSlice:{offset:yn.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:6,mintA:y.mintA,mintB:y.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:Do.offsetOf("mintA"),length:64}})).map(p=>{let y=u.decode(p.account.data);return{id:p.pubkey,version:7,mintA:y.mintA,mintB:y.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:r}){e=e.toString()===In.default.toString()?j:e,t=t.toString()===In.default.toString()?j:t;let s={},a={},u={},c=[],l={};for(let d of n!=null?n:[]){if((d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintB.equals(e)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].in.push(d)}if(d.mintA.equals(t)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].out.push(d)}if(d.mintB.equals(t)){let p=d.mintA.toString();l[p]===void 0&&(l[p]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[p].out.push(d)}}let m=[];for(let d of i)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),s[d.id.toBase58()]=d,m.push(d)),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of r)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(c.push(d),u[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].in.push(d)),d.mintB.equals(e)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].in.push(d)),d.mintA.equals(t)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintB.toBase58()].out.push(d)),d.mintB.equals(t)&&(l[d.mintA.toBase58()]===void 0&&(l[d.mintA.toBase58()]={mintProgram:Ce,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of Object.keys(l)){if(l[d].in.length===1&&l[d].out.length===1&&l[d].in[0].id.equals(l[d].out[0].id)){delete l[d];continue}if(l[d].in.length===0||l[d].out.length===0){delete l[d];continue}let p=l[d];for(let y of p.in)for(let f of p.out)y.version===6&&a[y.id.toString()]===void 0?a[y.id.toString()]=y:y.version===7&&u[y.id.toString()]===void 0?u[y.id.toString()]=y:(y.version===4||y.version===5)&&s[y.id.toString()]===void 0&&(s[y.id.toString()]=y),f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&u[f.id.toString()]===void 0?u[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f)}return{directPath:c,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(u)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(f=>[f.mintA.toBase58(),f.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let r=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(f=>f.id)),s=Lo(r),a={};Object.values(s).forEach(f=>{i.delete(f.mintA.address),a[f.mintA.address]={address:new In(f.mintA.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(f.mintB.address),a[f.mintB.address]={address:new In(f.mintB.address),programId:Ce,mintAuthority:null,supply:BigInt(0),decimals:f.mintB.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}}),console.log("fetching cpmm pools info, total: ",e.cpmmPoolList.length);let u=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(f=>f.id.toBase58()),!0);Object.values(u).forEach(f=>{let[b,g]=[f.mintA.toBase58(),f.mintB.toBase58()];f.mintProgramA.equals(Ce)?(i.delete(b),a[b]={address:f.mintA,programId:f.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(b),f.mintProgramB.equals(Ce)?(i.delete(g),a[g]={address:f.mintB,programId:f.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:f.mintDecimalB,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(g)}),console.log("fetching mints info, total: ",i.size);let c=await xn({connection:this.scope.connection,mints:Array.from(i).map(f=>new In(f))});a=R(R({},a),c);let l=this.scope.cpmm.toComputePoolInfos({pools:u,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(f=>f.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),y=Object.keys(e.routePathDict).reduce((f,b)=>F(R({},f),{[b]:F(R({},e.routePathDict[b]),{mintProgram:a[b].programId,mDecimals:a[b].decimals,in:e.routePathDict[b].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[b].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:r,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:y}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:r,tickCache:s,slippage:a,chainTime:u,epochInfo:c,feeConfig:l}){var g,A,w,k,I,h,S,B,C;let m=l===void 0?new Xo(0):e.raw.mul(new Xo(l.feeBps.toNumber())).div(new Xo(1e4)),d=e.raw.sub(m),p=new be(e.token,d),y=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},f=F(R({},t),{address:st(t.address).toString()}),b=[];for(let x of n)try{b.push(F(R({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:r,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:p})),{feeConfig:y}))}catch(L){this.logDebug("direct error",x.version,x.id.toString(),L.message)}this.logDebug("direct done");for(let[x,L]of Object.entries(i)){let W={chainId:101,address:x,programId:L.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:L.mDecimals,tags:[],extensions:{}},O=L.in.map(X=>{try{return{pool:X,data:this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:u,epochInfo:c,slippage:a,outputToken:W,amountIn:p})}}catch(D){this.logDebug("route in error",X.version,X.id.toString(),D.message);return}}).sort((X,D)=>{var Oe,mt,At,Ot;let Ve=X===void 0?zt:X.data.amountOut.amount.raw.sub((mt=(Oe=X.data.amountOut.fee)==null?void 0:Oe.raw)!=null?mt:zt),Qt=D===void 0?zt:D.data.amountOut.amount.raw.sub((Ot=(At=D.data.amountOut.fee)==null?void 0:At.raw)!=null?Ot:zt);return Ve.lt(Qt)?1:-1})[0];if(O===void 0)continue;let H=new be(xo(W),O.data.amountOut.amount.raw.sub((A=(g=O.data.amountOut.fee)==null?void 0:g.raw)!=null?A:zt));for(let X of L.out)try{let D=this.computeAmountOut({itemPool:X,tickCache:s,simulateCache:r,chainTime:u,epochInfo:c,slippage:a,outputToken:f,amountIn:H});b.push(F(R({},D),{allTrade:!!(O.data.allTrade&&D.allTrade),amountIn:O.data.amountIn,amountOut:D.amountOut,minAmountOut:D.minAmountOut,currentPrice:void 0,executionPrice:new N(new nt({baseToken:O.data.amountIn.amount.token,denominator:O.data.amountIn.amount.raw,quoteToken:D.amountOut.amount.token,numerator:D.amountOut.amount.raw.sub((k=(w=D.amountOut.fee)==null?void 0:w.raw)!=null?k:zt)}).toFixed()),priceImpact:new N(O.data.priceImpact.add(D.priceImpact).toFixed()),fee:[O.data.fee[0],D.fee[0]],routeType:"route",poolInfoList:[O.pool,X],remainingAccounts:[O.data.remainingAccounts[0],D.remainingAccounts[0]],minMiddleAmountFee:(I=D.amountOut.fee)!=null&&I.raw?new be(O.data.amountOut.amount.token,((S=(h=O.data.amountOut.fee)==null?void 0:h.raw)!=null?S:zt).add((C=(B=D.amountOut.fee)==null?void 0:B.raw)!=null?C:zt)):void 0,middleToken:O.data.amountOut.amount.token,poolReady:O.data.poolReady&&D.poolReady,poolType:[O.data.poolType,D.poolType],feeConfig:y,expirationTime:Bt(O.data.expirationTime,D.expirationTime)}))}catch(D){this.logDebug("route out error",X.version,X.id.toString(),D.message)}}return b.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(L=>L.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,L)=>x.amountOut.amount.raw.sub(L.amountOut.amount.raw).gt(zt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:r,slippage:s,outputToken:a,amountIn:u}){if(e.version===6){let{allTrade:c,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:y,executionPrice:f,priceImpact:b,fee:g,remainingAccounts:A,executionPriceX64:w}=Se.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:u.raw,tokenOut:a,slippage:s,epochInfo:r,catchLiquidityInsufficient:!0});return{allTrade:c,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new N(y.toFixed()),executionPrice:new N(f.toFixed()),priceImpact:new N(b.toFixed()),fee:[g],remainingAccounts:[A],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[w],expirationTime:Bt(l.expirationTime,p)}}else if(e.version===7){let{allTrade:c,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:y}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:u.raw,slippage:s});return{allTrade:c,amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:Pi(F(R({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Pi(F(R({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new be(u.token,y)],remainingAccounts:[],routeType:"amm",poolInfoList:[e],poolReady:e.openTime.toNumber()<i,poolType:"CPMM",slippage:s,clmmExPriceX64:[void 0],expirationTime:void 0}}else{if(![1,6,7].includes(n[e.id.toString()].status))throw Error("swap error");let{amountOut:c,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:y}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:u.raw,mintIn:u.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:u,fee:void 0,expirationTime:void 0},amountOut:{amount:Pi(F(R({},a),{amount:c})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Pi(F(R({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new be(u.token,y)],routeType:"amm",poolInfoList:[e],remainingAccounts:[],poolReady:Number(n[e.id].openTime)<i,poolType:e.version===5?"STABLE":void 0,expirationTime:void 0,allTrade:!0,slippage:s,clmmExPriceX64:[void 0]}}}async computePoolToPoolKeys({pools:e,clmmRpcData:t={},ammRpcData:n={}}){let i=new Set(e.filter(c=>c.version===6&&!t[c.id.toString()]).map(c=>c.id.toString()));if(i.size>0){let c=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(c).forEach(l=>{t[l]=c[l]})}if(new Set(e.filter(c=>c.version===4&&!n[c.id.toString()]).map(c=>c.id.toString())).size>0){let c=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(c).forEach(l=>{n[l]=c[l]})}let s=new Set(e.filter(c=>c.version===4).map(c=>c.marketId)),a={};s.size>0&&(await Ee(this.scope.connection,Array.from(s).map(l=>({pubkey:new In(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=ls.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:Uo.getAssociatedAuthority({programId:l.accountInfo.owner,marketId:l.pubkey}).publicKey.toString(),marketBaseVault:m.baseVault.toString(),marketQuoteVault:m.quoteVault.toString(),marketBids:m.bids.toString(),marketAsks:m.asks.toString(),marketEventQueue:m.eventQueue.toString()}});let u=[];return e.forEach(c=>{if(c.version===6){let l=t[c.id.toString()],m={programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:F(R({},c.ammConfig),{id:c.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[]};u.push(m)}else if(c.version===4){let l=n[c.id.toString()],m=R({programId:c.programId,id:c.id,mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:rs({programId:new In(c.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:c.lpMint},a[c.marketId]);u.push(m)}else c.version===7&&u.push({programId:c.programId.toBase58(),id:c.id.toBase58(),mintA:c.mintA,mintB:c.mintB,openTime:String(c.openTime),authority:Fn(c.programId).publicKey.toBase58(),vault:{A:c.vaultA.toBase58(),B:c.vaultB.toBase58()},mintLp:je({address:c.mintLp.toBase58(),programId:Ce.toBase58(),decimals:c.lpDecimals}),config:F(R({id:c.configId.toBase58()},c.configInfo),{protocolFeeRate:c.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:c.configInfo.tradeFeeRate.toNumber(),fundFeeRate:c.configInfo.fundFeeRate.toNumber(),createPoolFee:c.configInfo.createPoolFee.toString()})})}),u}};import{PublicKey as Ld,Transaction as ms,TransactionInstruction as Od}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Nd}from"@solana/spl-token";import Fu from"bn.js";var Ze=class extends Be{static getPdaPoolId(e,t){return ce([Ze.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return ce([Ze.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new Fu(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:r}){if(n.length===0)return[];let s=n.map(l=>Ze.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<Ze.VERSION_PROJECT.length;l++)a.push(...s.map(m=>Ze.getPdaOwnerId(t,m,i,l).publicKey));let u=await Pt(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!==Ze.POOL_LAYOUT.span||b.data.length!==Ze.OWNER_LAYOUT.span)continue;let g=Ze.POOL_LAYOUT.decode(f.data),A=Ze.OWNER_LAYOUT.decode(b.data),w=g.openTime.toNumber(),k=g.endTime.toNumber(),I=A.tokenInfo.map(B=>B.debtAmount.gt(new Fu(0))).filter(B=>!B).length!==3,h=r>w&&r<k&&g.status===1,S=I&&h;c.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:y,snapshotLpAmount:A.lpAmount,project:Ze.VERSION_PROJECT[m],openTime:w,endTime:k,canClaim:S,canClaimErrorType:I?h?void 0:"outOfOperationalTime":"alreadyClaimIt",tokenInfo:g.tokenInfo.map((B,C)=>({mintAddress:B.mintAddress,mintVault:B.mintVault,mintDecimals:B.mintDecimals,perLpLoss:B.perLpLoss,debtAmount:A.tokenInfo[C].debtAmount.add(A.tokenInfo[C].claimedAmount)}))})}return c}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r=[];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(Ie.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!u.mintAddress.equals(Ie.WSOL.mint),associatedOnly:u.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),r.push(c)}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:r}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,r={};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(Ie.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(Ie.WSOL.mint),associatedOnly:m.mintAddress.equals(Ie.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(r[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[Ze.makeClaimInstruction({programId:c.programId,poolInfo:c,ownerInfo:{wallet:i,ownerPda:c.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),u=n.allInstructions;return fr(u,[i,...a.map(c=>c.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new ms().add(...u.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new ms().add(...u.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new ms().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=E([]),r=[{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:Nd,isSigner:!1,isWritable:!1}],s=Buffer.alloc(i.span);i.encode({},s);let a=Buffer.from([10,66,208,184,161,6,191,98,...s]);return new Od({keys:r,programId:e,data:a})}},wt=Ze;wt.CLAIMED_NUM=3,wt.POOL_LAYOUT=E([ye(8),U("bump"),U("status"),P("openTime"),P("endTime"),K("ammId"),Y(E([U("mintDecimals"),K("mintAddress"),K("mintVault"),P("perLpLoss"),P("totalClaimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),Y(P(),10,"padding")]),wt.OWNER_LAYOUT=E([ye(8),U("bump"),U("version"),K("poolId"),K("owner"),P("lpAmount"),Y(E([K("mintAddress"),P("debtAmount"),P("claimedAmount")]),Ze.CLAIMED_NUM,"tokenInfo"),Y(P(),4,"padding")]),wt.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new Ld(e)),wt.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},wt.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ri}from"@solana/web3.js";import Li from"bn.js";import{TOKEN_PROGRAM_ID as Gu}from"@solana/spl-token";import{SystemProgram as Bn,SYSVAR_RENT_PUBKEY as _d,Transaction as Du,TransactionInstruction as vd}from"@solana/web3.js";import{createInitializeAccountInstruction as Wu,TOKEN_PROGRAM_ID as qu}from"@solana/spl-token";function Md(o="accountFlags"){let e=new yo(o);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var ds=E([ye(5),Md("accountFlags"),K("ownAddress"),P("vaultSignerNonce"),K("baseMint"),K("quoteMint"),K("baseVault"),P("baseDepositsTotal"),P("baseFeesAccrued"),K("quoteVault"),P("quoteDepositsTotal"),P("quoteFeesAccrued"),P("quoteDustThreshold"),K("requestQueue"),K("eventQueue"),K("bids"),K("asks"),P("baseLotSize"),P("quoteLotSize"),P("feeRateBps"),P("referrerRebatesAccrued"),ye(7)]);function Vd({programId:o,marketInfo:e}){let t=E([U("version"),Qe("instruction"),P("baseLotSize"),P("quoteLotSize"),Wt("feeRateBps"),P("vaultSignerNonce"),P("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:_d,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}:[]),i=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},i),new vd({keys:n,programId:o,data:i})}async function Uu({connection:o,wallet:e,marketInfo:t}){var s,a,u,c,l,m,d,p;let n=new Du,i=await o.getMinimumBalanceForRentExemption(165);n.add(Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:qu}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:qu}),Wu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Wu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner));let r=new Du;return r.add(Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await o.getMinimumBalanceForRentExemption(ds.span),space:ds.span,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await o.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await o.getMinimumBalanceForRentExemption((u=t.eventQueueSpace)!=null?u:262144+12),space:(c=t.eventQueueSpace)!=null?c:262144+12,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Bn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await o.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Vd({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:[V.CreateAccount,V.CreateAccount,V.InitAccount,V.InitAccount]},{transaction:r,signer:[],instructionTypes:[V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.CreateAccount,V.InitMarket]}]}var Dn=class extends Be{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:r,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,lowestFeeMarket:c,txVersion:l,computeBudgetConfig:m}){let d=this.scope.ownerPubKey,p=it({fromPublicKey:d,programId:r}),y=it({fromPublicKey:d,programId:r}),f=it({fromPublicKey:d,programId:r}),b=it({fromPublicKey:d,programId:r}),g=it({fromPublicKey:d,programId:r}),A=it({fromPublicKey:d,programId:Gu}),w=it({fromPublicKey:d,programId:Gu}),k=0,I=new Li(100);function h(){let O=new Li(0);for(;;)try{return{vaultOwner:Ri.createProgramAddressSync([p.publicKey.toBuffer(),O.toArrayLike(Buffer,"le",8)],r),vaultSignerNonce:O}}catch{if(O.iaddn(1),O.gt(new Li(25555)))throw Error("find vault owner error")}}let{vaultOwner:S,vaultSignerNonce:B}=h(),C=new Li(Math.round(10**e.decimals*n)),x=new Li(Math.round(n*10**t.decimals*i));if(C.eq(dt))throw Error("lot size is too small");if(x.eq(dt))throw Error("tick size or lot size is too small");let L=await Uu({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:r,id:p,baseMint:e.mint,quoteMint:t.mint,baseVault:A,quoteVault:w,vaultOwner:S,requestQueue:y,eventQueue:f,bids:b,asks:g,feeRateBps:k,quoteDustThreshold:I,vaultSignerNonce:B,baseLotSize:C,quoteLotSize:x,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:u,lowestFeeMarket:c}}),W=this.createTxBuilder();W.addInstruction({instructions:L[0].transaction.instructions,signers:L[0].signer});for await(let O of L.slice(1,L.length))W.addInstruction({instructions:O.transaction.instructions,signers:O.signer,instructionTypes:O.instructionTypes});return l===0?W.sizeCheckBuildV0({computeBudgetConfig:m,address:{marketId:p.publicKey,requestQueue:y.publicKey,eventQueue:f.publicKey,bids:b.publicKey,asks:g.publicKey,baseVault:A.publicKey,quoteVault:w.publicKey,baseMint:new Ri(e.mint),quoteMin:new Ri(t.mint)}}):W.sizeCheckBuild({computeBudgetConfig:m,address:{marketId:p.publicKey,requestQueue:y.publicKey,eventQueue:f.publicKey,bids:b.publicKey,asks:g.publicKey,baseVault:A.publicKey,quoteVault:w.publicKey,baseMint:new Ri(e.mint),quoteMin:new Ri(t.mint)}})}};import{PublicKey as Ni}from"@solana/web3.js";import Qu from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Fd,TransactionInstruction as Xu}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as zu}from"@solana/spl-token";var Ed=E([U("instruction"),fa("amount")]),Oi=E([U("instruction")]);function zo({programId:o},e){let t=[{pubkey:zu,isSigner:!1,isWritable:!1},{pubkey:qs,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,r])=>({pubkey:r,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(Oi.span);return Oi.encode({instruction:2},n),new Xu({keys:t,programId:o,data:n})}function ps(o){let{poolConfig:e,userKeys:t,side:n}=o,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,r=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(Oi.span);Oi.encode({instruction:2},s);let a=[{pubkey:zu,isWritable:!1,isSigner:!1},{pubkey:Fd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:r,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new Xu({programId:e.programId,keys:a,data:s})}var Dd={[Zn.IDO_PROGRAM_ID_V1.toString()]:1,[Zn.IDO_PROGRAM_ID_V2.toString()]:2,[Zn.IDO_PROGRAM_ID_V3.toString()]:3,[Zn.IDO_PROGRAM_ID_V4.toString()]:4},Wn=class extends Be{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:r}){let s=this.createTxBuilder(),a=Dd[t.programId];a||this.logAndCreateError("invalid version",a);let u=Ge(t),[c,l]=[!new Qu(e.coin).isZero(),!new Qu(e.pc).isZero()],m=u.projectInfo.mint.address.equals(j),{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:i});!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(j),{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:i});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?[zo({programId:u.programId},{idoId:u.id,authority:u.authority,poolTokenAccount:u.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Ni(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[zo({programId:new Ni(t.programId)},{idoId:u.id,authority:u.authority,poolTokenAccount:u.buyInfo.vault,userTokenAccount:f,userIdoInfo:new Ni(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:r});if(a<3)return!c&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[zo({programId:u.programId},{idoId:u.id,authority:u.authority,poolQuoteTokenAccount:u.buyInfo.vault,poolBaseTokenAccount:u.projectInfo.vault,userQuoteTokenAccount:f,userBaseTokenAccount:d,userIdoInfo:new Ni(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:r});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 Ni(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...c?[ps(F(R({},g),{side:"base"}))]:[],...l?[ps(F(R({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:r})}};import{PublicKey as Wd}from"@solana/web3.js";import{MintLayout as qd,TOKEN_2022_PROGRAM_ID as fs,TOKEN_PROGRAM_ID as ys}from"@solana/spl-token";var Mi=class extends Be{constructor(t){super(t);this._tokenList=[];this._tokenMap=new Map;this._blackTokenMap=new Map;this._mintGroup={official:new Set,jup:new Set,extra:new Set};this._whiteMap=new Set;this._extraTokenList=[]}async load(t){this.checkDisabled();let{forceUpdate:n=!1,type:i="strict"}=t||{},{mintList:r,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),u=await this.scope.fetchJupTokenList(n);this._tokenList=[],this._tokenMap=new Map,this._blackTokenMap=new Map,this._mintGroup={official:new Set,jup:new Set,extra:new Set},this._whiteMap=new Set(a),this._tokenMap.set(Jt.address,Jt),this._mintGroup.official.add(Jt.address),s.forEach(c=>{this._blackTokenMap.set(c.address,F(R({},c),{priority:-1}))}),r.forEach(c=>{var l;this._blackTokenMap.has(c.address)||(this._tokenMap.set(c.address,F(R({},c),{type:"raydium",priority:2,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?fs.toBase58():ys.toBase58()})),this._mintGroup.official.add(c.address))}),u.forEach(c=>{var l;this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(R({},c),{type:"jupiter",priority:1,programId:(l=c.programId)!=null?l:c.tags.includes("token-2022")?fs.toBase58():ys.toBase58(),tags:c.freezeAuthority?[...c.tags||[],"hasFreeze"]:c.tags})),this._mintGroup.jup.add(c.address))}),this._extraTokenList.forEach(c=>{this._blackTokenMap.has(c.address)||this._tokenMap.has(c.address)||(this._tokenMap.set(c.address,F(R({},c),{type:"extra",priority:1,programId:c.programId||c.tags.includes("token-2022")?fs.toBase58():ys.toBase58()})),this._mintGroup.extra.add(c.address))}),this._tokenList=Array.from(this._tokenMap).map(c=>c[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}get whiteListMap(){return this._whiteMap}async getTokenInfo(t){if(!t)throw new Error("please input mint");let n=t.toString(),i=this._tokenMap.get(n);if(i)return i;if(n.toLocaleUpperCase()==="SOL")return Jt;let r=(await this.scope.api.getTokenInfo([n]))[0];if(r)return this._mintGroup.extra.add(n),this._tokenMap.set(n,F(R({},r),{priority:2})),r;let s=await this.scope.connection.getAccountInfo(new Wd(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=qd.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 Qo=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:r,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:u,blockhashCommitment:c="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Tt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=c,this.api=r,this._apiCacheTime=u||5*60*1e3,this.logger=ae("Raydium"),this.farm=new mi({scope:this,moduleName:"Raydium_Farm"}),this.account=new oi({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ti({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Mi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Ci({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new Bi({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Ki({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new wt({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Dn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Wn({scope:this,moduleName:"Raydium_ido"}),this.availability={};let l=new Date().getTime();this.apiData={},a&&(this._chainTime={fetched:l,value:{chainTime:s||Date.now()-a,offset:a}})}static async load(e){var l;let t=Ud({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:r,logRequests:s,urlConfigs:a}=t,u=new uo({cluster:n,timeout:i,urlConfigs:a,logCount:r,logRequests:s}),c=new Qo(F(R({},t),{api:u}));return await c.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await c.token.load({type:e.jupTokenType}),c}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(co);return this._owner.publicKey}setOwner(e){return this._owner=e?new Tt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(sa);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(co),new Error(co)}isCacheInvalidate(e){return new Date().getTime()-e>this._apiCacheTime}async fetchChainTime(){try{let e=await this.api.getChainTimeOffset();this._chainTime={fetched:Date.now(),value:{chainTime:Date.now()+e.offset*1e3,offset:e.offset*1e3}}}catch{this._chainTime=void 0}}async fetchV3TokenList(e){if(this.apiData.tokenList&&!this.isCacheInvalidate(this.apiData.tokenList.fetched)&&!e)return this.apiData.tokenList.data;try{let t=await this.api.getTokenList(),n={fetched:Date.now(),data:t};return this.apiData.tokenList=n,n.data}catch(t){return console.error(t),{mintList:[],blacklist:[],whiteList:[]}}}async fetchJupTokenList(e){let t=this.apiData.jupTokenList;if(t&&!this.isCacheInvalidate(t.fetched)&&!e)return t.data;try{let n=await this.api.getJupTokenList();return this.apiData.jupTokenList={fetched:Date.now(),data:n.map(i=>F(R({},i),{mintAuthority:i.mint_authority||void 0,freezeAuthority:i.freeze_authority||void 0}))},this.apiData.jupTokenList.data}catch(n){return console.error(n),[]}}get chainTimeData(){var e;return(e=this._chainTime)==null?void 0:e.value}async chainTimeOffset(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.offset:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.offset)||0)}async currentBlockChainTime(){var e;return this._chainTime&&Date.now()-this._chainTime.fetched<=1e3*60*5?this._chainTime.value.chainTime:(await this.fetchChainTime(),((e=this._chainTime)==null?void 0:e.value.chainTime)||Date.now())}async fetchEpochInfo(){return this._epochInfo&&Date.now()-this._epochInfo.fetched<=1e3*30?this._epochInfo.value:(this._epochInfo={fetched:Date.now(),value:await this.connection.getEpochInfo()},this._epochInfo.value)}async fetchAvailabilityStatus(e){if(e)return{};try{let t=await this.api.fetchAvailabilityStatus(),n=t.all===!1;return this.availability={all:t.all,swap:n?!1:t.swap,createConcentratedPosition:n?!1:t.createConcentratedPosition,addConcentratedPosition:n?!1:t.addConcentratedPosition,addStandardPosition:n?!1:t.addStandardPosition,removeConcentratedPosition:n?!1:t.removeConcentratedPosition,removeStandardPosition:n?!1:t.removeStandardPosition,addFarm:n?!1:t.addFarm,removeFarm:n?!1:t.removeFarm},t}catch{return{}}}};export{Qo as Raydium};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=raydium.mjs.map