@raydium-io/raydium-sdk-v2 0.1.92-alpha → 0.1.93-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 (96) 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/{api-9d98bd04.d.ts → api-0eb57ba2.d.ts} +7 -7
  5. package/lib/common/accountInfo.d.ts +1 -1
  6. package/lib/common/bignumber.d.ts +1 -1
  7. package/lib/common/constant.d.ts +1 -1
  8. package/lib/common/fractionUtil.d.ts +1 -1
  9. package/lib/common/index.d.ts +1 -1
  10. package/lib/common/transfer.d.ts +1 -1
  11. package/lib/common/txTool/txTool.d.ts +1 -1
  12. package/lib/common/txTool/txUtils.d.ts +1 -1
  13. package/lib/common/utility.d.ts +1 -1
  14. package/lib/index.d.ts +3 -3
  15. package/lib/index.js +1 -1
  16. package/lib/index.js.map +1 -1
  17. package/lib/index.mjs +1 -1
  18. package/lib/index.mjs.map +1 -1
  19. package/lib/module/amount.d.ts +1 -1
  20. package/lib/module/fraction.d.ts +1 -1
  21. package/lib/module/index.d.ts +1 -1
  22. package/lib/module/percent.d.ts +1 -1
  23. package/lib/module/price.d.ts +1 -1
  24. package/lib/raydium/account/account.d.ts +3 -3
  25. package/lib/raydium/account/account.js +1 -1
  26. package/lib/raydium/account/account.js.map +1 -1
  27. package/lib/raydium/account/account.mjs +1 -1
  28. package/lib/raydium/account/account.mjs.map +1 -1
  29. package/lib/raydium/account/index.d.ts +1 -1
  30. package/lib/raydium/account/instruction.d.ts +1 -1
  31. package/lib/raydium/account/layout.d.ts +1 -1
  32. package/lib/raydium/account/types.d.ts +1 -1
  33. package/lib/raydium/account/util.d.ts +1 -1
  34. package/lib/raydium/clmm/clmm.d.ts +3 -3
  35. package/lib/raydium/clmm/index.d.ts +3 -3
  36. package/lib/raydium/clmm/instrument.d.ts +2 -2
  37. package/lib/raydium/clmm/layout.d.ts +2 -2
  38. package/lib/raydium/clmm/type.d.ts +2 -2
  39. package/lib/raydium/clmm/utils/math.d.ts +2 -2
  40. package/lib/raydium/clmm/utils/pool.d.ts +2 -2
  41. package/lib/raydium/clmm/utils/position.d.ts +2 -2
  42. package/lib/raydium/clmm/utils/tick.d.ts +2 -2
  43. package/lib/raydium/clmm/utils/tickQuery.d.ts +2 -2
  44. package/lib/raydium/clmm/utils/tickarrayBitmap.d.ts +2 -2
  45. package/lib/raydium/cpmm/cpmm.d.ts +3 -3
  46. package/lib/raydium/cpmm/curve/calculator.d.ts +1 -1
  47. package/lib/raydium/cpmm/curve/constantProduct.d.ts +1 -1
  48. package/lib/raydium/cpmm/index.d.ts +1 -1
  49. package/lib/raydium/cpmm/instruction.d.ts +1 -1
  50. package/lib/raydium/cpmm/type.d.ts +1 -1
  51. package/lib/raydium/farm/config.d.ts +1 -1
  52. package/lib/raydium/farm/farm.d.ts +3 -3
  53. package/lib/raydium/farm/index.d.ts +1 -1
  54. package/lib/raydium/farm/instruction.d.ts +1 -1
  55. package/lib/raydium/farm/layout.d.ts +1 -1
  56. package/lib/raydium/farm/type.d.ts +1 -1
  57. package/lib/raydium/farm/util.d.ts +1 -1
  58. package/lib/raydium/ido/ido.d.ts +3 -3
  59. package/lib/raydium/ido/index.d.ts +3 -3
  60. package/lib/raydium/ido/instruction.d.ts +1 -1
  61. package/lib/raydium/ido/type.d.ts +1 -1
  62. package/lib/raydium/index.d.ts +3 -3
  63. package/lib/raydium/index.js +1 -1
  64. package/lib/raydium/index.js.map +1 -1
  65. package/lib/raydium/index.mjs +1 -1
  66. package/lib/raydium/index.mjs.map +1 -1
  67. package/lib/raydium/liquidity/index.d.ts +1 -1
  68. package/lib/raydium/liquidity/instruction.d.ts +1 -1
  69. package/lib/raydium/liquidity/layout.d.ts +2 -2
  70. package/lib/raydium/liquidity/liquidity.d.ts +3 -3
  71. package/lib/raydium/liquidity/type.d.ts +1 -1
  72. package/lib/raydium/liquidity/utils.d.ts +1 -1
  73. package/lib/raydium/marketV2/createMarket.d.ts +3 -3
  74. package/lib/raydium/marketV2/index.d.ts +3 -3
  75. package/lib/raydium/moduleBase.d.ts +3 -3
  76. package/lib/raydium/raydium.d.ts +3 -3
  77. package/lib/raydium/raydium.js +1 -1
  78. package/lib/raydium/raydium.js.map +1 -1
  79. package/lib/raydium/raydium.mjs +1 -1
  80. package/lib/raydium/raydium.mjs.map +1 -1
  81. package/lib/raydium/token/constant.d.ts +1 -1
  82. package/lib/raydium/token/index.d.ts +1 -1
  83. package/lib/raydium/token/token.d.ts +3 -3
  84. package/lib/raydium/token/type.d.ts +1 -1
  85. package/lib/raydium/token/utils.d.ts +1 -1
  86. package/lib/raydium/tradeV2/index.d.ts +2 -2
  87. package/lib/raydium/tradeV2/instrument.d.ts +2 -2
  88. package/lib/raydium/tradeV2/trade.d.ts +3 -3
  89. package/lib/raydium/tradeV2/type.d.ts +2 -2
  90. package/lib/raydium/type.d.ts +1 -1
  91. package/lib/raydium/utils1216/index.d.ts +3 -3
  92. package/lib/raydium/utils1216/utils1216.d.ts +3 -3
  93. package/lib/{raydium-cfb7854f.d.ts → raydium-547ac6e6.d.ts} +4 -3
  94. package/lib/{type-351304d7.d.ts → type-3b522576.d.ts} +1 -1
  95. package/package.json +1 -1
  96. package/src/raydium/account/account.ts +10 -18
@@ -1,3 +1,3 @@
1
- var uc=Object.defineProperty,cc=Object.defineProperties;var lc=Object.getOwnPropertyDescriptors;var Xi=Object.getOwnPropertySymbols;var Os=Object.prototype.hasOwnProperty,Ms=Object.prototype.propertyIsEnumerable;var Ls=(r,e,t)=>e in r?uc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,O=(r,e)=>{for(var t in e||(e={}))Os.call(e,t)&&Ls(r,t,e[t]);if(Xi)for(var t of Xi(e))Ms.call(e,t)&&Ls(r,t,e[t]);return r},W=(r,e)=>cc(r,lc(e));var Ee=(r,e)=>{var t={};for(var n in r)Os.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Xi)for(var n of Xi(r))e.indexOf(n)<0&&Ms.call(r,n)&&(t[n]=r[n]);return t};import{merge as ip}from"lodash";import ka from"axios";import{PublicKey as vs}from"@solana/web3.js";import{get as Ns,set as mc}from"lodash";var or=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}},_s={},dc={};function ce(r){let e=Ns(_s,r);if(!e){let t=Ns(dc,r);e=new or({name:r,logLevel:t}),mc(_s,r,e)}return e}import{MINT_SIZE as pc,TOKEN_PROGRAM_ID as fc,getTransferFeeConfig as bc,unpackMint as yc}from"@solana/spl-token";var rr=ce("Raydium_accountInfo_util");async function Rt(r,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:o=100}=O({batchRequest:!1},t),s=sr(e,o),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=sr(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&rr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:b,owner:y,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&rr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:b,owner:new vs(y),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&rr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function qe(r,e,t){let n=await Rt(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>W(O({},i),{accountInfo:n[o]}))}async function Nn({connection:r,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await qe(r,e.map(c=>({pubkey:yt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<pc){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=yc(c.pubkey,c.accountInfo,(o=c.accountInfo)==null?void 0:o.owner);i[c.pubkey.toString()]=W(O({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||fc,feeConfig:(a=bc(u))!=null?a:void 0})}return i[vs.default.toBase58()]=i[H.toBase58()],i}import Xt from"bn.js";var _n=9e15,on=1e9,ar="0123456789abcdef",Qi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Yi="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ur={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-_n,maxE:_n,crypto:!1},Ds,Ut,re=!0,Hi="[DecimalError] ",nn=Hi+"Invalid argument: ",Ws=Hi+"Precision limit exceeded",qs=Hi+"crypto unavailable",Us="[object Decimal]",$e=Math.floor,Ue=Math.pow,gc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,wc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Ac=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Gs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Ot=1e7,ee=7,kc=9007199254740991,Pc=Qi.length-1,cr=Yi.length-1,V={toStringTag:Us};V.absoluteValue=V.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),$(r)};V.ceil=function(){return $(new this.constructor(this),this.e+1,2)};V.clampedTo=V.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(nn+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};V.comparedTo=V.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,c=o.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(o.e!==r.e)return o.e>r.e^c<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]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};V.cosine=V.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=hc(n,js(n,t)),n.precision=r,n.rounding=e,$(Ut==2||Ut==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};V.cubeRoot=V.cbrt=function(){var r,e,t,n,i,o,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(re=!1,o=l.s*Ue(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=Ye(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Ue(t,1/3),r=$e((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),Ye(a.d).slice(0,s)===(t=Ye(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&($(a,r+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,r+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,$(n,r,m.rounding,e)};V.decimalPlaces=V.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-$e(this.e/ee))*ee,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};V.dividedBy=V.div=function(r){return he(this,new this.constructor(r))};V.dividedToIntegerBy=V.divToInt=function(r){var e=this,t=e.constructor;return $(he(e,new t(r),0,1,1),t.precision,t.rounding)};V.equals=V.eq=function(r){return this.cmp(r)===0};V.floor=function(){return $(new this.constructor(this),this.e+1,3)};V.greaterThan=V.gt=function(r){return this.cmp(r)>0};V.greaterThanOrEqualTo=V.gte=function(r){var e=this.cmp(r);return e==1||e===0};V.hyperbolicCosine=V.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/$i(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=vn(s,1,o.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=o.times(o),o=a.minus(c.times(l.minus(c.times(l))));return $(o,s.precision=t,s.rounding=n,!0)};V.hyperbolicSine=V.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=vn(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/$i(5,r)),i=vn(o,2,i,i,!0);for(var s,a=new o(5),c=new o(16),u=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return o.precision=e,o.rounding=t,$(i,e,t,!0)};V.hyperbolicTangent=V.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};V.inverseCosine=V.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?Lt(t,i,o):new t(0):new t(NaN):e.isZero()?Lt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=Lt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};V.inverseHyperbolicCosine=V.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};V.inverseHyperbolicSine=V.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=r,n.rounding=e,t.ln())};V.inverseHyperbolicTangent=V.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?$(new o(i),r,e,!0):(o.precision=t=n-i.e,i=he(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};V.inverseSine=V.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=Lt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};V.inverseTangent=V.atan=function(){var r,e,t,n,i,o,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=cr)return s=Lt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=cr)return s=Lt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),i=u;r!==-1;)if(i=i.times(c),o=s.minus(i.div(n+=2)),i=i.times(c),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),re=!0,$(s,l.precision=m,l.rounding=d,!0)};V.isFinite=function(){return!!this.d};V.isInteger=V.isInt=function(){return!!this.d&&$e(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(r){return this.cmp(r)<0};V.lessThanOrEqualTo=V.lte=function(r){return this.cmp(r)<1};V.logarithm=V.log=function(r){var e,t,n,i,o,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(re=!1,a=m+p,s=tn(u,a),n=e?ji(l,a+10):tn(r,a),c=he(s,n,a,1),jn(c.d,i=m,d))do if(a+=10,s=tn(u,a),n=e?ji(l,a+10):tn(r,a),c=he(s,n,a,1),!o){+Ye(c.d).slice(i+1,i+15)+1==1e14&&(c=$(c,m+1,0));break}while(jn(c.d,i+=10,d));return re=!0,$(c,m,d)};V.minus=V.sub=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.constructor;if(r=new f(r),!p.d||!r.d)return!p.s||!r.s?r=new f(NaN):p.d?r.s=-r.s:r=new f(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new f(p);else return new f(c===3?-0:0);return re?$(r,a,c):r}if(t=$e(r.e/ee),l=$e(p.e/ee),u=u.slice(),o=l-t,o){for(m=o<0,m?(e=u,o=-o,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}o=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>o;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=Ot-1;--u[i],u[n]+=Ot}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Zi(u,t),re?$(r,a,c):r):new f(c===3?-0:0)};V.modulo=V.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=he(t,r.abs(),0,3,1),e.s*=r.s):e=he(t,r,0,n.modulo,1),e=e.times(r),re=!0,t.minus(e))};V.naturalExponential=V.exp=function(){return lr(this)};V.naturalLogarithm=V.ln=function(){return tn(this)};V.negated=V.neg=function(){var r=new this.constructor(this);return r.s=-r.s,$(r)};V.plus=V.add=function(r){var e,t,n,i,o,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),re?$(r,a,c):r;if(o=$e(m.e/ee),n=$e(r.e/ee),u=u.slice(),i=o-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=o,s=u.length),o=Math.ceil(a/ee),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Ot|0,u[i]%=Ot;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Zi(u,n),re?$(r,a,c):r};V.precision=V.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(nn+r);return t.d?(e=Xs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};V.round=function(){var r=this,e=r.constructor;return $(new e(r),r.e+1,e.rounding)};V.sine=V.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Ic(n,js(n,t)),n.precision=r,n.rounding=e,$(Ut>2?t.neg():t,r,e,!0)):new n(NaN)};V.squareRoot=V.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(re=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=Ye(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=$e((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(o=n,n=o.plus(he(s,o,t+2,1)).times(.5),Ye(o.d).slice(0,t)===(e=Ye(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&($(o,c+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,c+1,1),r=!n.times(n).eq(s));break}return re=!0,$(n,c,l.rounding,r)};V.tangent=V.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,$(Ut==2||Ut==4?t.neg():t,r,e,!0)):new n(NaN)};V.times=V.mul=function(r){var e,t,n,i,o,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=$e(l.e/ee)+$e(r.e/ee),c=d.length,u=p.length,c<u&&(o=d,d=p,p=o,s=c,c=u,u=s),o=[],s=c+u,n=s;n--;)o.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=o[i]+p[n]*d[i-n-1]+e,o[i--]=a%Ot|0,e=a/Ot|0;o[i]=(o[i]+e)%Ot|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=Zi(o,t),re?$(r,m.precision,m.rounding):r};V.toBinary=function(r,e){return dr(this,2,r,e)};V.toDecimalPlaces=V.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(lt(r,0,on),e===void 0?e=n.rounding:lt(e,0,8),$(t,r+t.e+1,e))};V.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=Dt(n,!0):(lt(r,0,on),e===void 0?e=i.rounding:lt(e,0,8),n=$(new i(n),r+1,e),t=Dt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=Dt(i):(lt(r,0,on),e===void 0?e=o.rounding:lt(e,0,8),n=$(new o(i),r+i.e+1,e),t=Dt(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};V.toFraction=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.d,b=p.constructor;if(!f)return new b(p);if(u=t=new b(1),n=c=new b(0),e=new b(n),o=e.e=Xs(f)-p.e-1,s=o%ee,e.d[0]=Ue(10,s<0?ee+s:s),r==null)r=o>0?e:u;else{if(a=new b(r),!a.isInt()||a.lt(u))throw Error(nn+a);r=a.gt(e)?o>0?e:u:a}for(re=!1,a=new b(Ye(f)),l=b.precision,b.precision=o=f.length*ee*2;m=he(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=he(r.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=he(u,n,o,1).minus(p).abs().cmp(he(c,t,o,1).minus(p).abs())<1?[u,n]:[c,t],b.precision=l,re=!0,d};V.toHexadecimal=V.toHex=function(r,e){return dr(this,16,r,e)};V.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:lt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(re=!1,t=he(t,r,0,e,1).times(r),re=!0,$(t)):(r.s=t.s,t=r),t};V.toNumber=function(){return+this};V.toOctal=function(r,e){return dr(this,8,r,e)};V.toPower=V.pow=function(r){var e,t,n,i,o,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Ue(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,o=c.rounding,r.eq(1))return $(a,n,o);if(e=$e(r.e/ee),e>=r.d.length-1&&(t=u<0?-u:u)<=kc)return i=zs(c,a,t,n),r.s<0?new c(1).div(i):$(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ue(+a,u),e=t==0||!isFinite(t)?$e(u*(Math.log("0."+Ye(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=lr(r.times(tn(a,n+t)),n),i.d&&(i=$(i,n+5,1),jn(i.d,n,o)&&(e=n+10,i=$(lr(r.times(tn(a,e+t)),e),e+5,1),+Ye(i.d).slice(n+1,n+15)+1==1e14&&(i=$(i,n+1,0)))),i.s=s,re=!0,c.rounding=o,$(i,n,o))};V.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=Dt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(lt(r,1,on),e===void 0?e=i.rounding:lt(e,0,8),n=$(new i(n),r,e),t=Dt(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toSignificantDigits=V.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(lt(r,1,on),e===void 0?e=n.rounding:lt(e,0,8)),$(new n(t),r,e)};V.toString=function(){var r=this,e=r.constructor,t=Dt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};V.truncated=V.trunc=function(){return $(new this.constructor(this),this.e+1,1)};V.valueOf=V.toJSON=function(){var r=this,e=r.constructor,t=Dt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function Ye(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=ee-n.length,t&&(o+=en(t)),o+=n;s=r[e],n=s+"",t=ee-n.length,t&&(o+=en(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function lt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(nn+r)}function jn(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=ee,i=0):(i=Math.ceil((e+1)/ee),e%=ee),o=Ue(10,ee-e),a=r[i]%o|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Ue(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Ue(10,e-3)-1,s}function zi(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=ar.indexOf(r.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 hc(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/$i(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=vn(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var he=function(){function r(n,i,o){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,c;if(o!=s)c=o>s?1:-1;else for(a=c=0;a<o;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,c){var u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C,x,K,v,R=n.constructor,G=n.s==i.s?1:-1,U=n.d,D=i.d;if(!U||!U[0]||!D||!D[0])return new R(!n.s||!i.s||(U?D&&U[0]==D[0]:!D)?NaN:U&&U[0]==0||!D?G*0:G/0);for(c?(p=1,l=n.e-i.e):(c=Ot,p=ee,l=$e(n.e/p)-$e(i.e/p)),K=D.length,C=U.length,g=new R(G),w=g.d=[],m=0;D[m]==(U[m]||0);m++);if(D[m]>(U[m]||0)&&l--,o==null?(h=o=R.precision,s=R.rounding):a?h=o+(n.e-i.e)+1:h=o,h<0)w.push(1),f=!0;else{if(h=h/p+2|0,m=0,K==1){for(d=0,D=D[0],h++;(m<C||d)&&h--;m++)S=d*c+(U[m]||0),w[m]=S/D|0,d=S%D|0;f=d||m<C}else{for(d=c/(D[0]+1)|0,d>1&&(D=r(D,d,c),U=r(U,d,c),K=D.length,C=U.length),I=K,k=U.slice(0,K),P=k.length;P<K;)k[P++]=0;v=D.slice(),v.unshift(0),x=D[0],D[1]>=c/2&&++x;do d=0,u=e(D,k,K,P),u<0?(B=k[0],K!=P&&(B=B*c+(k[1]||0)),d=B/x|0,d>1?(d>=c&&(d=c-1),b=r(D,d,c),y=b.length,P=k.length,u=e(b,k,y,P),u==1&&(d--,t(b,K<y?v:D,y,c))):(d==0&&(u=d=1),b=D.slice()),y=b.length,y<P&&b.unshift(0),t(k,b,P,c),u==-1&&(P=k.length,u=e(D,k,K,P),u<1&&(d++,t(k,K<P?v:D,P,c))),P=k.length):u===0&&(d++,k=[0]),w[m++]=d,u&&k[0]?k[P++]=U[I]||0:(k=[U[I]],P=1);while((I++<C||k[0]!==void 0)&&h--);f=k[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,Ds=f;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,$(g,a?o+g.e+1:o,s,f)}return g}}();function $(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=ee,s=e,l=m[d=0],c=l/Ue(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,o%=ee,s=o-ee+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=ee,s=o-ee+i,c=s<0?0:l/Ue(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ue(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(o>0?s>0?l/Ue(10,i-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Ue(10,(ee-e%ee)%ee),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ue(10,ee-o),m[d]=s>0?(l/Ue(10,i-s)%Ue(10,s)|0)*a:0),u)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==Ot&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Ot)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return re&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Dt(r,e,t){if(!r.isFinite())return Ys(r);var n,i=r.e,o=Ye(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+en(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+en(-i-1)+o,t&&(n=t-s)>0&&(o+=en(n))):i>=s?(o+=en(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+en(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=en(n))),o}function Zi(r,e){var t=r[0];for(e*=ee;t>=10;t/=10)e++;return e}function ji(r,e,t){if(e>Pc)throw re=!0,t&&(r.precision=t),Error(Ws);return $(new r(Qi),e,1,!0)}function Lt(r,e,t){if(e>cr)throw Error(Ws);return $(new r(Yi),e,t,!0)}function Xs(r){var e=r.length-1,t=e*ee+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function en(r){for(var e="";r--;)e+="0";return e}function zs(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/ee+4);for(re=!1;;){if(t%2&&(o=o.times(e),Es(o.d,s)&&(i=!0)),t=$e(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),Es(e.d,s)}return re=!0,o}function Vs(r){return r.d[r.d.length-1]&1}function Qs(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function lr(r,e){var t,n,i,o,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,f=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(re=!1,c=f):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Ue(2,m))/Math.LN10*2+5|0,c+=n,t=o=s=new d(1),d.precision=c;;){if(o=$(o.times(r),c,1),t=t.times(++l),a=s.plus(he(o,t,c,1)),Ye(a.d).slice(0,c)===Ye(s.d).slice(0,c)){for(i=m;i--;)s=$(s.times(s),c,1);if(e==null)if(u<3&&jn(s.d,c-n,p,u))d.precision=c+=10,t=o=a=new d(1),l=0,u++;else return $(s,d.precision=f,p,re=!0);else return d.precision=f,s}s=a}}function tn(r,e){var t,n,i,o,s,a,c,u,l,m,d,p=1,f=10,b=r,y=b.d,g=b.constructor,w=g.rounding,k=g.precision;if(b.s<0||!y||!y[0]||!b.e&&y[0]==1&&y.length==1)return new g(y&&!y[0]?-1/0:b.s!=1?NaN:y?0:b);if(e==null?(re=!1,l=k):l=e,g.precision=l+=f,t=Ye(y),n=t.charAt(0),Math.abs(o=b.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)b=b.times(r),t=Ye(b.d),n=t.charAt(0),p++;o=b.e,n>1?(b=new g("0."+t),o++):b=new g(n+"."+t.slice(1))}else return u=ji(g,l+2,k).times(o+""),b=tn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?$(b,k,w,re=!0):b;for(m=b,c=s=b=he(b.minus(1),b.plus(1),l,1),d=$(b.times(b),l,1),i=3;;){if(s=$(s.times(d),l,1),u=c.plus(he(s,new g(i),l,1)),Ye(u.d).slice(0,l)===Ye(c.d).slice(0,l))if(c=c.times(2),o!==0&&(c=c.plus(ji(g,l+2,k).times(o+""))),c=he(c,new g(p),l,1),e==null)if(jn(c.d,l-f,w,a))g.precision=l+=f,u=s=b=he(m.minus(1),m.plus(1),l,1),d=$(b.times(b),l,1),i=a=1;else return $(c,g.precision=k,w,re=!0);else return g.precision=k,c;c=u,i+=2}}function Ys(r){return String(r.s*r.s/0)}function mr(r,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,r.e=t=t-n-1,r.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=ee;n<i;)r.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),re&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function Tc(r,e){var t,n,i,o,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Gs.test(e))return mr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(wc.test(e))t=16,e=e.toLowerCase();else if(gc.test(e))t=2;else if(Ac.test(e))t=8;else throw Error(nn+e);for(o=e.search(/p/i),o>0?(c=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=zs(n,new n(t),o,o*2)),u=zi(e,t,Ot),l=u.length-1,o=l;u[o]===0;--o)u.pop();return o<0?new n(r.s*0):(r.e=Zi(u,l),r.d=u,re=!1,s&&(r=he(r,i,a*4)),c&&(r=r.times(Math.abs(c)<54?Ue(2,c):Hn.pow(2,c))),re=!0,r)}function Ic(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:vn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/$i(5,t)),e=vn(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function vn(r,e,t,n,i){var o,s,a,c,u=1,l=r.precision,m=Math.ceil(l/ee);for(re=!1,c=t.times(t),a=new r(n);;){if(s=he(a.times(c),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=he(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,u++}return re=!0,s.d.length=m+1,s}function $i(r,e){for(var t=r;--e;)t*=r;return t}function js(r,e){var t,n=e.s<0,i=Lt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return Ut=n?4:1,e;if(t=e.divToInt(i),t.isZero())Ut=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return Ut=Vs(t)?n?2:3:n?4:1,e;Ut=Vs(t)?n?1:4:n?3:2}return e.minus(i).abs()}function dr(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor,f=t!==void 0;if(f?(lt(t,1,on),n===void 0?n=p.rounding:lt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Ys(r);else{for(l=Dt(r),s=l.indexOf("."),f?(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=zi(Dt(d),10,i),d.e=d.d.length),m=zi(l,10,i),o=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(s<0?o--:(r=new p(r),r.d=m,r.e=o,r=he(r,d,t,n,0,i),m=r.d,o=r.e,u=Ds),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=ar.charAt(m[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=zi(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=ar.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>c)for(o-=c;o--;)l+="0";else o<c&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Es(r,e){if(r.length>e)return r.length=e,!0}function Bc(r){return new this(r).abs()}function xc(r){return new this(r).acos()}function Sc(r){return new this(r).acosh()}function Kc(r,e){return new this(r).plus(e)}function Cc(r){return new this(r).asin()}function Rc(r){return new this(r).asinh()}function Lc(r){return new this(r).atan()}function Oc(r){return new this(r).atanh()}function Mc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=Lt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?Lt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=Lt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(he(r,e,o,1)),e=Lt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(he(r,e,o,1)),t}function Nc(r){return new this(r).cbrt()}function _c(r){return $(r=new this(r),r.e+1,2)}function vc(r,e,t){return new this(r).clamp(e,t)}function Vc(r){if(!r||typeof r!="object")throw Error(Hi+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,on,"rounding",0,8,"toExpNeg",-_n,0,"toExpPos",0,_n,"maxE",0,_n,"minE",-_n,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=ur[t]),(n=r[t])!==void 0)if($e(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(nn+t+": "+n);if(t="crypto",i&&(this[t]=ur[t]),(n=r[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(qs);else this[t]=!1;else throw Error(nn+t+": "+n);return this}function Ec(r){return new this(r).cos()}function Fc(r){return new this(r).cosh()}function Hs(r){var e,t,n;function i(o){var s,a,c,u=this;if(!(u instanceof i))return new i(o);if(u.constructor=i,Fs(o)){u.s=o.s,re?!o.d||o.e>i.maxE?(u.e=NaN,u.d=null):o.e<i.minE?(u.e=0,u.d=[0]):(u.e=o.e,u.d=o.d.slice()):(u.e=o.e,u.d=o.d?o.d.slice():o.d);return}if(c=typeof o,c==="number"){if(o===0){u.s=1/o<0?-1:1,u.e=0,u.d=[0];return}if(o<0?(o=-o,u.s=-1):u.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;re?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[o]):(u.e=s,u.d=[o]);return}else if(o*0!==0){o||(u.s=NaN),u.e=NaN,u.d=null;return}return mr(u,o.toString())}else if(c!=="string")throw Error(nn+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),Gs.test(o)?mr(u,o):Tc(u,o)}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=Vc,i.clone=Hs,i.isDecimal=Fs,i.abs=Bc,i.acos=xc,i.acosh=Sc,i.add=Kc,i.asin=Cc,i.asinh=Rc,i.atan=Lc,i.atanh=Oc,i.atan2=Mc,i.cbrt=Nc,i.ceil=_c,i.clamp=vc,i.cos=Ec,i.cosh=Fc,i.div=Dc,i.exp=Wc,i.floor=qc,i.hypot=Uc,i.ln=Gc,i.log=Xc,i.log10=Qc,i.log2=zc,i.max=Yc,i.min=jc,i.mod=Hc,i.mul=Zc,i.pow=$c,i.random=Jc,i.round=el,i.sign=tl,i.sin=nl,i.sinh=il,i.sqrt=ol,i.sub=rl,i.sum=sl,i.tan=al,i.tanh=ul,i.trunc=cl,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return i.config(r),i}function Dc(r,e){return new this(r).div(e)}function Wc(r){return new this(r).exp()}function qc(r){return $(r=new this(r),r.e+1,3)}function Uc(){var r,e,t=new this(0);for(re=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function Fs(r){return r instanceof Hn||r&&r.toStringTag===Us||!1}function Gc(r){return new this(r).ln()}function Xc(r,e){return new this(r).log(e)}function zc(r){return new this(r).log(2)}function Qc(r){return new this(r).log(10)}function Yc(){return Qs(this,arguments,"lt")}function jc(){return Qs(this,arguments,"gt")}function Hc(r,e){return new this(r).mod(e)}function Zc(r,e){return new this(r).mul(e)}function $c(r,e){return new this(r).pow(e)}function Jc(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:lt(r,1,on),n=Math.ceil(r/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(qs);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=ee,n&&r&&(i=Ue(10,ee-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<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 el(r){return $(r=new this(r),r.e+1,this.rounding)}function tl(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function nl(r){return new this(r).sin()}function il(r){return new this(r).sinh()}function ol(r){return new this(r).sqrt()}function rl(r,e){return new this(r).sub(e)}function sl(){var r=0,e=arguments,t=new this(e[r]);for(re=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return re=!0,$(t,this.precision,this.rounding)}function al(r){return new this(r).tan()}function ul(r){return new this(r).tanh()}function cl(r){return $(r=new this(r),r.e+1,1)}V[Symbol.for("nodejs.util.inspect.custom")]=V.toString;V[Symbol.toStringTag]="Decimal";var Hn=V.constructor=Hs(ur);Qi=new Hn(Qi);Yi=new Hn(Yi);var M=Hn;import gl from"big.js";import to from"bn.js";import ll from"toformat";var ml=ll,Zn=ml;import eo from"big.js";import pl from"bn.js";import fl from"decimal.js-light";import $n from"bn.js";var Zs=9007199254740991;function Z(r){let e=ce("Raydium_parseBigNumberish");if(r instanceof $n)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new $n(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Zs||r<=-Zs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new $n(String(r))):typeof r=="bigint"?new $n(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new $n(0))}var Ji=ce("module/fraction"),pr=Zn(eo),Jn=Zn(fl),bl={[0]:Jn.ROUND_DOWN,[1]:Jn.ROUND_HALF_UP,[2]:Jn.ROUND_UP},yl={[0]:eo.roundDown,[1]:eo.roundHalfUp,[2]:eo.roundUp},fe=class{constructor(e,t=new pl(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)||Ji.logWithError(`${e} is not an integer.`),e<=0&&Ji.logWithError(`${e} is not positive.`),Jn.set({precision:e+1,rounding:bl[n]});let i=new Jn(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)||Ji.logWithError(`${e} is not an integer.`),e<0&&Ji.logWithError(`${e} is negative.`),pr.DP=e,pr.RM=yl[n]||1,new pr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var wl=ce("Raydium_amount"),$s=Zn(gl);function Al(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):wl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var ye=class extends fe{constructor(t,n,i=!0,o){let s=new to(0),a=fr.pow(new to(t.decimals));if(i)s=Z(n);else{let c=new to(0),u=new to(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Al(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(o||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,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 $s.DP=this.token.decimals,new $s(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as kl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Js}from"@solana/spl-token";var rn={chainId:101,address:kl.default.toBase58(),programId:Js.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},je={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Js.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Ar}from"@solana/web3.js";import{PublicKey as Se,SystemProgram as ea,SYSVAR_RENT_PUBKEY as Pl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hl}from"@solana/spl-token";function T({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var br=[T({pubkey:hl,isWritable:!1}),T({pubkey:ea.programId,isWritable:!1}),T({pubkey:Pl,isWritable:!1})];function yr({publicKey:r,transformSol:e}){let t=gr(r.toString());if(t instanceof Se)return e&&t.equals(Ge)?H:t;if(e&&t.toString()===Ge.toBase58())return H;if(typeof t=="string"){if(t===Se.default.toBase58())return Se.default;try{return new Se(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function gr(r){try{return new Se(r)}catch{return r}}var no=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),sn=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Se("SysvarRent111111111111111111111111111111111"),ta=new Se("SysvarC1ock11111111111111111111111111111111"),Gt=new Se("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Tl=new Se("Sysvar1nstructions1111111111111111111111111"),wr=ea.programId,zp=new Se("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Qp=new Se("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Yp=new Se("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),jp=new Se("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Hp=new Se("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Zp=new Se("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),$p=new Se("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Jp=new Se("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ef=new Se("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),tf=new Se("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),nf=new Se("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Se("So11111111111111111111111111111111111111112"),Ge=Se.default;function yt(r){return yr({publicKey:r,transformSol:!0})}var kr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===Ge.toBase58()||e instanceof Ar&&Ge.equals(e)){this.decimals=je.decimals,this.symbol=je.symbol,this.name=je.name,this.mint=new Ar(je.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=o?Ar.default:yr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ke=kr;Ke.WSOL=new kr(W(O({},je),{mint:je.address}));var Pr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},io=Pr;io.SOL=new Pr(rn);import Il from"bn.js";var na=new fe(new Il(100)),ze=class extends fe{toSignificant(e=5,t,n){return this.mul(na).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(na).toFixed(e,t,n)}};var Bl=ce("Raydium_price"),mt=class extends fe{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new fe(hr(n.decimals),hr(i.decimals))}get raw(){return new fe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Bl.logWithError("mul token not equals");let n=super.mul(t);return new mt({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 xl}from"@solana/web3.js";import Sl from"bn.js";function ia(r){return typeof r=="object"&&r!==null&&![Ke,ye,xl,fe,Sl,mt,ze].some(e=>typeof e=="object"&&r instanceof e)}function He(r){return typeof r=="string"?gr(r):Array.isArray(r)?r.map(e=>He(e)):ia(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,He(t)])):r}var dt=new Xt(0),oa=new Xt(1),$f=new Xt(2),Jf=new Xt(3),eb=new Xt(5),fr=new Xt(10),tb=new Xt(100),nb=new Xt(1e3),ib=new Xt(1e4);function hr(r){return fr.pow(Z(r))}function oo(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function sr(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var Mt=class{constructor(e){this._owner=e}get publicKey(){return Mt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Mt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Mt.isKeyPair(this._owner)}get isPublicKey(){return Mt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Mt.isKeyPair(e)}};import{PublicKey as Ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Nl}from"@solana/spl-token";import{ComputeBudgetProgram as ra,Keypair as aa,PublicKey as Kl,Transaction as ua,TransactionMessage as Cl,VersionedTransaction as ca}from"@solana/web3.js";var F={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",FarmV4Withdraw:"FarmV4Withdraw",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 Rl}from"@solana/spl-token";var sa=ce("Raydium_txUtil"),la=1644;function ro(r){let e=[],t=[];return r.microLamports&&(e.push(ra.setComputeUnitPrice({microLamports:r.microLamports})),t.push(F.SetComputeUnitPrice)),r.units&&(e.push(ra.setComputeUnitLimit({units:r.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Vn(r,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:i.blockhash}async function so(r,e){return r.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);r.onSignature(e,o=>{if(clearTimeout(i),!o.err){t("");return}n(o.err.toString())},"confirmed")})}function Tr(r,e){r.length<1&&sa.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&sa.logWithError(`no signers provided:, ${e.toString()}`);let t=new ua;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<la}catch{return!1}}function le(r,e){let[t,n]=Kl.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function ei({instructions:r,payer:e,signers:t}){return Tr(r,[e,...t])}function ti({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=aa.generate().publicKey.toString()}){let o=new Cl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ca(o).serialize()).toString("base64").length<la}catch{return!1}}var Ll=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),Ol=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof ca&&(e=Ll(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function gn(r){let e=[];return r.forEach(t=>{t instanceof ua&&(t.recentBlockhash||(t.recentBlockhash=Rl.toBase58()),t.feePayer||(t.feePayer=aa.generate().publicKey)),e.push(Ol(t))}),console.log("simulate tx string:",e),e}function ie(r,e,t){return le([r.toBuffer(),(t!=null?t:Nl).toBuffer(),e.toBuffer()],new Ml("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as se}from"@solana/web3.js";var ma=new se("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),da=new se("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),pa=new se("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ni=new se("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ib=new se("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),fa=new se("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ir=new se("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ao=new se("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bb=new se("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ba=new se("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),wn=new se("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ii=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),uo=new se("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),xb=new se("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ya=new se("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),_l=new se("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),vl=new se("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Vl=new se("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),El=new se("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),co=new se("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ga=new se("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sb=new se("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Fl=new se("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Dl=new se("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Wl=new se("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),lo=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ql=new se("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),mo=new se("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Ul=new se("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),oi={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:vl,IDO_PROGRAM_ID_V3:Vl,IDO_PROGRAM_ID_V4:El};var Kb={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:Fl,CREATE_CPMM_POOL_AUTH:Dl,CREATE_CPMM_POOL_FEE_ACC:Wl,FEE_DESTINATION_ID:new se("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:ql,LCOK_CPMM_AUTH:Ul};import Nt from"bn.js";var ri=1e4;function ge(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=W(O({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Nt(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===ri){let c=new Nt(o.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=an(r.mul(new Nt(ri)),new Nt(ri-o.transferFeeBasisPoints)),u=new Nt(o.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=an(l.mul(new Nt(o.transferFeeBasisPoints)),new Nt(ri)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=an(r.mul(new Nt(o.transferFeeBasisPoints)),new Nt(ri)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function _t(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function an(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Nt(0))?t.add(new Nt(1)):t}import{PublicKey as wa,AddressLookupTableAccount as po}from"@solana/web3.js";async function Br({connection:r,address:e}){let t=await Rt(r,[...new Set(e.map(i=>i.toString()))].map(i=>new wa(i))),n={};for(let i=0;i<e.length;i++){let o=t[i],s=e[i];if(!o)continue;let a=new po({key:s,state:po.deserialize(o.data)});n[s.toString()]=a,fo[s.toString()]=a}return n}var fo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new po({key:new wa("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:po.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 si,sendAndConfirmTransaction as xr,Transaction as ai,TransactionMessage as ui,VersionedTransaction as ci}from"@solana/web3.js";import Gl from"axios";var bo=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 Gl.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}=ro(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:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==si.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){var n;let t=new ai;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 u;let{recentBlockHash:o,skipPreflight:s=!0,sendAndConfirm:a}=i||{},c=o!=null?o:await Vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),gn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await xr(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 u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),o=t.filter(l=>l.transaction.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.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:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:b=!0}=l||{},y=f!=null?f:await Vn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let w=[],k=0;for(let P of s){if(++k,k<=p)continue;let B=await xr(this.connection,P,this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});w.push(B)}return{txIds:w,signedTxs:s}}return{txIds:await await Promise.all(s.map(async w=>(w.recentBlockhash=y,await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:b})))),signedTxs:s}}if(this.signAllTransactions){let w=s.map((P,B)=>(P.recentBlockhash=y,a[B].length&&P.sign(...a[B]),P));gn(w);let k=await this.signAllTransactions(w);if(m){let P=0,B=[],h=async()=>{if(!k[P])return;let S=await this.connection.sendRawTransaction(k[P].serialize(),{skipPreflight:b});B.push({txId:S,status:"sent",signedTx:k[P]}),d==null||d([...B]),P++,this.connection.onSignature(S,I=>{let C=B.findIndex(x=>x.txId===S);C>-1&&(B[C].status=I.err?"error":"success"),d==null||d([...B]),I.err||h()},"processed"),this.connection.getSignatureStatus(S)};return await h(),{txIds:B.map(S=>S.txId),signedTxs:k}}else{let P=[];for(let B=0;B<k.length;B+=1){let h=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:b});P.push(h)}return{txIds:P,signedTxs:k}}}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 b;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:o}=f,s=Ee(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=O(O({},this.cluster==="devnet"?{}:fo),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of c)a[y]===void 0&&u.push(new si(y));let l=await Br({connection:this.connection,address:u});for(let[y,g]of Object.entries(l))a[y]=g;let m=i?si.default.toBase58():o!=null?o:await Vn(this.connection,this.blockhashCommitment),d=new ui({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((b=this.owner)==null?void 0:b.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ci(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var k;let{skipPreflight:g=!0,sendAndConfirm:w}=y||{};if(gn([p]),(k=this.owner)!=null&&k.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});return w&&await so(this.connection,P),{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(l=>l.builder.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.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:c,buildProps:n,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(y=>y.message.recentBlockhash=p),gn(s),(b=this.owner)!=null&&b.isKeyPair){if(m){let y=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:f});await so(this.connection,w),y.push(w)}return{txIds:y,signedTxs:s}}return{txIds:await Promise.all(s.map(async y=>await this.connection.sendTransaction(y,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let y=await this.signAllTransactions(s);if(m){let g=0,w=[],k=async()=>{if(!y[g])return;let P=await this.connection.sendTransaction(y[g],{skipPreflight:f});w.push({txId:P,status:"sent",signedTx:y[g]}),d==null||d([...w]),g++,this.connection.onSignature(P,B=>{let h=w.findIndex(S=>S.txId===P);h>-1&&(w[h].status=B.err?"error":"success"),d==null||d([...w]),B.err||k()},"processed"),this.connection.getSignatureStatus(P)};return k(),{txIds:[],signedTxs:y}}else{let g=[];for(let w=0;w<y.length;w+=1){let k=await this.connection.sendTransaction(y[w],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:y}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,i=Ee(m,["splitIns","computeBudgetConfig"]),o=n?ro(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>W(O({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],b=n?[...o.instructions,...f]:f,g=[...new Set(f.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(w=>new si(w));if(p!==t[l]&&u.length<12&&(ei({instructions:b,payer:this.feePayer,signers:g})||ei({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,ei({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ai().add(...o.instructions,...u)):a.push(new ai().add(...u)),c.push(Array.from(new Set(u.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(w=>s[w]).filter(w=>w!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(b=>b.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(b=>s[b]).filter(b=>b!==void 0);ei({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(b=>b.publicKey)})?a.push(new ai().add(...o.instructions,...u)):a.push(new ai().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var P;let{sequentially:f,onTxUpdate:b,skipTxCount:y=0,recentBlockHash:g,skipPreflight:w=!0}=p||{},k=g!=null?g:await Vn(this.connection,this.blockhashCommitment);if(a.forEach(async(B,h)=>{B.recentBlockhash=k,c[h].length&&B.sign(...c[h])}),gn(a),(P=this.owner)!=null&&P.isKeyPair){if(f){let B=0,h=[];for(let S of a){if(++B,B<=y){h.push("tx skipped");continue}let I=await xr(this.connection,S,this.signers.find(C=>C.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:w});h.push(I)}return{txIds:h,signedTxs:a}}return{txIds:await Promise.all(a.map(async B=>await this.connection.sendRawTransaction(B.serialize(),{skipPreflight:w}))),signedTxs:a}}if(this.signAllTransactions){let B=await this.signAllTransactions(a.slice(y,a.length)),h=[...a.slice(0,y),...B];if(f){let S=0,I=[],C=async()=>{if(!h[S])return;S<y&&(I.push({txId:"",status:"success",signedTx:h[S]}),b==null||b([...I]),S++,C());let x=await this.connection.sendRawTransaction(h[S].serialize(),{skipPreflight:w});I.push({txId:x,status:"sent",signedTx:h[S]}),b==null||b([...I]),S++,this.connection.onSignature(x,K=>{let v=I.findIndex(R=>R.txId===x);v>-1&&(I[v].status=K.err?"error":"success"),b==null||b([...I]),K.err||C()},"processed"),this.connection.getSignatureStatus(x)};return await C(),{txIds:I.map(x=>x.txId),signedTxs:h}}else{let S=[];for(let I=0;I<h.length;I+=1){let C=await this.connection.sendRawTransaction(h[I].serialize(),{skipPreflight:w});S.push(C)}return{txIds:S,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let w=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:o=[]}=w,s=Ee(w,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=O(O({},this.cluster==="devnet"?{}:fo),i),c=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let P of c)a[P]===void 0&&u.push(new si(P));let l=await Br({connection:this.connection,address:u});for(let[P,B]of Object.entries(l))a[P]=B;let m=t?ro(t):{instructions:[],instructionTypes:[]},d=await Vn(this.connection,this.blockhashCommitment),p=this.signers.reduce((P,B)=>W(O({},P),{[B.publicKey.toBase58()]:B}),{}),f=[],b=[],y=[],g=0;if(this.allInstructions.forEach(P=>{let B=[...y,P],h=t?[...m.instructions,...B]:B;if(P!==n[g]&&y.length<12&&(ti({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})||ti({instructions:B,payer:this.feePayer,lookupTableAddressAccount:a})))y.push(P);else{if(y.length===0)throw Error("item ins too big");g+=P===n[g]?1:0;let S={};for(let I of[...new Set(c)])a[I]!==void 0&&(S[I]=a[I]);if(t&&ti({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let I=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new ci(I))}else{let I=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new ci(I))}b.push(Array.from(new Set(y.map(I=>I.keys.filter(C=>C.isSigner).map(C=>C.pubkey.toString())).flat())).map(I=>p[I]).filter(I=>I!==void 0)),y=[P]}}),y.length>0){let B=[...new Set(y.map(h=>h.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(h=>p[h]).filter(h=>h!==void 0);if(t&&ti({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let h=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new ci(h))}else{let h=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new ci(h))}b.push(B)}return(k=this.owner)!=null&&k.signer&&b.forEach(P=>{P.some(B=>B.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var x;let{sequentially:B,onTxUpdate:h,skipTxCount:S=0,recentBlockHash:I,skipPreflight:C=!0}=P||{};if(f.map(async(K,v)=>{b[v].length&&K.sign(b[v]),I&&(K.message.recentBlockhash=I)}),gn(f),(x=this.owner)!=null&&x.isKeyPair){if(B){let K=0,v=[];for(let R of f){if(++K,K<=S){console.log("skip tx: ",K),v.push("tx skipped");continue}let G=await this.connection.sendTransaction(R,{skipPreflight:C});await so(this.connection,G),v.push(G)}return{txIds:v,signedTxs:f}}return{txIds:await Promise.all(f.map(async K=>await this.connection.sendTransaction(K,{skipPreflight:C}))),signedTxs:f}}if(this.signAllTransactions){let K=await this.signAllTransactions(f.slice(S,f.length)),v=[...f.slice(0,S),...K];if(B){let R=0,G=[],U=async()=>{if(!v[R])return;if(R<S){G.push({txId:"",status:"success",signedTx:v[R]}),h==null||h([...G]),R++,U();return}let D=await this.connection.sendTransaction(v[R],{skipPreflight:C});G.push({txId:D,status:"sent",signedTx:v[R]}),h==null||h([...G]),R++,this.connection.onSignature(D,Pe=>{let it=G.findIndex(Ie=>Ie.txId===D);it>-1&&(G[it].status=Pe.err?"error":"success"),h==null||h([...G]),Pe.err||U()},"processed"),this.connection.getSignatureStatus(D)};return U(),{txIds:[],signedTxs:v}}else{let R=[];for(let G=0;G<v.length;G+=1){let U=await this.connection.sendTransaction(v[G],{skipPreflight:C});R.push(U)}return{txIds:R,signedTxs:v}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};var Fe={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"},dy=O({},Fe);var Aa="ray_tab_hash",Sr="ray_req_hash",Xl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Aa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Aa,r)),r},yo=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Ee(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(Sr)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(W(O({},t),{time:Date.now(),session:Xl()}));try{localStorage.setItem(Sr,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let c=JSON.stringify(t.data).substring(0,100);o[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Sr,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(c=>c())}return yo(W(O({},t),{logCount:r,removeLastLog:!0}))}};var go=ce("Raydium_Api"),Kr=new Map;var wo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=ka.create({baseURL:this.urlConfigs.BASE_HOST||Fe.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return go.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(go.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&yo({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),go.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&yo({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),go.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Fe.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Fe.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Fe.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ka.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Fe.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Fe.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Fe.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Fe.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Fe.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:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Fe.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Fe.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Kr.has(s)?(n.push(Kr.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Fe.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{Kr.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[c,u]=[t&&yt(t).toBase58(),n&&n!=="undefined"?yt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Fe.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Fe.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Fe.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Fe.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Fe.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Fe.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Fe.JITO})).data}};var Ao="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Pa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as xo,SystemProgram as km}from"@solana/web3.js";import{AccountLayout as Wn,createAssociatedTokenAccountInstruction as Fr,TOKEN_PROGRAM_ID as ln,TOKEN_2022_PROGRAM_ID as Pm}from"@solana/spl-token";var Cr=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ce=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ce(t)}createTxBuilder(e){return this.scope.checkOwner(),new bo({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(Cr(e))}logInfo(...e){this.logger.info(Cr(e))}logAndCreateError(...e){let t=Cr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as fm,SystemProgram as bm}from"@solana/web3.js";import ym from"bn.js";import{createCloseAccountInstruction as gm,createInitializeAccountInstruction as wm,createTransferInstruction as Am,TOKEN_PROGRAM_ID as Dn}from"@solana/spl-token";import{Keypair as lm,PublicKey as _a}from"@solana/web3.js";import mm from"bn.js";import{TOKEN_PROGRAM_ID as dm}from"@solana/spl-token";function zl(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Rr(r,...e){if(!zl(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Lr(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function ha(r,e){Rr(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Po=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),vt=(r,e)=>r<<32-e|r>>>e;var Yy=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ql(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Or(r){return typeof r=="string"&&(r=Ql(r)),Rr(r),r}var ko=class{clone(){return this._cloneInto()}},jy={}.toString;function Ta(r){let e=n=>r().update(Or(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Yl(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Ia=(r,e,t)=>r&e^~r&t,Ba=(r,e,t)=>r&e^r&t^e&t,ho=class extends ko{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=Po(this.buffer)}update(e){Lr(this);let{view:t,buffer:n,blockLen:i}=this;e=Or(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=Po(e);for(;i<=o-s;s+=i)this.process(c,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){Lr(this),ha(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=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;Yl(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=Po(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var jl=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]),un=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),cn=new Uint32Array(64),Mr=class extends ho{constructor(){super(64,32,8,!1),this.A=un[0]|0,this.B=un[1]|0,this.C=un[2]|0,this.D=un[3]|0,this.E=un[4]|0,this.F=un[5]|0,this.G=un[6]|0,this.H=un[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)cn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=cn[m-15],p=cn[m-2],f=vt(d,7)^vt(d,18)^d>>>3,b=vt(p,17)^vt(p,19)^p>>>10;cn[m]=b+cn[m-7]+f+cn[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=vt(a,6)^vt(a,11)^vt(a,25),p=l+d+Ia(a,c,u)+jl[m]+cn[m]|0,b=(vt(n,2)^vt(n,13)^vt(n,22))+Ba(n,i,o)|0;l=u,u=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+b|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,i,o,s,a,c,u,l)}roundClean(){cn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var xa=Ta(()=>new Mr);import{PublicKey as am}from"@solana/web3.js";import La,{isBN as Oa}from"bn.js";import{bits as Hl,BitStructure as og,blob as Zl,Blob as rg,cstr as sg,f32 as ag,f32be as ug,f64 as cg,f64be as lg,greedy as mg,Layout as $l,ns64 as dg,ns64be as pg,nu64 as Jl,nu64be as fg,offset as bg,s16 as yg,s16be as gg,s24 as wg,s24be as Ag,s32 as em,s32be as kg,s40 as Pg,s40be as hg,s48 as Tg,s48be as Ig,s8 as Bg,seq as tm,struct as xg,Structure as nm,u16 as im,u16be as Sg,u24 as Kg,u24be as Cg,u32 as om,u32be as Rg,u40 as Lg,u40be as Og,u48 as Mg,u48be as Ng,u8 as rm,UInt as sm,union as _g,Union as vg,unionLayoutDiscriminator as Vg,utf8 as Eg}from"@solana/buffer-layout";var To=$l,Sa=nm;var Nr=sm;var Ka=rm,zt=im;var _r=om;var Ca=Jl;var Be=em;var Ra=tm;var be=Zl;var vr=Hl;var An=class extends To{constructor(t,n,i){super(t,i);this.blob=be(t),this.signed=n}decode(t,n=0){let i=new La(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 La(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},Io=class extends To{constructor(t){super(8,t);this._lower=vr(_r(),!1),this._upper=vr(_r(),!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),o=this._upper.decode(t,n+this._lower.span);return O(O({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function X(r){return new Nr(1,r)}function Je(r){return new Nr(4,r)}function A(r){return new An(8,!1,r)}function J(r){return new An(16,!1,r)}function Ma(r){return new An(1,!0,r)}function En(r){return new An(8,!0,r)}function Na(r){return new An(16,!0,r)}var Bo=class extends To{constructor(t,n,i,o){super(t.span,o);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 L(r){return new Bo(be(32),e=>new am(e),e=>e.toBuffer(),r)}function Re(r){return new Bo(Ka(),um,cm,r)}function um(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function cm(r){return r?1:0}var Vr=class extends Sa{decode(e,t){return super.decode(e,t)}};function E(r,e,t){return new Vr(r,e,t)}function j(r,e,t){let n,i=typeof e=="number"?e:Oa(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Oa(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return Ra(r,i,t)}var Fn=E([L("mint"),L("owner"),A("amount"),Je("delegateOption"),L("delegate"),X("state"),Je("isNativeOption"),A("isNative"),A("delegatedAmount"),Je("closeAuthorityOption"),L("closeAuthority")]);var sw=ce("Raydium_Util");function va({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Fn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:o,mint:c,amount:u,isAssociated:ie(r,c,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:_a.default,amount:new mm(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Me({fromPublicKey:r,programId:e=dm,assignSeed:t}){let n=t?btoa(t).slice(0,32):lm.generate().publicKey.toBase58().slice(0,32);return{publicKey:pm(r,n,e),seed:n}}function pm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=xa(n);return new _a(i)}function Er(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Dn}=r;return wm(t,e,n,i)}function Qt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Dn}=r;return gm(e,t,i,n,o)}async function Yt(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Fn.span,n),c=Z(t).add(new ym(a)),u=Me({fromPublicKey:i,programId:Dn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[bm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Fn.span,programId:Dn}),Er({mint:new fm(je.address),tokenAccount:u.publicKey,owner:o,programId:Dn})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[Qt({tokenAccount:u.publicKey,payer:i,owner:o})]}}function Va({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Dn}){return Am(r,e,t,BigInt(String(n)),i,o)}var mi=class extends Ce{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i,notSubscribeAccountChange:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._notSubscribeAccountChange=o!=null?o:!1,this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}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 ie(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=O(O({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ln},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pm},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=va({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}async getCreatedTokenAccount({mint:t,programId:n=ln,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var b,y,g,w;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new xo(t.tokenProgram||ln),d=this.getAssociatedTokenAccount(n,new xo(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!o||k.pubkey.equals(d))).sort((k,P)=>k.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let k=Fr(s,d,s,n,m);if(u){let P=await this.scope.connection.getAccountInfo(d);if(P===null)(b=f.instructions)==null||b.push(k),f.instructionTypes.push(F.CreateATA);else if(!(P.owner.equals(m)&&Wn.decode(P.data).mint.equals(n)&&Wn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else f.instructions.push(k),f.instructionTypes.push(F.CreateATA);if(n.equals(H)&&i.amount){let P=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(y=i.amount)!=null?y:0,skipCloseAccount:c});f.instructions.push(...P.instructions||[]),f.endInstructions.push(...P.endInstructions||[]),f.instructionTypes.push(...P.instructionTypes||[]),f.endInstructionTypes.push(...P.endInstructionTypes||[]),i.amount&&(f.instructions.push(Va({source:P.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:ln})),f.instructionTypes.push(F.TransferAmount))}return c||(f.endInstructions.push(Qt({owner:s,payer:i.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(F.CloseAccount)),{account:d,instructionParams:f}}else{let k=Me({fromPublicKey:s,programId:m,assignSeed:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Wn.span),B=km.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:P+Number((w=(g=i.amount)==null?void 0:g.toString())!=null?w:0),space:Wn.span,programId:m});return f.instructions.push(B,Er({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(F.CreateAccount),f.instructionTypes.push(F.InitAccount),c||(f.endInstructions.push(Qt({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(F.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=ln,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let o=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let u=this.getAssociatedTokenAccount(t,n),l=await Fr(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],o=u}return i&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Qt({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=ln,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new xo(H).equals(o)){let p=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Fr(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let b=await this.scope.connection.getAccountInfo(d);if(b===null)p.push(f);else if(!(b.owner.equals(ln)&&Wn.decode(b.data).mint.equals(o)&&Wn.decode(b.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=ln,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new xo(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Ee(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Ee(m,["tokenAccount"]);c=d,u.addInstruction(p)}return O({tokenAccount:c},u.AllTxData)}};import{PublicKey as we,SystemProgram as Em}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Fm}from"@solana/spl-token";import{PublicKey as Da}from"@solana/web3.js";var Dr=E([X("instruction")]),Wr=E([X("instruction")]),hm=E([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),J("accRewardPerShare"),L("rewardVault"),L("rewardMint"),L("rewardSender"),A("rewardType"),j(A(),15,"padding")]),Tm=E([A("state"),A("nonce"),L("lpVault"),L("rewardVault"),L(),L(),A(),A(),A("totalReward"),J("perShareReward"),A("lastSlot"),A("perSlotReward")]),Im=E([A("state"),A("nonce"),L("lpVault"),L("rewardVaultA"),A("totalRewardA"),J("perShareRewardA"),A("perSlotRewardA"),X("option"),L("rewardVaultB"),be(7),A("totalRewardB"),J("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),L()]),Bm=E([A(),A("state"),A("nonce"),A("validRewardTokenNum"),J("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),L("lpMint"),L("lpVault"),j(hm,5,"rewardInfos"),L("creator"),L(),j(A(),32,"padding")]),xm=new Proxy(Tm,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return W(O({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),Sm=new Proxy(Im,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return W(O({},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(r,e,t)}}),So=new Proxy(Bm,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return W(O({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return W(O({},o),{rewardType:((s=Object.entries(mn).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),Km=E([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),qr=E([X("instruction"),A("nonce"),j(Km,5,"rewardTimeInfo")]),Ur=E([X("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Gr=E([X("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Ew=E([A("state"),L("id"),L("owner"),A("deposited"),j(A(),1,"rewardDebts")]),Xr=E([A("state"),L("id"),L("owner"),A("deposited"),j(J(),1,"rewardDebts"),A(""),A("voteLockedBalance"),j(A(),15)]),Fw=E([A("state"),L("id"),L("owner"),A("deposited"),j(A(),2,"rewardDebts")]),Ea=E([A("state"),L("id"),L("owner"),A("deposited"),j(J(),2,"rewardDebts"),j(A(),17)]),Fa=E([A(),A("state"),L("id"),L("owner"),A("deposited"),j(J(),5,"rewardDebts"),j(A(),16)]),gt=E([X("instruction"),A("amount")]),Cm=E([L("mint"),L("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),Ma("digitShift"),j(X(),7,"reserved1"),j(A(),7,"reserved2")]),Rm=E([be(8),L("governanceProgramId"),L("realm"),L("realmGoverningTokenMint"),L("realmAuthority"),j(X(),32,"reserved1"),j(Cm,4,"votingMints"),En("timeOffset"),X("bump"),j(X(),7,"reserved2"),j(A(),11,"reserved3")]),Lm=E([En("startTime"),En("endTime"),X("kind"),j(X(),15,"reserved")]),Om=E([j(Lm,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Re("isUsed"),Re("allowClawback"),X("votingMintConfigIdx"),j(X(),29,"reserved")]),Mm=E([be(8),L("voterAuthority"),L("registrar"),j(Om,32,"deposits"),X("voterBump"),X("voterWweightRecordBump"),j(X(),94,"reserved")]);var Qw=ce("Raydium_farm_config"),Wa=new Da("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),qa=new Da("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Ua={3:Xr,5:Ea,6:Fa},zr=r=>[3,4,5,6].indexOf(r)!==-1,Qr=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${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=o[e])==null?void 0:s.call(o)},mn={"Standard SPL":0,"Option tokens":1},Tt={[ma.toString()]:3,[da.toString()]:4,[pa.toString()]:5,[ni.toString()]:6};import{PublicKey as ue,SystemProgram as za,SYSVAR_CLOCK_PUBKEY as fi,SYSVAR_RENT_PUBKEY as vm,TransactionInstruction as Bt}from"@solana/web3.js";import Qa from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as BA,createAssociatedTokenAccountInstruction as xA,TOKEN_PROGRAM_ID as jt}from"@solana/spl-token";import Nm from"bn.js";var _m=ce("Raydium.farm.util");function di({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function It({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var Ga=({programId:r,poolId:e})=>le([e.toBuffer()],r);function Xa(r){return{isSet:new Nm(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(mn[r.rewardType])}}function Yr(r){return Z(r.endTime).sub(Z(r.openTime)).mul(Z(r.perSecond))}function pi(r){let e=Ua[r];return e||_m.logWithError("invalid version",r),e}var Vm=ce("Raydium_farm_instruction"),VA={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 bi(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||Vm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Dr.span);Dr.encode({instruction:s},a);let c=[T({pubkey:t}),T({pubkey:n}),T({pubkey:o,isWritable:!1}),T({pubkey:za.programId,isWritable:!1}),T({pubkey:vm,isWritable:!1})];return{instruction:new Bt({programId:i,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function Ya(r){var n;let e=Buffer.alloc(qr.span);qr.encode({instruction:0,nonce:new Qa(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...br,T({pubkey:r.farmId}),T({pubkey:r.farmAuthority,isWritable:!1}),T({pubkey:r.lpVault}),T({pubkey:r.lpMint,isWritable:!1}),T({pubkey:r.lockVault}),T({pubkey:r.lockMint,isWritable:!1}),T({pubkey:(n=r.lockUserAccount)!=null?n:Ge}),T({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(T({pubkey:i.rewardMint,isWritable:!1}),T({pubkey:i.rewardVault}),T({pubkey:i.userRewardToken}));return{instruction:new Bt({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function ja(r){let e=Buffer.alloc(Wr.span);Wr.encode({instruction:5},e);let t=[T({pubkey:jt,isWritable:!1}),T({pubkey:r.id}),T({pubkey:r.authority,isWritable:!1}),T({pubkey:r.lpVault,isWritable:!1}),T({pubkey:r.rewardVault}),T({pubkey:r.userRewardToken}),T({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Bt({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function jr({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(Ur.span);Ur.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},o);let s=[T({pubkey:jt,isWritable:!1}),T({pubkey:n.id}),T({pubkey:n.lpVault,isWritable:!1}),T({pubkey:e}),T({pubkey:t}),T({pubkey:r,isWritable:!1,isSigner:!0})];return new Bt({programId:n.programId,keys:s,data:o})}function Hr({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Gr.span);Gr.encode({instruction:4,isSet:new Qa(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(mn[i.rewardType])},o);let s=[...br,T({pubkey:t.id}),T({pubkey:t.authority,isWritable:!1}),T({pubkey:i.mint,isWritable:!1}),T({pubkey:n}),T({pubkey:e}),T({pubkey:r,isWritable:!1,isSigner:!0})];return new Bt({programId:t.programId,keys:s,data:o})}function yi(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ue(e.programId),new ue(e.id)],u=It({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(gt.span);gt.encode({instruction:2,amount:Z(s)},l);let m=[T({pubkey:jt,isWritable:!1}),T({pubkey:c}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:new ue(t.lpVault)}),T({pubkey:u}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new ue(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new Bt({programId:a,keys:m,data:l})}function gi(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(gt.span);gt.encode({instruction:12,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new ue(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function Ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=E([X("instruction"),A("amount")]),m=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:a[0]}),T({pubkey:o,isSigner:!0,isWritable:!1}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1}),T({pubkey:i[1]}),T({pubkey:new ue(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Bt({keys:m,programId:c,data:d})}function wi(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(gt.span);gt.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function Za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(gt.span);gt.encode({instruction:10,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function $a(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(gt.span);gt.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new ue(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function Ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ue(e.programId),new ue(e.id)],u=It({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(gt.span);gt.encode({instruction:1,amount:Z(s)},l);let m=[T({pubkey:jt,isWritable:!1}),T({pubkey:za.programId,isWritable:!1}),T({pubkey:c}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:new ue(t.lpVault)}),T({pubkey:u}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new ue(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new Bt({programId:a,keys:m,data:l})}var Ai=class extends Ce{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ge)){let n=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Yr(W(O({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=ni,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new we(e.lpMint.address),lockInfo:{lockMint:Wa,lockVault:qa},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Me({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(So.span);c.addInstruction({instructions:[Em.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:So.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ga({programId:new we(a.programId),poolId:l.publicKey}),f=di({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),b=[],y=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(mn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),b.push(Xa(B));let{rewardPubKey:h,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),h||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let I=B.mint.equals(Ge)?new we(je.address):B.mint;y.push({rewardMint:I,rewardVault:di({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&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:k,instructionType:P}=Ya({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:f,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:y,rewardInfoConfig:b,nonce:p});return c.addInstruction({instructions:[k],instructionTypes:[P]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:f,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var y;let o=Tt[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=He((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 c=t||this.scope.ownerPubKey,u=n.mint.equals(Ge)?new we(je.address):n.mint,l=a.rewardInfos.findIndex(g=>new we(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(y=m.vault)!=null?y:Ge,p=this.createTxBuilder(),{rewardPubKey:f,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return b&&p.addInstruction(b),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[jr({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:f,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let o=Tt[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=He((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 c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ge)?new we(je.address):m.mint,p=a.rewardInfos.findIndex(k=>new we(k.mint.address).equals(d)),f=s.rewardInfos[p];f||this.logAndCreateError("configuration does not exist","rewardMint",d);let b=(l=f.vault)!=null?l:Ge,{rewardPubKey:y,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=jr({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:y,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[w],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o}=e,s=Tt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=He((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=o!=null?o:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(Ge)?new we(je.address):i.mint,m=di({programId:new we(n.programId),poolId:new we(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[Hr({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o}=e,s=Tt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=He((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=o!=null?o:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ge)?new we(je.address):l.mint,d=di({programId:new we(n.programId),poolId:new we(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:l,payer:c});f&&u.addInstruction(f),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=Hr({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:W(O({},l),{mint:m})});u.addInstruction({instructions:[b],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=Tt[d];p===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),zr(p)||this.logAndCreateError("invalid farm program:",n.programId);let[f,b]=[new we(n.programId),new we(n.id)],y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=It({programId:f,poolId:b,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let k={};for(let R of this.scope.account.tokenAccounts)if(a){let G=ie(this.scope.ownerPubKey,R.mint,R.programId).publicKey;R.publicKey&&G.equals(R.publicKey)&&(k[R.mint.toString()]=R.publicKey)}else k[R.mint.toString()]=R.publicKey;let P=y.lpMint,B=k[P.address];B||this.logAndCreateError("you don't have any lp","lp zero",k);let h=[];for(let R of m){let G=s&&R.mint.address===H.toString(),U=k[R.mint.address];if(!U){let{account:D,instructionParams:Pe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new we(R.mint.address),notUseTokenAccount:G,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!G,associatedOnly:G?!1:a,checkCreateATAOwner:c});U=D,Pe&&w.addInstruction(Pe)}k[R.mint.address]=U,h.push(U)}let S,I=await this.scope.connection.getAccountInfo(g);if(I&&(S=pi(p).decode(I.data)),n.programId!==ni.toString()&&!S){let{instruction:R,instructionType:G}=bi({id:b,programId:f,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[R],instructionTypes:[G]})}let C=Qr({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:h});C&&this.logAndCreateError(C);let x={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:B,rewardAccounts:h,userAuxiliaryLedgers:u==null?void 0:u.map(R=>new we(R))},K=p===6?Ja(x):p===5?$a(x):Za(x),v={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return w.addInstruction({instructions:[K],instructionTypes:[v[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!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=Tt[n.programId];zr(p)||this.logAndCreateError("invalid farm program:",n.programId);let f=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder();b.addCustomComputeBudget(m);let y={};for(let C of this.scope.account.tokenAccounts)if(c){let x=ie(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(y[C.mint.toString()]=C.publicKey)}else y[C.mint.toString()]=C.publicKey;if(!o&&p!==4){let C=It({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)pi(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:K,instructionType:v}=bi({id:new we(f.id),programId:new we(f.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[K],instructionTypes:[v]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}else o&&o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});let g=f.lpMint.address,w=s&&g===H.toString(),k=y[g.toString()];if(!k){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.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:c,checkCreateATAOwner:u});k=C,x&&b.addInstruction(x)}y[g.toString()]=k;let P=[];for(let C of d){let x=s&&C.mint.address===H.toString(),K=y[C.mint.address];if(!K){let{account:v,instructionParams:R}=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:c,checkCreateATAOwner:u});K=v,R&&b.addInstruction(R)}y[C.mint.address]=K,P.push(K)}let B=Qr({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:P});B&&this.logAndCreateError(B);let h={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:f,lpAccount:k,rewardAccounts:P,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new we(C))},S=p===6?yi(h):p===5?gi(h):p===4?Ha(h):wi(h),I={3:F.FarmV3Withdraw,4:F.FarmV4Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return b.addInstruction({instructions:[S],instructionTypes:[I[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=He((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=Tt[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(f=>f.mint.address===Ge.toString()?new we(je.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ge,u=this.createTxBuilder(),l;if(t.equals(Ge)){let f=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Yr(W(O({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new M(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=f.addresses.newAccount,u.addInstruction(f)}else{let f=await this.scope.account.getCreatedTokenAccount({mint:t});f===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Fm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=f}let{instruction:m,instructionType:d}=ja({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let f of this.scope.account.tokenAccounts)if(o){let b=ie(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&b.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,b)=>W(O({},f),{[b.id]:b}),{});for(let f of Object.values(t)){let{programId:b,lpMint:y,rewardInfos:g,id:w}=f,k=Tt[b],P=y.address,B=n&&P===H.toString(),h=m[P];if(!h){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.programId,mint:new we(P),notUseTokenAccount:B,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:o,checkCreateATAOwner:s});h=v,R&&l.addInstruction(R)}m[P.toString()]=h;let S=[];for(let v of g){let R=n&&v.mint.address===H.toString(),G=m[v.mint.address];if(!G){let{account:U,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new we(v.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:o,checkCreateATAOwner:s});G=U,D&&l.addInstruction(D)}m[v.mint.address]=G,S.push(G)}let I=p[w],C={amount:dt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:I,lpAccount:h,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(v=>new we(v))},x=k===6?yi(C):k===5?gi(C):wi(C),K={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[K[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as De}from"@solana/web3.js";import{AccountLayout as xd,NATIVE_MINT as Wo,TOKEN_PROGRAM_ID as pn}from"@solana/spl-token";import{Keypair as Mo,PublicKey as q,SystemProgram as $t,TransactionInstruction as Ze}from"@solana/web3.js";import rs from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ki,TOKEN_2022_PROGRAM_ID as Le,TOKEN_PROGRAM_ID as Ae}from"@solana/spl-token";import jm from"bn.js";import xt from"bn.js";var Ne=new xt(0),wt=new xt(1),Ht=new xt(-1),At=new xt(1).shln(64),Ko=new xt(1).shln(128),Zr=At.sub(wt),ki=64,eu=Ko.subn(1),et=-443636,rt=-et,St=new xt("4295048016"),Kt=new xt("79226673521066979257578248091"),Co=new xt("4295048017"),Ro=new xt("79226673521066979257578248090"),tu=16,nu="59543866431248",iu="184467440737095516",ou="15793534762490258745",Lo=new xt(10).pow(new xt(6));var ru={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:[]},fk=new xt("18446744073700000000");import ae from"bn.js";function Oo(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function $r(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Jr(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Pi(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function su(r,e){return Pi(r,e)?null:$r(r,e)}function au(r,e){return Pi(r,e)?null:Jr(r,e)}var kk=Buffer.from("amm_config","utf8"),Dm=Buffer.from("pool","utf8"),Wm=Buffer.from("pool_vault","utf8"),qm=Buffer.from("pool_reward_vault","utf8"),uu=Buffer.from("position","utf8"),Um=Buffer.from("tick_array","utf8"),Gm=Buffer.from("operation","utf8"),Xm=Buffer.from("pool_tick_array_bitmap_extension","utf8"),zm=Buffer.from("observation","utf8");function cu(r,e,t,n){return le([Dm,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function es(r,e,t){return le([Wm,e.toBuffer(),t.toBuffer()],r)}function lu(r,e,t){return le([qm,e.toBuffer(),t.toBuffer()],r)}function me(r,e,t){return le([Um,e.toBuffer(),Oo(t)],r)}function Vt(r,e,t,n){return le([uu,e.toBuffer(),Oo(t),Oo(n)],r)}function st(r,e){return le([uu,e.toBuffer()],r)}function kn(r){return le([Buffer.from("metadata","utf8"),Gt.toBuffer(),r.toBuffer()],Gt)}function hi(r){return le([Gm],r)}function _e(r,e){return le([Xm,e.toBuffer()],r)}function mu(r,e){return le([zm,e.toBuffer()],r)}var du=Buffer.from("locked_position","utf8");function ts(r,e){return le([du,e.toBuffer()],r)}function Ti(r,e){return le([du,e.toBuffer()],r)}import{PublicKey as kt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as pu}from"@solana/spl-token";import xe from"bn.js";import Wt from"bn.js";var Ii=class{static getfeeGrowthInside(e,t,n){let i=new Wt(0),o=new Wt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Wt(0),a=new Wt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,At),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,At),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,At),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,At),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,At),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,At),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Wt(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 c=new Wt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Wt(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 c=new Wt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var y,g,w,k;let a=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=ne.getSqrtPriceX64FromTick(t.tickLower),u=ne.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=pe.getAmountsFromLiquidity(a,c,u,n,o),[d,p]=[ge(m.amountA,(y=e.mintA.extensions)==null?void 0:y.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,b]=[ge(new Wt(new M(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),ge(new Wt(new M(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:b,expirationTime:_t(d.expirationTime,p.expirationTime)}}};var Qm=15,de=class{static async getTickArrays(e,t,n,i,o,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(i,o),l=Y.getInitializedTickArrayInRange(s,a,o,u,Math.floor(Qm/2));for(let p=0;p<l.length;p++){let{publicKey:f}=me(t,n,l[p]);c.push(f)}let m=(await Rt(e,c)).map(p=>p!==null?Bi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=W(O({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.getNextTickArrayStartIndex(u,o,s),this.checkIsValidStartIndex(u,o))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,o){let s=Math.floor(e/de.tickCount(t)),a=n?Y.searchLowBitFromStart(i,o,s-1,1,t):Y.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=Xe-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a-1}}else{let a=0;for(;a<Xe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a+1}}let{publicKey:s}=me(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=Y.getTickArrayStartIndexByTick(i,o),c=Math.floor((i-a)/o),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Xe;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=me(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>rt)return!1;let n=Y.getTickArrayStartIndexByTick(et,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Xe*e}};var ns=14,Zt=class{static maxTickInTickarrayBitmap(e){return e*Xe*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 o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!de.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-de.tickCount(n):t+de.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Xe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=su(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(u),m=au(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-de.tickCount(n)}}}},xi=class{static getBitmapOffset(e,t){if(!de.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Zt.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=Zt.maxTickInTickarrayBitmap(e),n=-t;if(rt<=t)throw Error(`extensionTickBoundary check error: ${rt}, ${t}`);if(n<=et)throw Error(`extensionTickBoundary check error: ${n}, ${et}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=de.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=Zt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=Y.mergeTickArrayBitmap(e).shln(Pn-1-a),u=Pi(512,c)?null:$r(512,c);if(u!==null){let l=t-u*de.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=Pi(512,c)?null:Jr(512,c);if(u!==null){let l=t+u*de.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-de.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Zt.maxTickInTickarrayBitmap(t),i=Math.floor(n/de.tickCount(t));return e<0&&n!=0&&(i=Pn-i),i}};var Te=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:f,sqrtPriceX64:b,feeAmount:y}=hn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,o,s);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(Ht),remainingAccounts:c,executionPrice:b,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let b=this.preInitializedTickArrayStartIndex(e,s);if(b.isExist){let{publicKey:y}=me(e.programId,e.id,b.nextStartIndex);a.push(y)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=hn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Ht),u,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Te.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?xi.checkTickArrayIsInit(de.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=me(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,de.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=me(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/de.tickCount(e.tickSpacing)),i=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.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=de.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=Zt.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=xi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<et||t>rt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,c,u;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=W(O({},m),{perSecond:oe.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||i.eq(Ne)){s.push(p);continue}let f=new xe(Math.min(p.endTime.toNumber(),n)),b=f.sub(p.lastUpdateTime),y=oe.mulDivFloor(b,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(y),w=oe.mulDivFloor(b,p.emissionsPerSecondX64,At),k=p.rewardTotalEmissioned.add(w);s.push(W(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=Y.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=Zt.maxTickInTickarrayBitmap(e),n=-t;return t>rt&&(t=de.getArrayStartIndex(rt,e)+de.tickCount(e)),n<et&&(n=de.getArrayStartIndex(et,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!de.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/de.tickCount(t)*Pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await qe(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=bu.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=me(c.programId,c.id,m);o.push({pubkey:d}),i[d.toString()]=c.id}}let s=await qe(e,o,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Bi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=W(O({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(st(p,d).publicKey);let l=await Rt(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Si.decode(d.data),f=p.poolId.toString(),b=e.find(I=>I.state.id.toBase58()===f);if(b===void 0)continue;let y=b.state,g=Y._getTickPriceLegacy({poolInfo:y,tick:p.tickLower,baseIn:!0}),w=Y._getTickPriceLegacy({poolInfo:y,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:P}=pe.getAmountsFromLiquidity(y.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));b.positionAccount=[...(a=b.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:k,amountB:P,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(I=>W(O({},I),{pendingReward:new xe(0)})),leverage:B,tokenFeeAmountA:new xe(0),tokenFeeAmountB:new xe(0)}];let h=await Y.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickLower,b.state.tickSpacing),S=await Y.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickUpper,b.state.tickSpacing);m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=h,m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(o){let d=Object.values(m),p=await Rt(t,d,{batchRequest:i}),f={};for(let b=0;b<d.length;b++){let y=p[b];if(y===null)continue;let g=d[b].toString();f[g]=Bi.decode(y.data)}for(let{state:b,positionAccount:y}of e)if(!!y)for(let g of y){let w=`${b.programId.toString()}-${b.id.toString()}-${g.tickLower}`,k=`${b.programId.toString()}-${b.id.toString()}-${g.tickUpper}`,P=f[m[w].toString()],B=f[m[k].toString()],h=P.ticks[Y.getTickOffsetInArray(g.tickLower,b.tickSpacing)],S=B.ticks[Y.getTickOffsetInArray(g.tickUpper,b.tickSpacing)],{tokenFeeAmountA:I,tokenFeeAmountB:C}=await Ii.GetPositionFees(b,g,h,S),x=await Ii.GetPositionRewards(b,g,h,S);g.tokenFeeAmountA=I.gte(new xe(0))?I:new xe(0),g.tokenFeeAmountB=C.gte(new xe(0))?C:new xe(0);for(let K=0;K<x.length;K++)g.rewardInfos[K].pendingReward=x[K].gte(new xe(0))?x[K]:new xe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var v;let u,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 M(0))?u=l?St.add(new xe(1)):Kt.sub(new xe(1)):u=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(o,m,i,!1),{allTrade:f,expectedAmountOut:b,remainingAccounts:y,executionPrice:g,feeAmount:w}=Te.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((v=p.fee)!=null?v:Ne),u,c),k=ge(b,d,i,!1),P=ne.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?P:new M(1).div(P),h=b.mul(new xe(Math.floor((1-s)*1e10))).div(new xe(1e10)),S=ge(h,d,i,!1),I=l?e.currentPrice:new M(1).div(e.currentPrice),C=new M(B).sub(I).abs(),x=I,K=new ze(new M(C).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:S,expirationTime:_t(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:K,fee:w,remainingAccounts:y,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ke(W(O({},u),{mint:u.address,isToken2022:u.programId===pu.toBase58()})),new Ke(W(O({},l),{mint:l.address,isToken2022:l.programId===pu.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:b,minAmountOut:y,expirationTime:g,currentPrice:w,executionPrice:k,priceImpact:P,fee:B,remainingAccounts:h,executionPriceX64:S}=Te.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(u.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),I=W(O({},f),{amount:new ye(m,f.amount),fee:f.fee===void 0?void 0:new ye(m,f.fee)}),C=W(O({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),x=W(O({},y),{amount:new ye(d,y.amount),fee:y.fee===void 0?void 0:new ye(d,y.fee)}),K=new mt({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:w.mul(new M(10**(20+d.decimals))).toFixed(0)}),v=new mt({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:k.mul(new M(10**(20+d.decimals))).toFixed(0)}),R=new ye(m,B);return{allTrade:p,realAmountIn:I,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:K,executionPrice:v,priceImpact:P,fee:R,remainingAccounts:h,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:o,slippage:s,priceLimit:a=new M(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Kt.sub(new xe(1)):St.add(new xe(1)):l=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(o,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:b}=Te.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:Ne),l),y=c?e.mintB.address:e.mintA.address,g=ge(d,u[y],i,!1),w=ne.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?w:new M(1).div(w),P=d.mul(new xe(Math.floor((1+s)*1e10))).div(new xe(1e10)),B=ge(P,u[y],i,!0),h=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(k).sub(h).abs(),I=h,C=new ze(new M(S).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:B,realAmountOut:m,expirationTime:_t(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:C,fee:b,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,b,y;let o=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-c,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[((f=o.rewardApr[0])!=null?f:0)*p,((b=o.rewardApr[1])!=null?b:0)*p,((y=o.rewardApr[2])!=null?y:0)*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[yt(e.mintA.address).toString()],d=i[yt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let b=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),y=ne.getSqrtPriceX64FromTick(s),g=ne.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:k}=pe.getAmountsFromLiquidityWithSlippage(b,y,g,t,!1,!1,0),{amountSlippageA:P,amountSlippageB:B}=pe.getAmountsFromLiquidityWithSlippage(b,y,g,o,!1,!1,0),h=new M(w.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(k.toString()).div(new M(10).pow(f)).mul(d.value)),S=new M(P.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(B.toString()).div(new M(10).pow(f)).mul(d.value)),I=new M(1).div(h.add(S)),x=new M(l.volumeFee).mul(365).div(u).mul(I).mul(100).toNumber(),K=3600*24*365,v=e.rewardDefaultInfos.map(R=>{var D,Pe;let G=R.mint.decimals,U=i[R.mint.address];return c<((D=R.startTime)!=null?D:0)||c>((Pe=R.endTime)!=null?Pe:0)||!R.perSecond||!U||G===void 0?0:new M(U.value).mul(new M(R.perSecond).mul(K)).div(new M(10).pow(G)).mul(I).mul(100).toNumber()});return{feeApr:x,rewardsApr:v,apr:x+v.reduce((R,G)=>R+G,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=ne.getSqrtPriceX64FromTick(n),d=ne.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,f=ge(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),b=new xe(new M(f.amount.sub((w=f.fee)!=null?w:Ne).toString()).mul(p).toFixed(0)),y;if(l.lte(m))y=t?pe.getLiquidityFromTokenAmountA(m,d,b,!a):new xe(0);else if(l.lte(d)){let k=pe.getLiquidityFromTokenAmountA(l,d,b,!a),P=pe.getLiquidityFromTokenAmountB(m,l,b);y=t?k:P}else y=t?new xe(0):pe.getLiquidityFromTokenAmountB(m,d,b);return Te.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:y,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var y,g,w,k;let c=ne.getSqrtPriceX64FromTick(n),u=ne.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(ne.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,o,a),[d,p]=[ge(m.amountA,(y=t.mintA.extensions)==null?void 0:y.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,b]=[ge(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),ge(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:b,expirationTime:_t(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new kt(c.id));(await Rt(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=Tn.decode(c.data))});let s=t.map(c=>_e(new kt(c.programId),new kt(c.id)).publicKey),a=await Te.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>W(O({},c),{[u.id]:W(O({},n[u.id]),{id:new kt(u.id),version:6,programId:new kt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:W(O({},u.config),{id:new kt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:_e(new kt(u.programId),new kt(u.id)).publicKey,exBitmapInfo:a[_e(new kt(u.programId),new kt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.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 is={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function fu(r){return W(O({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:is,week:is,month:is,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:W(O({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var oe=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(Ne)||(o=o.add(wt)),o}static mulDivFloor(e,t,n){if(n.eq(Ne))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Ne))throw new Error("division by 0");return e.mul(t).add(n.sub(wt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ae(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ko).sub(t).mod(Ko)}};function Qe(r,e){return os(r.mul(e),64,256)}function Ym(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function os(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ne=class{static sqrtPriceX64ToPrice(e,t,n){return oe.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return oe.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(Ne))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ne))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(Ne))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ne))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(Ne))return e;let o=t.shln(ki);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?oe.mulDivCeil(s,e,a):oe.mulDivRoundingUp(s,wt,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return oe.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(ki);if(i)return e.add(o.div(t));{let s=oe.mulDivRoundingUp(o,wt,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<et||e>rt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ae("18445821805675395072"):new ae("18446744073709551616");return(t&2)!=0&&(n=Qe(n,new ae("18444899583751176192"))),(t&4)!=0&&(n=Qe(n,new ae("18443055278223355904"))),(t&8)!=0&&(n=Qe(n,new ae("18439367220385607680"))),(t&16)!=0&&(n=Qe(n,new ae("18431993317065453568"))),(t&32)!=0&&(n=Qe(n,new ae("18417254355718170624"))),(t&64)!=0&&(n=Qe(n,new ae("18387811781193609216"))),(t&128)!=0&&(n=Qe(n,new ae("18329067761203558400"))),(t&256)!=0&&(n=Qe(n,new ae("18212142134806163456"))),(t&512)!=0&&(n=Qe(n,new ae("17980523815641700352"))),(t&1024)!=0&&(n=Qe(n,new ae("17526086738831433728"))),(t&2048)!=0&&(n=Qe(n,new ae("16651378430235570176"))),(t&4096)!=0&&(n=Qe(n,new ae("15030750278694412288"))),(t&8192)!=0&&(n=Qe(n,new ae("12247334978884435968"))),(t&16384)!=0&&(n=Qe(n,new ae("8131365268886854656"))),(t&32768)!=0&&(n=Qe(n,new ae("3584323654725218816"))),(t&65536)!=0&&(n=Qe(n,new ae("696457651848324352"))),(t&131072)!=0&&(n=Qe(n,new ae("26294789957507116"))),(t&262144)!=0&&(n=Qe(n,new ae("37481735321082"))),e>0&&(n=eu.div(n)),n}static getTickFromPrice(e,t,n){return ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Kt)||e.lt(St))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ae(t-64),i=Ym(n,32,128),o=new ae("8000000000000000","hex"),s=0,a=new ae(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new ae(0))&&s<tu;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(o.mul(f)),o=o.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new ae(nu)),d=os(m.sub(new ae(iu)),64,128).toNumber(),p=os(m.add(new ae(ou)),64,128).toNumber();return d==p?d:ne.getSqrtPriceX64FromTick(p).lte(e)?p:d}},In=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 o=In.getTickWithPriceAndTickspacing(e,t,n,i),s=ne.getSqrtPriceX64FromTick(o);return ne.sqrtPriceX64ToPrice(s,n,i)}},pe=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(Ne))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(ki),s=t.sub(e);return i?oe.mulDivRoundingUp(oe.mulDivCeil(o,s,t),wt,e):oe.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Ne))throw new Error("sqrtPriceX64A must greater than 0");return i?oe.mulDivCeil(n,t.sub(e),At):oe.mulDivFloor(n,t.sub(e),At)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?oe.mulDivRoundingUp(a,wt,Zr):a.shrn(ki)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),oe.mulDivFloor(n,Zr,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,i,!1),a=pe.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new ae(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,i,o),a=pe.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new ae(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new ae(new M(c.toString()).mul(l).toFixed(0)),d=new ae(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:c}){var w,k,P,B;let u=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=ne.getSqrtPriceX64FromTick(t),m=ne.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=pe.getAmountsFromLiquidity(u,l,m,i,s),[f,b]=[ge(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),ge(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[y,g]=[ge(new ae(new M(p.amountA.toString()).mul(d).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),ge(new ae(new M(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:b,amountSlippageA:y,amountSlippageB:g,expirationTime:_t(f.expirationTime,b.expirationTime)}}},hn=class{static swapCompute(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b=!1){if(d.eq(Ne))throw new Error("amountSpecified must not be 0");if(f||(f=s?St.add(wt):Kt.sub(wt)),s){if(f.lt(St))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(Kt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let y=d.gt(Ne),g={amountSpecifiedRemaining:d,amountCalculated:Ne,sqrtPriceX64:m,tick:u>p?Math.min(p+de.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ae(0)},w=p,k=n[p],P=0,B=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Ne)&&!g.sqrtPriceX64.eq(f);){P>10;let h={};h.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(k,g.tick,l,s,B),I=S||null,C=null;if(!(I!=null&&I.liquidityGross.gtn(0))){let K=Te.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},w,s);if(!K.isExist){if(b)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=K.nextStartIndex;let{publicKey:v}=me(e,t,w);C=v,k=n[w];try{I=Y.firstInitializedTick(k,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<et?h.tickNext=et:h.tickNext>rt&&(h.tickNext=rt),h.sqrtPriceNextX64=ne.getSqrtPriceX64FromTick(h.tickNext);let x;if(s&&h.sqrtPriceNextX64.lt(f)||!s&&h.sqrtPriceNextX64.gt(f)?x=f:x=h.sqrtPriceNextX64,[g.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=hn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(h.feeAmount),y?(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 K=I.liquidityNet;s&&(K=K.mul(Ht)),g.liquidity=pe.addDelta(g.liquidity,K)}B=h.tickNext!=g.tick&&!s&&k.startTickIndex===h.tickNext,g.tick=s?h.tickNext-1:h.tickNext}else if(g.sqrtPriceX64!=h.sqrtPriceStartX64){let K=ne.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=K!=g.tick&&!s&&k.startTickIndex===K,g.tick=K}++P}try{let{nextStartIndex:h,isExist:S}=de.nextInitializedTickArray(g.tick,l,s,i,o);S&&p!==h&&(g.accounts.push(me(e,t,h).publicKey),p=h)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Ne,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,o){let s={sqrtPriceX64Next:new ae(0),amountIn:new ae(0),amountOut:new ae(0),feeAmount:new ae(0)},a=e.gte(t),c=i.gte(Ne);if(c){let l=oe.mulDivFloor(i,Lo.sub(new ae(o.toString())),Lo);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Ht).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromOutput(e,n,i.mul(Ht),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(i.mul(Ht))&&(s.amountOut=i.mul(Ht)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=oe.mulDivCeil(s.amountIn,new ae(o),Lo.sub(new ae(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Xe=60,Pn=512,Y=class{static getTickArrayAddressByTick(e,t,n,i){let o=Y.getTickArrayStartIndexByTick(n,i),{publicKey:s}=me(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Xe)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=de.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)*de.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Xe,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Xe,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Xe:e+t*Xe}static mergeTickArrayBitmap(e){let t=new jm(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,o){let s=Math.floor(i/(n*Xe));return[...Y.searchLowBitFromStart(e,t,s-1,o,n),...Y.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,Pn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,i,o);for(let c of a){let{publicKey:u}=me(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=de.tickCount(o);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=de.tickCount(o);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<et||e>rt}static nextInitTick(e,t,n,i,o){if(de.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(o||(a=a+1);a<Xe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Xe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Xe;){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),o=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),o=In.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(o),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ne.getSqrtPriceX64FromTick(t),o=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),o=In.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(o),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new M(1).div(a)}}};var yu=E([be(8),X("bump"),zt("index"),L(""),Je("protocolFeeRate"),Je("tradeFeeRate"),zt("tickSpacing"),j(A(),8,"")]),Hm=E([Je("blockTimestamp"),En("tickCumulative"),j(A(),4)]),gu=E([be(8),Re("initialized"),A("recentEpoch"),zt("observationIndex"),L("poolId"),j(Hm,100,"observations"),j(A(),4)]),Zm=E([X("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),J("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),L("tokenMint"),L("tokenVault"),L("creator"),J("rewardGrowthGlobalX64")]),Tn=E([be(8),X("bump"),L("ammConfig"),L("creator"),L("mintA"),L("mintB"),L("vaultA"),L("vaultB"),L("observationId"),X("mintDecimalsA"),X("mintDecimalsB"),zt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Be("tickCurrent"),Je(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),X("status"),j(X(),7,""),j(Zm,3,"rewardInfos"),j(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),j(A(),15*4-3,"padding")]),$m=E([J("growthInsideLastX64"),A("rewardAmountOwed")]),Si=E([be(8),X("bump"),L("nftMint"),L("poolId"),Be("tickLower"),Be("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j($m,3,"rewardInfos"),j(A(),8,"")]),KP=E([be(8),X("bump"),L("poolId"),Be("tickLowerIndex"),Be("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(J(),3,"rewardGrowthInside"),j(A(),8,"")]),Jm=E([Be("tick"),Na("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),j(J(),3,"rewardGrowthsOutsideX64"),j(Je(),13,"")]),Bi=E([be(8),L("poolId"),Be("startTickIndex"),j(Jm,Xe,"ticks"),X("initializedTickCount"),j(X(),115,"")]),wu=E([be(329),j(L(),100,"whitelistMints")]),bu=E([be(8),L("poolId"),j(j(A(),8),ns,"positiveTickArrayBitmap"),j(j(A(),8),ns,"negativeTickArrayBitmap")]),CP=E([A(),X("bump"),L("owner"),L("poolId"),L("positionId"),L("nftAccount"),j(A(),8)]),RP=E([be(8),X("bump"),L("lockOwner"),L("poolId"),L("positionId"),L("nftAccount"),L("lockNftMint"),A("recentEpoch"),j(A(),8)]);gu.span;var Au=ce("Raydium_Clmm"),Pt={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],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],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]},ku=[188,37,179,131,82,150,84,73],Pu=[16,72,250,198,14,162,212,19],ke=class{static createPoolInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([J("sqrtPriceX64"),A("startTime")]),y=[{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:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);b.encode({sqrtPriceX64:p,startTime:f},g);let w=Buffer.from([...Pt.createPool,...g]);return new Ze({keys:y,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:o,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new q(i.address),new q(o.address)],{publicKey:m}=cu(t,s,u,l),{publicKey:d}=mu(t,m),{publicKey:p}=es(t,m,u),{publicKey:f}=es(t,m,l),b=_e(t,m).publicKey,y=[this.createPoolInstruction(t,m,n,s,d,u,p,new q(i.programId||Ae),l,f,new q(o.programId||Ae),b,a,c)];return{signers:[],instructions:y,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:b,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C,x){let K=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),v=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Gt,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...v],G=Buffer.alloc(K.span);K.encode({tickLowerIndex:w,tickUpperIndex:k,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:B,liquidity:h,amountMaxA:S,amountMaxB:I,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},G);let U=Buffer.from([...Pt.openPosition,...G]);return new Ze({keys:R,programId:e,data:U})}static openPositionFromLiquidityInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C){let x=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:P,liquidity:B,amountMaxA:h,amountMaxB:S,withMetadata:I==="create",baseFlag:!1,optionBaseFlag:0},R);let G=Buffer.from([...Pt.openPositionWithTokenEx,...R]);return new Ze({keys:v,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new q(e.programId),new q(e.id)],b;if(l)b=new q((await l(1))[0]);else{let C=Mo.generate();d.push(C),b=C.publicKey}let y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:w}=me(p,f,y),{publicKey:k}=me(p,f,g),{publicKey:P}=m?ie(n.wallet,b,Le):ie(n.wallet,b,Ae),{publicKey:B}=kn(b),{publicKey:h}=st(p,b),{publicKey:S}=Vt(p,f,i,o),I=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,b,P,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,b,P,B,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0);return{signers:d,instructions:[I],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:B,personalPosition:h,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new q(e.programId),new q(e.id)],b;if(l)b=new q((await l(1))[0]);else{let C=Mo.generate();d.push(C),b=C.publicKey}let y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:w}=me(p,f,y),{publicKey:k}=me(p,f,g),{publicKey:P}=m?ie(n.wallet,b,Le):ie(n.wallet,b,Ae),{publicKey:B}=kn(b),{publicKey:h}=st(p,b),{publicKey:S}=Vt(p,f,i,o),I=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,b,P,S,w,k,h,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,o,y,g,u,s,a,c,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,b,P,B,S,w,k,h,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,o,y,g,u,s,a,c,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:B,personalPosition:h,protocolPosition:S},instructions:[I],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C,x){let K=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),v=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Gt,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...v],G=Buffer.alloc(K.span);K.encode({tickLowerIndex:w,tickUpperIndex:k,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:B,liquidity:new rs(0),amountMaxA:S==="MintA"?I:C,amountMaxB:S==="MintA"?C:I,withMetadata:h==="create",baseFlag:S==="MintA",optionBaseFlag:1},G);let U=Buffer.from([...Pt.openPosition,...G]);return new Ze({keys:R,programId:e,data:U})}static openPositionFromBaseInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C){let x=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:P,liquidity:new rs(0),amountMaxA:h==="MintA"?S:I,amountMaxB:h==="MintA"?I:S,withMetadata:B==="create",baseFlag:h==="MintA",optionBaseFlag:1},R);let G=Buffer.from([...Pt.openPositionWithTokenEx,...R]);return new Ze({keys:v,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new q((await l(1))[0]);else{let C=Mo.generate();p.push(C),d=C.publicKey}let[f,b]=[new q(e.programId),new q(e.id)],y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:w}=me(f,b,y),{publicKey:k}=me(f,b,g),{publicKey:P}=m?ie(n.wallet,d,Le):ie(n.wallet,d,Ae),{publicKey:B}=kn(d),{publicKey:h}=st(f,d),{publicKey:S}=Vt(f,b,i,o),I=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,b,n.wallet,d,P,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(f,b).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,b,n.wallet,d,P,B,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(f,b).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:B,personalPosition:h,protocolPosition:S},instructions:[I],signers:p,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o,s){let a=E([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:s?Le:Ae,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Pt.closePosition,...u]);return new Ze({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:o}){let s=new q(e.programId),a=o?ie(n.wallet,i.nftMint,Le).publicKey:ie(n.wallet,i.nftMint,Ae).publicKey,{publicKey:c}=st(s,i.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,i.nftMint,a,c,o)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w){let k=E([J("liquidity"),A("amountMaxA"),A("amountMaxB"),X("optionBaseFlag"),Re("baseFlag")]),P=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...P],h=Buffer.alloc(k.span);k.encode({liquidity:b,amountMaxA:y,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},h);let S=Buffer.from([...Pt.increaseLiquidity,...h]);return new Ze({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new q(e.programId),new q(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=me(u,l,m),{publicKey:f}=me(u,l,d),{publicKey:b}=c?ie(i.wallet,n.nftMint,Le):ie(i.wallet,n.nftMint,Ae),{publicKey:y}=st(u,n.nftMint),{publicKey:g}=Vt(u,l,n.tickLower,n.tickUpper),w=this.increasePositionFromLiquidityInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),o,s,a,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?_e(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},signers:[],instructions:[w],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:o,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new q(e.programId),new q(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=me(u,l,m),{publicKey:f}=me(u,l,d),{publicKey:b}=c?ie(i.wallet,n.nftMint,Le):ie(i.wallet,n.nftMint,Ae),{publicKey:y}=st(u,n.nftMint),{publicKey:g}=Vt(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),o,s,a,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?_e(u,l).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w){let k=E([J("liquidity"),A("amountMaxA"),A("amountMaxB"),X("optionBaseFlag"),Re("baseFlag")]),P=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...P],h=Buffer.alloc(k.span);k.encode({liquidity:new rs(0),amountMaxA:b==="MintA"?y:g,amountMaxB:b==="MintA"?g:y,baseFlag:b==="MintA",optionBaseFlag:1},h);let S=Buffer.from([...Pt.increaseLiquidity,...h]);return new Ze({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k){let P=E([J("liquidity"),A("amountMinA"),A("amountMinB")]),B=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...b.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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:no,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(P.span);P.encode({liquidity:y,amountMinA:g,amountMinB:w},S);let I=Buffer.from([...Pt.decreaseLiquidity,...S]);return new Ze({keys:h,programId:e,data:I})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new q(e.programId),new q(e.id)],d=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=me(l,m,d),{publicKey:b}=me(l,m,p),{publicKey:y}=u?ie(i.wallet,n.nftMint,Le):ie(i.wallet,n.nftMint,c),{publicKey:g}=st(l,n.nftMint),{publicKey:w}=Vt(l,m,n.tickLower,n.tickUpper),k=[];for(let h=0;h<e.rewardDefaultInfos.length;h++)k.push({poolRewardVault:new q(t.rewardInfos[h].vault),ownerRewardVault:i.rewardAccounts[h],rewardMint:new q(e.rewardDefaultInfos[h].mint.address)});let P=[],B=this.decreaseLiquidityInstruction(l,i.wallet,y,g,m,w,f,b,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),k,o,s,a,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?_e(l,m).publicKey:void 0);return P.push(B),{address:{tickArrayLower:f,tickArrayUpper:b,positionNftAccount:y,personalPosition:g,protocolPosition:w},signers:[],instructions:P,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g){let w=E([A("amount"),A("otherAmountThreshold"),J("sqrtPriceLimitX64"),Re("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:no,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],B=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:b,isBaseInput:y},B);let h=Buffer.from([...Pt.swap,...B]);return new Ze({keys:P,programId:e,data:h})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[f,b]=[new q(e.mintA.address),new q(e.mintB.address)],y=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),y?i.tokenAccountA:i.tokenAccountB,y?i.tokenAccountB:i.tokenAccountA,y?d:p,y?p:d,y?f:b,y?b:f,u,n,s,a,c,!0,_e(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:o,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[f,b]=[new q(e.mintA.address),new q(e.mintB.address)],y=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),y?i.tokenAccountB:i.tokenAccountA,y?i.tokenAccountA:i.tokenAccountB,y?p:d,y?d:p,y?b:f,y?f:b,u,n,s,a,c,!1,_e(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([A("openTime"),A("endTime"),J("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],b=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},b);let y=Buffer.from([...Pt.initReward,...b]);return new Ze({keys:f,programId:e,data:y})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new q(e.programId),new q(e.id)],a=lu(o,s,i.mint).publicKey,c=hi(o).publicKey,u=[this.initRewardInstruction(o,n.wallet,s,c,new q(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([X("rewardIndex"),J("emissionsPerSecondX64"),A("openTime"),A("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],b=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},b);let y=Buffer.from([...Pt.setRewardEmissions,...b]);return new Ze({keys:f,programId:e,data:y})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new q(e.programId),new q(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new q(t.rewardInfos[d].vault),u=new q(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=hi(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new q(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let c=E([X("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:no,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Pt.collectReward,...l]);return new Ze({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new q(e.programId),new q(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new q(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:o,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new q((await c(1))[0]);else{let g=Mo.generate();u.push(g),l=g.publicKey}let m=a?ie(o,s,Le).publicKey:ie(o,s,Ae).publicKey,{publicKey:d}=st(n,s),p=Ti(e,l).publicKey,f=ie(o,l,Ae).publicKey,b=kn(l).publicKey,y=ke.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:o,lockOwner:o,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:b,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ie(t,s,a?Le:Ae).publicKey,positionNftProgram:a?Le:Ae});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:b},instructions:[y],signers:u,instructionTypes:[F.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:o,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:b}){let y=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Gt,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1}],g=E([Re("withMetadata")]),w=Buffer.alloc(g.span);g.encode({withMetadata:b},w);let k=Buffer.from([...ku,...w]);return new Ze({keys:y,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:o}){let{publicKey:s}=ie(i,o,Ae),{publicKey:a}=st(n,o),c=[{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:ts(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1}];return new Ze({keys:c,programId:e,data:Buffer.from(ku)})}static harvestLockPositionInstruction(e){let[t,n]=[new q(e.poolKeys.programId),new q(e.poolKeys.id)],i=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),o=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=me(t,n,i),{publicKey:a}=me(t,n,o),{publicKey:c}=ie(e.owner,e.ownerPosition.nftMint,Ae),{publicKey:u}=st(t,e.ownerPosition.nftMint),{publicKey:l}=Vt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new q(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new q(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:ts(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:sn,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 Ze({keys:p,programId:e.programId,data:Buffer.from(Pu)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:o,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:b,userVaultA:y,userVaultB:g,mintA:w,mintB:k,rewardAccounts:P,exTickArrayBitmap:B}){let h=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[],...P.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:o,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...h];return new Ze({keys:S,programId:e,data:Buffer.from(Pu)})}};var zP=E([Je("mintAuthorityOption"),L("mintAuthority"),A("supply"),X("decimals"),X("isInitialized"),Je("freezeAuthorityOption"),L("freezeAuthority")]);import{PublicKey as HP}from"@solana/web3.js";import{MintLayout as $P,TOKEN_PROGRAM_ID as eh}from"@solana/spl-token";var No=r=>new Ke({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),Ci=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Ee(o,["amount","isRaw","name"]);return new ye(new Ke({mint:yt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};var tt=i=>{var o=i,{address:r,programId:e,decimals:t}=o,n=Ee(o,["address","programId","decimals"]);return O({chainId:101,address:yt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},dn=r=>r?W(O({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:W(O({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:W(O({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import hu from"bn.js";var ss=new hu(25),_o=new hu(1e4);import{PublicKey as qt,SystemProgram as pd,SYSVAR_RENT_PUBKEY as Th,TransactionInstruction as Un}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as fd,TOKEN_PROGRAM_ID as Li}from"@solana/spl-token";var as=E([X("instruction"),A("amountIn"),A("minAmountOut")]),us=E([X("instruction"),A("maxAmountIn"),A("amountOut")]),bh=E([X("instruction"),X("nonce")]),ed=E([X("instruction"),X("nonce"),A("startTime")]),vo=E([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),A("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),A("swapQuote2BaseFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("withdrawQueue"),L("lpVault"),L("owner"),A("lpReserve"),j(A(),3,"padding")]),yh=E([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("modelDataAccount"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("owner"),j(A(),64,"padding")]),cs=E([X("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),ls=E([X("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var Tu=E([A("fee")]);import{PublicKey as td}from"@solana/web3.js";var qn=new td("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xn=5e4,nd=E([A("x"),A("y"),A("price")]),id=E([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),j(nd,xn,"DataElement")]);function od(r,e){return[0,xn-2]}function rd(r){return[0,xn-2]}function sd(r){return[0,xn-2]}function ad(r,e,t){let[n,i]=od(e,t),o=n,s=i,a=0,c=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=xn-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function ms(r,e,t){let[n,i,o]=ad(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[i].x,u=r.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function Bn(r,e,t){return e*r.multiplier/t}function Iu(r,e,t){return e*t/r.multiplier}function ud(r,e){let[t,n]=rd(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>xn-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)o=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function cd(r,e){let[t,n]=sd(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=xn-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Bu(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=ud(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,b;return n?(f=l+(m-l)*(e-c)/(u-c),b=d-(i-c)*r.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),b=p+(u-i)*r.multiplier/l),[f,b,!1,a]}}}function ld(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=cd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,b;return n?(f=l+(m-l)*(d-e)/(d-p),b=c+m*(d-i)/r.multiplier):(f=l+(m-l)*(d-e)/(d-p),b=u-l*(i-p)/r.multiplier),[f,b,!1,a]}}}function md(r,e){let t=Bu(r,e,0,!1);return t[3]?t[0]:0}function xu(r,e,t,n){let i=ms(r,e,t),o=Bn(r,e,i),s=Bn(r,t,i),a=Bn(r,n,i),c=!0,[u,l,m,d]=Bu(r,o,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return Iu(r,p,i)}}function Su(r,e,t,n){let i=ms(r,e,t),o=Bn(r,e,i),s=Bn(r,t,i),a=Bn(r,n,i),c=!1,[u,l,m,d]=ld(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=o-l;return Iu(r,p,i)}}function dd(r){let e=id.decode(r);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 Ku(r,e,t,n){let i=md(r,Bn(r,e,ms(r,e,t)))/r.multiplier;return n?i:1/i}var Ri=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(qn);e&&(this._layoutData=dd(e==null?void 0:e.data))}}};var Cu=ce("Raydium_liquidity_instruction");function Ru(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s,otherAmountMin:a}=r,c=Buffer.alloc(cs.span);cs.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(o),otherAmountMin:Z(a),fixedSide:s==="base"?dt:oa},c);let u=[T({pubkey:Li,isWritable:!1}),T({pubkey:new qt(e.id)}),T({pubkey:new qt(t.authority),isWritable:!1}),T({pubkey:new qt(t.openOrders),isWritable:!1}),T({pubkey:new qt(t.targetOrders)}),T({pubkey:new qt(e.lpMint.address)}),T({pubkey:new qt(t.vault.A)}),T({pubkey:new qt(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(T({pubkey:qn})),u.push(T({pubkey:new qt(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 qt(t.marketEventQueue),isWritable:!1})),new Un({programId:new qt(e.programId),keys:u,data:c})}function ds(r){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:o,quoteAmountMin:s}=r,a=He(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(ls.span);ls.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(o),quoteAmountMin:Z(s)},u);let l=[T({pubkey:Li,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 c===5?l.push(T({pubkey:qn})):(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 Un({programId:a.programId,keys:l,data:u})}return new Un({programId:a.programId,keys:[]})}function ps({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:b,userPcVault:y,userLpVault:g,nonce:w,openTime:k,coinAmount:P,pcAmount:B,ammConfigId:h,feeDestinationId:S}){let I=E([X("instruction"),X("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),C=[{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:fd,isSigner:!1,isWritable:!1},{pubkey:pd.programId,isSigner:!1,isWritable:!1},{pubkey:ot,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:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,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:f,isSigner:!0,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(I.span);return I.encode({instruction:1,nonce:w,openTime:k,coinAmount:P,pcAmount:B},x),{instruction:new Un({keys:C,programId:r,data:x}),instructionType:F.AmmV4CreatePool}}function bd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},i){let o=He(r),s=Buffer.alloc(as.span);as.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[T({pubkey:Li,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.openOrders})];return i===4&&a.push(T({pubkey:o.targetOrders})),a.push(T({pubkey:o.vault.A}),T({pubkey:o.vault.B})),i===5&&a.push(T({pubkey:qn})),a.push(T({pubkey:o.marketProgramId,isWritable:!1}),T({pubkey:o.marketId}),T({pubkey:o.marketBids}),T({pubkey:o.marketAsks}),T({pubkey:o.marketEventQueue}),T({pubkey:o.marketBaseVault}),T({pubkey:o.marketQuoteVault}),T({pubkey:o.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1})),new Un({programId:o.programId,keys:a,data:s})}function yd({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},i){let o=He(r),s=Buffer.alloc(us.span);us.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[T({pubkey:Li,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.openOrders}),T({pubkey:o.targetOrders}),T({pubkey:o.vault.A}),T({pubkey:o.vault.B})];return i===5&&a.push(T({pubkey:qn})),a.push(T({pubkey:o.marketProgramId,isWritable:!1}),T({pubkey:o.marketId}),T({pubkey:o.marketBids}),T({pubkey:o.marketAsks}),T({pubkey:o.marketEventQueue}),T({pubkey:o.marketBaseVault}),T({pubkey:o.marketQuoteVault}),T({pubkey:o.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Un({programId:o.programId,keys:a,data:s})}function Vo(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return bd(W(O({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return yd(W(O({},a),{maxAmountIn:i,amountOut:o}),t);Cu.logWithError("invalid params","params",r)}throw Cu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{PublicKey as Ad}from"@solana/web3.js";import zh from"bn.js";import{TOKEN_PROGRAM_ID as kd}from"@solana/spl-token";import{PublicKey as gd}from"@solana/web3.js";var wd=ce("Raydium_liquidity_serum");function Lu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=gd.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw wd.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}function Eo({programId:r}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function Sn({name:r,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Pd({programId:r,marketId:e}){let{publicKey:t}=le([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function bs({programId:r}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function ys({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Sn({name:"amm_associated_seed",programId:a,marketId:t}),l=Sn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=bs({programId:a}),p=Sn({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Sn({name:"pc_vault_associated_seed",programId:a,marketId:t}),b=Sn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),y=Pd({programId:a,marketId:t}),g=Sn({name:"target_associated_seed",programId:a,marketId:t}),w=Sn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=Lu({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:b,openOrders:y,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:Ad.default,configId:Eo({programId:a})}}var fs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Fo=r=>{let e={},t=kd.toBase58();return Object.keys(r).map(n=>{let i=r[n],[o,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:tt({address:o,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:tt({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new M(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new M(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:fs,week:fs,month:fs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Eo({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:tt({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Oe from"bn.js";import{PublicKey as Oi}from"@solana/web3.js";import Mi from"bn.js";import{TOKEN_PROGRAM_ID as _u}from"@solana/spl-token";import{SystemProgram as Kn,SYSVAR_RENT_PUBKEY as Td,Transaction as Ou,TransactionInstruction as Id}from"@solana/web3.js";import{createInitializeAccountInstruction as Mu,TOKEN_PROGRAM_ID as Nu}from"@solana/spl-token";function hd(r="accountFlags"){let e=new Io(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var gs=E([be(5),hd("accountFlags"),L("ownAddress"),A("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),L("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),be(7)]);function Bd({programId:r,marketInfo:e}){let t=E([X("version"),Je("instruction"),A("baseLotSize"),A("quoteLotSize"),zt("feeRateBps"),A("vaultSignerNonce"),A("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Td,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 Id({keys:n,programId:r,data:i})}async function Do({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Ou,i=await r.getMinimumBalanceForRentExemption(165);n.add(Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Nu}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Nu}),Mu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Mu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(gs.span),space:gs.span,programId:t.programId}));let o=new Ou;return o.add(Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Bd({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:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:o,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var Gn=class extends Ce{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d}){let p=this.scope.ownerPubKey,f=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,b=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-market`}),y=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-request`}),g=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-event`}),w=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-bids`}),k=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-asks`}),P=Me({fromPublicKey:p,programId:_u,assignSeed:f&&`${f}-baseVault`}),B=Me({fromPublicKey:p,programId:_u,assignSeed:f&&`${f}-quoteVault`}),h=0,S=new Mi(100);function I(){let U=new Mi(0);for(;;)try{return{vaultOwner:Oi.createProgramAddressSync([b.publicKey.toBuffer(),U.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:U}}catch{if(U.iaddn(1),U.gt(new Mi(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:x}=I(),K=new Mi(Math.round(10**e.decimals*n)),v=new Mi(Math.round(n*10**t.decimals*i));if(K.eq(dt))throw Error("lot size is too small");if(v.eq(dt))throw Error("tick size or lot size is too small");let R=await Do({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:b,baseMint:e.mint,quoteMint:t.mint,baseVault:P,quoteVault:B,vaultOwner:C,requestQueue:y,eventQueue:g,bids:w,asks:k,feeRateBps:h,quoteDustThreshold:S,vaultSignerNonce:x,baseLotSize:K,quoteLotSize:v,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),G=this.createTxBuilder();G.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let U of R.slice(1,R.length))G.addInstruction({instructions:U.transaction.instructions,signers:U.signer,instructionTypes:U.instructionTypes});return m===0?G.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:b.publicKey,requestQueue:y.publicKey,eventQueue:g.publicKey,bids:w.publicKey,asks:k.publicKey,baseVault:P.publicKey,quoteVault:B.publicKey,baseMint:new Oi(e.mint),quoteMin:new Oi(t.mint)}}):G.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:b.publicKey,requestQueue:y.publicKey,eventQueue:g.publicKey,bids:w.publicKey,asks:k.publicKey,baseVault:P.publicKey,quoteVault:B.publicKey,baseMint:new Oi(e.mint),quoteMin:new Oi(t.mint)}})}};var Ni=class extends Ce{constructor(t){super(t);this.stableLayout=new Ri({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new Oe(new M(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=No(t[o?"mintB":"mintA"]),[c,u]=[new Oe(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Oe(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Oe(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=dt;s.isZero()||(d=m==="base"?oo(s.mul(u),c):oo(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=oo(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new ze(new Oe(1)).add(i),b=new ze(new Oe(1)).sub(i),y=f.mul(d).quotient,g=b.mul(d).quotient,w=new ye(a,d),k=new ye(a,y),P=new ye(a,g);return this.logDebug("anotherAmount:",w.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:w,maxAnotherAmount:k,minAnotherAmount:P,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:o,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",o,"amountInB:",s),(o.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:o.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:f}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[b,y]=[o.token,s.token],g=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1}),w=await d.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let k=await d.getCreatedTokenAccount({mint:new De(n.lpMint.address)}),P=[b,y],B=[g,w],h=[o.raw,s.raw],S=o.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(P.reverse(),B.reverse(),h.reverse(),I=c==="a"?"quote":"base"):S==="base"&&(I=c==="a"?"base":"quote");let[C,x]=P,[K,v]=B,[R,G]=h,U=i!=null?i:await this.getAmmPoolKeys(n.id),D=this.createTxBuilder(),ct=await d.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:K,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:Pe}=ct,it=Ee(ct,["tokenAccount"]);D.addInstruction(it);let ht=await d.handleTokenAccount({side:"in",amount:G,mint:x.mint,tokenAccount:v,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:Ie}=ht,at=Ee(ht,["tokenAccount"]);D.addInstruction(at);let bn=await d.handleTokenAccount({side:"out",amount:0,mint:new De(n.lpMint.address),tokenAccount:k,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:ut}=bn,ft=Ee(bn,["tokenAccount"]);return D.addInstruction(ft),D.addInstruction({instructions:[Ru({poolInfo:n,poolKeys:U,userKeys:{baseTokenAccount:Pe,quoteTokenAccount:Ie,lpTokenAccount:ut,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:G,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.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:o,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,f]=[new De(n.mintA.address),new De(n.mintB.address),new De(n.lpMint.address)];this.logDebug("lpAmount:",o),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),o.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",o.toString());let{account:b}=this.scope,y=await b.getCreatedTokenAccount({mint:f,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",b.tokenAccounts);let g=await b.getCreatedTokenAccount({mint:d}),w=await b.getCreatedTokenAccount({mint:p}),k=this.createTxBuilder(),{bypassAssociatedCheck:P,checkCreateATAOwner:B}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await b.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:P,checkCreateATAOwner:B}),{tokenAccount:h}=x,S=Ee(x,["tokenAccount"]);k.addInstruction(S);let K=await b.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:w,bypassAssociatedCheck:P,checkCreateATAOwner:B}),{tokenAccount:I}=K,C=Ee(K,["tokenAccount"]);return k.addInstruction(C),k.addInstruction({instructions:[ds({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:y,baseTokenAccount:h,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:o,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),k.addCustomComputeBudget(l),u===0?await k.buildV0():k.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=pn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:b}){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 y=this.createTxBuilder();y.addCustomComputeBudget(u);let g={};for(let D of this.scope.account.tokenAccountRawInfos)(g[D.accountInfo.mint.toString()]===void 0||ie(this.scope.ownerPubKey,D.accountInfo.mint,pn).publicKey.equals(D.pubkey))&&(g[D.accountInfo.mint.toString()]=D.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let k=i.add(a!=null?a:new Oe(0)),P=t.mintA.address===Ke.WSOL.mint.toString(),B=t.mintB.address===Ke.WSOL.mint.toString(),{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(y.addInstruction(S||{}),h===void 0)throw new Error("base token account not found");let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(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(y.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 D=Tt[s.programId],Pe=It({programId:new De(s.programId),poolId:new De(s.id),owner:this.scope.ownerPubKey,version:D}),it,Ie=await this.scope.connection.getAccountInfo(Pe);if(Ie&&(it=pi(D).decode(Ie.data)),D!==6&&!it){let{instruction:bt,instructionType:Mn}=bi({id:new De(s.id),programId:new De(s.programId),version:D,ledger:Pe,owner:this.scope.ownerPubKey});y.addInstruction({instructions:[bt],instructionTypes:[Mn]})}let at=[];for(let bt of s.rewardInfos){let Mn=bt.mint.address===Ke.WSOL.mint.toString();if(g[bt.mint.address])at.push(g[bt.mint.address]);else{let{account:yn,instructionParams:We}=await this.scope.account.getOrCreateTokenAccount({mint:new De(bt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Mn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});yn||this.logAndCreateError("farm reward account not found:",bt.mint.address),We&&y.addInstruction(We),at.push(yn)}}let ut=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],ft={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:ut,lpAccount:w,rewardAccounts:at},ct=Tt[s.programId],ht=ct===6?yi(ft):ct===5?gi(ft):wi(ft),bn={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};y.addInstruction({instructions:[ht],instructionTypes:[bn[ct]]})}let x=await this.getAmmPoolKeys(t.id),K=ds({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:w,baseTokenAccount:h,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:k,baseAmountMin:0,quoteAmountMin:0});y.addInstruction({instructions:[K],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[v,R]=t.mintA.address===n.mintA.address?[h,I]:[I,h],G=await this.scope.clmm.getClmmPoolKeys(n.id),U=await ke.openPositionFromBaseInstructions(W(O({poolInfo:n,poolKeys:G,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:v,tokenAccountB:R},withMetadata:"create"},o),{base:c,getEphemeralSigners:f}));return y.addInstruction({instructions:[...U.instructions],signers:U.signers,instructionTypes:[...U.instructionTypes],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),b===0?y.sizeCheckBuildV0():y.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:b}){var v;let y=u.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=u.useSOLBalance&&i.mint.equals(Wo),w=u.useSOLBalance&&o.mint.equals(Wo),k=this.createTxBuilder(),{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:y,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});k.addInstruction(B||{});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:y,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(k.addInstruction(S||{}),P===void 0||h===void 0)throw Error("you don't has some token account");let I=ys({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.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:f},{instruction:x,instructionType:K}=ps(W(O({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:P,userPcVault:h,userLpVault:ie(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:s,pcAmount:a}));return k.addInstruction({instructions:[x],instructionTypes:[K]}),k.addCustomComputeBudget(b),k.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ao,marketProgram:n=fa,feeDestinationId:i=ya,tokenProgram:o,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:b=!1,lotSize:y=1,tickSize:g=.01,txVersion:w,computeBudgetConfig:k}){var Ks,Cs,Rs;let P=this.scope.ownerPubKey,B=m.feePayer||((Ks=this.scope.owner)==null?void 0:Ks.publicKey),h=m.useSOLBalance&&s.mint.equals(Wo),S=m.useSOLBalance&&a.mint.equals(Wo),I=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-market`}),x=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-request`}),K=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-event`}),v=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-bids`}),R=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-asks`}),G=Me({fromPublicKey:P,programId:pn,assignSeed:I&&`${I}-baseVault`}),U=Me({fromPublicKey:P,programId:pn,assignSeed:I&&`${I}-quoteVault`}),D=0,Pe=new Oe(100);function it(){let Ft=new Oe(0);for(;;)try{return{vaultOwner:De.createProgramAddressSync([C.publicKey.toBuffer(),Ft.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Ft}}catch{if(Ft.iaddn(1),Ft.gt(new Oe(25555)))throw Error("find vault owner error")}}let{vaultOwner:Ie,vaultSignerNonce:at}=it(),ut=new Oe(Math.round(10**s.decimals*y)),ft=new Oe(Math.round(y*10**a.decimals*g));if(ut.eq(dt))throw Error("lot size is too small");if(ft.eq(dt))throw Error("tick size or lot size is too small");let ct=await Do({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:Ie,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:G,quoteVault:U,requestQueue:x,eventQueue:K,bids:v,asks:R,feeRateBps:D,quoteDustThreshold:Pe,vaultSignerNonce:at,baseLotSize:ut,quoteLotSize:ft,lowestFeeMarket:d}}),ht=this.createTxBuilder();ht.addInstruction({instructions:ct[0].transaction.instructions,signers:ct[0].signer});for await(let Ft of ct.slice(1,ct.length))ht.addInstruction({instructions:Ft.transaction.instructions,signers:Ft.signer,instructionTypes:Ft.instructionTypes});let{account:bn,instructionParams:bt}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:B,amount:c}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:f,checkCreateATAOwner:b,assignSeed:h&&I?`${I}-wsol`:void 0});ht.addInstruction(bt||{});let{account:Mn,instructionParams:yn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:B,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:b,assignSeed:S&&I?`${I}-wsol`:void 0});if(ht.addInstruction(yn||{}),bn===void 0)throw Error("you don't has base token account");if(Mn===void 0)throw Error("you don't has quote token account");let We=ys({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),ir={programId:t,ammId:We.id,ammAuthority:We.authority,ammOpenOrders:We.openOrders,lpMint:We.lpMint,coinMint:We.baseMint,pcMint:We.quoteMint,coinVault:We.baseVault,pcVault:We.quoteVault,withdrawQueue:We.withdrawQueue,ammTargetOrders:We.targetOrders,poolTempLp:We.lpVault,marketProgramId:We.marketProgramId,marketId:We.marketId,ammConfigId:We.configId,feeDestinationId:i},{instruction:rc,instructionType:sc}=ps(W(O({},ir),{userWallet:this.scope.ownerPubKey,userCoinVault:bn,userPcVault:Mn,userLpVault:ie(this.scope.ownerPubKey,We.lpMint,o).publicKey,nonce:We.nonce,openTime:l,coinAmount:c,pcAmount:u}));ht.addInstruction({instructions:[rc],instructionTypes:[sc]});let Ss=h||S?[((Cs=bt==null?void 0:bt.instructions)==null?void 0:Cs[0])||((Rs=yn==null?void 0:yn.instructions)==null?void 0:Rs[0])].filter(Ft=>!!Ft):void 0;return w===0?ht.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:Ss,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:G.publicKey,quoteVault:U.publicKey,baseMint:new De(s.mint),quoteMin:new De(a.mint)},ir)}):ht.sizeCheckBuild({computeBudgetConfig:k,splitIns:Ss,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:G.publicKey,quoteVault:U.publicKey,baseMint:new De(s.mint),quoteMin:new De(a.mint)},ir)})}async getCreatePoolFee({programId:t}){let n=Eo({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Tu.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){let[a,c]=[i.toString(),o.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,b]=m,[y,g]=d,w=t.version===4,k;if(w)k=new M(b.toString()).div(10**g).div(new M(f.toString()).div(10**y));else{let R=Ku(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new M(1e6).div(R*1e6):k=new M(R*1e6).div(1e6)}let P=n,B=new Oe(0),h=new Oe(0);if(!P.isZero())if(w){h=an(P.mul(ss),_o);let R=P.sub(h),G=f.add(R);B=b.mul(R).div(G)}else{h=P.mul(new Oe(2)).div(new Oe(1e4));let R=P.sub(h);p==="quote"?B=new Oe(xu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber())):B=new Oe(Su(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber()))}let S=new Oe(new M(B.toString()).mul(1-s).toFixed(0)),I=B,C=S,x=new M(B.toString()).div(new M(P.sub(h).toString()).toFixed(0));!P.isZero()&&!B.isZero()&&(x=new M(B.toString()).div(10**g).div(new M(P.sub(h).toString()).div(10**y)));let K=k.sub(x).div(k).mul(100);return{amountOut:I,minAmountOut:C,currentPrice:k,executionPrice:x,priceImpact:K,fee:h}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:o,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,b]=d,y=new M(b.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${y.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(y).toString()} ${l.symbol||l.address}`);let g=new Oe(0),w=n;if(!w.isZero()){w.gt(b)&&(w=b.sub(new Oe(1)));let C=b.sub(w);g=f.mul(w).div(C).mul(_o).div(_o.sub(ss))}let k=new Oe(new M(g.toString()).mul(1+s).toFixed(0)),P=g,B=k;this.logDebug("amountIn:",new M(P.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(B.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let h=null;!g.isZero()&&!w.isZero()&&(h=new M(w.toString()).div(10**m.decimals).div(new M(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 M(1).div(h).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=y.mul(P.toString()),I=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${I.toString()}%`),{amountIn:P,maxAmountIn:B,currentPrice:y,executionPrice:h,priceImpact:I}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:o,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:f=!0}=u||{},[b,y]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&b.address===H.toBase58(),w=f&&y.address===H.toBase58(),{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(b.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(P||{}),k||this.logAndCreateError("input token account not found",{token:b.symbol||b.address,tokenAccountIn:k,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(y.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:y.symbol||y.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:[Vo({version:I,poolKeys:S,userKeys:{tokenAccountIn:k,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:i,amountOut:o,fixedSide:a})],instructionTypes:[I===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await qe(this.scope.connection,t.map(l=>({pubkey:new De(l)})),n),o={},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=vo.decode(m.accountInfo.data);o[String(t[l])]=W(O({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await qe(this.scope.connection,s.map(l=>({pubkey:new De(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Oe(xd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(o)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=W(O({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Fo({[t]:n}),o=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:o,poolKeys:s[0]}}};import{PublicKey as Q}from"@solana/web3.js";import pt from"bn.js";import{AccountLayout as vu,TOKEN_2022_PROGRAM_ID as Xn,TOKEN_PROGRAM_ID as _i}from"@solana/spl-token";var vi=class extends Ce{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var k;let{programId:t,owner:n=((k=this.scope.owner)==null?void 0:k.publicKey)||Q.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[f,b,y]=new pt(new Q(i.address).toBuffer()).gt(new pt(new Q(o.address).toBuffer()))?[o,i,new M(1).div(a)]:[i,o,a],g=ne.priceToSqrtPriceX64(y,f.decimals,b.decimals),w=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:f,mintB:b,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:W(O({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:f,mintB:b,openTime:c.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:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:f,mintB:b,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:y.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},ru),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txVersion:b}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let y=this.createTxBuilder(),g=null,w=null,k=n.useSOLBalance&&e.mintA.address===H.toString(),P=n.useSOLBalance&&e.mintB.address===H.toString(),[B,h]=s==="MintA"?[a,c]:[c,a],{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});S&&(g=S),y.addInstruction(I||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:l,checkCreateATAOwner:m});C&&(w=C),y.addInstruction(x||{}),(!g||!w)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:g==null?void 0:g.toBase58(),ownerTokenAccountB:w==null?void 0:w.toBase58()});let K=t||await this.getClmmPoolKeys(e.id),v=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:K,ownerInfo:W(O({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return y.addInstruction(v),y.addCustomComputeBudget(f),y.versionBuild({txVersion:b,extInfo:O({},v.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:f,nft2022:b}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),g=null,w=null,k=n.useSOLBalance&&e.mintA.address===H.toBase58(),P=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});B&&(g=B),y.addInstruction(h||{});let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});S&&(w=S),y.addInstruction(I||{}),(g===void 0||w===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),x=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:f,nft2022:b});return y.addInstruction(x),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:o,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),f,b,y=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:y||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});w&&(f=w),p.addInstruction(k||{});let{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(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:u,checkCreateATAOwner:l});P&&(b=P),p.addInstruction(B||{}),!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=n!=null?n:await this.getClmmPoolKeys(t.id),S=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:h,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},liquidity:a,amountMaxA:o,amountMaxB:s,nft2022:(I=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:I.owner.equals(Xn)});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;let{poolInfo:t,ownerPosition:n,base:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,f,b=a.useSOLBalance&&t.mintA.address===H.toString(),y=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(w||{});let{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:y||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:y,skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});k&&(f=k),d.addInstruction(P||{}),!p&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),h=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:f},base:i,baseAmount:o,otherAmountMax:s,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(Xn)});return d.addInstruction(h),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:h.address}})}async decreaseLiquidity(e){var v;let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:o,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d,nftAccount:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let f=this.createTxBuilder(),b=o.useSOLBalance&&t.mintA.address===H.toString(),y=o.useSOLBalance&&t.mintB.address===H.toString(),g,w,{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});g=k,P&&f.addInstruction(P);let{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});w=B,h&&f.addInstruction(h);let S=[];for(let R of t.rewardDefaultInfos){let G=o.useSOLBalance&&R.mint.address===H.toString(),U;if(R.mint.address===t.mintA.address)U=g;else if(R.mint.address===t.mintB.address)U=w;else{let{account:D,instructionParams:Pe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(R.mint.programId),mint:new Q(R.mint.address),notUseTokenAccount:G,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!G,associatedOnly:G?!1:u,checkCreateATAOwner:l});U=D,Pe&&f.addInstruction(Pe)}S.push(U)}!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=n!=null?n:await this.getClmmPoolKeys(t.id),C=(v=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:v.owner.equals(Xn),x=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:C});f.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let K=O({},x.address);if(o.closePosition){let R=await ke.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:C});f.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),K=O(O({},K),R.address)}return f.addCustomComputeBudget(m),f.versionBuild({txVersion:d,extInfo:{address:K}})}async lockPosition(e){var d;let{programId:t=ii,authProgramId:n=uo,poolProgramId:i=wn,ownerPosition:o,payer:s,computeBudgetConfig:a,txVersion:c,getEphemeralSigners:u}=e,l=this.createTxBuilder(),m=await ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:o.nftMint,getEphemeralSigners:u,nft2022:(d=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:d.owner.equals(Xn)});return l.addInstruction(m),l.addCustomComputeBudget(a),l.versionBuild({txVersion:c,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=ii,authProgramId:n=uo,clmmProgram:i=wn,poolKeys:o,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=o||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),f=await this.scope.connection.getAccountInfo(s.positionId);f||this.logger.logWithError("position not found",s.positionId);let b=Si.decode(f.data),y=a.useSOLBalance&&d.mintA.address===H.toString(),g=a.useSOLBalance&&d.mintB.address===H.toString(),w,k,{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new Q(d.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});w=P,B&&p.addInstruction(B);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new Q(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k=h,S&&p.addInstruction(S);let I={},C=[];for(let Ie of d.rewardInfos){let at=a.useSOLBalance&&Ie.mint.address===H.toString(),ut=I[Ie.mint.address];if(!ut){let{account:ft,instructionParams:ct}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(Ie.mint.programId),mint:new Q(Ie.mint.address),notUseTokenAccount:at,owner:this.scope.ownerPubKey,skipCloseAccount:!at,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:at?!1:c});ut=ft,ct&&p.addInstruction(ct)}I[Ie.mint.address]=ut,C.push(ut)}let x=Ti(t,s.lockNftMint).publicKey,K=ie(this.scope.ownerPubKey,s.lockNftMint,_i).publicKey,v=Y.getTickArrayStartIndexByTick(b.tickLower,d.config.tickSpacing),R=Y.getTickArrayStartIndexByTick(b.tickUpper,d.config.tickSpacing),{publicKey:G}=me(new Q(d.programId),s.poolId,v),{publicKey:U}=me(new Q(d.programId),s.poolId,R),{publicKey:D}=Vt(new Q(d.programId),s.poolId,b.tickLower,b.tickUpper),Pe=[];for(let Ie=0;Ie<d.rewardInfos.length;Ie++)Pe.push({poolRewardVault:new Q(d.rewardInfos[Ie].vault),ownerRewardVault:C[Ie],rewardMint:new Q(d.rewardInfos[Ie].mint.address)});let it=await ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:K,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:D,vaultA:new Q(d.vault.A),vaultB:new Q(d.vault.B),tickArrayLower:G,tickArrayUpper:U,userVaultA:w,userVaultB:k,mintA:new Q(d.mintA.address),mintB:new Q(d.mintB.address),rewardAccounts:Pe,exTickArrayBitmap:_e(i,s.poolId).publicKey});return p.addInstruction({instructions:[it],instructionTypes:[F.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){var c;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let o=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=ke.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(c=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:c.owner.equals(Xn)});return o.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new pt(new M(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:o});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=ke.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(f),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:f.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new pt(new M(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});b&&u.addInstruction(b),f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=t!=null?t:await this.getClmmPoolKeys(e.id),g=ke.initRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});l=O(O({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new pt(new M(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:u?!1:i,checkCreateATAOwner:o});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=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===H.toString(),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new pt(new M(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});f&&u.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),y=ke.setRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});u.addInstruction(y),l=O(O({},l),y.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:i,checkCreateATAOwner:o});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=ke.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(b=>b.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),f=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(f),a=O(O({},a),f.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let f=this.createTxBuilder(),b=n.toString()===e.mintA.address,y=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),w;!s||s.equals(new M(0))?w=b?St.add(new pt(1)):Kt.sub(new pt(1)):w=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:y||!b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?i:0}:void 0,associatedOnly:y?!1:l,checkCreateATAOwner:m});k=h,S&&f.addInstruction(S)}let P;if(!P){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=h,S&&f.addInstruction(S)}(!k||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:k,ownerTokenAccountB:P,mintAUseSOLBalance:y,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return f.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:P},inputMint:new Q(n),amountIn:i,amountOutMin:o,sqrtPriceLimitX64:w,remainingAccounts:u})),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let f=this.createTxBuilder(),b=n.toString()===e.mintB.address,y=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),w;!s||s.equals(new M(0))?w=n.toString()===e.mintB.address?St.add(new pt(1)):Kt.sub(new pt(1)):w=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:y||!b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?o:0}:void 0,associatedOnly:y?!1:l,checkCreateATAOwner:m});k=h,S&&f.addInstruction(S)}let P;if(!P){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=h,S&&f.addInstruction(S)}(!k||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:k,ownerTokenAccountB:P,mintAUseSOLBalance:y,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return f.addInstruction(ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:P},outputMint:new Q(n),amountOut:i,amountInMax:o,sqrtPriceLimitX64:w,remainingAccounts:u})),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var b,y;let l={};for(let g of this.scope.account.tokenAccountRawInfos)o?ie(this.scope.ownerPubKey,g.accountInfo.mint,a).publicKey.equals(g.pubkey)&&(l[g.accountInfo.mint.toString()]=g.pubkey):l[g.accountInfo.mint.toString()]=g.pubkey;let m=Object.values(t).flat().map(g=>g.nftMint),d=await qe(this.scope.connection,m.map(g=>({pubkey:g}))),p={};d.forEach(g=>{var w,k;p[g.pubkey.toBase58()]=(k=(w=g==null?void 0:g.accountInfo)==null?void 0:w.owner)!=null?k:null});let f=this.createTxBuilder();for(let g of Object.values(e)){if(t[g.id]===void 0||!t[g.id].find(x=>!x.liquidity.isZero()||x.rewardInfos.find(K=>!K.rewardAmountOwed.isZero())))continue;let w=g,k=i.useSOLBalance&&w.mintA.address===H.toString(),P=i.useSOLBalance&&w.mintB.address===H.toString(),B=l[w.mintA.address];if(!B){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new Q(w.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o,checkCreateATAOwner:s});B=x,K&&f.addInstruction(K)}let h=l[w.mintB.address];if(!h){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new Q(w.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:o,checkCreateATAOwner:s});h=x,K&&f.addInstruction(K)}l[w.mintA.address]=B,l[w.mintB.address]=h;let S=[];for(let x of w.rewardDefaultInfos){let K=i.useSOLBalance&&x.mint.address===H.toString(),v=l[x.mint.address];if(!v){let{account:R,instructionParams:G}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(x.mint.programId),mint:new Q(x.mint.address),notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:K?!1:o});v=R,G&&f.addInstruction(G)}l[x.mint.address]=v,S.push(v)}let I=await this.getClmmPoolKeys(w.id),C=[];for(let x=0;x<I.rewardInfos.length;x++)C.push({poolRewardVault:new Q(I.rewardInfos[x].vault),ownerRewardVault:S[x],rewardMint:new Q(I.rewardInfos[x].mint.address)});for(let x of t[g.id]){let K=(b=n==null?void 0:n[g.id])==null?void 0:b[x.nftMint.toBase58()];if(K){let v=ie(this.scope.ownerPubKey,K.lockNftMint,_i).publicKey,R=Y.getTickArrayStartIndexByTick(x.tickLower,I.config.tickSpacing),G=Y.getTickArrayStartIndexByTick(x.tickUpper,I.config.tickSpacing),{publicKey:U}=me(new Q(I.programId),K.poolId,R),{publicKey:D}=me(new Q(I.programId),K.poolId,G),{publicKey:Pe}=Vt(new Q(I.programId),K.poolId,x.tickLower,x.tickUpper),it=Ti(ii,K.lockNftMint).publicKey,Ie=ke.harvestLockPositionInstructionV2({programId:ii,auth:uo,lockPositionId:it,clmmProgram:wn,lockOwner:this.scope.ownerPubKey,lockNftMint:K.lockNftMint,lockNftAccount:v,positionNftAccount:K.nftAccount,positionId:K.positionId,poolId:K.poolId,protocolPosition:Pe,vaultA:new Q(I.vault.A),vaultB:new Q(I.vault.B),tickArrayLower:U,tickArrayUpper:D,userVaultA:B,userVaultB:h,mintA:new Q(I.mintA.address),mintB:new Q(I.mintB.address),rewardAccounts:C,exTickArrayBitmap:_e(wn,K.poolId).publicKey});f.addInstruction({instructions:[Ie],instructionTypes:[F.ClmmHarvestLockPosition],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]})}else{let v=ke.decreaseLiquidityInstructions({poolInfo:w,poolKeys:I,ownerPosition:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:h,rewardAccounts:S},liquidity:new pt(0),amountMinA:new pt(0),amountMinB:new pt(0),nft2022:(y=p[x.nftMint.toBase58()])==null?void 0:y.equals(Xn)});f.addInstruction(v)}}}return c===0?f.sizeCheckBuildV0({computeBudgetConfig:u}):f.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(hi(e).publicKey);return t?wu.decode(t.data).whitelistMints.filter(i=>!i.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new pt(1))).map(s=>st(new Q(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=Si.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await qe(this.scope.connection,e.map(o=>({pubkey:new Q(o)})),t),i={};for(let o=0;o<e.length;o++){let s=n[o];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[o]));let a=Tn.decode(s.accountInfo.data),c=ne.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[o])]=W(O({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await qe(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),o={};i.forEach(c=>{!c.accountInfo||(o[c.pubkey.toBase58()]=yu.decode(c.accountInfo.data))});let s=await Te.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:tt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||_i.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?dn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:tt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||_i.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?dn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:W(O({},o[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Te.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 Nn({connection:this.scope.connection,mints:Array.from(n).map(m=>new Q(m))}),{computeClmmPoolInfo:o,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await qe(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=fu(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(vu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(vu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=W(O({},o[e]),{exBitmapAccount:o[e].exBitmapAccount.toBase58(),observationId:o[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:o[e].rewardInfos.filter(m=>!m.tokenVault.equals(Q.default)).map(m=>({mint:tt({address:m.tokenMint.toBase58(),programId:_i.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:o[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Dd,NATIVE_MINT as Ho,TOKEN_PROGRAM_ID as Et}from"@solana/spl-token";import As from"bn.js";import Xo from"decimal.js-light";import Vi from"bn.js";function qo(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Sd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=qo(r,e);return n.gt(zn)&&(t=t.add(new Vi(1)),e=r.div(t),n=qo(r,t),n.gt(zn)&&(e=e.add(new Vi(1)))),[t,e]}var zn=new Vi(0),Uo=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s,a]=Sd(i,o),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return qo(e.mul(n),t).gt(zn)&&s.gt(zn)&&(s=s.add(new Vi(1))),qo(e.mul(i),t).gt(zn)&&a.gt(zn)&&(a=a.add(new Vi(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Eu from"bn.js";var ws=new Eu(1e6);function Kd(r,e,t){return r.mul(e).add(t).sub(new Eu(1)).div(t)}function Vu(r,e,t){return r.mul(e).div(t)}var Go=class{static tradingFee(e,t){return Kd(e,t,ws)}static protocolFee(e,t){return Vu(e,t,ws)}static fundFee(e,t){return Vu(e,t,ws)}};var zo=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 o=Go.tradingFee(e,i),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Uo.swapWithoutFees(s,t,n),u=a.add(o);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:o}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:o,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,o,e.decimals,t.decimals,e.address]:[o,i,t.decimals,e.decimals,t.address],p=new Xo(u.toString()).div(10**m).div(new Xo(c.toString()).div(10**l)),f=a.gte(u)?u.sub(new As(1)):a,b=u.sub(f),y=an(c.mul(f),b),g=an(y.mul(new As(1e6)),new As(1e6).sub(n)),w=g.sub(y),k=new Xo(f.toString()).div(10**m).div(new Xo(g.toString()).div(10**l)),P=p.isZero()?0:k.sub(p).div(p).abs().toNumber();return{amountRealOut:f,amountIn:g,amountInWithoutFee:y,tradeFee:w,priceImpact:P}}};import ve from"bn.js";import{PublicKey as Fi,TransactionInstruction as Cn,Keypair as vd,SystemProgram as Vd}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Wu,TOKEN_2022_PROGRAM_ID as Ps,TOKEN_PROGRAM_ID as fn}from"@solana/spl-token";var Cd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),nB=Buffer.from("amm_config","utf8"),Rd=Buffer.from("pool","utf8"),Ld=Buffer.from("pool_lp_mint","utf8"),Od=Buffer.from("pool_vault","utf8"),Md=Buffer.from("observation","utf8");function Qn(r){return le([Cd],r)}function ks(r,e,t,n){return le([Rd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Nd(r,e){return le([Ld,e.toBuffer()],r)}function Fu(r,e,t){return le([Od,e.toBuffer(),t.toBuffer()],r)}function Ei(r,e){return le([Md,e.toBuffer()],r)}function Du({poolId:r,programId:e,configId:t,mintA:n,mintB:i}){let o=Qn(e).publicKey,s=r||ks(e,t,n,i).publicKey,a=Nd(e,s).publicKey,c=Fu(e,s,n).publicKey,u=Fu(e,s,i).publicKey,l=Ei(e,s).publicKey;return{poolId:s,configId:t,authority:o,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var _d=Buffer.from("locked_liquidity","utf8");function Qo(r,e){return le([_d,e.toBuffer()],r)}var Ed=ce("Raydium_cpmm"),Rn={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 qu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k){let P=E([A("amountMaxA"),A("amountMaxB"),A("openTime")]),B=ks(r,t,o,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:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:fn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:wr,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],S=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:w,openTime:k},S),new Cn({keys:h,programId:r,data:Buffer.from([...Rn.initialize,...S])})}function Uu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),y=[{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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(b.span);return Ed.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),b.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Cn({keys:y,programId:r,data:Buffer.from([...Rn.deposit,...g])})}function Gu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMinA"),A("amountMinB")]),y=[{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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:sn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);return b.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Cn({keys:y,programId:r,data:Buffer.from([...Rn.withdraw,...g])})}function Yo(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountIn"),A("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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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(y.span);return y.encode({amountIn:f,amounOutMin:b},w),new Cn({keys:g,programId:r,data:Buffer.from([...Rn.swapBaseInput,...w])})}function Xu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountInMax"),A("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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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(y.span);return y.encode({amountInMax:f,amountOut:b},w),new Cn({keys:g,programId:r,data:Buffer.from([...Rn.swapBaseOutput,...w])})}async function zu(r){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=r,o=[],[s,a]=[new Fi(t.id),new Fi(t.lpMint.address)],c;if(i)c=new Fi((await i(1))[0]);else{let y=vd.generate();o.push(y),c=y.publicKey}let{publicKey:u}=ie(e.feePayer,c,fn),{publicKey:l}=kn(c),{publicKey:m}=Qo(r.lockProgram,c),{publicKey:d}=ie(e.feePayer,a,fn),{publicKey:p}=ie(r.lockAuthProgram,a,fn),f=Fd({programId:r.lockProgram,auth:r.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new Fi(n.vault.A),poolVaultB:new Fi(n.vault.B),metadataAccount:l,lpAmount:r.lpAmount,withMetadata:(b=r.withMetadata)!=null?b:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[f],signers:o,instructionTypes:[F.CpmmLockLp],lookupTableAddress:[]}}function Fd({programId:r,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:o,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:b,withMetadata:y}){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:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Vd.programId,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:Gt,isSigner:!1,isWritable:!1}],w=E([A("lpAmount"),Re("withMetadata")]),k=Buffer.alloc(w.span);w.encode({lpAmount:b,withMetadata:y},k);let P=Buffer.from([...Rn.lockCpLiquidity,...k]);return new Cn({keys:g,programId:r,data:P})}function Qu({programId:r,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:o,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:b,cpmmAuthProgram:y}){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:b!=null?b:co,isSigner:!1,isWritable:!1},{pubkey:y!=null?y:ga,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:fn,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],w=E([A("lpFeeAmount")]),k=Buffer.alloc(w.span);w.encode({lpFeeAmount:f},k);let P=Buffer.from([...Rn.collectCpFee,...k]);return new Cn({keys:g,programId:r,data:P})}var Yu=E([be(8),X("bump"),Re("disableCreatePool"),zt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),L("protocolOwner"),L("fundOwner"),j(A(),16)]),jo=E([be(8),L("configId"),L("poolCreator"),L("vaultA"),L("vaultB"),L("mintLp"),L("mintA"),L("mintB"),L("mintProgramA"),L("mintProgramB"),L("observationId"),X("bump"),X("status"),X("lpDecimals"),X("mintDecimalA"),X("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),j(A(),32)]);var Di=class extends Ce{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 qe(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),i={},o=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=jo.decode(d.accountInfo.data);i[String(e[m])]=W(O({},p),{programId:d.accountInfo.owner}),o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await qe(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Yu.decode(f.data)}}let c={},u=await qe(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new ve(Dd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=W(O({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let o=e[i],[s,a]=[o.mintA.toBase58(),o.mintB.toBase58()];return W(O({},n),{[i]:W(O({},o),{id:new z(i),configInfo:o.configInfo,version:7,authority:Qn(o.programId).publicKey,mintA:tt({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?dn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:tt({address:a,decimals:o.mintDecimalB,programId:o.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?dn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Nn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=tt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?dn(n[t.mintA.toBase58()].feeConfig):void 0}}),o=tt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?dn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=tt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={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:o,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**o.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:o,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Qn(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:Ei(t.programId,new z(e)).publicKey.toBase58()},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:o,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=Ee(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var G,U,D;let f=o.feePayer||((G=this.scope.owner)==null?void 0:G.publicKey),b=new ve(new z(m.mintA.address).toBuffer()).lte(new ve(new z(m.mintB.address).toBuffer())),[y,g]=b?[m.mintA,m.mintB]:[m.mintB,m.mintA],[w,k]=b?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],P=o.useSOLBalance&&y.address===Ho.toBase58(),B=o.useSOLBalance&&g.address===Ho.toBase58(),[h,S]=[new z(y.address),new z(g.address)],I=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:f,amount:w}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:s,checkCreateATAOwner:a});I.addInstruction(x||{});let{account:K,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({mint:new z(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:f,amount:k}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(v||{}),C===void 0||K===void 0)throw Error("you don't has some token account");let R=Du({poolId:e,programId:t,configId:new z(u.id),mintA:h,mintB:S});return I.addInstruction({instructions:[qu(t,this.scope.ownerPubKey,new z(u.id),R.authority,R.poolId,h,S,R.lpMint,C,K,ie(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new z((U=y.programId)!=null?U:Et),new z((D=g.programId)!=null?D:Et),R.observationId,w,k,i)],instructionTypes:[F.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.versionBuild({txVersion:c,extInfo:{address:W(O({},R),{mintA:y,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:o,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,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}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),f=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:b,inputAmountFee:y,anotherAmount:g}=a||this.computePairAmount({poolInfo:W(O({},t),{lpAmount:new M(f.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:f.baseReserve,quoteReserve:f.quoteReserve,slippage:new ze(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(i.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,k=t.mintA.address===Ho.toString(),P=t.mintB.address===Ho.toString(),B=this.createTxBuilder(),[h,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||(o?i:w).isZero()?{payer:this.scope.ownerPubKey,amount:o?i:w}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(C||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o?w:i).isZero()?{payer:this.scope.ownerPubKey,amount:o?w:i}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(K||{}),!I&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let v=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Pe=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:v,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:R}=Pe,G=Ee(Pe,["tokenAccount"]);B.addInstruction(G);let U=n!=null?n:await this.getCpmmPoolKeys(t.id),D=new ze(new ve(1)).sub(s);return B.addInstruction({instructions:[Uu(new z(t.programId),this.scope.ownerPubKey,new z(U.authority),new z(t.id),R,I,x,new z(U.vault.A),new z(U.vault.B),h,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:D.mul(b).quotient,o?y.amount:w,o?w:y.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var R,G;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:o,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new ze(new ve(1)).sub(o),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(i.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(i.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,f]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:b}=this.scope,y=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)],k=g.equals(H),P=w.equals(H),B,h,{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});B=S,I&&y.addInstruction(I);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});h=C,x&&y.addInstruction(x),(!B||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",b.tokenAccounts);let K=await b.getCreatedTokenAccount({mint:new z(t.lpMint.address)});K||this.logAndCreateError("cannot found lp token account","tokenAccounts",b.tokenAccounts);let v=n!=null?n:await this.getCpmmPoolKeys(t.id);return y.addInstruction({instructions:[Gu(new z(t.programId),this.scope.ownerPubKey,new z(v.authority),new z(t.id),K,B,h,new z(v.vault.A),new z(v.vault.B),g,w,new z(t.lpMint.address),i,l.sub((R=p.fee)!=null?R:new ve(0)),m.sub((G=f.fee)!=null?G:new ve(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:v.lookupTableAccount?[v.lookupTableAccount]:[]}),y.addCustomComputeBudget(s),y.versionBuild({txVersion:a})}async swap(e){var C,x,K,v,R,G;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:o,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:f}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),b=this.createTxBuilder(),[y,g]=[new z(t.mintA.address),new z(t.mintB.address)];o?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new ve((1+c)*1e4)).div(new ve(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new ve((1-c)*1e4)).div(new ve(1e4));let w=t.mintA.address===H.toBase58(),k=t.mintB.address===H.toBase58(),{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((C=t.mintA.programId)!=null?C:Et),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:f,checkCreateATAOwner:p});B&&b.addInstruction(B);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((x=t.mintB.programId)!=null?x:Et),owner:this.scope.ownerPubKey,createInfo:k||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:f,checkCreateATAOwner:p});S&&b.addInstruction(S),(!P||!h)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:P,mintBTokenAcc:h,mintAUseSOLBalance:w,mintBUseSOLBalance:k,associatedOnly:f});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[o?Xu(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),i?P:h,i?h:P,new z(I.vault[i?"A":"B"]),new z(I.vault[i?"B":"A"]),new z((R=t[i?"mintA":"mintB"].programId)!=null?R:Et),new z((G=t[i?"mintB":"mintA"].programId)!=null?G:Et),i?y:g,i?g:y,Ei(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Yo(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),i?P:h,i?h:P,new z(I.vault[i?"A":"B"]),new z(I.vault[i?"B":"A"]),new z((K=t[i?"mintA":"mintB"].programId)!=null?K:Et),new z((v=t[i?"mintB":"mintA"].programId)!=null?v:Et),i?y:g,i?g:y,Ei(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[o?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),b.addCustomComputeBudget(l),b.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:o}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await zu({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:lo,lockAuthProgram:(d=e.authProgram)!=null?d:mo,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(i),s.versionBuild({txVersion:o,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:o=lo,authProgram:s=mo,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=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 z(t.mintA.address),new z(t.mintB.address)],f=d.equals(H),b=p.equals(H),y,g,{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});y=w,k&&m.addInstruction(k);let{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:!b,checkCreateATAOwner:!1});g=P,B&&m.addInstruction(B),(!y||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:y,tokenAccountB:g});let h=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=ie(l,i,Et),{publicKey:I}=Qo(o,i),{publicKey:C}=ie(s,new z(t.lpMint.address),Et);return m.addInstruction({instructions:[Qu({programId:o!=null?o:lo,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:mo,nftMint:i,nftAccount:S,lockPda:I,poolId:new z(t.id),mintLp:new z(h.mintLp.address),userVaultA:y,userVaultB:g,poolVaultA:new z(h.vault.A),poolVaultB:new z(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:[F.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let o=n.toString()===e.mintB.address,s=zo.swap(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new M(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new ve((1-i)*1e4)).div(new ve(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var P,B,h,S,I,C,x,K,v;let c=1-Number(o.toSignificant())/100,u=new ve(new M(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((P=l.fee)!=null?P:new ve(0)),d=new ve(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(h=(B=l.fee)==null?void 0:B.toString())!=null?h:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),b={amount:dt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let R=Wd(f,t,n,d);this.logDebug("lpAmountData:",{amountA:R.amountA.toString(),amountB:R.amountB.toString()}),b=ge(R[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let y=new ze(new ve(1)).add(o),g=new ze(new ve(1)).sub(o),w=ge(y.mul(b.amount.sub((S=b.fee)!=null?S:new ve(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=ge(g.mul(b.amount.sub((I=b.fee)!=null?I:new ve(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",b.amount.toString(),"anotherAmountFee:",(x=(C=b.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",w.amount.toString(),"maxAnotherAmountFee:",(v=(K=w.fee)==null?void 0:K.toString())!=null?v:0),{inputAmountFee:l,anotherAmount:b,maxAnotherAmount:w,minAnotherAmount:k,liquidity:f}}};function Wd(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new ve(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new ve(1))),{amountA:i,amountB:o}}import{PublicKey as On}from"@solana/web3.js";import{createTransferInstruction as ec,TOKEN_PROGRAM_ID as Ve,TOKEN_2022_PROGRAM_ID as Jo}from"@solana/spl-token";import er from"bn.js";var ju={[Ir.toBase58()]:3},Hu={3:Ir};var hs=E([be(5),be(8),L("ownAddress"),A("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),L("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),be(7)]),Zu={3:hs};import{PublicKey as $u}from"@solana/web3.js";var Zo=ce("Serum"),$o=class{static getProgramId(e){let t=Hu[e];return t||Zo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Zo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Zu[e];return t||Zo.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,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=$u.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Zo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:$u.default,nonce:i}}};import{PublicKey as te,SystemProgram as qd,TransactionInstruction as Ud}from"@solana/web3.js";import Ln from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Gd,TOKEN_2022_PROGRAM_ID as Xd,TOKEN_PROGRAM_ID as zd}from"@solana/spl-token";function Qd(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){var h;let b=[],y=[T({pubkey:zd,isWritable:!1}),T({pubkey:Xd,isWritable:!1}),T({pubkey:Gd,isWritable:!1}),T({pubkey:qd.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})];y.push(T({pubkey:t})),y.push(T({pubkey:i}));let g=[c,u],w=[l,m],k=[o,s,a];for(let S=0;S<g.length;S++){let I=g[S],C=k[S]===I.mintA.address;if(y.push(T({pubkey:new te(I.programId),isWritable:!1})),S===g.length-1?y.push(T({pubkey:i})):y.push(T({pubkey:n})),y.push(T({pubkey:new te(k[S])})),y.push(T({pubkey:new te(k[S+1])})),I.version===6){let x=w[S];y.push(T({pubkey:new te(x.config.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),y.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),y.push(T({pubkey:new te(I.observationId)})),y.push(T({pubkey:sn})),y.push(T({pubkey:_e(new te(I.programId),new te(I.id)).publicKey})),b.push(Yd(I.sqrtPriceX64.toString(),C));for(let K of(h=f[S])!=null?h:[])y.push(T({pubkey:new te(K)}))}else if(I.version===5){let x=w[S];y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.authority),isWritable:!1})),y.push(T({pubkey:new te(x.marketProgramId)})),y.push(T({pubkey:new te(x.marketAuthority)})),y.push(T({pubkey:ba,isWritable:!1})),y.push(T({pubkey:new te(x.openOrders)})),y.push(T({pubkey:new te(x.vault.A)})),y.push(T({pubkey:new te(x.vault.B)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.marketId)})),y.push(T({pubkey:new te(x.marketBids)})),y.push(T({pubkey:new te(x.marketAsks)})),y.push(T({pubkey:new te(x.marketEventQueue)})),y.push(T({pubkey:new te(x.marketBaseVault)})),y.push(T({pubkey:new te(x.marketQuoteVault)}))}else if(I.version===4){let x=w[S],K=I.status!==1;y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.authority),isWritable:!1})),y.push(T({pubkey:new te(K?x.id:x.marketProgramId)})),y.push(T({pubkey:new te(K?x.id:x.marketAuthority)})),y.push(T({pubkey:new te(K?x.id:x.openOrders)})),y.push(T({pubkey:new te(x.vault.A)})),y.push(T({pubkey:new te(x.vault.B)})),y.push(T({pubkey:new te(K?x.id:x.marketId)})),y.push(T({pubkey:new te(K?x.id:x.marketBids)})),y.push(T({pubkey:new te(K?x.id:x.marketAsks)})),y.push(T({pubkey:new te(K?x.id:x.marketEventQueue)})),y.push(T({pubkey:new te(K?x.id:x.marketBaseVault)})),y.push(T({pubkey:new te(K?x.id:x.marketQuoteVault)}))}else if(I.version===7){let x=w[S];y.push(T({pubkey:new te(x.authority)})),y.push(T({pubkey:new te(x.config.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),y.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),y.push(T({pubkey:new te(I.observationId)}))}else throw Error("pool type error")}let P=E([X("insId"),A("amountIn"),A("amountOut"),j(J(),b.length,"clmmPriceLimit")]),B=Buffer.alloc(P.span);return P.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:b},B),new Ud({keys:y,programId:r,data:B})}function Yd(r,e){if(r)if(e){let t=new Ln(r).div(new Ln(25));return t.gt(Co)?t:Co}else{let t=new Ln(r).mul(new Ln(25));return t.lt(Ro)?t:Ro}else return e?Co:Ro}function Ju({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=He(m),p=t.equals(d.mintA.address)?St.add(wt):Kt.sub(wt);return ke.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new Ln(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:[Yo(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?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Vo({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((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Ln(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Qd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Ln(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(b=>b!==void 0),address:{}}}else throw Error("route type error")}var Jt=new er(0),Wi=class extends Ce{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(H));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,o=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<o.length;u++)c.gte(o[u].amount)?(s.addInstruction({instructions:[Qt({tokenAccount:o[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(o[u].amount)):s.addInstruction({instructions:[Qt({tokenAccount:o[u].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(),o=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(o),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:o,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Jo:Ve,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&a.addInstruction(b),f===void 0)throw Error("input account check error");let y;if(e.routeType==="route"&&!m)y=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?Jo:Ve);else{let{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Jo:Ve,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});y=P,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[Qt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:y,programId:Ve})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let P=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?Jo:Ve)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),k=Ju({routeProgram:o,inputMint:d,swapInfo:W(O({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:f,routeToken:g,destinationToken:y}});if(e.feeConfig!==void 0){let P=this.createTxBuilder();P.addInstruction({instructions:[ec(f,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),P.addInstruction(k);let{transactions:B}=s===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[ec(f,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(k),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:k.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:k.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ao,clmm:n=wn,cpmm:i=co}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:vo.offsetOf("baseMint"),length:64}}),s=E([L("baseMint"),L("quoteMint")]),a=o.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=E([L("mintA"),L("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Tn.span}],dataSlice:{offset:Tn.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:jo.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:o}){e=e.toString()===On.default.toString()?H:e,t=t.toString()===On.default.toString()?H:t;let s={},a={},c={},u=[],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))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ve,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:Ve,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:Ve,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:Ve,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))&&(u.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:Ve,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:Ve,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:Ve,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:Ve,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ve,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:Ve,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:Ve,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:Ve,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 f of p.in)for(let b of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f),b.version===6&&a[b.id.toString()]===void 0?a[b.id.toString()]=b:b.version===7&&c[b.id.toString()]===void 0?c[b.id.toString()]=b:(b.version===4||b.version===5)&&s[b.id.toString()]===void 0&&(s[b.id.toString()]=b)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(b=>[b.mintA.toBase58(),b.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let o=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(b=>b.id)),s=Fo(o),a={};Object.values(s).forEach(b=>{i.delete(b.mintA.address),a[b.mintA.address]={address:new On(b.mintA.address),programId:Ve,mintAuthority:null,supply:BigInt(0),decimals:b.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(b.mintB.address),a[b.mintB.address]={address:new On(b.mintB.address),programId:Ve,mintAuthority:null,supply:BigInt(0),decimals:b.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 c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(b=>b.id.toBase58()),!0);Object.values(c).forEach(b=>{let[y,g]=[b.mintA.toBase58(),b.mintB.toBase58()];b.mintProgramA.equals(Ve)?(i.delete(y),a[y]={address:b.mintA,programId:b.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:b.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(y),b.mintProgramB.equals(Ve)?(i.delete(g),a[g]={address:b.mintB,programId:b.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:b.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 u=await Nn({connection:this.scope.connection,mints:Array.from(i).map(b=>new On(b))});a=O(O({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(b=>b.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((b,y)=>W(O({},b),{[y]:W(O({},e.routePathDict[y]),{mintProgram:a[y].programId,mDecimals:a[y].decimals,in:e.routePathDict[y].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[y].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:o,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:o,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,k,P,B,h,S,I,C;let m=l===void 0?new er(0):e.raw.mul(new er(l.feeBps.toNumber())).div(new er(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},b=W(O({},t),{address:yt(t.address).toString()}),y=[];for(let x of n)try{y.push(W(O({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:p})),{feeConfig:f}))}catch(K){this.logDebug("direct error",x.version,x.id.toString(),K.message)}this.logDebug("direct done");for(let[x,K]of Object.entries(i)){let v={chainId:101,address:x,programId:K.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:K.mDecimals,tags:[],extensions:{}},R=K.in.map(U=>{try{return{pool:U,data:this.computeAmountOut({itemPool:U,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:v,amountIn:p})}}catch(D){this.logDebug("route in error",U.version,U.id.toString(),D.message);return}}).sort((U,D)=>{var Ie,at,ut,ft;let Pe=U===void 0?Jt:U.data.amountOut.amount.raw.sub((at=(Ie=U.data.amountOut.fee)==null?void 0:Ie.raw)!=null?at:Jt),it=D===void 0?Jt:D.data.amountOut.amount.raw.sub((ft=(ut=D.data.amountOut.fee)==null?void 0:ut.raw)!=null?ft:Jt);return Pe.lt(it)?1:-1})[0];if(R===void 0)continue;let G=new ye(No(v),R.data.amountOut.amount.raw.sub((w=(g=R.data.amountOut.fee)==null?void 0:g.raw)!=null?w:Jt));for(let U of K.out)try{let D=this.computeAmountOut({itemPool:U,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:G});y.push(W(O({},D),{allTrade:!!(R.data.allTrade&&D.allTrade),amountIn:R.data.amountIn,amountOut:D.amountOut,minAmountOut:D.minAmountOut,currentPrice:void 0,executionPrice:new M(new mt({baseToken:R.data.amountIn.amount.token,denominator:R.data.amountIn.amount.raw,quoteToken:D.amountOut.amount.token,numerator:D.amountOut.amount.raw.sub((P=(k=D.amountOut.fee)==null?void 0:k.raw)!=null?P:Jt)}).toFixed()),priceImpact:new M(R.data.priceImpact.add(D.priceImpact).toFixed()),fee:[R.data.fee[0],D.fee[0]],routeType:"route",poolInfoList:[R.pool,U],remainingAccounts:[R.data.remainingAccounts[0],D.remainingAccounts[0]],minMiddleAmountFee:(B=D.amountOut.fee)!=null&&B.raw?new ye(R.data.amountOut.amount.token,((S=(h=R.data.amountOut.fee)==null?void 0:h.raw)!=null?S:Jt).add((C=(I=D.amountOut.fee)==null?void 0:I.raw)!=null?C:Jt)):void 0,middleToken:R.data.amountOut.amount.token,poolReady:R.data.poolReady&&D.poolReady,poolType:[R.data.poolType,D.poolType],feeConfig:f,expirationTime:_t(R.data.expirationTime,D.expirationTime)}))}catch(D){this.logDebug("route out error",U.version,U.id.toString(),D.message)}}return y.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(K=>K.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,K)=>x.amountOut.amount.raw.sub(K.amountOut.amount.raw).gt(Jt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:o,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:b,priceImpact:y,fee:g,remainingAccounts:w,executionPriceX64:k}=Te.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:o,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(b.toFixed()),priceImpact:new M(y.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:_t(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ci(W(O({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ci(W(O({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(c.token,f)],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:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ci(W(O({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ci(W(O({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(c.token,f)],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(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await qe(this.scope.connection,Array.from(s).map(l=>({pubkey:new On(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=hs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:$o.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 c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:W(O({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=O({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:bs({programId:new On(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Qn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:tt({address:u.mintLp.toBase58(),programId:Ve.toBase58(),decimals:u.lpDecimals}),config:W(O({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as jd,Transaction as Ts,TransactionInstruction as Hd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zd}from"@solana/spl-token";import tc from"bn.js";var nt=class extends Ce{static getPdaPoolId(e,t){return le([nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return le([nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new tc(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>nt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<nt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>nt.getPdaOwnerId(t,m,i,l).publicKey));let c=await Rt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],f=a[l],b=c[d],y=c[n.length+l];if(!(b&&y)||b.data.length!==nt.POOL_LAYOUT.span||y.data.length!==nt.OWNER_LAYOUT.span)continue;let g=nt.POOL_LAYOUT.decode(b.data),w=nt.OWNER_LAYOUT.decode(y.data),k=g.openTime.toNumber(),P=g.endTime.toNumber(),B=w.tokenInfo.map(I=>I.debtAmount.gt(new tc(0))).filter(I=>!I).length!==3,h=o>k&&o<P&&g.status===1,S=B&&h;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:w.lpAmount,project:nt.VERSION_PROJECT[m],openTime:k,endTime:P,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 u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ke.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(Ke.WSOL.mint),associatedOnly:c.mintAddress.equals(Ke.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(u)}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ke.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(Ke.WSOL.mint),associatedOnly:m.mintAddress.equals(Ke.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return Tr(c,[i,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Ts().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Ts().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ts().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=E([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Zd,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 Hd({keys:o,programId:e,data:a})}},Ct=nt;Ct.CLAIMED_NUM=3,Ct.POOL_LAYOUT=E([be(8),X("bump"),X("status"),A("openTime"),A("endTime"),L("ammId"),j(E([X("mintDecimals"),L("mintAddress"),L("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),j(A(),10,"padding")]),Ct.OWNER_LAYOUT=E([be(8),X("bump"),X("version"),L("poolId"),L("owner"),A("lpAmount"),j(E([L("mintAddress"),A("debtAmount"),A("claimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),j(A(),4,"padding")]),Ct.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new jd(e)),Ct.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Ct.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ui}from"@solana/web3.js";import oc from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Jd,TransactionInstruction as nc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ic}from"@solana/spl-token";var $d=E([X("instruction"),Ca("amount")]),qi=E([X("instruction")]);function tr({programId:r},e){let t=[{pubkey:ic,isSigner:!1,isWritable:!1},{pubkey:ta,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(qi.span);return qi.encode({instruction:2},n),new nc({keys:t,programId:r,data:n})}function Is(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(qi.span);qi.encode({instruction:2},s);let a=[{pubkey:ic,isWritable:!1,isSigner:!1},{pubkey:Jd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new nc({programId:e.programId,keys:a,data:s})}var ep={[oi.IDO_PROGRAM_ID_V1.toString()]:1,[oi.IDO_PROGRAM_ID_V2.toString()]:2,[oi.IDO_PROGRAM_ID_V3.toString()]:3,[oi.IDO_PROGRAM_ID_V4.toString()]:4},Yn=class extends Ce{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o}){let s=this.createTxBuilder(),a=ep[t.programId];a||this.logAndCreateError("invalid version",a);let c=He(t),[u,l]=[!new oc(e.coin).isZero(),!new oc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.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&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let f=c.buyInfo.mint.address.equals(H),{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:n,checkCreateATAOwner:i});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&y&&s.addInstruction(y),(!d||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[tr({programId:new Ui(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:d,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:b,ledgerAccount:new Ui(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Is(W(O({},g),{side:"base"}))]:[],...l?[Is(W(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as tp}from"@solana/web3.js";import{MintLayout as np,TOKEN_2022_PROGRAM_ID as Bs,TOKEN_PROGRAM_ID as xs}from"@solana/spl-token";var Gi=class extends Ce{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:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=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(rn.address,rn),this._mintGroup.official.add(rn.address),s.forEach(u=>{this._blackTokenMap.set(u.address,W(O({},u),{priority:-1}))}),o.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Bs.toBase58():xs.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Bs.toBase58():xs.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Bs.toBase58():xs.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}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 rn;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,W(O({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new tp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=np.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var nr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Mt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=o,this._apiCacheTime=c||5*60*1e3,this.logger=ce("Raydium"),this.farm=new Ai({scope:this,moduleName:"Raydium_Farm"}),this.account=new mi({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ni({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Gi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new vi({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Di({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Ct({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Gn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Yn({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=ip({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,c=new wo({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),u=new nr(W(O({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Ao);return this._owner.publicKey}setOwner(e){return this._owner=e?new Mt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Pa);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(Ao),new Error(Ao)}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=>W(O({},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{nr as Raydium};
1
+ var uc=Object.defineProperty,cc=Object.defineProperties;var lc=Object.getOwnPropertyDescriptors;var Xi=Object.getOwnPropertySymbols;var Os=Object.prototype.hasOwnProperty,Ms=Object.prototype.propertyIsEnumerable;var Ls=(r,e,t)=>e in r?uc(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,O=(r,e)=>{for(var t in e||(e={}))Os.call(e,t)&&Ls(r,t,e[t]);if(Xi)for(var t of Xi(e))Ms.call(e,t)&&Ls(r,t,e[t]);return r},W=(r,e)=>cc(r,lc(e));var Ee=(r,e)=>{var t={};for(var n in r)Os.call(r,n)&&e.indexOf(n)<0&&(t[n]=r[n]);if(r!=null&&Xi)for(var n of Xi(r))e.indexOf(n)<0&&Ms.call(r,n)&&(t[n]=r[n]);return t};import{merge as ip}from"lodash";import ka from"axios";import{PublicKey as vs}from"@solana/web3.js";import{get as Ns,set as mc}from"lodash";var or=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}},_s={},dc={};function ce(r){let e=Ns(_s,r);if(!e){let t=Ns(dc,r);e=new or({name:r,logLevel:t}),mc(_s,r,e)}return e}import{MINT_SIZE as pc,TOKEN_PROGRAM_ID as fc,getTransferFeeConfig as bc,unpackMint as yc}from"@solana/spl-token";var rr=ce("Raydium_accountInfo_util");async function Rt(r,e,t){let{batchRequest:n,commitment:i="confirmed",chunkCount:o=100}=O({batchRequest:!1},t),s=sr(e,o),a=new Array(s.length).fill([]);if(n){let c=s.map(m=>{let d=r._buildArgs([m.map(p=>p.toBase58())],i,"base64");return{methodName:"getMultipleAccounts",args:d}}),u=sr(c,10);a=(await(await Promise.all(u.map(async m=>await r._rpcBatchRequest(m)))).flat()).map(m=>(m.error&&rr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${m.error.message}`),m.result.value.map(d=>{if(d){let{data:p,executable:f,lamports:b,owner:y,rentEpoch:g}=d;return p.length!==2&&p[1]!=="base64"&&rr.logWithError("info must be base64 encoded, RPC_ERROR"),{data:Buffer.from(p[0],"base64"),executable:f,lamports:b,owner:new vs(y),rentEpoch:g}}return null})))}else try{a=await Promise.all(s.map(c=>r.getMultipleAccountsInfo(c,i)))}catch(c){c instanceof Error&&rr.logWithError(`failed to get info for multiple accounts, RPC_ERROR, ${c.message}`)}return a.flat()}async function qe(r,e,t){let n=await Rt(r,e.map(i=>i.pubkey),t);return e.map((i,o)=>W(O({},i),{accountInfo:n[o]}))}async function Nn({connection:r,mints:e,config:t}){var o,s,a;if(e.length===0)return{};let n=await qe(r,e.map(c=>({pubkey:yt(c)})),t),i={};for(let c of n){if(!c.accountInfo||c.accountInfo.data.length<pc){console.log("invalid mint account",c.pubkey.toBase58());continue}let u=yc(c.pubkey,c.accountInfo,(o=c.accountInfo)==null?void 0:o.owner);i[c.pubkey.toString()]=W(O({},u),{programId:((s=c.accountInfo)==null?void 0:s.owner)||fc,feeConfig:(a=bc(u))!=null?a:void 0})}return i[vs.default.toBase58()]=i[H.toBase58()],i}import Xt from"bn.js";var _n=9e15,on=1e9,ar="0123456789abcdef",Qi="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",Yi="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",ur={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-_n,maxE:_n,crypto:!1},Ds,Ut,re=!0,Hi="[DecimalError] ",nn=Hi+"Invalid argument: ",Ws=Hi+"Precision limit exceeded",qs=Hi+"crypto unavailable",Us="[object Decimal]",$e=Math.floor,Ue=Math.pow,gc=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,wc=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,Ac=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,Gs=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Ot=1e7,ee=7,kc=9007199254740991,Pc=Qi.length-1,cr=Yi.length-1,V={toStringTag:Us};V.absoluteValue=V.abs=function(){var r=new this.constructor(this);return r.s<0&&(r.s=1),$(r)};V.ceil=function(){return $(new this.constructor(this),this.e+1,2)};V.clampedTo=V.clamp=function(r,e){var t,n=this,i=n.constructor;if(r=new i(r),e=new i(e),!r.s||!e.s)return new i(NaN);if(r.gt(e))throw Error(nn+e);return t=n.cmp(r),t<0?r:n.cmp(e)>0?e:new i(n)};V.comparedTo=V.cmp=function(r){var e,t,n,i,o=this,s=o.d,a=(r=new o.constructor(r)).d,c=o.s,u=r.s;if(!s||!a)return!c||!u?NaN:c!==u?c:s===a?0:!s^c<0?1:-1;if(!s[0]||!a[0])return s[0]?c:a[0]?-u:0;if(c!==u)return c;if(o.e!==r.e)return o.e>r.e^c<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]^c<0?1:-1;return n===i?0:n>i^c<0?1:-1};V.cosine=V.cos=function(){var r,e,t=this,n=t.constructor;return t.d?t.d[0]?(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=hc(n,js(n,t)),n.precision=r,n.rounding=e,$(Ut==2||Ut==3?t.neg():t,r,e,!0)):new n(1):new n(NaN)};V.cubeRoot=V.cbrt=function(){var r,e,t,n,i,o,s,a,c,u,l=this,m=l.constructor;if(!l.isFinite()||l.isZero())return new m(l);for(re=!1,o=l.s*Ue(l.s*l,1/3),!o||Math.abs(o)==1/0?(t=Ye(l.d),r=l.e,(o=(r-t.length+1)%3)&&(t+=o==1||o==-2?"0":"00"),o=Ue(t,1/3),r=$e((r+1)/3)-(r%3==(r<0?-1:2)),o==1/0?t="5e"+r:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+r),n=new m(t),n.s=l.s):n=new m(o.toString()),s=(r=m.precision)+3;;)if(a=n,c=a.times(a).times(a),u=c.plus(l),n=he(u.plus(l).times(a),u.plus(c),s+2,1),Ye(a.d).slice(0,s)===(t=Ye(n.d)).slice(0,s))if(t=t.slice(s-3,s+1),t=="9999"||!i&&t=="4999"){if(!i&&($(a,r+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,r+1,1),e=!n.times(n).times(n).eq(l));break}return re=!0,$(n,r,m.rounding,e)};V.decimalPlaces=V.dp=function(){var r,e=this.d,t=NaN;if(e){if(r=e.length-1,t=(r-$e(this.e/ee))*ee,r=e[r],r)for(;r%10==0;r/=10)t--;t<0&&(t=0)}return t};V.dividedBy=V.div=function(r){return he(this,new this.constructor(r))};V.dividedToIntegerBy=V.divToInt=function(r){var e=this,t=e.constructor;return $(he(e,new t(r),0,1,1),t.precision,t.rounding)};V.equals=V.eq=function(r){return this.cmp(r)===0};V.floor=function(){return $(new this.constructor(this),this.e+1,3)};V.greaterThan=V.gt=function(r){return this.cmp(r)>0};V.greaterThanOrEqualTo=V.gte=function(r){var e=this.cmp(r);return e==1||e===0};V.hyperbolicCosine=V.cosh=function(){var r,e,t,n,i,o=this,s=o.constructor,a=new s(1);if(!o.isFinite())return new s(o.s?1/0:NaN);if(o.isZero())return a;t=s.precision,n=s.rounding,s.precision=t+Math.max(o.e,o.sd())+4,s.rounding=1,i=o.d.length,i<32?(r=Math.ceil(i/3),e=(1/$i(4,r)).toString()):(r=16,e="2.3283064365386962890625e-10"),o=vn(s,1,o.times(e),new s(1),!0);for(var c,u=r,l=new s(8);u--;)c=o.times(o),o=a.minus(c.times(l.minus(c.times(l))));return $(o,s.precision=t,s.rounding=n,!0)};V.hyperbolicSine=V.sinh=function(){var r,e,t,n,i=this,o=i.constructor;if(!i.isFinite()||i.isZero())return new o(i);if(e=o.precision,t=o.rounding,o.precision=e+Math.max(i.e,i.sd())+4,o.rounding=1,n=i.d.length,n<3)i=vn(o,2,i,i,!0);else{r=1.4*Math.sqrt(n),r=r>16?16:r|0,i=i.times(1/$i(5,r)),i=vn(o,2,i,i,!0);for(var s,a=new o(5),c=new o(16),u=new o(20);r--;)s=i.times(i),i=i.times(a.plus(s.times(c.times(s).plus(u))))}return o.precision=e,o.rounding=t,$(i,e,t,!0)};V.hyperbolicTangent=V.tanh=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+7,n.rounding=1,he(t.sinh(),t.cosh(),n.precision=r,n.rounding=e)):new n(t.s)};V.inverseCosine=V.acos=function(){var r,e=this,t=e.constructor,n=e.abs().cmp(1),i=t.precision,o=t.rounding;return n!==-1?n===0?e.isNeg()?Lt(t,i,o):new t(0):new t(NaN):e.isZero()?Lt(t,i+4,o).times(.5):(t.precision=i+6,t.rounding=1,e=e.asin(),r=Lt(t,i+4,o).times(.5),t.precision=i,t.rounding=o,r.minus(e))};V.inverseHyperbolicCosine=V.acosh=function(){var r,e,t=this,n=t.constructor;return t.lte(1)?new n(t.eq(1)?0:NaN):t.isFinite()?(r=n.precision,e=n.rounding,n.precision=r+Math.max(Math.abs(t.e),t.sd())+4,n.rounding=1,re=!1,t=t.times(t).minus(1).sqrt().plus(t),re=!0,n.precision=r,n.rounding=e,t.ln()):new n(t)};V.inverseHyperbolicSine=V.asinh=function(){var r,e,t=this,n=t.constructor;return!t.isFinite()||t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+2*Math.max(Math.abs(t.e),t.sd())+6,n.rounding=1,re=!1,t=t.times(t).plus(1).sqrt().plus(t),re=!0,n.precision=r,n.rounding=e,t.ln())};V.inverseHyperbolicTangent=V.atanh=function(){var r,e,t,n,i=this,o=i.constructor;return i.isFinite()?i.e>=0?new o(i.abs().eq(1)?i.s/0:i.isZero()?i:NaN):(r=o.precision,e=o.rounding,n=i.sd(),Math.max(n,r)<2*-i.e-1?$(new o(i),r,e,!0):(o.precision=t=n-i.e,i=he(i.plus(1),new o(1).minus(i),t+r,1),o.precision=r+4,o.rounding=1,i=i.ln(),o.precision=r,o.rounding=e,i.times(.5))):new o(NaN)};V.inverseSine=V.asin=function(){var r,e,t,n,i=this,o=i.constructor;return i.isZero()?new o(i):(e=i.abs().cmp(1),t=o.precision,n=o.rounding,e!==-1?e===0?(r=Lt(o,t+4,n).times(.5),r.s=i.s,r):new o(NaN):(o.precision=t+6,o.rounding=1,i=i.div(new o(1).minus(i.times(i)).sqrt().plus(1)).atan(),o.precision=t,o.rounding=n,i.times(2)))};V.inverseTangent=V.atan=function(){var r,e,t,n,i,o,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding;if(u.isFinite()){if(u.isZero())return new l(u);if(u.abs().eq(1)&&m+4<=cr)return s=Lt(l,m+4,d).times(.25),s.s=u.s,s}else{if(!u.s)return new l(NaN);if(m+4<=cr)return s=Lt(l,m+4,d).times(.5),s.s=u.s,s}for(l.precision=a=m+10,l.rounding=1,t=Math.min(28,a/ee+2|0),r=t;r;--r)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(re=!1,e=Math.ceil(a/ee),n=1,c=u.times(u),s=new l(u),i=u;r!==-1;)if(i=i.times(c),o=s.minus(i.div(n+=2)),i=i.times(c),s=o.plus(i.div(n+=2)),s.d[e]!==void 0)for(r=e;s.d[r]===o.d[r]&&r--;);return t&&(s=s.times(2<<t-1)),re=!0,$(s,l.precision=m,l.rounding=d,!0)};V.isFinite=function(){return!!this.d};V.isInteger=V.isInt=function(){return!!this.d&&$e(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(r){return this.cmp(r)<0};V.lessThanOrEqualTo=V.lte=function(r){return this.cmp(r)<1};V.logarithm=V.log=function(r){var e,t,n,i,o,s,a,c,u=this,l=u.constructor,m=l.precision,d=l.rounding,p=5;if(r==null)r=new l(10),e=!0;else{if(r=new l(r),t=r.d,r.s<0||!t||!t[0]||r.eq(1))return new l(NaN);e=r.eq(10)}if(t=u.d,u.s<0||!t||!t[0]||u.eq(1))return new l(t&&!t[0]?-1/0:u.s!=1?NaN:t?0:1/0);if(e)if(t.length>1)o=!0;else{for(i=t[0];i%10===0;)i/=10;o=i!==1}if(re=!1,a=m+p,s=tn(u,a),n=e?ji(l,a+10):tn(r,a),c=he(s,n,a,1),jn(c.d,i=m,d))do if(a+=10,s=tn(u,a),n=e?ji(l,a+10):tn(r,a),c=he(s,n,a,1),!o){+Ye(c.d).slice(i+1,i+15)+1==1e14&&(c=$(c,m+1,0));break}while(jn(c.d,i+=10,d));return re=!0,$(c,m,d)};V.minus=V.sub=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.constructor;if(r=new f(r),!p.d||!r.d)return!p.s||!r.s?r=new f(NaN):p.d?r.s=-r.s:r=new f(r.d||p.s!==r.s?p:NaN),r;if(p.s!=r.s)return r.s=-r.s,p.plus(r);if(u=p.d,d=r.d,a=f.precision,c=f.rounding,!u[0]||!d[0]){if(d[0])r.s=-r.s;else if(u[0])r=new f(p);else return new f(c===3?-0:0);return re?$(r,a,c):r}if(t=$e(r.e/ee),l=$e(p.e/ee),u=u.slice(),o=l-t,o){for(m=o<0,m?(e=u,o=-o,s=d.length):(e=d,t=l,s=u.length),n=Math.max(Math.ceil(a/ee),s)+2,o>n&&(o=n,e.length=1),e.reverse(),n=o;n--;)e.push(0);e.reverse()}else{for(n=u.length,s=d.length,m=n<s,m&&(s=n),n=0;n<s;n++)if(u[n]!=d[n]){m=u[n]<d[n];break}o=0}for(m&&(e=u,u=d,d=e,r.s=-r.s),s=u.length,n=d.length-s;n>0;--n)u[s++]=0;for(n=d.length;n>o;){if(u[--n]<d[n]){for(i=n;i&&u[--i]===0;)u[i]=Ot-1;--u[i],u[n]+=Ot}u[n]-=d[n]}for(;u[--s]===0;)u.pop();for(;u[0]===0;u.shift())--t;return u[0]?(r.d=u,r.e=Zi(u,t),re?$(r,a,c):r):new f(c===3?-0:0)};V.modulo=V.mod=function(r){var e,t=this,n=t.constructor;return r=new n(r),!t.d||!r.s||r.d&&!r.d[0]?new n(NaN):!r.d||t.d&&!t.d[0]?$(new n(t),n.precision,n.rounding):(re=!1,n.modulo==9?(e=he(t,r.abs(),0,3,1),e.s*=r.s):e=he(t,r,0,n.modulo,1),e=e.times(r),re=!0,t.minus(e))};V.naturalExponential=V.exp=function(){return lr(this)};V.naturalLogarithm=V.ln=function(){return tn(this)};V.negated=V.neg=function(){var r=new this.constructor(this);return r.s=-r.s,$(r)};V.plus=V.add=function(r){var e,t,n,i,o,s,a,c,u,l,m=this,d=m.constructor;if(r=new d(r),!m.d||!r.d)return!m.s||!r.s?r=new d(NaN):m.d||(r=new d(r.d||m.s===r.s?m:NaN)),r;if(m.s!=r.s)return r.s=-r.s,m.minus(r);if(u=m.d,l=r.d,a=d.precision,c=d.rounding,!u[0]||!l[0])return l[0]||(r=new d(m)),re?$(r,a,c):r;if(o=$e(m.e/ee),n=$e(r.e/ee),u=u.slice(),i=o-n,i){for(i<0?(t=u,i=-i,s=l.length):(t=l,n=o,s=u.length),o=Math.ceil(a/ee),s=o>s?o+1:s+1,i>s&&(i=s,t.length=1),t.reverse();i--;)t.push(0);t.reverse()}for(s=u.length,i=l.length,s-i<0&&(i=s,t=l,l=u,u=t),e=0;i;)e=(u[--i]=u[i]+l[i]+e)/Ot|0,u[i]%=Ot;for(e&&(u.unshift(e),++n),s=u.length;u[--s]==0;)u.pop();return r.d=u,r.e=Zi(u,n),re?$(r,a,c):r};V.precision=V.sd=function(r){var e,t=this;if(r!==void 0&&r!==!!r&&r!==1&&r!==0)throw Error(nn+r);return t.d?(e=Xs(t.d),r&&t.e+1>e&&(e=t.e+1)):e=NaN,e};V.round=function(){var r=this,e=r.constructor;return $(new e(r),r.e+1,e.rounding)};V.sine=V.sin=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+Math.max(t.e,t.sd())+ee,n.rounding=1,t=Ic(n,js(n,t)),n.precision=r,n.rounding=e,$(Ut>2?t.neg():t,r,e,!0)):new n(NaN)};V.squareRoot=V.sqrt=function(){var r,e,t,n,i,o,s=this,a=s.d,c=s.e,u=s.s,l=s.constructor;if(u!==1||!a||!a[0])return new l(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);for(re=!1,u=Math.sqrt(+s),u==0||u==1/0?(e=Ye(a),(e.length+c)%2==0&&(e+="0"),u=Math.sqrt(e),c=$e((c+1)/2)-(c<0||c%2),u==1/0?e="5e"+c:(e=u.toExponential(),e=e.slice(0,e.indexOf("e")+1)+c),n=new l(e)):n=new l(u.toString()),t=(c=l.precision)+3;;)if(o=n,n=o.plus(he(s,o,t+2,1)).times(.5),Ye(o.d).slice(0,t)===(e=Ye(n.d)).slice(0,t))if(e=e.slice(t-3,t+1),e=="9999"||!i&&e=="4999"){if(!i&&($(o,c+1,0),o.times(o).eq(s))){n=o;break}t+=4,i=1}else{(!+e||!+e.slice(1)&&e.charAt(0)=="5")&&($(n,c+1,1),r=!n.times(n).eq(s));break}return re=!0,$(n,c,l.rounding,r)};V.tangent=V.tan=function(){var r,e,t=this,n=t.constructor;return t.isFinite()?t.isZero()?new n(t):(r=n.precision,e=n.rounding,n.precision=r+10,n.rounding=1,t=t.sin(),t.s=1,t=he(t,new n(1).minus(t.times(t)).sqrt(),r+10,0),n.precision=r,n.rounding=e,$(Ut==2||Ut==4?t.neg():t,r,e,!0)):new n(NaN)};V.times=V.mul=function(r){var e,t,n,i,o,s,a,c,u,l=this,m=l.constructor,d=l.d,p=(r=new m(r)).d;if(r.s*=l.s,!d||!d[0]||!p||!p[0])return new m(!r.s||d&&!d[0]&&!p||p&&!p[0]&&!d?NaN:!d||!p?r.s/0:r.s*0);for(t=$e(l.e/ee)+$e(r.e/ee),c=d.length,u=p.length,c<u&&(o=d,d=p,p=o,s=c,c=u,u=s),o=[],s=c+u,n=s;n--;)o.push(0);for(n=u;--n>=0;){for(e=0,i=c+n;i>n;)a=o[i]+p[n]*d[i-n-1]+e,o[i--]=a%Ot|0,e=a/Ot|0;o[i]=(o[i]+e)%Ot|0}for(;!o[--s];)o.pop();return e?++t:o.shift(),r.d=o,r.e=Zi(o,t),re?$(r,m.precision,m.rounding):r};V.toBinary=function(r,e){return dr(this,2,r,e)};V.toDecimalPlaces=V.toDP=function(r,e){var t=this,n=t.constructor;return t=new n(t),r===void 0?t:(lt(r,0,on),e===void 0?e=n.rounding:lt(e,0,8),$(t,r+t.e+1,e))};V.toExponential=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=Dt(n,!0):(lt(r,0,on),e===void 0?e=i.rounding:lt(e,0,8),n=$(new i(n),r+1,e),t=Dt(n,!0,r+1)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toFixed=function(r,e){var t,n,i=this,o=i.constructor;return r===void 0?t=Dt(i):(lt(r,0,on),e===void 0?e=o.rounding:lt(e,0,8),n=$(new o(i),r+i.e+1,e),t=Dt(n,!1,r+n.e+1)),i.isNeg()&&!i.isZero()?"-"+t:t};V.toFraction=function(r){var e,t,n,i,o,s,a,c,u,l,m,d,p=this,f=p.d,b=p.constructor;if(!f)return new b(p);if(u=t=new b(1),n=c=new b(0),e=new b(n),o=e.e=Xs(f)-p.e-1,s=o%ee,e.d[0]=Ue(10,s<0?ee+s:s),r==null)r=o>0?e:u;else{if(a=new b(r),!a.isInt()||a.lt(u))throw Error(nn+a);r=a.gt(e)?o>0?e:u:a}for(re=!1,a=new b(Ye(f)),l=b.precision,b.precision=o=f.length*ee*2;m=he(a,e,0,1,1),i=t.plus(m.times(n)),i.cmp(r)!=1;)t=n,n=i,i=u,u=c.plus(m.times(i)),c=i,i=e,e=a.minus(m.times(i)),a=i;return i=he(r.minus(t),n,0,1,1),c=c.plus(i.times(u)),t=t.plus(i.times(n)),c.s=u.s=p.s,d=he(u,n,o,1).minus(p).abs().cmp(he(c,t,o,1).minus(p).abs())<1?[u,n]:[c,t],b.precision=l,re=!0,d};V.toHexadecimal=V.toHex=function(r,e){return dr(this,16,r,e)};V.toNearest=function(r,e){var t=this,n=t.constructor;if(t=new n(t),r==null){if(!t.d)return t;r=new n(1),e=n.rounding}else{if(r=new n(r),e===void 0?e=n.rounding:lt(e,0,8),!t.d)return r.s?t:r;if(!r.d)return r.s&&(r.s=t.s),r}return r.d[0]?(re=!1,t=he(t,r,0,e,1).times(r),re=!0,$(t)):(r.s=t.s,t=r),t};V.toNumber=function(){return+this};V.toOctal=function(r,e){return dr(this,8,r,e)};V.toPower=V.pow=function(r){var e,t,n,i,o,s,a=this,c=a.constructor,u=+(r=new c(r));if(!a.d||!r.d||!a.d[0]||!r.d[0])return new c(Ue(+a,u));if(a=new c(a),a.eq(1))return a;if(n=c.precision,o=c.rounding,r.eq(1))return $(a,n,o);if(e=$e(r.e/ee),e>=r.d.length-1&&(t=u<0?-u:u)<=kc)return i=zs(c,a,t,n),r.s<0?new c(1).div(i):$(i,n,o);if(s=a.s,s<0){if(e<r.d.length-1)return new c(NaN);if((r.d[e]&1)==0&&(s=1),a.e==0&&a.d[0]==1&&a.d.length==1)return a.s=s,a}return t=Ue(+a,u),e=t==0||!isFinite(t)?$e(u*(Math.log("0."+Ye(a.d))/Math.LN10+a.e+1)):new c(t+"").e,e>c.maxE+1||e<c.minE-1?new c(e>0?s/0:0):(re=!1,c.rounding=a.s=1,t=Math.min(12,(e+"").length),i=lr(r.times(tn(a,n+t)),n),i.d&&(i=$(i,n+5,1),jn(i.d,n,o)&&(e=n+10,i=$(lr(r.times(tn(a,e+t)),e),e+5,1),+Ye(i.d).slice(n+1,n+15)+1==1e14&&(i=$(i,n+1,0)))),i.s=s,re=!0,c.rounding=o,$(i,n,o))};V.toPrecision=function(r,e){var t,n=this,i=n.constructor;return r===void 0?t=Dt(n,n.e<=i.toExpNeg||n.e>=i.toExpPos):(lt(r,1,on),e===void 0?e=i.rounding:lt(e,0,8),n=$(new i(n),r,e),t=Dt(n,r<=n.e||n.e<=i.toExpNeg,r)),n.isNeg()&&!n.isZero()?"-"+t:t};V.toSignificantDigits=V.toSD=function(r,e){var t=this,n=t.constructor;return r===void 0?(r=n.precision,e=n.rounding):(lt(r,1,on),e===void 0?e=n.rounding:lt(e,0,8)),$(new n(t),r,e)};V.toString=function(){var r=this,e=r.constructor,t=Dt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()&&!r.isZero()?"-"+t:t};V.truncated=V.trunc=function(){return $(new this.constructor(this),this.e+1,1)};V.valueOf=V.toJSON=function(){var r=this,e=r.constructor,t=Dt(r,r.e<=e.toExpNeg||r.e>=e.toExpPos);return r.isNeg()?"-"+t:t};function Ye(r){var e,t,n,i=r.length-1,o="",s=r[0];if(i>0){for(o+=s,e=1;e<i;e++)n=r[e]+"",t=ee-n.length,t&&(o+=en(t)),o+=n;s=r[e],n=s+"",t=ee-n.length,t&&(o+=en(t))}else if(s===0)return"0";for(;s%10===0;)s/=10;return o+s}function lt(r,e,t){if(r!==~~r||r<e||r>t)throw Error(nn+r)}function jn(r,e,t,n){var i,o,s,a;for(o=r[0];o>=10;o/=10)--e;return--e<0?(e+=ee,i=0):(i=Math.ceil((e+1)/ee),e%=ee),o=Ue(10,ee-e),a=r[i]%o|0,n==null?e<3?(e==0?a=a/100|0:e==1&&(a=a/10|0),s=t<4&&a==99999||t>3&&a==49999||a==5e4||a==0):s=(t<4&&a+1==o||t>3&&a+1==o/2)&&(r[i+1]/o/100|0)==Ue(10,e-2)-1||(a==o/2||a==0)&&(r[i+1]/o/100|0)==0:e<4?(e==0?a=a/1e3|0:e==1?a=a/100|0:e==2&&(a=a/10|0),s=(n||t<4)&&a==9999||!n&&t>3&&a==4999):s=((n||t<4)&&a+1==o||!n&&t>3&&a+1==o/2)&&(r[i+1]/o/1e3|0)==Ue(10,e-3)-1,s}function zi(r,e,t){for(var n,i=[0],o,s=0,a=r.length;s<a;){for(o=i.length;o--;)i[o]*=e;for(i[0]+=ar.indexOf(r.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 hc(r,e){var t,n,i;if(e.isZero())return e;n=e.d.length,n<32?(t=Math.ceil(n/3),i=(1/$i(4,t)).toString()):(t=16,i="2.3283064365386962890625e-10"),r.precision+=t,e=vn(r,1,e.times(i),new r(1));for(var o=t;o--;){var s=e.times(e);e=s.times(s).minus(s).times(8).plus(1)}return r.precision-=t,e}var he=function(){function r(n,i,o){var s,a=0,c=n.length;for(n=n.slice();c--;)s=n[c]*i+a,n[c]=s%o|0,a=s/o|0;return a&&n.unshift(a),n}function e(n,i,o,s){var a,c;if(o!=s)c=o>s?1:-1;else for(a=c=0;a<o;a++)if(n[a]!=i[a]){c=n[a]>i[a]?1:-1;break}return c}function t(n,i,o,s){for(var a=0;o--;)n[o]-=a,a=n[o]<i[o]?1:0,n[o]=a*s+n[o]-i[o];for(;!n[0]&&n.length>1;)n.shift()}return function(n,i,o,s,a,c){var u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C,x,K,v,R=n.constructor,G=n.s==i.s?1:-1,U=n.d,D=i.d;if(!U||!U[0]||!D||!D[0])return new R(!n.s||!i.s||(U?D&&U[0]==D[0]:!D)?NaN:U&&U[0]==0||!D?G*0:G/0);for(c?(p=1,l=n.e-i.e):(c=Ot,p=ee,l=$e(n.e/p)-$e(i.e/p)),K=D.length,C=U.length,g=new R(G),w=g.d=[],m=0;D[m]==(U[m]||0);m++);if(D[m]>(U[m]||0)&&l--,o==null?(h=o=R.precision,s=R.rounding):a?h=o+(n.e-i.e)+1:h=o,h<0)w.push(1),f=!0;else{if(h=h/p+2|0,m=0,K==1){for(d=0,D=D[0],h++;(m<C||d)&&h--;m++)S=d*c+(U[m]||0),w[m]=S/D|0,d=S%D|0;f=d||m<C}else{for(d=c/(D[0]+1)|0,d>1&&(D=r(D,d,c),U=r(U,d,c),K=D.length,C=U.length),I=K,k=U.slice(0,K),P=k.length;P<K;)k[P++]=0;v=D.slice(),v.unshift(0),x=D[0],D[1]>=c/2&&++x;do d=0,u=e(D,k,K,P),u<0?(B=k[0],K!=P&&(B=B*c+(k[1]||0)),d=B/x|0,d>1?(d>=c&&(d=c-1),b=r(D,d,c),y=b.length,P=k.length,u=e(b,k,y,P),u==1&&(d--,t(b,K<y?v:D,y,c))):(d==0&&(u=d=1),b=D.slice()),y=b.length,y<P&&b.unshift(0),t(k,b,P,c),u==-1&&(P=k.length,u=e(D,k,K,P),u<1&&(d++,t(k,K<P?v:D,P,c))),P=k.length):u===0&&(d++,k=[0]),w[m++]=d,u&&k[0]?k[P++]=U[I]||0:(k=[U[I]],P=1);while((I++<C||k[0]!==void 0)&&h--);f=k[0]!==void 0}w[0]||w.shift()}if(p==1)g.e=l,Ds=f;else{for(m=1,d=w[0];d>=10;d/=10)m++;g.e=m+l*p-1,$(g,a?o+g.e+1:o,s,f)}return g}}();function $(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor;e:if(e!=null){if(m=r.d,!m)return r;for(i=1,a=m[0];a>=10;a/=10)i++;if(o=e-i,o<0)o+=ee,s=e,l=m[d=0],c=l/Ue(10,i-s-1)%10|0;else if(d=Math.ceil((o+1)/ee),a=m.length,d>=a)if(n){for(;a++<=d;)m.push(0);l=c=0,i=1,o%=ee,s=o-ee+1}else break e;else{for(l=a=m[d],i=1;a>=10;a/=10)i++;o%=ee,s=o-ee+i,c=s<0?0:l/Ue(10,i-s-1)%10|0}if(n=n||e<0||m[d+1]!==void 0||(s<0?l:l%Ue(10,i-s-1)),u=t<4?(c||n)&&(t==0||t==(r.s<0?3:2)):c>5||c==5&&(t==4||n||t==6&&(o>0?s>0?l/Ue(10,i-s):0:m[d-1])%10&1||t==(r.s<0?8:7)),e<1||!m[0])return m.length=0,u?(e-=r.e+1,m[0]=Ue(10,(ee-e%ee)%ee),r.e=-e||0):m[0]=r.e=0,r;if(o==0?(m.length=d,a=1,d--):(m.length=d+1,a=Ue(10,ee-o),m[d]=s>0?(l/Ue(10,i-s)%Ue(10,s)|0)*a:0),u)for(;;)if(d==0){for(o=1,s=m[0];s>=10;s/=10)o++;for(s=m[0]+=a,a=1;s>=10;s/=10)a++;o!=a&&(r.e++,m[0]==Ot&&(m[0]=1));break}else{if(m[d]+=a,m[d]!=Ot)break;m[d--]=0,a=1}for(o=m.length;m[--o]===0;)m.pop()}return re&&(r.e>p.maxE?(r.d=null,r.e=NaN):r.e<p.minE&&(r.e=0,r.d=[0])),r}function Dt(r,e,t){if(!r.isFinite())return Ys(r);var n,i=r.e,o=Ye(r.d),s=o.length;return e?(t&&(n=t-s)>0?o=o.charAt(0)+"."+o.slice(1)+en(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r.e<0?"e":"e+")+r.e):i<0?(o="0."+en(-i-1)+o,t&&(n=t-s)>0&&(o+=en(n))):i>=s?(o+=en(i+1-s),t&&(n=t-i-1)>0&&(o=o+"."+en(n))):((n=i+1)<s&&(o=o.slice(0,n)+"."+o.slice(n)),t&&(n=t-s)>0&&(i+1===s&&(o+="."),o+=en(n))),o}function Zi(r,e){var t=r[0];for(e*=ee;t>=10;t/=10)e++;return e}function ji(r,e,t){if(e>Pc)throw re=!0,t&&(r.precision=t),Error(Ws);return $(new r(Qi),e,1,!0)}function Lt(r,e,t){if(e>cr)throw Error(Ws);return $(new r(Yi),e,t,!0)}function Xs(r){var e=r.length-1,t=e*ee+1;if(e=r[e],e){for(;e%10==0;e/=10)t--;for(e=r[0];e>=10;e/=10)t++}return t}function en(r){for(var e="";r--;)e+="0";return e}function zs(r,e,t,n){var i,o=new r(1),s=Math.ceil(n/ee+4);for(re=!1;;){if(t%2&&(o=o.times(e),Es(o.d,s)&&(i=!0)),t=$e(t/2),t===0){t=o.d.length-1,i&&o.d[t]===0&&++o.d[t];break}e=e.times(e),Es(e.d,s)}return re=!0,o}function Vs(r){return r.d[r.d.length-1]&1}function Qs(r,e,t){for(var n,i=new r(e[0]),o=0;++o<e.length;)if(n=new r(e[o]),n.s)i[t](n)&&(i=n);else{i=n;break}return i}function lr(r,e){var t,n,i,o,s,a,c,u=0,l=0,m=0,d=r.constructor,p=d.rounding,f=d.precision;if(!r.d||!r.d[0]||r.e>17)return new d(r.d?r.d[0]?r.s<0?0:1/0:1:r.s?r.s<0?0:r:0/0);for(e==null?(re=!1,c=f):c=e,a=new d(.03125);r.e>-2;)r=r.times(a),m+=5;for(n=Math.log(Ue(2,m))/Math.LN10*2+5|0,c+=n,t=o=s=new d(1),d.precision=c;;){if(o=$(o.times(r),c,1),t=t.times(++l),a=s.plus(he(o,t,c,1)),Ye(a.d).slice(0,c)===Ye(s.d).slice(0,c)){for(i=m;i--;)s=$(s.times(s),c,1);if(e==null)if(u<3&&jn(s.d,c-n,p,u))d.precision=c+=10,t=o=a=new d(1),l=0,u++;else return $(s,d.precision=f,p,re=!0);else return d.precision=f,s}s=a}}function tn(r,e){var t,n,i,o,s,a,c,u,l,m,d,p=1,f=10,b=r,y=b.d,g=b.constructor,w=g.rounding,k=g.precision;if(b.s<0||!y||!y[0]||!b.e&&y[0]==1&&y.length==1)return new g(y&&!y[0]?-1/0:b.s!=1?NaN:y?0:b);if(e==null?(re=!1,l=k):l=e,g.precision=l+=f,t=Ye(y),n=t.charAt(0),Math.abs(o=b.e)<15e14){for(;n<7&&n!=1||n==1&&t.charAt(1)>3;)b=b.times(r),t=Ye(b.d),n=t.charAt(0),p++;o=b.e,n>1?(b=new g("0."+t),o++):b=new g(n+"."+t.slice(1))}else return u=ji(g,l+2,k).times(o+""),b=tn(new g(n+"."+t.slice(1)),l-f).plus(u),g.precision=k,e==null?$(b,k,w,re=!0):b;for(m=b,c=s=b=he(b.minus(1),b.plus(1),l,1),d=$(b.times(b),l,1),i=3;;){if(s=$(s.times(d),l,1),u=c.plus(he(s,new g(i),l,1)),Ye(u.d).slice(0,l)===Ye(c.d).slice(0,l))if(c=c.times(2),o!==0&&(c=c.plus(ji(g,l+2,k).times(o+""))),c=he(c,new g(p),l,1),e==null)if(jn(c.d,l-f,w,a))g.precision=l+=f,u=s=b=he(m.minus(1),m.plus(1),l,1),d=$(b.times(b),l,1),i=a=1;else return $(c,g.precision=k,w,re=!0);else return g.precision=k,c;c=u,i+=2}}function Ys(r){return String(r.s*r.s/0)}function mr(r,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,r.e=t=t-n-1,r.d=[],n=(t+1)%ee,t<0&&(n+=ee),n<i){for(n&&r.d.push(+e.slice(0,n)),i-=ee;n<i;)r.d.push(+e.slice(n,n+=ee));e=e.slice(n),n=ee-e.length}else n-=i;for(;n--;)e+="0";r.d.push(+e),re&&(r.e>r.constructor.maxE?(r.d=null,r.e=NaN):r.e<r.constructor.minE&&(r.e=0,r.d=[0]))}else r.e=0,r.d=[0];return r}function Tc(r,e){var t,n,i,o,s,a,c,u,l;if(e.indexOf("_")>-1){if(e=e.replace(/(\d)_(?=\d)/g,"$1"),Gs.test(e))return mr(r,e)}else if(e==="Infinity"||e==="NaN")return+e||(r.s=NaN),r.e=NaN,r.d=null,r;if(wc.test(e))t=16,e=e.toLowerCase();else if(gc.test(e))t=2;else if(Ac.test(e))t=8;else throw Error(nn+e);for(o=e.search(/p/i),o>0?(c=+e.slice(o+1),e=e.substring(2,o)):e=e.slice(2),o=e.indexOf("."),s=o>=0,n=r.constructor,s&&(e=e.replace(".",""),a=e.length,o=a-o,i=zs(n,new n(t),o,o*2)),u=zi(e,t,Ot),l=u.length-1,o=l;u[o]===0;--o)u.pop();return o<0?new n(r.s*0):(r.e=Zi(u,l),r.d=u,re=!1,s&&(r=he(r,i,a*4)),c&&(r=r.times(Math.abs(c)<54?Ue(2,c):Hn.pow(2,c))),re=!0,r)}function Ic(r,e){var t,n=e.d.length;if(n<3)return e.isZero()?e:vn(r,2,e,e);t=1.4*Math.sqrt(n),t=t>16?16:t|0,e=e.times(1/$i(5,t)),e=vn(r,2,e,e);for(var i,o=new r(5),s=new r(16),a=new r(20);t--;)i=e.times(e),e=e.times(o.plus(i.times(s.times(i).minus(a))));return e}function vn(r,e,t,n,i){var o,s,a,c,u=1,l=r.precision,m=Math.ceil(l/ee);for(re=!1,c=t.times(t),a=new r(n);;){if(s=he(a.times(c),new r(e++*e++),l,1),a=i?n.plus(s):n.minus(s),n=he(s.times(c),new r(e++*e++),l,1),s=a.plus(n),s.d[m]!==void 0){for(o=m;s.d[o]===a.d[o]&&o--;);if(o==-1)break}o=a,a=n,n=s,s=o,u++}return re=!0,s.d.length=m+1,s}function $i(r,e){for(var t=r;--e;)t*=r;return t}function js(r,e){var t,n=e.s<0,i=Lt(r,r.precision,1),o=i.times(.5);if(e=e.abs(),e.lte(o))return Ut=n?4:1,e;if(t=e.divToInt(i),t.isZero())Ut=n?3:2;else{if(e=e.minus(t.times(i)),e.lte(o))return Ut=Vs(t)?n?2:3:n?4:1,e;Ut=Vs(t)?n?1:4:n?3:2}return e.minus(i).abs()}function dr(r,e,t,n){var i,o,s,a,c,u,l,m,d,p=r.constructor,f=t!==void 0;if(f?(lt(t,1,on),n===void 0?n=p.rounding:lt(n,0,8)):(t=p.precision,n=p.rounding),!r.isFinite())l=Ys(r);else{for(l=Dt(r),s=l.indexOf("."),f?(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=zi(Dt(d),10,i),d.e=d.d.length),m=zi(l,10,i),o=c=m.length;m[--c]==0;)m.pop();if(!m[0])l=f?"0p+0":"0";else{if(s<0?o--:(r=new p(r),r.d=m,r.e=o,r=he(r,d,t,n,0,i),m=r.d,o=r.e,u=Ds),s=m[t],a=i/2,u=u||m[t+1]!==void 0,u=n<4?(s!==void 0||u)&&(n===0||n===(r.s<0?3:2)):s>a||s===a&&(n===4||u||n===6&&m[t-1]&1||n===(r.s<0?8:7)),m.length=t,u)for(;++m[--t]>i-1;)m[t]=0,t||(++o,m.unshift(1));for(c=m.length;!m[c-1];--c);for(s=0,l="";s<c;s++)l+=ar.charAt(m[s]);if(f){if(c>1)if(e==16||e==8){for(s=e==16?4:3,--c;c%s;c++)l+="0";for(m=zi(l,i,e),c=m.length;!m[c-1];--c);for(s=1,l="1.";s<c;s++)l+=ar.charAt(m[s])}else l=l.charAt(0)+"."+l.slice(1);l=l+(o<0?"p":"p+")+o}else if(o<0){for(;++o;)l="0"+l;l="0."+l}else if(++o>c)for(o-=c;o--;)l+="0";else o<c&&(l=l.slice(0,o)+"."+l.slice(o))}l=(e==16?"0x":e==2?"0b":e==8?"0o":"")+l}return r.s<0?"-"+l:l}function Es(r,e){if(r.length>e)return r.length=e,!0}function Bc(r){return new this(r).abs()}function xc(r){return new this(r).acos()}function Sc(r){return new this(r).acosh()}function Kc(r,e){return new this(r).plus(e)}function Cc(r){return new this(r).asin()}function Rc(r){return new this(r).asinh()}function Lc(r){return new this(r).atan()}function Oc(r){return new this(r).atanh()}function Mc(r,e){r=new this(r),e=new this(e);var t,n=this.precision,i=this.rounding,o=n+4;return!r.s||!e.s?t=new this(NaN):!r.d&&!e.d?(t=Lt(this,o,1).times(e.s>0?.25:.75),t.s=r.s):!e.d||r.isZero()?(t=e.s<0?Lt(this,n,i):new this(0),t.s=r.s):!r.d||e.isZero()?(t=Lt(this,o,1).times(.5),t.s=r.s):e.s<0?(this.precision=o,this.rounding=1,t=this.atan(he(r,e,o,1)),e=Lt(this,o,1),this.precision=n,this.rounding=i,t=r.s<0?t.minus(e):t.plus(e)):t=this.atan(he(r,e,o,1)),t}function Nc(r){return new this(r).cbrt()}function _c(r){return $(r=new this(r),r.e+1,2)}function vc(r,e,t){return new this(r).clamp(e,t)}function Vc(r){if(!r||typeof r!="object")throw Error(Hi+"Object expected");var e,t,n,i=r.defaults===!0,o=["precision",1,on,"rounding",0,8,"toExpNeg",-_n,0,"toExpPos",0,_n,"maxE",0,_n,"minE",-_n,0,"modulo",0,9];for(e=0;e<o.length;e+=3)if(t=o[e],i&&(this[t]=ur[t]),(n=r[t])!==void 0)if($e(n)===n&&n>=o[e+1]&&n<=o[e+2])this[t]=n;else throw Error(nn+t+": "+n);if(t="crypto",i&&(this[t]=ur[t]),(n=r[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(qs);else this[t]=!1;else throw Error(nn+t+": "+n);return this}function Ec(r){return new this(r).cos()}function Fc(r){return new this(r).cosh()}function Hs(r){var e,t,n;function i(o){var s,a,c,u=this;if(!(u instanceof i))return new i(o);if(u.constructor=i,Fs(o)){u.s=o.s,re?!o.d||o.e>i.maxE?(u.e=NaN,u.d=null):o.e<i.minE?(u.e=0,u.d=[0]):(u.e=o.e,u.d=o.d.slice()):(u.e=o.e,u.d=o.d?o.d.slice():o.d);return}if(c=typeof o,c==="number"){if(o===0){u.s=1/o<0?-1:1,u.e=0,u.d=[0];return}if(o<0?(o=-o,u.s=-1):u.s=1,o===~~o&&o<1e7){for(s=0,a=o;a>=10;a/=10)s++;re?s>i.maxE?(u.e=NaN,u.d=null):s<i.minE?(u.e=0,u.d=[0]):(u.e=s,u.d=[o]):(u.e=s,u.d=[o]);return}else if(o*0!==0){o||(u.s=NaN),u.e=NaN,u.d=null;return}return mr(u,o.toString())}else if(c!=="string")throw Error(nn+o);return(a=o.charCodeAt(0))===45?(o=o.slice(1),u.s=-1):(a===43&&(o=o.slice(1)),u.s=1),Gs.test(o)?mr(u,o):Tc(u,o)}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=Vc,i.clone=Hs,i.isDecimal=Fs,i.abs=Bc,i.acos=xc,i.acosh=Sc,i.add=Kc,i.asin=Cc,i.asinh=Rc,i.atan=Lc,i.atanh=Oc,i.atan2=Mc,i.cbrt=Nc,i.ceil=_c,i.clamp=vc,i.cos=Ec,i.cosh=Fc,i.div=Dc,i.exp=Wc,i.floor=qc,i.hypot=Uc,i.ln=Gc,i.log=Xc,i.log10=Qc,i.log2=zc,i.max=Yc,i.min=jc,i.mod=Hc,i.mul=Zc,i.pow=$c,i.random=Jc,i.round=el,i.sign=tl,i.sin=nl,i.sinh=il,i.sqrt=ol,i.sub=rl,i.sum=sl,i.tan=al,i.tanh=ul,i.trunc=cl,r===void 0&&(r={}),r&&r.defaults!==!0)for(n=["precision","rounding","toExpNeg","toExpPos","maxE","minE","modulo","crypto"],e=0;e<n.length;)r.hasOwnProperty(t=n[e++])||(r[t]=this[t]);return i.config(r),i}function Dc(r,e){return new this(r).div(e)}function Wc(r){return new this(r).exp()}function qc(r){return $(r=new this(r),r.e+1,3)}function Uc(){var r,e,t=new this(0);for(re=!1,r=0;r<arguments.length;)if(e=new this(arguments[r++]),e.d)t.d&&(t=t.plus(e.times(e)));else{if(e.s)return re=!0,new this(1/0);t=e}return re=!0,t.sqrt()}function Fs(r){return r instanceof Hn||r&&r.toStringTag===Us||!1}function Gc(r){return new this(r).ln()}function Xc(r,e){return new this(r).log(e)}function zc(r){return new this(r).log(2)}function Qc(r){return new this(r).log(10)}function Yc(){return Qs(this,arguments,"lt")}function jc(){return Qs(this,arguments,"gt")}function Hc(r,e){return new this(r).mod(e)}function Zc(r,e){return new this(r).mul(e)}function $c(r,e){return new this(r).pow(e)}function Jc(r){var e,t,n,i,o=0,s=new this(1),a=[];if(r===void 0?r=this.precision:lt(r,1,on),n=Math.ceil(r/ee),this.crypto)if(crypto.getRandomValues)for(e=crypto.getRandomValues(new Uint32Array(n));o<n;)i=e[o],i>=429e7?e[o]=crypto.getRandomValues(new Uint32Array(1))[0]:a[o++]=i%1e7;else if(crypto.randomBytes){for(e=crypto.randomBytes(n*=4);o<n;)i=e[o]+(e[o+1]<<8)+(e[o+2]<<16)+((e[o+3]&127)<<24),i>=214e7?crypto.randomBytes(4).copy(e,o):(a.push(i%1e7),o+=4);o=n/4}else throw Error(qs);else for(;o<n;)a[o++]=Math.random()*1e7|0;for(n=a[--o],r%=ee,n&&r&&(i=Ue(10,ee-r),a[o]=(n/i|0)*i);a[o]===0;o--)a.pop();if(o<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 el(r){return $(r=new this(r),r.e+1,this.rounding)}function tl(r){return r=new this(r),r.d?r.d[0]?r.s:0*r.s:r.s||NaN}function nl(r){return new this(r).sin()}function il(r){return new this(r).sinh()}function ol(r){return new this(r).sqrt()}function rl(r,e){return new this(r).sub(e)}function sl(){var r=0,e=arguments,t=new this(e[r]);for(re=!1;t.s&&++r<e.length;)t=t.plus(e[r]);return re=!0,$(t,this.precision,this.rounding)}function al(r){return new this(r).tan()}function ul(r){return new this(r).tanh()}function cl(r){return $(r=new this(r),r.e+1,1)}V[Symbol.for("nodejs.util.inspect.custom")]=V.toString;V[Symbol.toStringTag]="Decimal";var Hn=V.constructor=Hs(ur);Qi=new Hn(Qi);Yi=new Hn(Yi);var M=Hn;import gl from"big.js";import to from"bn.js";import ll from"toformat";var ml=ll,Zn=ml;import eo from"big.js";import pl from"bn.js";import fl from"decimal.js-light";import $n from"bn.js";var Zs=9007199254740991;function Z(r){let e=ce("Raydium_parseBigNumberish");if(r instanceof $n)return r;if(typeof r=="string"){if(r.match(/^-?[0-9]+$/))return new $n(r);e.logWithError(`invalid BigNumberish string: ${r}`)}return typeof r=="number"?(r%1&&e.logWithError(`BigNumberish number underflow: ${r}`),(r>=Zs||r<=-Zs)&&e.logWithError(`BigNumberish number overflow: ${r}`),new $n(String(r))):typeof r=="bigint"?new $n(r.toString()):(e.error(`invalid BigNumberish value: ${r}`),new $n(0))}var Ji=ce("module/fraction"),pr=Zn(eo),Jn=Zn(fl),bl={[0]:Jn.ROUND_DOWN,[1]:Jn.ROUND_HALF_UP,[2]:Jn.ROUND_UP},yl={[0]:eo.roundDown,[1]:eo.roundHalfUp,[2]:eo.roundUp},fe=class{constructor(e,t=new pl(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)||Ji.logWithError(`${e} is not an integer.`),e<=0&&Ji.logWithError(`${e} is not positive.`),Jn.set({precision:e+1,rounding:bl[n]});let i=new Jn(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)||Ji.logWithError(`${e} is not an integer.`),e<0&&Ji.logWithError(`${e} is negative.`),pr.DP=e,pr.RM=yl[n]||1,new pr(this.numerator.toString()).div(this.denominator.toString()).toFormat(e,t)}isZero(){return this.numerator.isZero()}};var wl=ce("Raydium_amount"),$s=Zn(gl);function Al(r,e){let t="0",n="0";if(r.includes(".")){let i=r.split(".");i.length===2?([t,n]=i,n=n.padEnd(e,"0")):wl.logWithError(`invalid number string, num: ${r}`)}else t=r;return[t,n.slice(0,e)||n]}var ye=class extends fe{constructor(t,n,i=!0,o){let s=new to(0),a=fr.pow(new to(t.decimals));if(i)s=Z(n);else{let c=new to(0),u=new to(0);if(typeof n=="string"||typeof n=="number"||typeof n=="bigint"){let[l,m]=Al(n.toString(),t.decimals);c=Z(l),u=Z(m)}c=c.mul(a),s=c.add(u)}super(s,a);this.logger=ce(o||"TokenAmount"),this.token=t}get raw(){return this.numerator}isZero(){return this.raw.isZero()}gt(t){return this.token.equals(t.token)||this.logger.logWithError("gt token not equals"),this.raw.gt(t.raw)}lt(t){return this.token.equals(t.token)||this.logger.logWithError("lt token not equals"),this.raw.lt(t.raw)}add(t){return this.token.equals(t.token)||this.logger.logWithError("add token not equals"),new ye(this.token,this.raw.add(t.raw))}subtract(t){return this.token.equals(t.token)||this.logger.logWithError("sub token not equals"),new ye(this.token,this.raw.sub(t.raw))}toSignificant(t=this.token.decimals,n,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 $s.DP=this.token.decimals,new $s(this.numerator.toString()).div(this.denominator.toString()).toFormat(t)}};import{PublicKey as kl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Js}from"@solana/spl-token";var rn={chainId:101,address:kl.default.toBase58(),programId:Js.toBase58(),decimals:9,symbol:"SOL",name:"solana",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}},je={chainId:101,address:"So11111111111111111111111111111111111111112",programId:Js.toBase58(),decimals:9,symbol:"WSOL",name:"Wrapped SOL",logoURI:"https://img-v1.raydium.io/icon/So11111111111111111111111111111111111111112.png",tags:[],priority:2,type:"raydium",extensions:{coingeckoId:"solana"}};import{PublicKey as Ar}from"@solana/web3.js";import{PublicKey as Se,SystemProgram as ea,SYSVAR_RENT_PUBKEY as Pl}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as hl}from"@solana/spl-token";function T({pubkey:r,isSigner:e=!1,isWritable:t=!0}){return{pubkey:r,isWritable:t,isSigner:e}}var br=[T({pubkey:hl,isWritable:!1}),T({pubkey:ea.programId,isWritable:!1}),T({pubkey:Pl,isWritable:!1})];function yr({publicKey:r,transformSol:e}){let t=gr(r.toString());if(t instanceof Se)return e&&t.equals(Ge)?H:t;if(e&&t.toString()===Ge.toBase58())return H;if(typeof t=="string"){if(t===Se.default.toBase58())return Se.default;try{return new Se(t)}catch{throw new Error("invalid public key")}}throw new Error("invalid public key")}function gr(r){try{return new Se(r)}catch{return r}}var no=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),sn=new Se("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr"),ot=new Se("SysvarRent111111111111111111111111111111111"),ta=new Se("SysvarC1ock11111111111111111111111111111111"),Gt=new Se("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s"),Tl=new Se("Sysvar1nstructions1111111111111111111111111"),wr=ea.programId,zp=new Se("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),Qp=new Se("Ea5SjE2Y6yvCeW5dYTn7PYMuW5ikXkvbGdcmSnXeaLjS"),Yp=new Se("SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt"),jp=new Se("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),Hp=new Se("Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB"),Zp=new Se("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),$p=new Se("7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj"),Jp=new Se("USDH1SM1ojwWUga67PGrgFWUHibbjqMvuMaDkRJTgkX"),ef=new Se("NRVwhjBQiUPYtfDT5zRBVJajzFQHaBUNtC7SNVvqRFa"),tf=new Se("ANAxByE6G2WjFp7A4NqtWYXb3mgruyzZYg3spfxe6Lbo"),nf=new Se("7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs"),H=new Se("So11111111111111111111111111111111111111112"),Ge=Se.default;function yt(r){return yr({publicKey:r,transformSol:!0})}var kr=class{constructor({mint:e,decimals:t,symbol:n,name:i,skipMint:o=!1,isToken2022:s=!1}){if(e===Ge.toBase58()||e instanceof Ar&&Ge.equals(e)){this.decimals=je.decimals,this.symbol=je.symbol,this.name=je.name,this.mint=new Ar(je.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=o?Ar.default:yr({publicKey:e}),this.isToken2022=s}equals(e){return this===e?!0:this.mint.equals(e.mint)}},Ke=kr;Ke.WSOL=new kr(W(O({},je),{mint:je.address}));var Pr=class{constructor({decimals:e,symbol:t="UNKNOWN",name:n="UNKNOWN"}){this.decimals=e,this.symbol=t,this.name=n}equals(e){return this===e}},io=Pr;io.SOL=new Pr(rn);import Il from"bn.js";var na=new fe(new Il(100)),ze=class extends fe{toSignificant(e=5,t,n){return this.mul(na).toSignificant(e,t,n)}toFixed(e=2,t,n){return this.mul(na).toFixed(e,t,n)}};var Bl=ce("Raydium_price"),mt=class extends fe{constructor(t){let{baseToken:n,quoteToken:i,numerator:o,denominator:s}=t;super(o,s);this.baseToken=n,this.quoteToken=i,this.scalar=new fe(hr(n.decimals),hr(i.decimals))}get raw(){return new fe(this.numerator,this.denominator)}get adjusted(){return super.mul(this.scalar)}invert(){return new mt({baseToken:this.quoteToken,quoteToken:this.baseToken,denominator:this.numerator,numerator:this.denominator})}mul(t){this.quoteToken!==t.baseToken&&Bl.logWithError("mul token not equals");let n=super.mul(t);return new mt({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 xl}from"@solana/web3.js";import Sl from"bn.js";function ia(r){return typeof r=="object"&&r!==null&&![Ke,ye,xl,fe,Sl,mt,ze].some(e=>typeof e=="object"&&r instanceof e)}function He(r){return typeof r=="string"?gr(r):Array.isArray(r)?r.map(e=>He(e)):ia(r)?Object.fromEntries(Object.entries(r).map(([e,t])=>[e,He(t)])):r}var dt=new Xt(0),oa=new Xt(1),$f=new Xt(2),Jf=new Xt(3),eb=new Xt(5),fr=new Xt(10),tb=new Xt(100),nb=new Xt(1e3),ib=new Xt(1e4);function hr(r){return fr.pow(Z(r))}function oo(r,e){let t=r.divmod(e);return t.mod.isZero()?t.div:t.div.isNeg()?t.div.isubn(1):t.div.iaddn(1)}function sr(r,e=1,t=[]){let n=[...r];if(e<=0)return t;for(;n.length;)t.push(n.splice(0,e));return t}var Mt=class{constructor(e){this._owner=e}get publicKey(){return Mt.isKeyPair(this._owner)?this._owner.publicKey:this._owner}get signer(){return Mt.isKeyPair(this._owner)?this._owner:void 0}get isKeyPair(){return Mt.isKeyPair(this._owner)}get isPublicKey(){return Mt.isPublicKey(this._owner)}static isKeyPair(e){return e.secretKey!==void 0}static isPublicKey(e){return!Mt.isKeyPair(e)}};import{PublicKey as Ml}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Nl}from"@solana/spl-token";import{ComputeBudgetProgram as ra,Keypair as aa,PublicKey as Kl,Transaction as ua,TransactionMessage as Cl,VersionedTransaction as ca}from"@solana/web3.js";var F={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",FarmV4Withdraw:"FarmV4Withdraw",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 Rl}from"@solana/spl-token";var sa=ce("Raydium_txUtil"),la=1644;function ro(r){let e=[],t=[];return r.microLamports&&(e.push(ra.setComputeUnitPrice({microLamports:r.microLamports})),t.push(F.SetComputeUnitPrice)),r.units&&(e.push(ra.setComputeUnitLimit({units:r.units})),t.push(F.SetComputeUnitLimit)),{instructions:e,instructionTypes:t}}async function Vn(r,e){var n,i;let t=e!=null?e:"confirmed";return(i=await((n=r.getLatestBlockhash)==null?void 0:n.call(r,{commitment:t})))==null?void 0:i.blockhash}async function so(r,e){return r.getSignatureStatuses([e]),new Promise((t,n)=>{let i=setTimeout(n,6e4);r.onSignature(e,o=>{if(clearTimeout(i),!o.err){t("");return}n(o.err.toString())},"confirmed")})}function Tr(r,e){r.length<1&&sa.logWithError(`no instructions provided: ${r.toString()}`),e.length<1&&sa.logWithError(`no signers provided:, ${e.toString()}`);let t=new ua;t.recentBlockhash="11111111111111111111111111111111",t.feePayer=e[0],t.add(...r);try{return Buffer.from(t.serialize({verifySignatures:!1})).toString("base64").length<la}catch{return!1}}function le(r,e){let[t,n]=Kl.findProgramAddressSync(r,e);return{publicKey:t,nonce:n}}function ei({instructions:r,payer:e,signers:t}){return Tr(r,[e,...t])}function ti({instructions:r,payer:e,lookupTableAddressAccount:t,recentBlockhash:n=aa.generate().publicKey.toString()}){let o=new Cl({payerKey:e,recentBlockhash:n,instructions:r}).compileToV0Message(Object.values(t!=null?t:{}));try{return Buffer.from(new ca(o).serialize()).toString("base64").length<la}catch{return!1}}var Ll=r=>Buffer.isBuffer(r)?r:r instanceof Uint8Array?Buffer.from(r.buffer,r.byteOffset,r.byteLength):Buffer.from(r),Ol=r=>{let e=r.serialize({requireAllSignatures:!1,verifySignatures:!1});r instanceof ca&&(e=Ll(e));try{return e instanceof Buffer?e.toString("base64"):Buffer.from(e).toString("base64")}catch{return e.toString("base64")}};function gn(r){let e=[];return r.forEach(t=>{t instanceof ua&&(t.recentBlockhash||(t.recentBlockhash=Rl.toBase58()),t.feePayer||(t.feePayer=aa.generate().publicKey)),e.push(Ol(t))}),console.log("simulate tx string:",e),e}function ie(r,e,t){return le([r.toBuffer(),(t!=null?t:Nl).toBuffer(),e.toBuffer()],new Ml("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"))}import{PublicKey as se}from"@solana/web3.js";var ma=new se("EhhTKczWMGQt46ynNeRX1WfeagwwJd7ufHvCDjRxjo5Q"),da=new se("CBuCnLe26faBpcBP2fktp4rp8abpcAnTWft6ZrP5Q4T"),pa=new se("9KEPoZmtHUrBbhWN1v1KWLMkkvwY6WLtAVUCPRtRjP4z"),ni=new se("FarmqiPv5eAj3j1GMdMCMUGXqPUvmquZtMy86QH6rzhG"),Ib=new se("CLaimxFqjHzgTJtAGHU47NPhg6qrc5sCnpC4tBLyABQS"),fa=new se("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"),Ir=new se("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"),ao=new se("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"),Bb=new se("5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h"),ba=new se("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),wn=new se("CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"),ii=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),uo=new se("kN1kEznaF5Xbd8LYuqtEFcxzWSBk5Fv6ygX6SqEGJVy"),xb=new se("routeUGWgWzqBWFcrCfv8tritsqukccJPu3q5GPP3xS"),ya=new se("7YttLkHDoNj9wyDur5pM1ejNaAvT9X4eqaYcHQqtj2G5"),_l=new se("6FJon3QE27qgPVggARueB22hLvoh22VzJpXv4rBEoSLF"),vl=new se("CC12se5To1CdEuw7fDS27B7Geo5jJyL7t5UK2B44NgiH"),Vl=new se("9HzJyW1qZsEiSfMUf6L2jo3CcTKAyBmSyKdwQeYisHrC"),El=new se("DropEU8AvevN3UrXWXTMuz3rqnMczQVNjq3kcSdW2SQi"),co=new se("CPMMoo8L3F4NbTegBCKVNunggL7H1ZpdTHKxQB5qKP1C"),ga=new se("GpMZbSM2GgvTKHJirzeGfMFoaZ8UR2X7F4v8vHTvxFbL"),Sb=new se("DNXgeM9EiiaAbaWvwjHj9fQQLAX5ZsfHyvmYUNRAdNC8"),Fl=new se("CPMDWBwJDtYax9qW7AyRuVC19Cc4L4Vcy4n2BHAbHkCW"),Dl=new se("7rQ1QFNosMkUCuh7Z7fPbTHvh73b68sQYdirycEzJVuw"),Wl=new se("G11FKBRaAkHAKuLCgLM6K6NUc9rTjPAznRCjZifrTQe2"),lo=new se("LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE"),ql=new se("DLockwT7X7sxtLmGH9g5kmfcjaBtncdbUmi738m5bvQC"),mo=new se("3f7GcQFG397GAaEnv51zR6tsTVihYRydnydDD1cXekxH"),Ul=new se("7AFUeLVRjBfzqK3tTGw8hN48KLQWSk6DTE8xprWdPqix"),oi={IDO_PROGRAM_ID_V1:_l,IDO_PROGRAM_ID_V2:vl,IDO_PROGRAM_ID_V3:Vl,IDO_PROGRAM_ID_V4:El};var Kb={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:Fl,CREATE_CPMM_POOL_AUTH:Dl,CREATE_CPMM_POOL_FEE_ACC:Wl,FEE_DESTINATION_ID:new se("3XMrhbv989VxAMi3DErLV9eJht1pHppW5LbKxe9fkEFR"),LOCK_CPMM_PROGRAM:ql,LCOK_CPMM_AUTH:Ul};import Nt from"bn.js";var ri=1e4;function ge(r,e,t,n){if(e===void 0)return{amount:r,fee:void 0,expirationTime:void 0};let i=W(O({},e),{olderTransferFee:{epoch:BigInt(e.olderTransferFee.epoch),maximumFee:BigInt(e.olderTransferFee.maximumFee),transferFeeBasisPoints:e.olderTransferFee.transferFeeBasisPoints},newerTransferFee:{epoch:BigInt(e.newerTransferFee.epoch),maximumFee:BigInt(e.newerTransferFee.maximumFee),transferFeeBasisPoints:e.newerTransferFee.transferFeeBasisPoints}}),o=t.epoch<i.newerTransferFee.epoch?i.olderTransferFee:i.newerTransferFee,s=new Nt(o.maximumFee.toString()),a=t.epoch<i.newerTransferFee.epoch?(Number(i.newerTransferFee.epoch)*t.slotsInEpoch-t.absoluteSlot)*400/1e3:void 0;if(n)if(o.transferFeeBasisPoints===ri){let c=new Nt(o.maximumFee.toString());return{amount:r.add(c),fee:c,expirationTime:a}}else{let c=an(r.mul(new Nt(ri)),new Nt(ri-o.transferFeeBasisPoints)),u=new Nt(o.maximumFee.toString()),l=c.sub(r).gt(u)?r.add(u):c,m=an(l.mul(new Nt(o.transferFeeBasisPoints)),new Nt(ri)),d=m.gt(s)?s:m;return{amount:l,fee:d,expirationTime:a}}else{let c=an(r.mul(new Nt(o.transferFeeBasisPoints)),new Nt(ri)),u=c.gt(s)?s:c;return{amount:r,fee:u,expirationTime:a}}}function _t(r,e){return r===void 0?e:e===void 0?r:Math.min(r,e)}function an(r,e){let{div:t,mod:n}=r.divmod(e);return n.gt(new Nt(0))?t.add(new Nt(1)):t}import{PublicKey as wa,AddressLookupTableAccount as po}from"@solana/web3.js";async function Br({connection:r,address:e}){let t=await Rt(r,[...new Set(e.map(i=>i.toString()))].map(i=>new wa(i))),n={};for(let i=0;i<e.length;i++){let o=t[i],s=e[i];if(!o)continue;let a=new po({key:s,state:po.deserialize(o.data)});n[s.toString()]=a,fo[s.toString()]=a}return n}var fo={"2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17":new po({key:new wa("2immgwYNHBbyVQKVGCEkgWpi53bLwWNRMB5G2nbgYV17"),state:po.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 si,sendAndConfirmTransaction as xr,Transaction as ai,TransactionMessage as ui,VersionedTransaction as ci}from"@solana/web3.js";import Gl from"axios";var bo=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 Gl.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}=ro(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:o=[],lookupTableAddress:s=[]}){return this.instructions.push(...e),this.endInstructions.push(...t),this.signers.push(...n),this.instructionTypes.push(...i),this.endInstructionTypes.push(...o),this.lookupTableAddress.push(...s.filter(a=>a!==si.default.toString())),this}async versionBuild({txVersion:e,extInfo:t}){return e===0?await this.buildV0(O({},t||{})):this.build(t)}build(e){var n;let t=new ai;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 u;let{recentBlockHash:o,skipPreflight:s=!0,sendAndConfirm:a}=i||{},c=o!=null?o:await Vn(this.connection,this.blockhashCommitment);if(t.recentBlockhash=c,this.signers.length&&t.sign(...this.signers),gn([t]),(u=this.owner)!=null&&u.isKeyPair)return{txId:a?await xr(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 u;let{extraPreBuildData:t=[],extInfo:n}=e,{transaction:i}=this.build(n),o=t.filter(l=>l.transaction.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.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:c,execute:async l=>{var g;let{sequentially:m,onTxUpdate:d,skipTxCount:p=0,recentBlockHash:f,skipPreflight:b=!0}=l||{},y=f!=null?f:await Vn(this.connection,this.blockhashCommitment);if((g=this.owner)!=null&&g.isKeyPair){if(m){let w=[],k=0;for(let P of s){if(++k,k<=p)continue;let B=await xr(this.connection,P,this.signers.find(h=>h.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:b});w.push(B)}return{txIds:w,signedTxs:s}}return{txIds:await await Promise.all(s.map(async w=>(w.recentBlockhash=y,await this.connection.sendRawTransaction(w.serialize(),{skipPreflight:b})))),signedTxs:s}}if(this.signAllTransactions){let w=s.map((P,B)=>(P.recentBlockhash=y,a[B].length&&P.sign(...a[B]),P));gn(w);let k=await this.signAllTransactions(w);if(m){let P=0,B=[],h=async()=>{if(!k[P])return;let S=await this.connection.sendRawTransaction(k[P].serialize(),{skipPreflight:b});B.push({txId:S,status:"sent",signedTx:k[P]}),d==null||d([...B]),P++,this.connection.onSignature(S,I=>{let C=B.findIndex(x=>x.txId===S);C>-1&&(B[C].status=I.err?"error":"success"),d==null||d([...B]),I.err||h()},"processed"),this.connection.getSignatureStatus(S)};return await h(),{txIds:B.map(S=>S.txId),signedTxs:k}}else{let P=[];for(let B=0;B<k.length;B+=1){let h=await this.connection.sendRawTransaction(k[B].serialize(),{skipPreflight:b});P.push(h)}return{txIds:P,signedTxs:k}}}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 b;let f=e||{},{lookupTableCache:t={},lookupTableAddress:n=[],forerunCreate:i,recentBlockhash:o}=f,s=Ee(f,["lookupTableCache","lookupTableAddress","forerunCreate","recentBlockhash"]),a=O(O({},this.cluster==="devnet"?{}:fo),t),c=Array.from(new Set([...n,...this.lookupTableAddress])),u=[];for(let y of c)a[y]===void 0&&u.push(new si(y));let l=await Br({connection:this.connection,address:u});for(let[y,g]of Object.entries(l))a[y]=g;let m=i?si.default.toBase58():o!=null?o:await Vn(this.connection,this.blockhashCommitment),d=new ui({payerKey:this.feePayer,recentBlockhash:m,instructions:[...this.allInstructions]}).compileToV0Message(Object.values(a));((b=this.owner)==null?void 0:b.signer)&&!this.signers.some(y=>y.publicKey.equals(this.owner.publicKey))&&this.signers.push(this.owner.signer);let p=new ci(d);return p.sign(this.signers),{builder:this,transaction:p,signers:this.signers,instructionTypes:[...this.instructionTypes,...this.endInstructionTypes],execute:async y=>{var k;let{skipPreflight:g=!0,sendAndConfirm:w}=y||{};if(gn([p]),(k=this.owner)!=null&&k.isKeyPair){let P=await this.connection.sendTransaction(p,{skipPreflight:g});return w&&await so(this.connection,P),{txId:P,signedTx:p}}if(this.signAllTransactions){let P=await this.signAllTransactions([p]);return{txId:await this.connection.sendTransaction(P[0],{skipPreflight:g}),signedTx:P[0]}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}async buildV0MultiTx(e){var u;let{extraPreBuildData:t=[],buildProps:n}=e,{transaction:i}=await this.buildV0(n),o=t.filter(l=>l.builder.instructions.length>0),s=[i,...o.map(l=>l.transaction)],a=[this.signers,...o.map(l=>l.signers)],c=[...this.instructionTypes,...o.map(l=>l.instructionTypes).flat()];return(u=this.owner)!=null&&u.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:c,buildProps:n,execute:async l=>{var b;let{sequentially:m,onTxUpdate:d,recentBlockHash:p,skipPreflight:f=!0}=l||{};if(p&&s.forEach(y=>y.message.recentBlockhash=p),gn(s),(b=this.owner)!=null&&b.isKeyPair){if(m){let y=[];for(let g of s){let w=await this.connection.sendTransaction(g,{skipPreflight:f});await so(this.connection,w),y.push(w)}return{txIds:y,signedTxs:s}}return{txIds:await Promise.all(s.map(async y=>await this.connection.sendTransaction(y,{skipPreflight:f}))),signedTxs:s}}if(this.signAllTransactions){let y=await this.signAllTransactions(s);if(m){let g=0,w=[],k=async()=>{if(!y[g])return;let P=await this.connection.sendTransaction(y[g],{skipPreflight:f});w.push({txId:P,status:"sent",signedTx:y[g]}),d==null||d([...w]),g++,this.connection.onSignature(P,B=>{let h=w.findIndex(S=>S.txId===P);h>-1&&(w[h].status=B.err?"error":"success"),d==null||d([...w]),B.err||k()},"processed"),this.connection.getSignatureStatus(P)};return k(),{txIds:[],signedTxs:y}}else{let g=[];for(let w=0;w<y.length;w+=1){let k=await this.connection.sendTransaction(y[w],{skipPreflight:f});g.push(k)}return{txIds:g,signedTxs:y}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:n||{}}}async sizeCheckBuild(e){var d;let m=e||{},{splitIns:t=[],computeBudgetConfig:n}=m,i=Ee(m,["splitIns","computeBudgetConfig"]),o=n?ro(n):{instructions:[],instructionTypes:[]},s=this.signers.reduce((p,f)=>W(O({},p),{[f.publicKey.toBase58()]:f}),{}),a=[],c=[],u=[],l=0;if(this.allInstructions.forEach(p=>{let f=[...u,p],b=n?[...o.instructions,...f]:f,g=[...new Set(f.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat()).values()].map(w=>new si(w));if(p!==t[l]&&u.length<12&&(ei({instructions:b,payer:this.feePayer,signers:g})||ei({instructions:f,payer:this.feePayer,signers:g})))u.push(p);else{if(u.length===0)throw Error("item ins too big");l+=p===t[l]?1:0,ei({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:g})?a.push(new ai().add(...o.instructions,...u)):a.push(new ai().add(...u)),c.push(Array.from(new Set(u.map(w=>w.keys.filter(k=>k.isSigner).map(k=>k.pubkey.toString())).flat())).map(w=>s[w]).filter(w=>w!==void 0)),u=[p]}}),u.length>0){let f=[...new Set(u.map(b=>b.keys.filter(y=>y.isSigner).map(y=>y.pubkey.toString())).flat()).values()].map(b=>s[b]).filter(b=>b!==void 0);ei({instructions:n?[...o.instructions,...u]:[...u],payer:this.feePayer,signers:f.map(b=>b.publicKey)})?a.push(new ai().add(...o.instructions,...u)):a.push(new ai().add(...u)),c.push(f)}return a.forEach(p=>p.feePayer=this.feePayer),(d=this.owner)!=null&&d.signer&&c.forEach(p=>{p.some(f=>f.publicKey.equals(this.owner.publicKey))||p.push(this.owner.signer)}),{builder:this,transactions:a,signers:c,instructionTypes:this.instructionTypes,execute:async p=>{var P;let{sequentially:f,onTxUpdate:b,skipTxCount:y=0,recentBlockHash:g,skipPreflight:w=!0}=p||{},k=g!=null?g:await Vn(this.connection,this.blockhashCommitment);if(a.forEach(async(B,h)=>{B.recentBlockhash=k,c[h].length&&B.sign(...c[h])}),gn(a),(P=this.owner)!=null&&P.isKeyPair){if(f){let B=0,h=[];for(let S of a){if(++B,B<=y){h.push("tx skipped");continue}let I=await xr(this.connection,S,this.signers.find(C=>C.publicKey.equals(this.owner.publicKey))?this.signers:[...this.signers,this.owner.signer],{skipPreflight:w});h.push(I)}return{txIds:h,signedTxs:a}}return{txIds:await Promise.all(a.map(async B=>await this.connection.sendRawTransaction(B.serialize(),{skipPreflight:w}))),signedTxs:a}}if(this.signAllTransactions){let B=await this.signAllTransactions(a.slice(y,a.length)),h=[...a.slice(0,y),...B];if(f){let S=0,I=[],C=async()=>{if(!h[S])return;S<y&&(I.push({txId:"",status:"success",signedTx:h[S]}),b==null||b([...I]),S++,C());let x=await this.connection.sendRawTransaction(h[S].serialize(),{skipPreflight:w});I.push({txId:x,status:"sent",signedTx:h[S]}),b==null||b([...I]),S++,this.connection.onSignature(x,K=>{let v=I.findIndex(R=>R.txId===x);v>-1&&(I[v].status=K.err?"error":"success"),b==null||b([...I]),K.err||C()},"processed"),this.connection.getSignatureStatus(x)};return await C(),{txIds:I.map(x=>x.txId),signedTxs:h}}else{let S=[];for(let I=0;I<h.length;I+=1){let C=await this.connection.sendRawTransaction(h[I].serialize(),{skipPreflight:w});S.push(C)}return{txIds:S,signedTxs:h}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:i||{}}}async sizeCheckBuildV0(e){var k;let w=e||{},{computeBudgetConfig:t,splitIns:n=[],lookupTableCache:i={},lookupTableAddress:o=[]}=w,s=Ee(w,["computeBudgetConfig","splitIns","lookupTableCache","lookupTableAddress"]),a=O(O({},this.cluster==="devnet"?{}:fo),i),c=Array.from(new Set([...this.lookupTableAddress,...o])),u=[];for(let P of c)a[P]===void 0&&u.push(new si(P));let l=await Br({connection:this.connection,address:u});for(let[P,B]of Object.entries(l))a[P]=B;let m=t?ro(t):{instructions:[],instructionTypes:[]},d=await Vn(this.connection,this.blockhashCommitment),p=this.signers.reduce((P,B)=>W(O({},P),{[B.publicKey.toBase58()]:B}),{}),f=[],b=[],y=[],g=0;if(this.allInstructions.forEach(P=>{let B=[...y,P],h=t?[...m.instructions,...B]:B;if(P!==n[g]&&y.length<12&&(ti({instructions:h,payer:this.feePayer,lookupTableAddressAccount:a})||ti({instructions:B,payer:this.feePayer,lookupTableAddressAccount:a})))y.push(P);else{if(y.length===0)throw Error("item ins too big");g+=P===n[g]?1:0;let S={};for(let I of[...new Set(c)])a[I]!==void 0&&(S[I]=a[I]);if(t&&ti({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let I=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new ci(I))}else{let I=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new ci(I))}b.push(Array.from(new Set(y.map(I=>I.keys.filter(C=>C.isSigner).map(C=>C.pubkey.toString())).flat())).map(I=>p[I]).filter(I=>I!==void 0)),y=[P]}}),y.length>0){let B=[...new Set(y.map(h=>h.keys.filter(S=>S.isSigner).map(S=>S.pubkey.toString())).flat()).values()].map(h=>p[h]).filter(h=>h!==void 0);if(t&&ti({instructions:[...m.instructions,...y],payer:this.feePayer,lookupTableAddressAccount:a,recentBlockhash:d})){let h=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...m.instructions,...y]}).compileToV0Message(Object.values(a));f.push(new ci(h))}else{let h=new ui({payerKey:this.feePayer,recentBlockhash:d,instructions:[...y]}).compileToV0Message(Object.values(a));f.push(new ci(h))}b.push(B)}return(k=this.owner)!=null&&k.signer&&b.forEach(P=>{P.some(B=>B.publicKey.equals(this.owner.publicKey))||P.push(this.owner.signer)}),{builder:this,transactions:f,buildProps:e,signers:b,instructionTypes:this.instructionTypes,execute:async P=>{var x;let{sequentially:B,onTxUpdate:h,skipTxCount:S=0,recentBlockHash:I,skipPreflight:C=!0}=P||{};if(f.map(async(K,v)=>{b[v].length&&K.sign(b[v]),I&&(K.message.recentBlockhash=I)}),gn(f),(x=this.owner)!=null&&x.isKeyPair){if(B){let K=0,v=[];for(let R of f){if(++K,K<=S){console.log("skip tx: ",K),v.push("tx skipped");continue}let G=await this.connection.sendTransaction(R,{skipPreflight:C});await so(this.connection,G),v.push(G)}return{txIds:v,signedTxs:f}}return{txIds:await Promise.all(f.map(async K=>await this.connection.sendTransaction(K,{skipPreflight:C}))),signedTxs:f}}if(this.signAllTransactions){let K=await this.signAllTransactions(f.slice(S,f.length)),v=[...f.slice(0,S),...K];if(B){let R=0,G=[],U=async()=>{if(!v[R])return;if(R<S){G.push({txId:"",status:"success",signedTx:v[R]}),h==null||h([...G]),R++,U();return}let D=await this.connection.sendTransaction(v[R],{skipPreflight:C});G.push({txId:D,status:"sent",signedTx:v[R]}),h==null||h([...G]),R++,this.connection.onSignature(D,Pe=>{let it=G.findIndex(Ie=>Ie.txId===D);it>-1&&(G[it].status=Pe.err?"error":"success"),h==null||h([...G]),Pe.err||U()},"processed"),this.connection.getSignatureStatus(D)};return U(),{txIds:[],signedTxs:v}}else{let R=[];for(let G=0;G<v.length;G+=1){let U=await this.connection.sendTransaction(v[G],{skipPreflight:C});R.push(U)}return{txIds:R,signedTxs:v}}}throw new Error("please provide owner in keypair format or signAllTransactions function")},extInfo:s||{}}}};var Fe={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"},dy=O({},Fe);var Aa="ray_tab_hash",Sr="ray_req_hash",Xl=()=>{if(typeof window===void 0)return"";let r=sessionStorage.getItem(Aa);return r||(r=`ray-${Date.now()}`,sessionStorage.setItem(Aa,r)),r},yo=async n=>{var i=n,{logCount:r=1e3,removeLastLog:e}=i,t=Ee(i,["logCount","removeLastLog"]);if(typeof window===void 0)return new Promise(s=>s());let o=JSON.parse(localStorage.getItem(Sr)||"[]").slice(0,r-1);e&&o.pop(),new Blob([JSON.stringify(t.data)]).size>1024&&(t.data=JSON.stringify(t.data).substring(0,200)+"..."),o.unshift(W(O({},t),{time:Date.now(),session:Xl()}));try{localStorage.setItem(Sr,JSON.stringify(o))}catch{if(e){let s=!1,a=JSON.stringify(t.data).substring(0,100);for(o[0].data=a+(a.length>100?"...":"");!s;){o.pop();let c=JSON.stringify(t.data).substring(0,100);o[0].data=c+(c.length>100?"...":"");try{localStorage.setItem(Sr,JSON.stringify(o)),s=!0}catch{s=!1}}return new Promise(c=>c())}return yo(W(O({},t),{logCount:r,removeLastLog:!0}))}};var go=ce("Raydium_Api"),Kr=new Map;var wo=class{constructor({cluster:e,timeout:t,logRequests:n,logCount:i,urlConfigs:o}){this.cluster=e,this.urlConfigs=o||{},this.logCount=i||1e3,this.api=ka.create({baseURL:this.urlConfigs.BASE_HOST||Fe.BASE_HOST,timeout:t}),this.api.interceptors.request.use(s=>{let{method:a,baseURL:c,url:u}=s;return go.debug(`${a==null?void 0:a.toUpperCase()} ${c}${u}`),s},s=>(go.error("Request failed"),Promise.reject(s))),this.api.interceptors.response.use(s=>{let{config:a,data:c,status:u}=s,{method:l,baseURL:m,url:d}=a;return n&&yo({status:u,url:`${m}${d}`,params:a.params,data:c,logCount:this.logCount}),go.debug(`${l==null?void 0:l.toUpperCase()} ${m}${d} ${u}`),c},s=>{let{config:a,response:c={}}=s,{status:u}=c,{method:l,baseURL:m,url:d}=a;return n&&yo({status:u,url:`${m}${d}`,params:a.params,data:s.message,logCount:this.logCount}),go.error(`${l.toUpperCase()} ${m}${d} ${u||s.message}`),Promise.reject(s)})}async getClmmConfigs(){return(await this.api.get(this.urlConfigs.CLMM_CONFIG||Fe.CLMM_CONFIG)).data}async getCpmmConfigs(){return(await this.api.get(this.urlConfigs.CPMM_CONFIG||Fe.CPMM_CONFIG)).data}async getClmmPoolLines(e){return(await this.api.get(`${this.urlConfigs.POOL_LIQUIDITY_LINE||Fe.POOL_LIQUIDITY_LINE}?pool_id=${e}`)).data}async getBlockSlotCountForSecond(e){if(!e)return 2;let n=(await ka.post(e,{id:"getRecentPerformanceSamples",jsonrpc:"2.0",method:"getRecentPerformanceSamples",params:[4]})).result.map(i=>i.numSlots);return n.reduce((i,o)=>i+o,0)/n.length/60}async getChainTimeOffset(){return(await this.api.get(this.urlConfigs.CHAIN_TIME||Fe.CHAIN_TIME)).data}async getRpcs(){return this.api.get(this.urlConfigs.RPCS||Fe.RPCS)}async getTokenList(){return(await this.api.get(this.urlConfigs.TOKEN_LIST||Fe.TOKEN_LIST)).data}async getJupTokenList(){return this.api.get("",{baseURL:this.urlConfigs.JUP_TOKEN_LIST||Fe.JUP_TOKEN_LIST})}async getTokenInfo(e){return(await this.api.get((this.urlConfigs.MINT_INFO_ID||Fe.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:o=0,pageSize:s=100}=e;return(await this.api.get((this.urlConfigs.POOL_LIST||Fe.POOL_LIST)+`?poolType=${t}&poolSortField=${n}&sortType=${i}&page=${o}&pageSize=${s}`)).data}async fetchPoolById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.POOL_SEARCH_BY_ID||Fe.POOL_SEARCH_BY_ID)+`?ids=${t}`)).data}async fetchPoolKeysById(e){let{idList:t}=e,n=[],i=t.filter(s=>Kr.has(s)?(n.push(Kr.get(s)),!1):!0),o=[];return i.length&&(o=(await this.api.get((this.urlConfigs.POOL_KEY_BY_ID||Fe.POOL_KEY_BY_ID)+`?ids=${i.join(",")}`)).data.filter(Boolean),o.forEach(a=>{Kr.set(a.id,a)})),n.concat(o)}async fetchPoolByMints(e){let{mint1:t,mint2:n,type:i="all",sort:o="default",order:s="desc",page:a=1}=e,[c,u]=[t&&yt(t).toBase58(),n&&n!=="undefined"?yt(n).toBase58():""],[l,m]=u&&c>u?[u,c]:[c,u];return(await this.api.get((this.urlConfigs.POOL_SEARCH_MINT||Fe.POOL_SEARCH_MINT)+`?mint1=${l}&mint2=${m}&poolType=${i}&poolSortField=${o}&sortType=${s}&pageSize=100&page=${a}`)).data}async fetchFarmInfoById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_INFO||Fe.FARM_INFO)+`?ids=${t}`)).data}async fetchFarmKeysById(e){let{ids:t}=e;return(await this.api.get((this.urlConfigs.FARM_KEYS||Fe.FARM_KEYS)+`?ids=${t}`)).data}async fetchAvailabilityStatus(){return(await this.api.get(this.urlConfigs.CHECK_AVAILABILITY||Fe.CHECK_AVAILABILITY)).data}async sendTxToJito(e,t){let n=t?this.urlConfigs.JITO_BUNDLE||Fe.JITO_BUNDLE:this.urlConfigs.JITO_TRANSACTION||Fe.JITO_TRANSACTION;return(await this.api.post(n,{jsonrpc:"2.0",id:1,method:t?"sendBundle":"sendTransaction",params:e},{baseURL:this.urlConfigs.JITO||Fe.JITO})).data}};var Ao="please provide owner in load() initialization or you can set by calling raydium.setOwner(owner)",Pa="please provide connection in load() initialization or set it by raydium.setConnection(connection)";import{PublicKey as xo,SystemProgram as km}from"@solana/web3.js";import{AccountLayout as Wn,createAssociatedTokenAccountInstruction as Fr,TOKEN_PROGRAM_ID as ln,TOKEN_2022_PROGRAM_ID as Pm}from"@solana/spl-token";var Cr=(...r)=>r.map(e=>{try{return typeof e=="object"?JSON.stringify(e):e}catch{return e}}).join(", "),Ce=class{constructor({scope:e,moduleName:t}){this.disabled=!1;this.scope=e,this.logger=ce(t)}createTxBuilder(e){return this.scope.checkOwner(),new bo({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(Cr(e))}logInfo(...e){this.logger.info(Cr(e))}logAndCreateError(...e){let t=Cr(e);throw new Error(t)}checkDisabled(){(this.disabled||!this.scope)&&this.logAndCreateError("module not working")}};import{PublicKey as fm,SystemProgram as bm}from"@solana/web3.js";import ym from"bn.js";import{createCloseAccountInstruction as gm,createInitializeAccountInstruction as wm,createTransferInstruction as Am,TOKEN_PROGRAM_ID as Dn}from"@solana/spl-token";import{Keypair as lm,PublicKey as _a}from"@solana/web3.js";import mm from"bn.js";import{TOKEN_PROGRAM_ID as dm}from"@solana/spl-token";function zl(r){return r instanceof Uint8Array||r!=null&&typeof r=="object"&&r.constructor.name==="Uint8Array"}function Rr(r,...e){if(!zl(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error(`Uint8Array expected of length ${e}, not of length=${r.length}`)}function Lr(r,e=!0){if(r.destroyed)throw new Error("Hash instance has been destroyed");if(e&&r.finished)throw new Error("Hash#digest() has already been called")}function ha(r,e){Rr(r);let t=e.outputLen;if(r.length<t)throw new Error(`digestInto() expects output buffer of length at least ${t}`)}var Po=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),vt=(r,e)=>r<<32-e|r>>>e;var Yy=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Ql(r){if(typeof r!="string")throw new Error(`utf8ToBytes expected string, got ${typeof r}`);return new Uint8Array(new TextEncoder().encode(r))}function Or(r){return typeof r=="string"&&(r=Ql(r)),Rr(r),r}var ko=class{clone(){return this._cloneInto()}},jy={}.toString;function Ta(r){let e=n=>r().update(Or(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function Yl(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,u=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+u,a,n)}var Ia=(r,e,t)=>r&e^~r&t,Ba=(r,e,t)=>r&e^r&t^e&t,ho=class extends ko{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=Po(this.buffer)}update(e){Lr(this);let{view:t,buffer:n,blockLen:i}=this;e=Or(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=Po(e);for(;i<=o-s;s+=i)this.process(c,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){Lr(this),ha(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=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;Yl(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=Po(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should be aligned to 32bit");let u=c/4,l=this.get();if(u>l.length)throw new Error("_sha2: outputLen bigger than state");for(let m=0;m<u;m++)a.setUint32(4*m,l[m],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var jl=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]),un=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),cn=new Uint32Array(64),Mr=class extends ho{constructor(){super(64,32,8,!1),this.A=un[0]|0,this.B=un[1]|0,this.C=un[2]|0,this.D=un[3]|0,this.E=un[4]|0,this.F=un[5]|0,this.G=un[6]|0,this.H=un[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0,this.F=s|0,this.G=a|0,this.H=c|0}process(e,t){for(let m=0;m<16;m++,t+=4)cn[m]=e.getUint32(t,!1);for(let m=16;m<64;m++){let d=cn[m-15],p=cn[m-2],f=vt(d,7)^vt(d,18)^d>>>3,b=vt(p,17)^vt(p,19)^p>>>10;cn[m]=b+cn[m-7]+f+cn[m-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:u,H:l}=this;for(let m=0;m<64;m++){let d=vt(a,6)^vt(a,11)^vt(a,25),p=l+d+Ia(a,c,u)+jl[m]+cn[m]|0,b=(vt(n,2)^vt(n,13)^vt(n,22))+Ba(n,i,o)|0;l=u,u=c,c=a,a=s+p|0,s=o,o=i,i=n,n=p+b|0}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,c=c+this.F|0,u=u+this.G|0,l=l+this.H|0,this.set(n,i,o,s,a,c,u,l)}roundClean(){cn.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var xa=Ta(()=>new Mr);import{PublicKey as am}from"@solana/web3.js";import La,{isBN as Oa}from"bn.js";import{bits as Hl,BitStructure as og,blob as Zl,Blob as rg,cstr as sg,f32 as ag,f32be as ug,f64 as cg,f64be as lg,greedy as mg,Layout as $l,ns64 as dg,ns64be as pg,nu64 as Jl,nu64be as fg,offset as bg,s16 as yg,s16be as gg,s24 as wg,s24be as Ag,s32 as em,s32be as kg,s40 as Pg,s40be as hg,s48 as Tg,s48be as Ig,s8 as Bg,seq as tm,struct as xg,Structure as nm,u16 as im,u16be as Sg,u24 as Kg,u24be as Cg,u32 as om,u32be as Rg,u40 as Lg,u40be as Og,u48 as Mg,u48be as Ng,u8 as rm,UInt as sm,union as _g,Union as vg,unionLayoutDiscriminator as Vg,utf8 as Eg}from"@solana/buffer-layout";var To=$l,Sa=nm;var Nr=sm;var Ka=rm,zt=im;var _r=om;var Ca=Jl;var Be=em;var Ra=tm;var be=Zl;var vr=Hl;var An=class extends To{constructor(t,n,i){super(t,i);this.blob=be(t),this.signed=n}decode(t,n=0){let i=new La(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 La(t)),this.signed&&(t=t.toTwos(this.span*8)),this.blob.encode(t.toArrayLike(Buffer,"le",this.span),n,i)}},Io=class extends To{constructor(t){super(8,t);this._lower=vr(_r(),!1),this._upper=vr(_r(),!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),o=this._upper.decode(t,n+this._lower.span);return O(O({},i),o)}encode(t,n,i=0){return this._lower.encode(t,n,i)+this._upper.encode(t,n,i+this._lower.span)}};function X(r){return new Nr(1,r)}function Je(r){return new Nr(4,r)}function A(r){return new An(8,!1,r)}function J(r){return new An(16,!1,r)}function Ma(r){return new An(1,!0,r)}function En(r){return new An(8,!0,r)}function Na(r){return new An(16,!0,r)}var Bo=class extends To{constructor(t,n,i,o){super(t.span,o);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 L(r){return new Bo(be(32),e=>new am(e),e=>e.toBuffer(),r)}function Re(r){return new Bo(Ka(),um,cm,r)}function um(r){if(r===0)return!1;if(r===1)return!0;throw new Error("Invalid bool: "+r)}function cm(r){return r?1:0}var Vr=class extends Sa{decode(e,t){return super.decode(e,t)}};function E(r,e,t){return new Vr(r,e,t)}function j(r,e,t){let n,i=typeof e=="number"?e:Oa(e)?e.toNumber():new Proxy(e,{get(o,s){if(!n){let a=Reflect.get(o,"count");n=Oa(a)?a.toNumber():a,Reflect.set(o,"count",n)}return Reflect.get(o,s)},set(o,s,a){return s==="count"&&(n=a),Reflect.set(o,s,a)}});return Ra(r,i,t)}var Fn=E([L("mint"),L("owner"),A("amount"),Je("delegateOption"),L("delegate"),X("state"),Je("isNativeOption"),A("isNative"),A("delegatedAmount"),Je("closeAuthorityOption"),L("closeAuthority")]);var sw=ce("Raydium_Util");function va({owner:r,solAccountResp:e,tokenAccountResp:t}){let n=[],i=[];for(let{pubkey:o,account:s}of t.value){let a=Fn.decode(s.data),{mint:c,amount:u}=a;n.push({publicKey:o,mint:c,amount:u,isAssociated:ie(r,c,s.owner).publicKey.equals(o),isNative:!1,programId:s.owner}),i.push({pubkey:o,accountInfo:a,programId:s.owner})}return e&&n.push({mint:_a.default,amount:new mm(String(e.lamports)),isNative:!0,programId:e.owner}),{tokenAccounts:n,tokenAccountRawInfos:i}}function Me({fromPublicKey:r,programId:e=dm,assignSeed:t}){let n=t?btoa(t).slice(0,32):lm.generate().publicKey.toBase58().slice(0,32);return{publicKey:pm(r,n,e),seed:n}}function pm(r,e,t){let n=Buffer.concat([r.toBuffer(),Buffer.from(e),t.toBuffer()]),i=xa(n);return new _a(i)}function Er(r){let{mint:e,tokenAccount:t,owner:n,programId:i=Dn}=r;return wm(t,e,n,i)}function Qt(r){let{tokenAccount:e,payer:t,multiSigners:n=[],owner:i,programId:o=Dn}=r;return gm(e,t,i,n,o)}async function Yt(r){let{connection:e,amount:t,commitment:n,payer:i,owner:o,skipCloseAccount:s}=r,a=await e.getMinimumBalanceForRentExemption(Fn.span,n),c=Z(t).add(new ym(a)),u=Me({fromPublicKey:i,programId:Dn});return{addresses:{newAccount:u.publicKey},signers:[],instructions:[bm.createAccountWithSeed({fromPubkey:i,basePubkey:i,seed:u.seed,newAccountPubkey:u.publicKey,lamports:c.toNumber(),space:Fn.span,programId:Dn}),Er({mint:new fm(je.address),tokenAccount:u.publicKey,owner:o,programId:Dn})],instructionTypes:[F.CreateAccount,F.InitAccount],endInstructionTypes:s?[]:[F.CloseAccount],endInstructions:s?[]:[Qt({tokenAccount:u.publicKey,payer:i,owner:o})]}}function Va({source:r,destination:e,owner:t,amount:n,multiSigners:i=[],tokenProgram:o=Dn}){return Am(r,e,t,BigInt(String(n)),i,o)}var mi=class extends Ce{constructor(t){super(t);this._tokenAccounts=[];this._tokenAccountRawInfos=[];this._accountListener=[];this._clientOwnedToken=!1;this._notSubscribeAccountChange=!1;this._accountFetchTime=0;let{tokenAccounts:n,tokenAccountRawInfos:i,notSubscribeAccountChange:o}=t;this._tokenAccounts=n||[],this._tokenAccountRawInfos=i||[],this._notSubscribeAccountChange=o!=null?o:!0,this._clientOwnedToken=!!(n||i)}get tokenAccounts(){return this._tokenAccounts}get tokenAccountRawInfos(){return this._tokenAccountRawInfos}set notSubscribeAccountChange(t){this._notSubscribeAccountChange=t}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 ie(this.scope.ownerPubKey,t,n).publicKey}resetTokenAccounts(){this._clientOwnedToken||(this._tokenAccounts=[],this._tokenAccountRawInfos=[])}async fetchWalletTokenAccounts(t){if(this._clientOwnedToken||!(t!=null&&t.forceUpdate)&&!this._notSubscribeAccountChange&&this._tokenAccounts.length&&Date.now()-this._accountFetchTime<1e3*60*3)return{tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos};this.scope.checkOwner();let i=O(O({},{}),t),[o,s,a]=await Promise.all([this.scope.connection.getAccountInfo(this.scope.ownerPubKey,i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:ln},i.commitment),this.scope.connection.getTokenAccountsByOwner(this.scope.ownerPubKey,{programId:Pm},i.commitment)]),{tokenAccounts:c,tokenAccountRawInfos:u}=va({owner:this.scope.ownerPubKey,solAccountResp:o,tokenAccountResp:{context:s.context,value:[...s.value,...a.value]}});return this._tokenAccounts=c,this._tokenAccountRawInfos=u,this._accountFetchTime=Date.now(),this._notSubscribeAccountChange||(this._accountChangeListenerId&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId),this._accountChangeListenerId=this.scope.connection.onAccountChange(this.scope.ownerPubKey,()=>{this.fetchWalletTokenAccounts({forceUpdate:!0}),this._accountListener.forEach(l=>l({tokenAccounts:this._tokenAccounts,tokenAccountRawInfos:this._tokenAccountRawInfos}))},{commitment:t==null?void 0:t.commitment})),{tokenAccounts:c,tokenAccountRawInfos:u}}clearAccountChangeCkb(){this._accountChangeListenerId!==void 0&&this.scope.connection.removeAccountChangeListener(this._accountChangeListenerId)}async getCreatedTokenAccount({mint:t,programId:n=ln,associatedOnly:i=!0}){await this.fetchWalletTokenAccounts();let o=this._tokenAccounts.filter(({mint:a})=>a==null?void 0:a.equals(t)).sort((a,c)=>a.amount.lt(c.amount)?1:-1),s=this.getAssociatedTokenAccount(t,n);for(let a of o){let{publicKey:c}=a;if(c&&(!i||i&&s.equals(c)))return c}}async getOrCreateTokenAccount(t){var b,y,g,w;await this.fetchWalletTokenAccounts();let{mint:n,createInfo:i,associatedOnly:o,owner:s,notUseTokenAccount:a=!1,skipCloseAccount:c=!1,checkCreateATAOwner:u=!1,assignSeed:l}=t,m=new xo(t.tokenProgram||ln),d=this.getAssociatedTokenAccount(n,new xo(m)),p=(a?[]:this.tokenAccountRawInfos).filter(k=>k.accountInfo.mint.equals(n)&&(!o||k.pubkey.equals(d))).sort((k,P)=>k.accountInfo.amount.lt(P.accountInfo.amount)?1:-1);if(i===void 0||p.length>0)return p.length>0?{account:p[0].pubkey}:{};let f={instructions:[],endInstructions:[],signers:[],instructionTypes:[],endInstructionTypes:[]};if(o){let k=Fr(s,d,s,n,m);if(u){let P=await this.scope.connection.getAccountInfo(d);if(P===null)(b=f.instructions)==null||b.push(k),f.instructionTypes.push(F.CreateATA);else if(!(P.owner.equals(m)&&Wn.decode(P.data).mint.equals(n)&&Wn.decode(P.data).owner.equals(s)))throw Error(`create ata check error -> mint: ${n.toString()}, ata: ${d.toString()}`)}else f.instructions.push(k),f.instructionTypes.push(F.CreateATA);if(n.equals(H)&&i.amount){let P=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:i.payer||this.scope.ownerPubKey,amount:(y=i.amount)!=null?y:0,skipCloseAccount:c});f.instructions.push(...P.instructions||[]),f.endInstructions.push(...P.endInstructions||[]),f.instructionTypes.push(...P.instructionTypes||[]),f.endInstructionTypes.push(...P.endInstructionTypes||[]),i.amount&&(f.instructions.push(Va({source:P.addresses.newAccount,destination:d,owner:this.scope.ownerPubKey,amount:i.amount,tokenProgram:ln})),f.instructionTypes.push(F.TransferAmount))}return c||(f.endInstructions.push(Qt({owner:s,payer:i.payer||s,tokenAccount:d,programId:m})),f.endInstructionTypes.push(F.CloseAccount)),{account:d,instructionParams:f}}else{let k=Me({fromPublicKey:s,programId:m,assignSeed:l}),P=await this.scope.connection.getMinimumBalanceForRentExemption(Wn.span),B=km.createAccountWithSeed({fromPubkey:s,basePubkey:s,seed:k.seed,newAccountPubkey:k.publicKey,lamports:P+Number((w=(g=i.amount)==null?void 0:g.toString())!=null?w:0),space:Wn.span,programId:m});return f.instructions.push(B,Er({mint:n,tokenAccount:k.publicKey,owner:this.scope.ownerPubKey,programId:m})),f.instructionTypes.push(F.CreateAccount),f.instructionTypes.push(F.InitAccount),c||(f.endInstructions.push(Qt({owner:s,payer:i.payer||s,tokenAccount:k.publicKey,programId:m})),f.endInstructionTypes.push(F.CloseAccount)),{account:k.publicKey,instructionParams:f}}}async checkOrCreateAta({mint:t,programId:n=ln,autoUnwrapWSOLToSOL:i}){var c;await this.fetchWalletTokenAccounts();let o=(c=this.scope.account.tokenAccounts.find(({mint:u})=>(u==null?void 0:u.toBase58())===t.toBase58()))==null?void 0:c.publicKey,s=this.scope.ownerPubKey,a={};if(!o){let u=this.getAssociatedTokenAccount(t,n),l=await Fr(s,u,s,t,n);a.instructions=[l],a.instructionTypes=[F.CreateATA],o=u}return i&&H.toBase58()===t.toBase58()&&(a.endInstructions=[Qt({owner:s,payer:s,tokenAccount:o,programId:n})],a.endInstructionTypes=[F.CloseAccount]),{pubKey:o,newInstructions:a}}async handleTokenAccount(t){let{side:n,amount:i,mint:o,programId:s=ln,tokenAccount:a,payer:c=this.scope.ownerPubKey,bypassAssociatedCheck:u,skipCloseAccount:l,checkCreateATAOwner:m}=t,d=this.getAssociatedTokenAccount(o,s);if(new xo(H).equals(o)){let p=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:c,amount:i,skipCloseAccount:l});return O({tokenAccount:p.addresses.newAccount},p)}else if(!a||n==="out"&&!d.equals(a)&&!u){let p=[],f=Fr(this.scope.ownerPubKey,d,this.scope.ownerPubKey,o,s);if(m){let b=await this.scope.connection.getAccountInfo(d);if(b===null)p.push(f);else if(!(b.owner.equals(ln)&&Wn.decode(b.data).mint.equals(o)&&Wn.decode(b.data).owner.equals(this.scope.ownerPubKey)))throw Error(`create ata check error -> mint: ${o.toString()}, ata: ${d.toString()}`)}else p.push(f);return{tokenAccount:d,instructions:p,instructionTypes:[F.CreateATA]}}return{tokenAccount:a}}async processTokenAccount(t){let{mint:n,programId:i=ln,amount:o,useSOLBalance:s,handleTokenAccount:a}=t,c,u=this.createTxBuilder();if(n.equals(new xo(H))&&s){let l=await this.handleTokenAccount({side:"in",amount:o||0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=l,p=Ee(l,["tokenAccount"]);c=d,u.addInstruction(p)}else if(c=await this.getCreatedTokenAccount({mint:n,associatedOnly:!1,programId:i}),!c&&a){let m=await this.scope.account.handleTokenAccount({side:"in",amount:0,mint:n,bypassAssociatedCheck:!0,programId:i}),{tokenAccount:d}=m,p=Ee(m,["tokenAccount"]);c=d,u.addInstruction(p)}return O({tokenAccount:c},u.AllTxData)}};import{PublicKey as we,SystemProgram as Em}from"@solana/web3.js";import{createAssociatedTokenAccountInstruction as Fm}from"@solana/spl-token";import{PublicKey as Da}from"@solana/web3.js";var Dr=E([X("instruction")]),Wr=E([X("instruction")]),hm=E([A("rewardState"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardLastUpdateTime"),A("totalReward"),A("totalRewardEmissioned"),A("rewardClaimed"),A("rewardPerSecond"),J("accRewardPerShare"),L("rewardVault"),L("rewardMint"),L("rewardSender"),A("rewardType"),j(A(),15,"padding")]),Tm=E([A("state"),A("nonce"),L("lpVault"),L("rewardVault"),L(),L(),A(),A(),A("totalReward"),J("perShareReward"),A("lastSlot"),A("perSlotReward")]),Im=E([A("state"),A("nonce"),L("lpVault"),L("rewardVaultA"),A("totalRewardA"),J("perShareRewardA"),A("perSlotRewardA"),X("option"),L("rewardVaultB"),be(7),A("totalRewardB"),J("perShareRewardB"),A("perSlotRewardB"),A("lastSlot"),L()]),Bm=E([A(),A("state"),A("nonce"),A("validRewardTokenNum"),J("rewardMultiplier"),A("rewardPeriodMax"),A("rewardPeriodMin"),A("rewardPeriodExtend"),L("lpMint"),L("lpVault"),j(hm,5,"rewardInfos"),L("creator"),L(),j(A(),32,"padding")]),xm=new Proxy(Tm,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return W(O({},i),{version:3,rewardInfos:[{rewardVault:i.rewardVault,totalReward:i.totalReward,perSlotReward:i.perSlotReward,perShareReward:i.perShareReward}]})}:Reflect.get(r,e,t)}}),Sm=new Proxy(Im,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return W(O({},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(r,e,t)}}),So=new Proxy(Bm,{get(r,e,t){return e==="decode"?(...n)=>{let i=r.decode(...n);return W(O({},i),{version:6,rewardInfos:i.rewardInfos.map(o=>{var s;return W(O({},o),{rewardType:((s=Object.entries(mn).find(a=>String(a[1])===o.rewardType.toString()))!=null?s:["Standard SPL"])[0]})})})}:Reflect.get(r,e,t)}}),Km=E([A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),qr=E([X("instruction"),A("nonce"),j(Km,5,"rewardTimeInfo")]),Ur=E([X("instruction"),A("rewardReopenTime"),A("rewardEndTime"),A("rewardPerSecond")]),Gr=E([X("instruction"),A("isSet"),A("rewardPerSecond"),A("rewardOpenTime"),A("rewardEndTime"),A("rewardType")]),Ew=E([A("state"),L("id"),L("owner"),A("deposited"),j(A(),1,"rewardDebts")]),Xr=E([A("state"),L("id"),L("owner"),A("deposited"),j(J(),1,"rewardDebts"),A(""),A("voteLockedBalance"),j(A(),15)]),Fw=E([A("state"),L("id"),L("owner"),A("deposited"),j(A(),2,"rewardDebts")]),Ea=E([A("state"),L("id"),L("owner"),A("deposited"),j(J(),2,"rewardDebts"),j(A(),17)]),Fa=E([A(),A("state"),L("id"),L("owner"),A("deposited"),j(J(),5,"rewardDebts"),j(A(),16)]),gt=E([X("instruction"),A("amount")]),Cm=E([L("mint"),L("grantAuthority"),A("baselineVoteWeightScaledFactor"),A("maxExtraLockupVoteWeightScaledFactor"),A("lockupSaturationSecs"),Ma("digitShift"),j(X(),7,"reserved1"),j(A(),7,"reserved2")]),Rm=E([be(8),L("governanceProgramId"),L("realm"),L("realmGoverningTokenMint"),L("realmAuthority"),j(X(),32,"reserved1"),j(Cm,4,"votingMints"),En("timeOffset"),X("bump"),j(X(),7,"reserved2"),j(A(),11,"reserved3")]),Lm=E([En("startTime"),En("endTime"),X("kind"),j(X(),15,"reserved")]),Om=E([j(Lm,1,"lockup"),A("amountDeposited_native"),A("amountInitiallyLockedNative"),Re("isUsed"),Re("allowClawback"),X("votingMintConfigIdx"),j(X(),29,"reserved")]),Mm=E([be(8),L("voterAuthority"),L("registrar"),j(Om,32,"deposits"),X("voterBump"),X("voterWweightRecordBump"),j(X(),94,"reserved")]);var Qw=ce("Raydium_farm_config"),Wa=new Da("4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R"),qa=new Da("FrspKwj8i3pNmKwXreTveC4fu7KL5ZbGeXdZBe2XViu1");var Ua={3:Xr,5:Ea,6:Fa},zr=r=>[3,4,5,6].indexOf(r)!==-1,Qr=r=>{var s;let{version:e,rewardInfos:t,rewardTokenAccountsPublicKeys:n}=r,i=`rewardInfo:${JSON.stringify(t)}, rewardAccount:${JSON.stringify(n)}`,o={3:()=>{if(t.length!==1||n.length!==1)return`rewardInfos or rewardTokenAccounts lengths not equal 1: ${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=o[e])==null?void 0:s.call(o)},mn={"Standard SPL":0,"Option tokens":1},Tt={[ma.toString()]:3,[da.toString()]:4,[pa.toString()]:5,[ni.toString()]:6};import{PublicKey as ue,SystemProgram as za,SYSVAR_CLOCK_PUBKEY as fi,SYSVAR_RENT_PUBKEY as vm,TransactionInstruction as Bt}from"@solana/web3.js";import Qa from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as BA,createAssociatedTokenAccountInstruction as xA,TOKEN_PROGRAM_ID as jt}from"@solana/spl-token";import Nm from"bn.js";var _m=ce("Raydium.farm.util");function di({programId:r,poolId:e,mint:t,type:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n==="lpVault"?"lp_vault_associated_seed":n==="rewardVault"?"reward_vault_associated_seed":"","utf-8")],r);return i}function It({programId:r,poolId:e,owner:t,version:n}){let{publicKey:i}=le([e.toBuffer(),t.toBuffer(),Buffer.from(n===6?"farmer_info_associated_seed":"staker_info_v2_associated_seed","utf-8")],r);return i}var Ga=({programId:r,poolId:e})=>le([e.toBuffer()],r);function Xa(r){return{isSet:new Nm(1),rewardPerSecond:Z(r.perSecond),rewardOpenTime:Z(r.openTime),rewardEndTime:Z(r.endTime),rewardType:Z(mn[r.rewardType])}}function Yr(r){return Z(r.endTime).sub(Z(r.openTime)).mul(Z(r.perSecond))}function pi(r){let e=Ua[r];return e||_m.logWithError("invalid version",r),e}var Vm=ce("Raydium_farm_instruction"),VA={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 bi(r){let{version:e,id:t,ledger:n,programId:i,owner:o}=r,s={3:9,5:10}[e];s||Vm.logWithError(`invalid farm pool version: ${e}`);let a=Buffer.alloc(Dr.span);Dr.encode({instruction:s},a);let c=[T({pubkey:t}),T({pubkey:n}),T({pubkey:o,isWritable:!1}),T({pubkey:za.programId,isWritable:!1}),T({pubkey:vm,isWritable:!1})];return{instruction:new Bt({programId:i,keys:c,data:a}),instructionType:F.FarmV3CreateLedger}}function Ya(r){var n;let e=Buffer.alloc(qr.span);qr.encode({instruction:0,nonce:new Qa(r.nonce),rewardTimeInfo:r.rewardInfoConfig},e);let t=[...br,T({pubkey:r.farmId}),T({pubkey:r.farmAuthority,isWritable:!1}),T({pubkey:r.lpVault}),T({pubkey:r.lpMint,isWritable:!1}),T({pubkey:r.lockVault}),T({pubkey:r.lockMint,isWritable:!1}),T({pubkey:(n=r.lockUserAccount)!=null?n:Ge}),T({pubkey:r.owner,isWritable:!1,isSigner:!0})];for(let i of r.rewardInfo)t.push(T({pubkey:i.rewardMint,isWritable:!1}),T({pubkey:i.rewardVault}),T({pubkey:i.userRewardToken}));return{instruction:new Bt({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6Create}}function ja(r){let e=Buffer.alloc(Wr.span);Wr.encode({instruction:5},e);let t=[T({pubkey:jt,isWritable:!1}),T({pubkey:r.id}),T({pubkey:r.authority,isWritable:!1}),T({pubkey:r.lpVault,isWritable:!1}),T({pubkey:r.rewardVault}),T({pubkey:r.userRewardToken}),T({pubkey:r.owner,isWritable:!1,isSigner:!0})];return{instruction:new Bt({programId:r.programId,keys:t,data:e}),instructionType:F.FarmV6CreatorWithdraw}}function jr({payer:r,rewardVault:e,userRewardTokenPub:t,farmKeys:n,rewardInfo:i}){let o=Buffer.alloc(Ur.span);Ur.encode({instruction:3,rewardReopenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardPerSecond:Z(i.perSecond)},o);let s=[T({pubkey:jt,isWritable:!1}),T({pubkey:n.id}),T({pubkey:n.lpVault,isWritable:!1}),T({pubkey:e}),T({pubkey:t}),T({pubkey:r,isWritable:!1,isSigner:!0})];return new Bt({programId:n.programId,keys:s,data:o})}function Hr({payer:r,userRewardTokenPub:e,farmKeys:t,rewardVault:n,rewardInfo:i}){let o=Buffer.alloc(Gr.span);Gr.encode({instruction:4,isSet:new Qa(1),rewardPerSecond:Z(i.perSecond),rewardOpenTime:Z(i.openTime),rewardEndTime:Z(i.endTime),rewardType:Z(mn[i.rewardType])},o);let s=[...br,T({pubkey:t.id}),T({pubkey:t.authority,isWritable:!1}),T({pubkey:i.mint,isWritable:!1}),T({pubkey:n}),T({pubkey:e}),T({pubkey:r,isWritable:!1,isSigner:!0})];return new Bt({programId:t.programId,keys:s,data:o})}function yi(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ue(e.programId),new ue(e.id)],u=It({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(gt.span);gt.encode({instruction:2,amount:Z(s)},l);let m=[T({pubkey:jt,isWritable:!1}),T({pubkey:c}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:new ue(t.lpVault)}),T({pubkey:u}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new ue(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new Bt({programId:a,keys:m,data:l})}function gi(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(gt.span);gt.encode({instruction:12,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new ue(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function Ha(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=E([X("instruction"),A("amount")]),m=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:a[0]}),T({pubkey:o,isSigner:!0,isWritable:!1}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1}),T({pubkey:i[1]}),T({pubkey:new ue(t.rewardInfos[1].vault)})],d=Buffer.alloc(l.span);return l.encode({instruction:2,amount:s},d),new Bt({keys:m,programId:c,data:d})}function wi(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(gt.span);gt.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function Za(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:3}),m=Buffer.alloc(gt.span);gt.encode({instruction:10,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function $a(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s,userAuxiliaryLedgers:a}=r,[c,u]=[new ue(e.programId),new ue(e.id)],l=It({programId:c,poolId:u,owner:o,version:5}),m=Buffer.alloc(gt.span);gt.encode({instruction:11,amount:Z(s)},m);let d=[T({pubkey:u}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:l}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n}),T({pubkey:new ue(t.lpVault)}),T({pubkey:i[0]}),T({pubkey:new ue(t.rewardInfos[0].vault)}),T({pubkey:fi,isWritable:!1}),T({pubkey:jt,isWritable:!1})];for(let p=1;p<t.rewardInfos.length;p++)d.push(T({pubkey:i[p]})),d.push(T({pubkey:new ue(t.rewardInfos[p].vault)}));if(a)for(let p of a)d.push(T({pubkey:p}));return new Bt({programId:c,keys:d,data:m})}function Ja(r){let{farmInfo:e,farmKeys:t,lpAccount:n,rewardAccounts:i,owner:o,amount:s}=r,[a,c]=[new ue(e.programId),new ue(e.id)],u=It({programId:a,poolId:c,owner:o,version:6}),l=Buffer.alloc(gt.span);gt.encode({instruction:1,amount:Z(s)},l);let m=[T({pubkey:jt,isWritable:!1}),T({pubkey:za.programId,isWritable:!1}),T({pubkey:c}),T({pubkey:new ue(t.authority),isWritable:!1}),T({pubkey:new ue(t.lpVault)}),T({pubkey:u}),T({pubkey:o,isWritable:!1,isSigner:!0}),T({pubkey:n})];for(let d=0;d<t.rewardInfos.length;d++)m.push(T({pubkey:new ue(t.rewardInfos[d].vault)})),m.push(T({pubkey:i[d]}));return new Bt({programId:a,keys:m,data:l})}var Ai=class extends Ce{async _getUserRewardInfo({payer:e,rewardInfo:t}){if(t.mint.equals(Ge)){let n=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:e,amount:Yr(W(O({},t),{openTime:t.openTime.toString(),endTime:t.endTime.toString()}))});return{rewardPubKey:n.addresses.newAccount,newInstruction:n}}return{rewardPubKey:await this.scope.account.getCreatedTokenAccount({mint:t.mint,associatedOnly:!1})}}async create({poolInfo:e,rewardInfos:t,payer:n,programId:i=ni,txVersion:o}){this.checkDisabled(),this.scope.checkOwner();let a={lpMint:new we(e.lpMint.address),lockInfo:{lockMint:Wa,lockVault:qa},version:6,rewardInfos:t,programId:i},c=this.createTxBuilder(),u=n!=null?n:this.scope.ownerPubKey,l=Me({fromPublicKey:u,programId:a.programId}),m=await this.scope.connection.getMinimumBalanceForRentExemption(So.span);c.addInstruction({instructions:[Em.createAccountWithSeed({fromPubkey:u,basePubkey:u,seed:l.seed,newAccountPubkey:l.publicKey,lamports:m,space:So.span,programId:a.programId})]});let{publicKey:d,nonce:p}=Ga({programId:new we(a.programId),poolId:l.publicKey}),f=di({programId:a.programId,poolId:l.publicKey,mint:a.lpMint,type:"lpVault"}),b=[],y=[];for(let B of a.rewardInfos){B.openTime>=B.endTime&&this.logAndCreateError("start time error","rewardInfo.rewardOpenTime",B.openTime.toString()),isNaN(mn[B.rewardType])&&this.logAndCreateError("rewardType error",B.rewardType),Number(B.perSecond)<=0&&this.logAndCreateError("rewardPerSecond error",B.perSecond),b.push(Xa(B));let{rewardPubKey:h,newInstruction:S}=await this._getUserRewardInfo({rewardInfo:B,payer:u});S&&c.addInstruction(S),h||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let I=B.mint.equals(Ge)?new we(je.address):B.mint;y.push({rewardMint:I,rewardVault:di({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&&c.addInstruction(w),g||this.logAndCreateError("cannot found lock vault","tokenAccounts",this.scope.account.tokenAccounts);let{instruction:k,instructionType:P}=Ya({farmId:l.publicKey,owner:this.scope.ownerPubKey,farmAuthority:d,lpVault:f,lpMint:a.lpMint,lockVault:a.lockInfo.lockVault,lockMint:a.lockInfo.lockMint,lockUserAccount:g,programId:a.programId,rewardInfo:y,rewardInfoConfig:b,nonce:p});return c.addInstruction({instructions:[k],instructionTypes:[P]}).versionBuild({txVersion:o,extInfo:{farmId:l.publicKey,farmAuthority:d,lpVault:f,lockUserAccount:g,nonce:p}})}async restartReward({farmInfo:e,payer:t,newRewardInfo:n,txVersion:i}){var y;let o=Tt[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=He((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 c=t||this.scope.ownerPubKey,u=n.mint.equals(Ge)?new we(je.address):n.mint,l=a.rewardInfos.findIndex(g=>new we(g.mint.address).equals(u)),m=s.rewardInfos[l];m||this.logAndCreateError("configuration does not exist","rewardMint",u);let d=(y=m.vault)!=null?y:Ge,p=this.createTxBuilder(),{rewardPubKey:f,newInstruction:b}=await this._getUserRewardInfo({rewardInfo:n,payer:c});return b&&p.addInstruction(b),f||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts),p.addInstruction({instructions:[jr({payer:this.scope.ownerPubKey,rewardVault:d,userRewardTokenPub:f,farmKeys:a,rewardInfo:n})],instructionTypes:[F.FarmV6Restart]}).versionBuild({txVersion:i})}async restartRewards({farmInfo:e,payer:t,newRewardInfos:n,txVersion:i}){var l;let o=Tt[e.programId];o!==6&&this.logAndCreateError("invalid farm version ",o);let s=He((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 c=t||this.scope.ownerPubKey,u=this.createTxBuilder();for(let m of n){let d=m.mint.equals(Ge)?new we(je.address):m.mint,p=a.rewardInfos.findIndex(k=>new we(k.mint.address).equals(d)),f=s.rewardInfos[p];f||this.logAndCreateError("configuration does not exist","rewardMint",d);let b=(l=f.vault)!=null?l:Ge,{rewardPubKey:y,newInstruction:g}=await this._getUserRewardInfo({rewardInfo:m,payer:c});g&&u.addInstruction(g),y||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let w=jr({payer:this.scope.ownerPubKey,rewardVault:b,userRewardTokenPub:y,farmKeys:a,rewardInfo:m});u.addInstruction({instructions:[w],instructionTypes:[F.FarmV6Restart]})}return u.versionBuild({txVersion:i})}async addNewRewardToken(e){let{txVersion:t,farmInfo:n,newRewardInfo:i,payer:o}=e,s=Tt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=He((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=o!=null?o:this.scope.ownerPubKey,u=this.createTxBuilder(),l=i.mint.equals(Ge)?new we(je.address):i.mint,m=di({programId:new we(n.programId),poolId:new we(n.id),mint:l,type:"rewardVault"}),{rewardPubKey:d,newInstruction:p}=await this._getUserRewardInfo({rewardInfo:i,payer:c});return p&&u.addInstruction(p),d||this.logAndCreateError("annot found target token accounts",this.scope.account.tokenAccounts),i.mint=l,u.addInstruction({instructions:[Hr({payer:this.scope.ownerPubKey,userRewardTokenPub:d,farmKeys:a,rewardVault:m,rewardInfo:i})],instructionTypes:[F.FarmV6CreatorAddReward]}).versionBuild({txVersion:t})}async addNewRewardsToken(e){let{txVersion:t,farmInfo:n,newRewardInfos:i,payer:o}=e,s=Tt[n.programId];s!==6&&this.logAndCreateError("invalid farm version ",s);let a=He((await this.scope.api.fetchFarmKeysById({ids:n.id}))[0]),c=o!=null?o:this.scope.ownerPubKey,u=this.createTxBuilder();for(let l of i){let m=l.mint.equals(Ge)?new we(je.address):l.mint,d=di({programId:new we(n.programId),poolId:new we(n.id),mint:m,type:"rewardVault"}),{rewardPubKey:p,newInstruction:f}=await this._getUserRewardInfo({rewardInfo:l,payer:c});f&&u.addInstruction(f),p||this.logAndCreateError("cannot found target token accounts",this.scope.account.tokenAccounts);let b=Hr({payer:this.scope.ownerPubKey,userRewardTokenPub:p,farmKeys:a,rewardVault:d,rewardInfo:W(O({},l),{mint:m})});u.addInstruction({instructions:[b],instructionTypes:[F.FarmV6CreatorAddReward]})}return u.versionBuild({txVersion:t})}async deposit(e){let{txVersion:t,farmInfo:n,amount:i,feePayer:o,useSOLBalance:s,associatedOnly:a=!0,checkCreateATAOwner:c=!1,userAuxiliaryLedgers:u,computeBudgetConfig:l}=e;this.scope.availability.addFarm===!1&&this.logAndCreateError("farm deposit feature disabled in your region");let{rewardInfos:m,programId:d}=n,p=Tt[d];p===4&&this.logAndCreateError("V4 has suspended deposits:",n.programId),zr(p)||this.logAndCreateError("invalid farm program:",n.programId);let[f,b]=[new we(n.programId),new we(n.id)],y=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],g=It({programId:f,poolId:b,owner:this.scope.ownerPubKey,version:p}),w=this.createTxBuilder();w.addCustomComputeBudget(l);let k={};for(let R of this.scope.account.tokenAccounts)if(a){let G=ie(this.scope.ownerPubKey,R.mint,R.programId).publicKey;R.publicKey&&G.equals(R.publicKey)&&(k[R.mint.toString()]=R.publicKey)}else k[R.mint.toString()]=R.publicKey;let P=y.lpMint,B=k[P.address];B||this.logAndCreateError("you don't have any lp","lp zero",k);let h=[];for(let R of m){let G=s&&R.mint.address===H.toString(),U=k[R.mint.address];if(!U){let{account:D,instructionParams:Pe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:R.mint.programId,mint:new we(R.mint.address),notUseTokenAccount:G,createInfo:{payer:o||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!G,associatedOnly:G?!1:a,checkCreateATAOwner:c});U=D,Pe&&w.addInstruction(Pe)}k[R.mint.address]=U,h.push(U)}let S,I=await this.scope.connection.getAccountInfo(g);if(I&&(S=pi(p).decode(I.data)),n.programId!==ni.toString()&&!S){let{instruction:R,instructionType:G}=bi({id:b,programId:f,version:p,ledger:g,owner:this.scope.ownerPubKey});w.addInstruction({instructions:[R],instructionTypes:[G]})}let C=Qr({version:p,rewardInfos:m,rewardTokenAccountsPublicKeys:h});C&&this.logAndCreateError(C);let x={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:y,lpAccount:B,rewardAccounts:h,userAuxiliaryLedgers:u==null?void 0:u.map(R=>new we(R))},K=p===6?Ja(x):p===5?$a(x):Za(x),v={3:F.FarmV3Deposit,5:F.FarmV5Deposit,6:F.FarmV6Deposit};return w.addInstruction({instructions:[K],instructionTypes:[v[p]]}).versionBuild({txVersion:t})}async withdraw(e){let{txVersion:t,farmInfo:n,amount:i,deposited:o,useSOLBalance:s,feePayer:a,associatedOnly:c=!0,checkCreateATAOwner:u=!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=Tt[n.programId];zr(p)||this.logAndCreateError("invalid farm program:",n.programId);let f=(await this.scope.api.fetchFarmKeysById({ids:n.id}))[0],b=this.createTxBuilder();b.addCustomComputeBudget(m);let y={};for(let C of this.scope.account.tokenAccounts)if(c){let x=ie(this.scope.ownerPubKey,C.mint).publicKey;C.publicKey&&x.equals(C.publicKey)&&(y[C.mint.toString()]=C.publicKey)}else y[C.mint.toString()]=C.publicKey;if(!o&&p!==4){let C=It({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)pi(p).decode(x.data).deposited.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});else if(p!==6&&(l||[]).length>0){let{instruction:K,instructionType:v}=bi({id:new we(f.id),programId:new we(f.programId),version:p,ledger:C,owner:this.scope.ownerPubKey});b.addInstruction({instructions:[K],instructionTypes:[v]})}else this.logAndCreateError("no lp data",{farmId:n.id,version:p,ledgerData:x})}else o&&o.isZero()&&this.logAndCreateError("no deposited lp",{farmId:n.id});let g=f.lpMint.address,w=s&&g===H.toString(),k=y[g.toString()];if(!k){let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:f.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:c,checkCreateATAOwner:u});k=C,x&&b.addInstruction(x)}y[g.toString()]=k;let P=[];for(let C of d){let x=s&&C.mint.address===H.toString(),K=y[C.mint.address];if(!K){let{account:v,instructionParams:R}=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:c,checkCreateATAOwner:u});K=v,R&&b.addInstruction(R)}y[C.mint.address]=K,P.push(K)}let B=Qr({version:p,rewardInfos:d,rewardTokenAccountsPublicKeys:P});B&&this.logAndCreateError(B);let h={amount:Z(i),owner:this.scope.ownerPubKey,farmInfo:n,farmKeys:f,lpAccount:k,rewardAccounts:P,userAuxiliaryLedgers:l==null?void 0:l.map(C=>new we(C))},S=p===6?yi(h):p===5?gi(h):p===4?Ha(h):wi(h),I={3:F.FarmV3Withdraw,4:F.FarmV4Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};return b.addInstruction({instructions:[S],instructionTypes:[I[p]]}).versionBuild({txVersion:t})}async withdrawFarmReward({farmInfo:e,withdrawMint:t,txVersion:n}){var p;this.scope.checkOwner();let i=He((await this.scope.api.fetchFarmKeysById({ids:e.id}))[0]),o=Tt[e.programId];o!==6&&this.logAndCreateError("invalid farm version",o);let s=e.rewardInfos.findIndex(f=>f.mint.address===Ge.toString()?new we(je.address):t),a=i.rewardInfos[s];a||this.logAndCreateError("withdraw mint error","rewardInfos",e);let c=(p=a==null?void 0:a.vault)!=null?p:Ge,u=this.createTxBuilder(),l;if(t.equals(Ge)){let f=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:Yr(W(O({},a),{openTime:a.openTime,endTime:a.endTime,perSecond:new M(a.perSecond).mul(10**a.mint.decimals).toString()}))});l=f.addresses.newAccount,u.addInstruction(f)}else{let f=await this.scope.account.getCreatedTokenAccount({mint:t});f===null?(l=await this.scope.account.getAssociatedTokenAccount(t),u.addInstruction({instructions:[Fm(this.scope.ownerPubKey,l,this.scope.ownerPubKey,t)],instructionTypes:[F.CreateATA]})):l=f}let{instruction:m,instructionType:d}=ja({programId:i.programId,id:i.id,authority:i.authority,lpVault:i.lpVault,rewardVault:c,userRewardToken:l,owner:this.scope.ownerPubKey});return u.addInstruction({instructions:[m],instructionTypes:[d]}).versionBuild({txVersion:n})}async harvestAllRewards(e){let{farmInfoList:t,useSOLBalance:n,feePayer:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,userAuxiliaryLedgers:a,txVersion:c,computeBudgetConfig:u}=e,l=this.createTxBuilder(),m={};for(let f of this.scope.account.tokenAccounts)if(o){let b=ie(this.scope.ownerPubKey,f.mint).publicKey;f.publicKey&&b.equals(f.publicKey)&&(m[f.mint.toString()]=f.publicKey)}else m[f.mint.toString()]=f.publicKey;let p=(await this.scope.api.fetchFarmKeysById({ids:Object.values(t).map(f=>f.id).join(",")})).reduce((f,b)=>W(O({},f),{[b.id]:b}),{});for(let f of Object.values(t)){let{programId:b,lpMint:y,rewardInfos:g,id:w}=f,k=Tt[b],P=y.address,B=n&&P===H.toString(),h=m[P];if(!h){let{account:v,instructionParams:R}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:y.programId,mint:new we(P),notUseTokenAccount:B,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!0,associatedOnly:B?!1:o,checkCreateATAOwner:s});h=v,R&&l.addInstruction(R)}m[P.toString()]=h;let S=[];for(let v of g){let R=n&&v.mint.address===H.toString(),G=m[v.mint.address];if(!G){let{account:U,instructionParams:D}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:v.mint.programId,mint:new we(v.mint.address),notUseTokenAccount:R,createInfo:{payer:i||this.scope.ownerPubKey,amount:0},owner:this.scope.ownerPubKey,skipCloseAccount:!R,associatedOnly:R?!1:o,checkCreateATAOwner:s});G=U,D&&l.addInstruction(D)}m[v.mint.address]=G,S.push(G)}let I=p[w],C={amount:dt,owner:this.scope.ownerPubKey,farmInfo:f,farmKeys:I,lpAccount:h,rewardAccounts:S,userAuxiliaryLedgers:a==null?void 0:a.map(v=>new we(v))},x=k===6?yi(C):k===5?gi(C):wi(C),K={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};l.addInstruction({instructions:[x],instructionTypes:[K[k]]})}return c===1?l.sizeCheckBuild({computeBudgetConfig:u}):l.sizeCheckBuildV0({computeBudgetConfig:u})}};import{PublicKey as De}from"@solana/web3.js";import{AccountLayout as xd,NATIVE_MINT as Wo,TOKEN_PROGRAM_ID as pn}from"@solana/spl-token";import{Keypair as Mo,PublicKey as q,SystemProgram as $t,TransactionInstruction as Ze}from"@solana/web3.js";import rs from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Ki,TOKEN_2022_PROGRAM_ID as Le,TOKEN_PROGRAM_ID as Ae}from"@solana/spl-token";import jm from"bn.js";import xt from"bn.js";var Ne=new xt(0),wt=new xt(1),Ht=new xt(-1),At=new xt(1).shln(64),Ko=new xt(1).shln(128),Zr=At.sub(wt),ki=64,eu=Ko.subn(1),et=-443636,rt=-et,St=new xt("4295048016"),Kt=new xt("79226673521066979257578248091"),Co=new xt("4295048017"),Ro=new xt("79226673521066979257578248090"),tu=16,nu="59543866431248",iu="184467440737095516",ou="15793534762490258745",Lo=new xt(10).pow(new xt(6));var ru={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:[]},fk=new xt("18446744073700000000");import ae from"bn.js";function Oo(r){let e=new ArrayBuffer(4);return new DataView(e).setInt32(0,r,!1),new Uint8Array(e)}function $r(r,e){let t=0;for(let n=r-1;n>=0&&!e.testn(n);n--)t++;return t}function Jr(r,e){let t=0;for(let n=0;n<r&&!e.testn(n);n++)t++;return t}function Pi(r,e){for(let t=0;t<r;t++)if(e.testn(t))return!1;return!0}function su(r,e){return Pi(r,e)?null:$r(r,e)}function au(r,e){return Pi(r,e)?null:Jr(r,e)}var kk=Buffer.from("amm_config","utf8"),Dm=Buffer.from("pool","utf8"),Wm=Buffer.from("pool_vault","utf8"),qm=Buffer.from("pool_reward_vault","utf8"),uu=Buffer.from("position","utf8"),Um=Buffer.from("tick_array","utf8"),Gm=Buffer.from("operation","utf8"),Xm=Buffer.from("pool_tick_array_bitmap_extension","utf8"),zm=Buffer.from("observation","utf8");function cu(r,e,t,n){return le([Dm,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function es(r,e,t){return le([Wm,e.toBuffer(),t.toBuffer()],r)}function lu(r,e,t){return le([qm,e.toBuffer(),t.toBuffer()],r)}function me(r,e,t){return le([Um,e.toBuffer(),Oo(t)],r)}function Vt(r,e,t,n){return le([uu,e.toBuffer(),Oo(t),Oo(n)],r)}function st(r,e){return le([uu,e.toBuffer()],r)}function kn(r){return le([Buffer.from("metadata","utf8"),Gt.toBuffer(),r.toBuffer()],Gt)}function hi(r){return le([Gm],r)}function _e(r,e){return le([Xm,e.toBuffer()],r)}function mu(r,e){return le([zm,e.toBuffer()],r)}var du=Buffer.from("locked_position","utf8");function ts(r,e){return le([du,e.toBuffer()],r)}function Ti(r,e){return le([du,e.toBuffer()],r)}import{PublicKey as kt}from"@solana/web3.js";import{TOKEN_2022_PROGRAM_ID as pu}from"@solana/spl-token";import xe from"bn.js";import Wt from"bn.js";var Ii=class{static getfeeGrowthInside(e,t,n){let i=new Wt(0),o=new Wt(0);e.tickCurrent>=t.tick?(i=t.feeGrowthOutsideX64A,o=t.feeGrowthOutsideX64B):(i=e.feeGrowthGlobalX64A.sub(t.feeGrowthOutsideX64A),o=e.feeGrowthGlobalX64B.sub(t.feeGrowthOutsideX64B));let s=new Wt(0),a=new Wt(0);e.tickCurrent<n.tick?(s=n.feeGrowthOutsideX64A,a=n.feeGrowthOutsideX64B):(s=e.feeGrowthGlobalX64A.sub(n.feeGrowthOutsideX64A),a=e.feeGrowthGlobalX64B.sub(n.feeGrowthOutsideX64B));let c=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64A,i),s),u=oe.wrappingSubU128(oe.wrappingSubU128(e.feeGrowthGlobalX64B,o),a);return{feeGrowthInsideX64A:c,feeGrowthInsideBX64:u}}static GetPositionFees(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,At),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,At),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionFeesV2(e,t,n,i){let{feeGrowthInsideX64A:o,feeGrowthInsideBX64:s}=this.getfeeGrowthInside(e,n,i),a=oe.mulDivFloor(oe.wrappingSubU128(o,t.feeGrowthInsideLastX64A),t.liquidity,At),c=t.tokenFeesOwedA.add(a),u=oe.mulDivFloor(oe.wrappingSubU128(s,t.feeGrowthInsideLastX64B),t.liquidity,At),l=t.tokenFeesOwedB.add(u);return{tokenFeeAmountA:c,tokenFeeAmountB:l}}static GetPositionRewardsV2(e,t,n,i){let o=[],s=this.getRewardGrowthInsideV2(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,At),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static GetPositionRewards(e,t,n,i){let o=[],s=this.getRewardGrowthInside(e.tickCurrent,n,i,e.rewardInfos);for(let a=0;a<s.length;a++){let c=s[a],u=t.rewardInfos[a],l=oe.wrappingSubU128(c,u.growthInsideLastX64),m=oe.mulDivFloor(l,t.liquidity,At),d=u.rewardAmountOwed.add(m);o.push(d)}return o}static getRewardGrowthInside(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Wt(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 c=new Wt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getRewardGrowthInsideV2(e,t,n,i){let o=[];for(let s=0;s<i.length;s++){let a=new Wt(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 c=new Wt(0);n.liquidityGross.eqn(0)||(e<n.tick?c=n.rewardGrowthsOutsideX64[s]:c=i[s].rewardGrowthGlobalX64.sub(n.rewardGrowthsOutsideX64[s])),o.push(oe.wrappingSubU128(oe.wrappingSubU128(i[s].rewardGrowthGlobalX64,a),c))}return o}static getAmountsFromLiquidity({poolInfo:e,ownerPosition:t,liquidity:n,slippage:i,add:o,epochInfo:s}){var y,g,w,k;let a=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),c=ne.getSqrtPriceX64FromTick(t.tickLower),u=ne.getSqrtPriceX64FromTick(t.tickUpper),l=o?1+i:1-i,m=pe.getAmountsFromLiquidity(a,c,u,n,o),[d,p]=[ge(m.amountA,(y=e.mintA.extensions)==null?void 0:y.feeConfig,s,!0),ge(m.amountB,(g=e.mintB.extensions)==null?void 0:g.feeConfig,s,!0)],[f,b]=[ge(new Wt(new M(m.amountA.toString()).mul(l).toFixed(0)),(w=e.mintA.extensions)==null?void 0:w.feeConfig,s,!0),ge(new Wt(new M(m.amountB.toString()).mul(l).toFixed(0)),(k=e.mintB.extensions)==null?void 0:k.feeConfig,s,!0)];return{liquidity:n,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:b,expirationTime:_t(d.expirationTime,p.expirationTime)}}};var Qm=15,de=class{static async getTickArrays(e,t,n,i,o,s,a){let c=[],u=Y.getTickArrayStartIndexByTick(i,o),l=Y.getInitializedTickArrayInRange(s,a,o,u,Math.floor(Qm/2));for(let p=0;p<l.length;p++){let{publicKey:f}=me(t,n,l[p]);c.push(f)}let m=(await Rt(e,c)).map(p=>p!==null?Bi.decode(p.data):null),d={};for(let p=0;p<c.length;p++){let f=m[p];f!==null&&(d[f.startTickIndex]=W(O({},f),{address:c[p]}))}return d}static nextInitializedTick(e,t,n,i,o,s){let{initializedTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}=this.nextInitializedTickInOneArray(e,t,n,i,o,s);for(;a==null||a.liquidityGross.lten(0);){if(u=Y.getNextTickArrayStartIndex(u,o,s),this.checkIsValidStartIndex(u,o))throw new Error("No enough initialized tickArray");let l=n[u];if(l===void 0)continue;let{nextTick:m,tickArrayAddress:d,tickArrayStartTickIndex:p}=this.firstInitializedTickInOneArray(e,t,l,s);[a,c,u]=[m,d,p]}if(a==null)throw new Error("No invaild tickArray cache");return{nextTick:a,tickArrayAddress:c,tickArrayStartTickIndex:u}}static nextInitializedTickArray(e,t,n,i,o){let s=Math.floor(e/de.tickCount(t)),a=n?Y.searchLowBitFromStart(i,o,s-1,1,t):Y.searchHightBitFromStart(i,o,s+1,1,t);return a.length>0?{isExist:!0,nextStartIndex:a[0]}:{isExist:!1,nextStartIndex:0}}static firstInitializedTickInOneArray(e,t,n,i){let o;if(i){let a=Xe-1;for(;a>=0;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a-1}}else{let a=0;for(;a<Xe;){let c=n.ticks[a];if(c.liquidityGross.gtn(0)){o=c;break}a=a+1}}let{publicKey:s}=me(e,t,n.startTickIndex);return{nextTick:o,tickArrayAddress:s,tickArrayStartTickIndex:n.startTickIndex}}static nextInitializedTickInOneArray(e,t,n,i,o,s){let a=Y.getTickArrayStartIndexByTick(i,o),c=Math.floor((i-a)/o),u=n[a];if(u==null)return{initializedTick:void 0,tickArrayAddress:void 0,tickArrayStartTickIndex:a};let l;if(s)for(;c>=0;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c-1}else for(c=c+1;c<Xe;){let d=u.ticks[c];if(d.liquidityGross.gtn(0)){l=d;break}c=c+1}let{publicKey:m}=me(e,t,a);return{initializedTick:l,tickArrayAddress:m,tickArrayStartTickIndex:u.startTickIndex}}static getArrayStartIndex(e,t){let n=this.tickCount(t);return Math.floor(e/n)*n}static checkIsValidStartIndex(e,t){if(Y.checkIsOutOfBoundary(e)){if(e>rt)return!1;let n=Y.getTickArrayStartIndexByTick(et,t);return e==n}return e%this.tickCount(t)==0}static tickCount(e){return Xe*e}};var ns=14,Zt=class{static maxTickInTickarrayBitmap(e){return e*Xe*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 o=n*i;return e<0?{minValue:-o,maxValue:-o+n}:{minValue:o,maxValue:o+n}}static nextInitializedTickArrayStartIndex(e,t,n,i){if(!de.checkIsValidStartIndex(t,n))throw Error("nextInitializedTickArrayStartIndex check error");let o=this.maxTickInTickarrayBitmap(n),s=i?t-de.tickCount(n):t+de.tickCount(n);if(s<-o||s>=o)return{isInit:!1,tickIndex:t};let a=n*Xe,c=s/a+512;s<0&&s%a!=0&&c--;let u=Math.abs(c);if(i){let l=e.shln(1024-u-1),m=su(1024,l);if(m!==null){let d=(u-m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:-o}}else{let l=e.shrn(u),m=au(1024,l);if(m!==null){let d=(u+m-512)*a;return{isInit:!0,tickIndex:d}}else return{isInit:!1,tickIndex:o-de.tickCount(n)}}}},xi=class{static getBitmapOffset(e,t){if(!de.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");this.checkExtensionBoundary(e,t);let n=Zt.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=Zt.maxTickInTickarrayBitmap(e),n=-t;if(rt<=t)throw Error(`extensionTickBoundary check error: ${rt}, ${t}`);if(n<=et)throw Error(`extensionTickBoundary check error: ${n}, ${et}`);return{positiveTickBoundary:t,negativeTickBoundary:n}}static checkTickArrayIsInit(e,t,n){let{tickarrayBitmap:i}=this.getBitmap(e,t,n),o=this.tickArrayOffsetInBitmap(e,t);return{isInitialized:Y.mergeTickArrayBitmap(i).testn(o),startIndex:e}}static nextInitializedTickArrayFromOneBitmap(e,t,n,i){let o=de.tickCount(t),s=n?e-o:e+o,{tickarrayBitmap:a}=this.getBitmap(s,t,i);return this.nextInitializedTickArrayInBitmap(a,s,t,n)}static nextInitializedTickArrayInBitmap(e,t,n,i){let{minValue:o,maxValue:s}=Zt.getBitmapTickBoundary(t,n),a=this.tickArrayOffsetInBitmap(t,n);if(i){let c=Y.mergeTickArrayBitmap(e).shln(Pn-1-a),u=Pi(512,c)?null:$r(512,c);if(u!==null){let l=t-u*de.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:o}}else{let c=Y.mergeTickArrayBitmap(e).shrn(a),u=Pi(512,c)?null:Jr(512,c);if(u!==null){let l=t+u*de.tickCount(n);return{isInit:!0,tickIndex:l}}else return{isInit:!1,tickIndex:s-de.tickCount(n)}}}static tickArrayOffsetInBitmap(e,t){let n=Math.abs(e)%Zt.maxTickInTickarrayBitmap(t),i=Math.floor(n/de.tickCount(t));return e<0&&n!=0&&(i=Pn-i),i}};var Te=class{static getOutputAmountAndRemainAccounts(e,t,n,i,o,s=!1){let a=n.toBase58()===e.mintA.address,c=[],{isExist:u,startIndex:l,nextAccountMeta:m}=this.getFirstInitializedTickArray(e,a);if(!u||l===void 0||!m)throw new Error("Invalid tick array");c.push(m);let{allTrade:d,amountCalculated:p,accounts:f,sqrtPriceX64:b,feeAmount:y}=hn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,a,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i,l,o,s);return c.push(...f),{allTrade:d,expectedAmountOut:p.mul(Ht),remainingAccounts:c,executionPrice:b,feeAmount:y}}static getInputAmountAndRemainAccounts(e,t,n,i,o){let s=n.toBase58()===e.mintB.address,a=[],{isExist:c,startIndex:u,nextAccountMeta:l}=this.getFirstInitializedTickArray(e,s);if(!c||u===void 0||!l)throw new Error("Invalid tick array");try{let b=this.preInitializedTickArrayStartIndex(e,s);if(b.isExist){let{publicKey:y}=me(e.programId,e.id,b.nextStartIndex);a.push(y)}}catch{}a.push(l);let{amountCalculated:m,accounts:d,sqrtPriceX64:p,feeAmount:f}=hn.swapCompute(e.programId,e.id,t,e.tickArrayBitmap,e.exBitmapInfo,s,e.ammConfig.tradeFeeRate,e.liquidity,e.tickCurrent,e.tickSpacing,e.sqrtPriceX64,i.mul(Ht),u,o);return a.push(...d),{expectedAmountIn:m,remainingAccounts:a,executionPrice:p,feeAmount:f}}static getFirstInitializedTickArray(e,t){let{isInitialized:n,startIndex:i}=Te.isOverflowDefaultTickarrayBitmap(e.tickSpacing,[e.tickCurrent])?xi.checkTickArrayIsInit(de.getArrayStartIndex(e.tickCurrent,e.tickSpacing),e.tickSpacing,e.exBitmapInfo):Y.checkTickArrayIsInitialized(Y.mergeTickArrayBitmap(e.tickArrayBitmap),e.tickCurrent,e.tickSpacing);if(n){let{publicKey:a}=me(e.programId,e.id,i);return{isExist:!0,startIndex:i,nextAccountMeta:a}}let{isExist:o,nextStartIndex:s}=this.nextInitializedTickArrayStartIndex(e,de.getArrayStartIndex(e.tickCurrent,e.tickSpacing),t);if(o){let{publicKey:a}=me(e.programId,e.id,s);return{isExist:!0,startIndex:s,nextAccountMeta:a}}return{isExist:!1,nextAccountMeta:void 0,startIndex:void 0}}static preInitializedTickArrayStartIndex(e,t){let n=Math.floor(e.tickCurrent/de.tickCount(e.tickSpacing)),i=t?Y.searchHightBitFromStart(e.tickArrayBitmap,e.exBitmapInfo,n+1,1,e.tickSpacing):Y.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=de.getArrayStartIndex(e.tickCurrent,e.tickSpacing);;){let{isInit:i,tickIndex:o}=Zt.nextInitializedTickArrayStartIndex(Y.mergeTickArrayBitmap(e.tickArrayBitmap),t,e.tickSpacing,n);if(i)return{isExist:!0,nextStartIndex:o};t=o;let{isInit:s,tickIndex:a}=xi.nextInitializedTickArrayFromOneBitmap(t,e.tickSpacing,n,e.exBitmapInfo);if(s)return{isExist:!0,nextStartIndex:a};if(t=a,t<et||t>rt)return{isExist:!1,nextStartIndex:0}}}static async updatePoolRewardInfos({connection:e,apiPoolInfo:t,chainTime:n,poolLiquidity:i,rewardInfos:o}){var a,c,u;let s=[];for(let l=0;l<o.length;l++){let m=o[l],d=(u=(a=t.rewardDefaultInfos[l])==null?void 0:a.mint.programId)!=null?u:(c=await e.getAccountInfo(m.tokenMint))==null?void 0:c.owner;if(d===void 0)throw Error("get new reward mint info error");let p=W(O({},m),{perSecond:oe.x64ToDecimal(m.emissionsPerSecondX64),remainingRewards:void 0,tokenProgramId:new kt(d)});if(p.tokenMint.equals(kt.default))continue;if(n<=p.openTime.toNumber()||i.eq(Ne)){s.push(p);continue}let f=new xe(Math.min(p.endTime.toNumber(),n)),b=f.sub(p.lastUpdateTime),y=oe.mulDivFloor(b,p.emissionsPerSecondX64,i),g=p.rewardGrowthGlobalX64.add(y),w=oe.mulDivFloor(b,p.emissionsPerSecondX64,At),k=p.rewardTotalEmissioned.add(w);s.push(W(O({},p),{rewardGrowthGlobalX64:g,rewardTotalEmissioned:k,lastUpdateTime:f}))}return s}static isOverflowDefaultTickarrayBitmap(e,t){let{maxTickBoundary:n,minTickBoundary:i}=this.tickRange(e);for(let o of t){let s=Y.getTickArrayStartIndexByTick(o,e);if(s>=n||s<i)return!0}return!1}static tickRange(e){let t=Zt.maxTickInTickarrayBitmap(e),n=-t;return t>rt&&(t=de.getArrayStartIndex(rt,e)+de.tickCount(e)),n<et&&(n=de.getArrayStartIndex(et,e)),{maxTickBoundary:t,minTickBoundary:n}}static get_tick_array_offset(e,t){if(!de.checkIsValidStartIndex(e,t))throw new Error("No enough initialized tickArray");return e/de.tickCount(t)*Pn}static async fetchExBitmaps({connection:e,exBitmapAddress:t,batchRequest:n}){let i=await qe(e,t.map(s=>({pubkey:s})),{batchRequest:n}),o={};for(let s of i)s.accountInfo!==null&&(o[s.pubkey.toString()]=bu.decode(s.accountInfo.data));return o}static async fetchMultiplePoolTickArrays({connection:e,poolKeys:t,batchRequest:n}){let i={},o=[];for(let c of t){let u=Y.getTickArrayStartIndexByTick(c.tickCurrent,c.tickSpacing),l=Y.getInitializedTickArrayInRange(c.tickArrayBitmap,c.exBitmapInfo,c.tickSpacing,u,7);for(let m of l){let{publicKey:d}=me(c.programId,c.id,m);o.push({pubkey:d}),i[d.toString()]=c.id}}let s=await qe(e,o,{batchRequest:n}),a={};for(let c of s){if(!c.accountInfo)continue;let u=i[c.pubkey.toString()];if(!u)continue;a[u.toString()]===void 0&&(a[u.toString()]={});let l=Bi.decode(c.accountInfo.data);a[u.toString()][l.startTickIndex]=W(O({},l),{address:c.pubkey})}return a}static async fetchPoolsAccountPosition({pools:e,connection:t,ownerInfo:n,batchRequest:i=!1,updateOwnerRewardAndFee:o=!0}){var a;let s=[];for(let c=0;c<e.length;c++){let u=e[c];u!==null&&(s.find(l=>l.equals(u.state.programId))||s.push(u.state.programId))}if(n){let c=n.tokenAccounts.map(d=>d.accountInfo.mint),u=[];for(let d of c)for(let p of s)u.push(st(p,d).publicKey);let l=await Rt(t,u,{batchRequest:i}),m={};for(let d of l){if(d===null)continue;let p=Si.decode(d.data),f=p.poolId.toString(),b=e.find(I=>I.state.id.toBase58()===f);if(b===void 0)continue;let y=b.state,g=Y._getTickPriceLegacy({poolInfo:y,tick:p.tickLower,baseIn:!0}),w=Y._getTickPriceLegacy({poolInfo:y,tick:p.tickUpper,baseIn:!0}),{amountA:k,amountB:P}=pe.getAmountsFromLiquidity(y.sqrtPriceX64,g.tickSqrtPriceX64,w.tickSqrtPriceX64,p.liquidity,!1),B=1/(1-Math.sqrt(Math.sqrt(g.price.div(w.price).toNumber())));b.positionAccount=[...(a=b.positionAccount)!=null?a:[],{poolId:p.poolId,nftMint:p.nftMint,priceLower:g.price,priceUpper:w.price,amountA:k,amountB:P,tickLower:p.tickLower,tickUpper:p.tickUpper,liquidity:p.liquidity,feeGrowthInsideLastX64A:p.feeGrowthInsideLastX64A,feeGrowthInsideLastX64B:p.feeGrowthInsideLastX64B,tokenFeesOwedA:p.tokenFeesOwedA,tokenFeesOwedB:p.tokenFeesOwedB,rewardInfos:p.rewardInfos.map(I=>W(O({},I),{pendingReward:new xe(0)})),leverage:B,tokenFeeAmountA:new xe(0),tokenFeeAmountB:new xe(0)}];let h=await Y.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickLower,b.state.tickSpacing),S=await Y.getTickArrayAddressByTick(b.state.programId,p.poolId,p.tickUpper,b.state.tickSpacing);m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickLower}`]=h,m[`${b.state.programId.toString()}-${p.poolId.toString()}-${p.tickUpper}`]=S}if(o){let d=Object.values(m),p=await Rt(t,d,{batchRequest:i}),f={};for(let b=0;b<d.length;b++){let y=p[b];if(y===null)continue;let g=d[b].toString();f[g]=Bi.decode(y.data)}for(let{state:b,positionAccount:y}of e)if(!!y)for(let g of y){let w=`${b.programId.toString()}-${b.id.toString()}-${g.tickLower}`,k=`${b.programId.toString()}-${b.id.toString()}-${g.tickUpper}`,P=f[m[w].toString()],B=f[m[k].toString()],h=P.ticks[Y.getTickOffsetInArray(g.tickLower,b.tickSpacing)],S=B.ticks[Y.getTickOffsetInArray(g.tickUpper,b.tickSpacing)],{tokenFeeAmountA:I,tokenFeeAmountB:C}=await Ii.GetPositionFees(b,g,h,S),x=await Ii.GetPositionRewards(b,g,h,S);g.tokenFeeAmountA=I.gte(new xe(0))?I:new xe(0),g.tokenFeeAmountB=C.gte(new xe(0))?C:new xe(0);for(let K=0;K<x.length;K++)g.rewardInfos[K].pendingReward=x[K].gte(new xe(0))?x[K]:new xe(0)}}}return e}static computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountIn:o,slippage:s,priceLimit:a=new M(0),catchLiquidityInsufficient:c=!1}){var v;let u,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 M(0))?u=l?St.add(new xe(1)):Kt.sub(new xe(1)):u=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let p=ge(o,m,i,!1),{allTrade:f,expectedAmountOut:b,remainingAccounts:y,executionPrice:g,feeAmount:w}=Te.getOutputAmountAndRemainAccounts(e,t,n,p.amount.sub((v=p.fee)!=null?v:Ne),u,c),k=ge(b,d,i,!1),P=ne.sqrtPriceX64ToPrice(g,e.mintA.decimals,e.mintB.decimals),B=l?P:new M(1).div(P),h=b.mul(new xe(Math.floor((1-s)*1e10))).div(new xe(1e10)),S=ge(h,d,i,!1),I=l?e.currentPrice:new M(1).div(e.currentPrice),C=new M(B).sub(I).abs(),x=I,K=new ze(new M(C).mul(10**15).toFixed(0),new M(x).mul(10**15).toFixed(0));return{allTrade:f,realAmountIn:p,amountOut:k,minAmountOut:S,expirationTime:_t(p.expirationTime,k.expirationTime),currentPrice:e.currentPrice,executionPrice:B,priceImpact:K,fee:w,remainingAccounts:y,executionPriceX64:g}}static computeAmountOutFormat({poolInfo:e,tickArrayCache:t,amountIn:n,tokenOut:i,slippage:o,epochInfo:s,catchLiquidityInsufficient:a=!1}){let c=i.address===e.mintB.address,[u,l]=c?[e.mintA,e.mintB]:[e.mintB,e.mintA],[m,d]=[new Ke(W(O({},u),{mint:u.address,isToken2022:u.programId===pu.toBase58()})),new Ke(W(O({},l),{mint:l.address,isToken2022:l.programId===pu.toBase58()}))],{allTrade:p,realAmountIn:f,amountOut:b,minAmountOut:y,expirationTime:g,currentPrice:w,executionPrice:k,priceImpact:P,fee:B,remainingAccounts:h,executionPriceX64:S}=Te.computeAmountOut({poolInfo:e,tickArrayCache:t,baseMint:new kt(u.address),amountIn:n,slippage:o,epochInfo:s,catchLiquidityInsufficient:a}),I=W(O({},f),{amount:new ye(m,f.amount),fee:f.fee===void 0?void 0:new ye(m,f.fee)}),C=W(O({},b),{amount:new ye(d,b.amount),fee:b.fee===void 0?void 0:new ye(d,b.fee)}),x=W(O({},y),{amount:new ye(d,y.amount),fee:y.fee===void 0?void 0:new ye(d,y.fee)}),K=new mt({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:w.mul(new M(10**(20+d.decimals))).toFixed(0)}),v=new mt({baseToken:m,denominator:new xe(10).pow(new xe(20+m.decimals)),quoteToken:d,numerator:k.mul(new M(10**(20+d.decimals))).toFixed(0)}),R=new ye(m,B);return{allTrade:p,realAmountIn:I,amountOut:C,minAmountOut:x,expirationTime:g,currentPrice:K,executionPrice:v,priceImpact:P,fee:R,remainingAccounts:h,executionPriceX64:S}}static computeAmountIn({poolInfo:e,tickArrayCache:t,baseMint:n,epochInfo:i,amountOut:o,slippage:s,priceLimit:a=new M(0)}){var x;let c=n.toBase58()===e.mintA.address,u={[e.mintA.address]:e.mintA.extensions.feeConfig,[e.mintB.address]:e.mintB.extensions.feeConfig},l;a.equals(new M(0))?l=c?Kt.sub(new xe(1)):St.add(new xe(1)):l=ne.priceToSqrtPriceX64(a,e.mintA.decimals,e.mintB.decimals);let m=ge(o,u[n.toString()],i,!0),{expectedAmountIn:d,remainingAccounts:p,executionPrice:f,feeAmount:b}=Te.getInputAmountAndRemainAccounts(e,t,n,m.amount.sub((x=m.fee)!=null?x:Ne),l),y=c?e.mintB.address:e.mintA.address,g=ge(d,u[y],i,!1),w=ne.sqrtPriceX64ToPrice(f,e.mintA.decimals,e.mintB.decimals),k=c?w:new M(1).div(w),P=d.mul(new xe(Math.floor((1+s)*1e10))).div(new xe(1e10)),B=ge(P,u[y],i,!0),h=c?e.currentPrice:new M(1).div(e.currentPrice),S=new M(k).sub(h).abs(),I=h,C=new ze(new M(S).mul(10**15).toFixed(0),new M(I).mul(10**15).toFixed(0));return{amountIn:g,maxAmountIn:B,realAmountOut:m,expirationTime:_t(g.expirationTime,m.expirationTime),currentPrice:e.currentPrice,executionPrice:k,priceImpact:C,fee:b,remainingAccounts:p}}static estimateAprsForPriceRangeMultiplier({poolInfo:e,aprType:t,positionTickLowerIndex:n,positionTickUpperIndex:i}){var f,b,y;let o=e[t],s=Y.getTickPrice({poolInfo:e,tick:n,baseIn:!0}).price.toNumber(),a=Y.getTickPrice({poolInfo:e,tick:i,baseIn:!0}).price.toNumber(),c=Math.max(s,o.priceMin),l=Math.min(a,o.priceMax)-c,m=a-s,d=o.priceMax-o.priceMin,p;return l<=0?p=0:m===l?p=d/l:d===l?p=l/m:p=l/d*(l/m),{feeApr:o.feeApr*p,rewardsApr:[((f=o.rewardApr[0])!=null?f:0)*p,((b=o.rewardApr[1])!=null?b:0)*p,((y=o.rewardApr[2])!=null?y:0)*p],apr:o.apr*p}}static estimateAprsForPriceRangeDelta({poolInfo:e,poolLiquidity:t,aprType:n,mintPrice:i,liquidity:o,positionTickLowerIndex:s,positionTickUpperIndex:a,chainTime:c}){let u=n==="day"?1:n==="week"?7:n==="month"?30:0,l=e[n],m=i[yt(e.mintA.address).toString()],d=i[yt(e.mintB.address).toString()],p=e.mintA.decimals,f=e.mintB.decimals;if(!l||!m||!d)return{feeApr:0,rewardsApr:[0,0,0],apr:0};let b=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),y=ne.getSqrtPriceX64FromTick(s),g=ne.getSqrtPriceX64FromTick(a),{amountSlippageA:w,amountSlippageB:k}=pe.getAmountsFromLiquidityWithSlippage(b,y,g,t,!1,!1,0),{amountSlippageA:P,amountSlippageB:B}=pe.getAmountsFromLiquidityWithSlippage(b,y,g,o,!1,!1,0),h=new M(w.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(k.toString()).div(new M(10).pow(f)).mul(d.value)),S=new M(P.toString()).div(new M(10).pow(p)).mul(m.value).add(new M(B.toString()).div(new M(10).pow(f)).mul(d.value)),I=new M(1).div(h.add(S)),x=new M(l.volumeFee).mul(365).div(u).mul(I).mul(100).toNumber(),K=3600*24*365,v=e.rewardDefaultInfos.map(R=>{var D,Pe;let G=R.mint.decimals,U=i[R.mint.address];return c<((D=R.startTime)!=null?D:0)||c>((Pe=R.endTime)!=null?Pe:0)||!R.perSecond||!U||G===void 0?0:new M(U.value).mul(new M(R.perSecond).mul(K)).div(new M(10).pow(G)).mul(I).mul(100).toNumber()});return{feeApr:x,rewardsApr:v,apr:x+v.reduce((R,G)=>R+G,0)}}static getLiquidityAmountOutFromAmountIn({poolInfo:e,inputA:t,tickLower:n,tickUpper:i,amount:o,slippage:s,add:a,epochInfo:c,amountHasFee:u}){var g,w;let l=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),m=ne.getSqrtPriceX64FromTick(n),d=ne.getSqrtPriceX64FromTick(i),p=a?1-s:1+s,f=ge(o,(g=e[t?"mintA":"mintB"].extensions)==null?void 0:g.feeConfig,c,!u),b=new xe(new M(f.amount.sub((w=f.fee)!=null?w:Ne).toString()).mul(p).toFixed(0)),y;if(l.lte(m))y=t?pe.getLiquidityFromTokenAmountA(m,d,b,!a):new xe(0);else if(l.lte(d)){let k=pe.getLiquidityFromTokenAmountA(l,d,b,!a),P=pe.getLiquidityFromTokenAmountB(m,l,b);y=t?k:P}else y=t?new xe(0):pe.getLiquidityFromTokenAmountB(m,d,b);return Te.getAmountsFromLiquidity({epochInfo:c,poolInfo:e,tickLower:n,tickUpper:i,liquidity:y,slippage:s,add:a})}static async getAmountsFromLiquidity({epochInfo:e,poolInfo:t,tickLower:n,tickUpper:i,liquidity:o,slippage:s,add:a}){var y,g,w,k;let c=ne.getSqrtPriceX64FromTick(n),u=ne.getSqrtPriceX64FromTick(i),l=a?1+s:1-s,m=pe.getAmountsFromLiquidity(ne.priceToSqrtPriceX64(new M(t.price),t.mintA.decimals,t.mintB.decimals),c,u,o,a),[d,p]=[ge(m.amountA,(y=t.mintA.extensions)==null?void 0:y.feeConfig,e,!0),ge(m.amountB,(g=t.mintB.extensions)==null?void 0:g.feeConfig,e,!0)],[f,b]=[ge(m.amountA.muln(l),(w=t.mintA.extensions)==null?void 0:w.feeConfig,e,!0),ge(m.amountB.muln(l),(k=t.mintB.extensions)==null?void 0:k.feeConfig,e,!0)];return{liquidity:o,amountA:d,amountB:p,amountSlippageA:f,amountSlippageB:b,expirationTime:_t(d.expirationTime,p.expirationTime)}}static async fetchComputeMultipleClmmInfo({connection:e,poolList:t,rpcDataMap:n={}}){let i=t.filter(c=>!n[c.id]).map(c=>new kt(c.id));(await Rt(e,i)).forEach((c,u)=>{!c||(n[i[u].toBase58()]=Tn.decode(c.data))});let s=t.map(c=>_e(new kt(c.programId),new kt(c.id)).publicKey),a=await Te.fetchExBitmaps({connection:e,exBitmapAddress:s,batchRequest:!1});return t.reduce((c,u)=>W(O({},c),{[u.id]:W(O({},n[u.id]),{id:new kt(u.id),version:6,programId:new kt(u.programId),mintA:u.mintA,mintB:u.mintB,ammConfig:W(O({},u.config),{id:new kt(u.config.id),fundOwner:""}),currentPrice:new M(u.price),exBitmapAccount:_e(new kt(u.programId),new kt(u.id)).publicKey,exBitmapInfo:a[_e(new kt(u.programId),new kt(u.id)).publicKey.toBase58()],startTime:n[u.id].startTime.toNumber(),rewardInfos:n[u.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 is={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]};function fu(r){return W(O({},r),{type:"Concentrated",programId:r.programId.toString(),id:r.id.toString(),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Clmm",price:r.currentPrice.toNumber(),mintAmountA:0,mintAmountB:0,feeRate:r.ammConfig.tradeFeeRate,openTime:r.startTime.toString(),tvl:0,day:is,week:is,month:is,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,burnPercent:0,config:W(O({},r.ammConfig),{id:r.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]})})}var oe=class{static mulDivRoundingUp(e,t,n){let i=e.mul(t),o=i.div(n);return i.mod(n).eq(Ne)||(o=o.add(wt)),o}static mulDivFloor(e,t,n){if(n.eq(Ne))throw new Error("division by 0");return e.mul(t).div(n)}static mulDivCeil(e,t,n){if(n.eq(Ne))throw new Error("division by 0");return e.mul(t).add(n.sub(wt)).div(n)}static x64ToDecimal(e,t){return new M(e.toString()).div(M.pow(2,64)).toDecimalPlaces(t)}static decimalToX64(e){return new ae(e.mul(M.pow(2,64)).floor().toFixed())}static wrappingSubU128(e,t){return e.add(Ko).sub(t).mod(Ko)}};function Qe(r,e){return os(r.mul(e),64,256)}function Ym(r,e,t){let n=r.toTwos(t).shln(e);return n.imaskn(t+1),n.fromTwos(t)}function os(r,e,t){let n=r.toTwos(t).shrn(e);return n.imaskn(t-e+1),n.fromTwos(t-e)}var ne=class{static sqrtPriceX64ToPrice(e,t,n){return oe.x64ToDecimal(e).pow(2).mul(M.pow(10,t-n))}static priceToSqrtPriceX64(e,t,n){return oe.decimalToX64(e.mul(M.pow(10,n-t)).sqrt())}static getNextSqrtPriceX64FromInput(e,t,n,i){if(!e.gt(Ne))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ne))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(Ne))throw new Error("sqrtPriceX64 must greater than 0");if(!t.gt(Ne))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(Ne))return e;let o=t.shln(ki);if(i){let s=o,a=o.add(n.mul(e));return a.gte(s)?oe.mulDivCeil(s,e,a):oe.mulDivRoundingUp(s,wt,s.div(e).add(n))}else{let s=n.mul(e);if(!o.gt(s))throw new Error("getNextSqrtPriceFromTokenAmountARoundingUp,liquidityLeftShift must gt amountMulSqrtPrice");let a=o.sub(s);return oe.mulDivCeil(o,e,a)}}static getNextSqrtPriceFromTokenAmountBRoundingDown(e,t,n,i){let o=n.shln(ki);if(i)return e.add(o.div(t));{let s=oe.mulDivRoundingUp(o,wt,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<et||e>rt)throw new Error("tick must be in MIN_TICK and MAX_TICK");let t=e<0?e*-1:e,n=(t&1)!=0?new ae("18445821805675395072"):new ae("18446744073709551616");return(t&2)!=0&&(n=Qe(n,new ae("18444899583751176192"))),(t&4)!=0&&(n=Qe(n,new ae("18443055278223355904"))),(t&8)!=0&&(n=Qe(n,new ae("18439367220385607680"))),(t&16)!=0&&(n=Qe(n,new ae("18431993317065453568"))),(t&32)!=0&&(n=Qe(n,new ae("18417254355718170624"))),(t&64)!=0&&(n=Qe(n,new ae("18387811781193609216"))),(t&128)!=0&&(n=Qe(n,new ae("18329067761203558400"))),(t&256)!=0&&(n=Qe(n,new ae("18212142134806163456"))),(t&512)!=0&&(n=Qe(n,new ae("17980523815641700352"))),(t&1024)!=0&&(n=Qe(n,new ae("17526086738831433728"))),(t&2048)!=0&&(n=Qe(n,new ae("16651378430235570176"))),(t&4096)!=0&&(n=Qe(n,new ae("15030750278694412288"))),(t&8192)!=0&&(n=Qe(n,new ae("12247334978884435968"))),(t&16384)!=0&&(n=Qe(n,new ae("8131365268886854656"))),(t&32768)!=0&&(n=Qe(n,new ae("3584323654725218816"))),(t&65536)!=0&&(n=Qe(n,new ae("696457651848324352"))),(t&131072)!=0&&(n=Qe(n,new ae("26294789957507116"))),(t&262144)!=0&&(n=Qe(n,new ae("37481735321082"))),e>0&&(n=eu.div(n)),n}static getTickFromPrice(e,t,n){return ne.getTickFromSqrtPriceX64(ne.priceToSqrtPriceX64(e,t,n))}static getTickFromSqrtPriceX64(e){if(e.gt(Kt)||e.lt(St))throw new Error("Provided sqrtPrice is not within the supported sqrtPrice range.");let t=e.bitLength()-1,n=new ae(t-64),i=Ym(n,32,128),o=new ae("8000000000000000","hex"),s=0,a=new ae(0),c=t>=64?e.shrn(t-63):e.shln(63-t);for(;o.gt(new ae(0))&&s<tu;){c=c.mul(c);let f=c.shrn(127);c=c.shrn(63+f.toNumber()),a=a.add(o.mul(f)),o=o.shrn(1),s+=1}let u=a.shrn(32),m=i.add(u).mul(new ae(nu)),d=os(m.sub(new ae(iu)),64,128).toNumber(),p=os(m.add(new ae(ou)),64,128).toNumber();return d==p?d:ne.getSqrtPriceX64FromTick(p).lte(e)?p:d}},In=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 o=In.getTickWithPriceAndTickspacing(e,t,n,i),s=ne.getSqrtPriceX64FromTick(o);return ne.sqrtPriceX64ToPrice(s,n,i)}},pe=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(Ne))throw new Error("sqrtPriceX64A must greater than 0");let o=n.ushln(ki),s=t.sub(e);return i?oe.mulDivRoundingUp(oe.mulDivCeil(o,s,t),wt,e):oe.mulDivFloor(o,s,t).div(e)}static getTokenAmountBFromLiquidity(e,t,n,i){if(e.gt(t)&&([e,t]=[t,e]),!e.gt(Ne))throw new Error("sqrtPriceX64A must greater than 0");return i?oe.mulDivCeil(n,t.sub(e),At):oe.mulDivFloor(n,t.sub(e),At)}static getLiquidityFromTokenAmountA(e,t,n,i){e.gt(t)&&([e,t]=[t,e]);let o=n.mul(e).mul(t),s=t.sub(e),a=o.div(s);return i?oe.mulDivRoundingUp(a,wt,Zr):a.shrn(ki)}static getLiquidityFromTokenAmountB(e,t,n){return e.gt(t)&&([e,t]=[t,e]),oe.mulDivFloor(n,Zr,t.sub(e))}static getLiquidityFromTokenAmounts(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return pe.getLiquidityFromTokenAmountA(t,n,i,!1);if(e.lt(n)){let s=pe.getLiquidityFromTokenAmountA(e,n,i,!1),a=pe.getLiquidityFromTokenAmountB(t,e,o);return s.lt(a)?s:a}else return pe.getLiquidityFromTokenAmountB(t,n,o)}static getAmountsFromLiquidity(e,t,n,i,o){if(t.gt(n)&&([t,n]=[n,t]),e.lte(t))return{amountA:pe.getTokenAmountAFromLiquidity(t,n,i,o),amountB:new ae(0)};if(e.lt(n)){let s=pe.getTokenAmountAFromLiquidity(e,n,i,o),a=pe.getTokenAmountBFromLiquidity(t,e,i,o);return{amountA:s,amountB:a}}else return{amountA:new ae(0),amountB:pe.getTokenAmountBFromLiquidity(t,n,i,o)}}static getAmountsFromLiquidityWithSlippage(e,t,n,i,o,s,a){let{amountA:c,amountB:u}=pe.getAmountsFromLiquidity(e,t,n,i,s),l=o?1+a:1-a,m=new ae(new M(c.toString()).mul(l).toFixed(0)),d=new ae(new M(u.toString()).mul(l).toFixed(0));return{amountSlippageA:m,amountSlippageB:d}}static getAmountsOutFromLiquidity({poolInfo:e,tickLower:t,tickUpper:n,liquidity:i,slippage:o,add:s,epochInfo:a,amountAddFee:c}){var w,k,P,B;let u=ne.priceToSqrtPriceX64(new M(e.price),e.mintA.decimals,e.mintB.decimals),l=ne.getSqrtPriceX64FromTick(t),m=ne.getSqrtPriceX64FromTick(n),d=s?1+o:1-o,p=pe.getAmountsFromLiquidity(u,l,m,i,s),[f,b]=[ge(p.amountA,(w=e.mintA.extensions)==null?void 0:w.feeConfig,a,c),ge(p.amountB,(k=e.mintB.extensions)==null?void 0:k.feeConfig,a,c)],[y,g]=[ge(new ae(new M(p.amountA.toString()).mul(d).toFixed(0)),(P=e.mintA.extensions)==null?void 0:P.feeConfig,a,c),ge(new ae(new M(p.amountB.toString()).mul(d).toFixed(0)),(B=e.mintB.extensions)==null?void 0:B.feeConfig,a,c)];return{liquidity:i,amountA:f,amountB:b,amountSlippageA:y,amountSlippageB:g,expirationTime:_t(f.expirationTime,b.expirationTime)}}},hn=class{static swapCompute(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b=!1){if(d.eq(Ne))throw new Error("amountSpecified must not be 0");if(f||(f=s?St.add(wt):Kt.sub(wt)),s){if(f.lt(St))throw new Error("sqrtPriceX64 must greater than MIN_SQRT_PRICE_X64");if(f.gte(m))throw new Error("sqrtPriceX64 must smaller than current")}else{if(f.gt(Kt))throw new Error("sqrtPriceX64 must smaller than MAX_SQRT_PRICE_X64");if(f.lte(m))throw new Error("sqrtPriceX64 must greater than current")}let y=d.gt(Ne),g={amountSpecifiedRemaining:d,amountCalculated:Ne,sqrtPriceX64:m,tick:u>p?Math.min(p+de.tickCount(l)-1,u):p,accounts:[],liquidity:c,feeAmount:new ae(0)},w=p,k=n[p],P=0,B=!s&&k.startTickIndex===g.tick;for(;!g.amountSpecifiedRemaining.eq(Ne)&&!g.sqrtPriceX64.eq(f);){P>10;let h={};h.sqrtPriceStartX64=g.sqrtPriceX64;let S=Y.nextInitTick(k,g.tick,l,s,B),I=S||null,C=null;if(!(I!=null&&I.liquidityGross.gtn(0))){let K=Te.nextInitializedTickArrayStartIndex({tickCurrent:g.tick,tickSpacing:l,tickArrayBitmap:i,exBitmapInfo:o},w,s);if(!K.isExist){if(b)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=K.nextStartIndex;let{publicKey:v}=me(e,t,w);C=v,k=n[w];try{I=Y.firstInitializedTick(k,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<et?h.tickNext=et:h.tickNext>rt&&(h.tickNext=rt),h.sqrtPriceNextX64=ne.getSqrtPriceX64FromTick(h.tickNext);let x;if(s&&h.sqrtPriceNextX64.lt(f)||!s&&h.sqrtPriceNextX64.gt(f)?x=f:x=h.sqrtPriceNextX64,[g.sqrtPriceX64,h.amountIn,h.amountOut,h.feeAmount]=hn.swapStepCompute(g.sqrtPriceX64,x,g.liquidity,g.amountSpecifiedRemaining,a),g.feeAmount=g.feeAmount.add(h.feeAmount),y?(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 K=I.liquidityNet;s&&(K=K.mul(Ht)),g.liquidity=pe.addDelta(g.liquidity,K)}B=h.tickNext!=g.tick&&!s&&k.startTickIndex===h.tickNext,g.tick=s?h.tickNext-1:h.tickNext}else if(g.sqrtPriceX64!=h.sqrtPriceStartX64){let K=ne.getTickFromSqrtPriceX64(g.sqrtPriceX64);B=K!=g.tick&&!s&&k.startTickIndex===K,g.tick=K}++P}try{let{nextStartIndex:h,isExist:S}=de.nextInitializedTickArray(g.tick,l,s,i,o);S&&p!==h&&(g.accounts.push(me(e,t,h).publicKey),p=h)}catch{}return{allTrade:!0,amountSpecifiedRemaining:Ne,amountCalculated:g.amountCalculated,feeAmount:g.feeAmount,sqrtPriceX64:g.sqrtPriceX64,liquidity:g.liquidity,tickCurrent:g.tick,accounts:g.accounts}}static swapStepCompute(e,t,n,i,o){let s={sqrtPriceX64Next:new ae(0),amountIn:new ae(0),amountOut:new ae(0),feeAmount:new ae(0)},a=e.gte(t),c=i.gte(Ne);if(c){let l=oe.mulDivFloor(i,Lo.sub(new ae(o.toString())),Lo);s.amountIn=a?pe.getTokenAmountAFromLiquidity(t,e,n,!0):pe.getTokenAmountBFromLiquidity(e,t,n,!0),l.gte(s.amountIn)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromInput(e,n,l,a)}else s.amountOut=a?pe.getTokenAmountBFromLiquidity(t,e,n,!1):pe.getTokenAmountAFromLiquidity(e,t,n,!1),i.mul(Ht).gte(s.amountOut)?s.sqrtPriceX64Next=t:s.sqrtPriceX64Next=ne.getNextSqrtPriceX64FromOutput(e,n,i.mul(Ht),a);let u=t.eq(s.sqrtPriceX64Next);return a?(u&&c||(s.amountIn=pe.getTokenAmountAFromLiquidity(s.sqrtPriceX64Next,e,n,!0)),u&&!c||(s.amountOut=pe.getTokenAmountBFromLiquidity(s.sqrtPriceX64Next,e,n,!1))):(s.amountIn=u&&c?s.amountIn:pe.getTokenAmountBFromLiquidity(e,s.sqrtPriceX64Next,n,!0),s.amountOut=u&&!c?s.amountOut:pe.getTokenAmountAFromLiquidity(e,s.sqrtPriceX64Next,n,!1)),!c&&s.amountOut.gt(i.mul(Ht))&&(s.amountOut=i.mul(Ht)),c&&!s.sqrtPriceX64Next.eq(t)?s.feeAmount=i.sub(s.amountIn):s.feeAmount=oe.mulDivCeil(s.amountIn,new ae(o),Lo.sub(new ae(o))),[s.sqrtPriceX64Next,s.amountIn,s.amountOut,s.feeAmount]}};var Xe=60,Pn=512,Y=class{static getTickArrayAddressByTick(e,t,n,i){let o=Y.getTickArrayStartIndexByTick(n,i),{publicKey:s}=me(e,t,o);return s}static getTickOffsetInArray(e,t){if(e%t!=0)throw new Error("tickIndex % tickSpacing not equal 0");let n=Y.getTickArrayStartIndexByTick(e,t),i=Math.floor((e-n)/t);if(i<0||i>=Xe)throw new Error("tick offset in array overflow");return i}static getTickArrayBitIndex(e,t){let n=de.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)*de.tickCount(t)}static getTickArrayOffsetInBitmapByTick(e,t){let n=t*Xe,i=Math.floor(e/n)+512;return Math.abs(i)}static checkTickArrayIsInitialized(e,t,n){let i=n*Xe,o=Math.floor(t/i)+512,s=Math.abs(o);return{isInitialized:e.testn(s),startIndex:(s-512)*i}}static getNextTickArrayStartIndex(e,t,n){return n?e-t*Xe:e+t*Xe}static mergeTickArrayBitmap(e){let t=new jm(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,o){let s=Math.floor(i/(n*Xe));return[...Y.searchLowBitFromStart(e,t,s-1,o,n),...Y.searchHightBitFromStart(e,t,s,o,n)]}static getAllInitializedTickArrayStartIndex(e,t,n){return Y.searchHightBitFromStart(e,t,0,Pn,n)}static getAllInitializedTickArrayInfo(e,t,n,i,o){let s=[],a=Y.getAllInitializedTickArrayStartIndex(n,i,o);for(let c of a){let{publicKey:u}=me(e,t,c);s.push({tickArrayStartIndex:c,tickArrayAddress:u})}return s}static getAllInitializedTickInTickArray(e){return e.ticks.filter(t=>t.liquidityGross.gtn(0))}static searchLowBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n>=-7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n--,a.length===i)break}let c=de.tickCount(o);return a.map(u=>u*c)}static searchHightBitFromStart(e,t,n,i,o){let s=[...[...t.negativeTickArrayBitmap].reverse(),e.slice(0,8),e.slice(8,16),...t.positiveTickArrayBitmap].map(u=>Y.mergeTickArrayBitmap(u)),a=[];for(;n<7680;){let u=Math.floor((n+7680)/512),l=(n+7680)%512;if(s[u].testn(l)&&a.push(n),n++,a.length===i)break}let c=de.tickCount(o);return a.map(u=>u*c)}static checkIsOutOfBoundary(e){return e<et||e>rt}static nextInitTick(e,t,n,i,o){if(de.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(o||(a=a+1);a<Xe;){if(e.ticks[a].liquidityGross.gtn(0))return e.ticks[a];a=a+1}return null}static firstInitializedTick(e,t){if(t){let n=Xe-1;for(;n>=0;){if(e.ticks[n].liquidityGross.gtn(0))return e.ticks[n];n=n-1}}else{let n=0;for(;n<Xe;){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),o=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(o),tickSqrtPriceX64:i}}static _getPriceAndTickLegacy({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),o=In.getTickWithPriceAndTickspacing(i,e.ammConfig.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(o),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new M(1).div(a)}}static getTickPrice({poolInfo:e,tick:t,baseIn:n}){let i=ne.getSqrtPriceX64FromTick(t),o=ne.sqrtPriceX64ToPrice(i,e.mintA.decimals,e.mintB.decimals);return n?{tick:t,price:o,tickSqrtPriceX64:i}:{tick:t,price:new M(1).div(o),tickSqrtPriceX64:i}}static getPriceAndTick({poolInfo:e,price:t,baseIn:n}){let i=n?t:new M(1).div(t),o=In.getTickWithPriceAndTickspacing(i,e.config.tickSpacing,e.mintA.decimals,e.mintB.decimals),s=ne.getSqrtPriceX64FromTick(o),a=ne.sqrtPriceX64ToPrice(s,e.mintA.decimals,e.mintB.decimals);return n?{tick:o,price:a}:{tick:o,price:new M(1).div(a)}}};var yu=E([be(8),X("bump"),zt("index"),L(""),Je("protocolFeeRate"),Je("tradeFeeRate"),zt("tickSpacing"),j(A(),8,"")]),Hm=E([Je("blockTimestamp"),En("tickCumulative"),j(A(),4)]),gu=E([be(8),Re("initialized"),A("recentEpoch"),zt("observationIndex"),L("poolId"),j(Hm,100,"observations"),j(A(),4)]),Zm=E([X("rewardState"),A("openTime"),A("endTime"),A("lastUpdateTime"),J("emissionsPerSecondX64"),A("rewardTotalEmissioned"),A("rewardClaimed"),L("tokenMint"),L("tokenVault"),L("creator"),J("rewardGrowthGlobalX64")]),Tn=E([be(8),X("bump"),L("ammConfig"),L("creator"),L("mintA"),L("mintB"),L("vaultA"),L("vaultB"),L("observationId"),X("mintDecimalsA"),X("mintDecimalsB"),zt("tickSpacing"),J("liquidity"),J("sqrtPriceX64"),Be("tickCurrent"),Je(),J("feeGrowthGlobalX64A"),J("feeGrowthGlobalX64B"),A("protocolFeesTokenA"),A("protocolFeesTokenB"),J("swapInAmountTokenA"),J("swapOutAmountTokenB"),J("swapInAmountTokenB"),J("swapOutAmountTokenA"),X("status"),j(X(),7,""),j(Zm,3,"rewardInfos"),j(A(),16,"tickArrayBitmap"),A("totalFeesTokenA"),A("totalFeesClaimedTokenA"),A("totalFeesTokenB"),A("totalFeesClaimedTokenB"),A("fundFeesTokenA"),A("fundFeesTokenB"),A("startTime"),j(A(),15*4-3,"padding")]),$m=E([J("growthInsideLastX64"),A("rewardAmountOwed")]),Si=E([be(8),X("bump"),L("nftMint"),L("poolId"),Be("tickLower"),Be("tickUpper"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j($m,3,"rewardInfos"),j(A(),8,"")]),KP=E([be(8),X("bump"),L("poolId"),Be("tickLowerIndex"),Be("tickUpperIndex"),J("liquidity"),J("feeGrowthInsideLastX64A"),J("feeGrowthInsideLastX64B"),A("tokenFeesOwedA"),A("tokenFeesOwedB"),j(J(),3,"rewardGrowthInside"),j(A(),8,"")]),Jm=E([Be("tick"),Na("liquidityNet"),J("liquidityGross"),J("feeGrowthOutsideX64A"),J("feeGrowthOutsideX64B"),j(J(),3,"rewardGrowthsOutsideX64"),j(Je(),13,"")]),Bi=E([be(8),L("poolId"),Be("startTickIndex"),j(Jm,Xe,"ticks"),X("initializedTickCount"),j(X(),115,"")]),wu=E([be(329),j(L(),100,"whitelistMints")]),bu=E([be(8),L("poolId"),j(j(A(),8),ns,"positiveTickArrayBitmap"),j(j(A(),8),ns,"negativeTickArrayBitmap")]),CP=E([A(),X("bump"),L("owner"),L("poolId"),L("positionId"),L("nftAccount"),j(A(),8)]),RP=E([be(8),X("bump"),L("lockOwner"),L("poolId"),L("positionId"),L("nftAccount"),L("lockNftMint"),A("recentEpoch"),j(A(),8)]);gu.span;var Au=ce("Raydium_Clmm"),Pt={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],openPositionWithTokenEx:[77,255,174,82,125,29,201,46],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]},ku=[188,37,179,131,82,150,84,73],Pu=[16,72,250,198,14,162,212,19],ke=class{static createPoolInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([J("sqrtPriceX64"),A("startTime")]),y=[{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:u,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);b.encode({sqrtPriceX64:p,startTime:f},g);let w=Buffer.from([...Pt.createPool,...g]);return new Ze({keys:y,programId:e,data:w})}static async createPoolInstructions(e){let{programId:t,owner:n,mintA:i,mintB:o,ammConfigId:s,initialPriceX64:a,startTime:c}=e,[u,l]=[new q(i.address),new q(o.address)],{publicKey:m}=cu(t,s,u,l),{publicKey:d}=mu(t,m),{publicKey:p}=es(t,m,u),{publicKey:f}=es(t,m,l),b=_e(t,m).publicKey,y=[this.createPoolInstruction(t,m,n,s,d,u,p,new q(i.programId||Ae),l,f,new q(o.programId||Ae),b,a,c)];return{signers:[],instructions:y,instructionTypes:[F.CreateAccount,F.ClmmCreatePool],address:{poolId:m,observationId:d,exBitmapAccount:b,mintAVault:p,mintBVault:f},lookupTableAddress:[]}}static openPositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C,x){let K=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),v=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Gt,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...v],G=Buffer.alloc(K.span);K.encode({tickLowerIndex:w,tickUpperIndex:k,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:B,liquidity:h,amountMaxA:S,amountMaxB:I,withMetadata:C==="create",baseFlag:!1,optionBaseFlag:0},G);let U=Buffer.from([...Pt.openPosition,...G]);return new Ze({keys:R,programId:e,data:U})}static openPositionFromLiquidityInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C){let x=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:P,liquidity:B,amountMaxA:h,amountMaxB:S,withMetadata:I==="create",baseFlag:!1,optionBaseFlag:0},R);let G=Buffer.from([...Pt.openPositionWithTokenEx,...R]);return new Ze({keys:v,programId:e,data:G})}static async openPositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new q(e.programId),new q(e.id)],b;if(l)b=new q((await l(1))[0]);else{let C=Mo.generate();d.push(C),b=C.publicKey}let y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:w}=me(p,f,y),{publicKey:k}=me(p,f,g),{publicKey:P}=m?ie(n.wallet,b,Le):ie(n.wallet,b,Ae),{publicKey:B}=kn(b),{publicKey:h}=st(p,b),{publicKey:S}=Vt(p,f,i,o),I=m?this.openPositionFromLiquidityInstruction22(p,n.feePayer,f,n.wallet,b,P,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0):this.openPositionFromLiquidityInstruction(p,n.feePayer,f,n.wallet,b,P,B,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0);return{signers:d,instructions:[I],instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{nftMint:b,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:B,personalPosition:h,protocolPosition:S}}}static async openPositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d=[],[p,f]=[new q(e.programId),new q(e.id)],b;if(l)b=new q((await l(1))[0]);else{let C=Mo.generate();d.push(C),b=C.publicKey}let y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:w}=me(p,f,y),{publicKey:k}=me(p,f,g),{publicKey:P}=m?ie(n.wallet,b,Le):ie(n.wallet,b,Ae),{publicKey:B}=kn(b),{publicKey:h}=st(p,b),{publicKey:S}=Vt(p,f,i,o),I=m?this.openPositionFromBaseInstruction22(p,n.feePayer,f,n.wallet,b,P,S,w,k,h,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,o,y,g,u,s,a,c,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0):this.openPositionFromBaseInstruction(p,n.feePayer,f,n.wallet,b,P,B,S,w,k,h,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,o,y,g,u,s,a,c,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(p,f).publicKey:void 0);return{address:{nftMint:b,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:B,personalPosition:h,protocolPosition:S},instructions:[I],signers:d,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static openPositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C,x){let K=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),v=[...x?[{pubkey:x,isSigner:!1,isWritable:!0}]:[]],R=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Gt,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},{pubkey:g,isSigner:!1,isWritable:!1},...v],G=Buffer.alloc(K.span);K.encode({tickLowerIndex:w,tickUpperIndex:k,tickArrayLowerStartIndex:P,tickArrayUpperStartIndex:B,liquidity:new rs(0),amountMaxA:S==="MintA"?I:C,amountMaxB:S==="MintA"?C:I,withMetadata:h==="create",baseFlag:S==="MintA",optionBaseFlag:1},G);let U=Buffer.from([...Pt.openPosition,...G]);return new Ze({keys:R,programId:e,data:U})}static openPositionFromBaseInstruction22(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k,P,B,h,S,I,C){let x=E([Be("tickLowerIndex"),Be("tickUpperIndex"),Be("tickArrayLowerStartIndex"),Be("tickArrayUpperStartIndex"),J("liquidity"),A("amountMaxA"),A("amountMaxB"),Re("withMetadata"),X("optionBaseFlag"),Re("baseFlag")]),K=[...C?[{pubkey:C,isSigner:!1,isWritable:!0}]:[]],v=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:y,isSigner:!1,isWritable:!1},...K],R=Buffer.alloc(x.span);x.encode({tickLowerIndex:g,tickUpperIndex:w,tickArrayLowerStartIndex:k,tickArrayUpperStartIndex:P,liquidity:new rs(0),amountMaxA:h==="MintA"?S:I,amountMaxB:h==="MintA"?I:S,withMetadata:B==="create",baseFlag:h==="MintA",optionBaseFlag:1},R);let G=Buffer.from([...Pt.openPositionWithTokenEx,...R]);return new Ze({keys:v,programId:e,data:G})}static async openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,liquidity:s,amountMaxA:a,amountMaxB:c,withMetadata:u,getEphemeralSigners:l,nft2022:m}){let d,p=[];if(l)d=new q((await l(1))[0]);else{let C=Mo.generate();p.push(C),d=C.publicKey}let[f,b]=[new q(e.programId),new q(e.id)],y=Y.getTickArrayStartIndexByTick(i,e.config.tickSpacing),g=Y.getTickArrayStartIndexByTick(o,e.config.tickSpacing),{publicKey:w}=me(f,b,y),{publicKey:k}=me(f,b,g),{publicKey:P}=m?ie(n.wallet,d,Le):ie(n.wallet,d,Ae),{publicKey:B}=kn(d),{publicKey:h}=st(f,d),{publicKey:S}=Vt(f,b,i,o),I=m?this.openPositionFromLiquidityInstruction22(f,n.wallet,b,n.wallet,d,P,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(f,b).publicKey:void 0):this.openPositionFromLiquidityInstruction(f,n.wallet,b,n.wallet,d,P,B,S,w,k,h,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,o,y,g,s,a,c,u,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[y,g])?_e(f,b).publicKey:void 0);return{address:{nftMint:d,tickArrayLower:w,tickArrayUpper:k,positionNftAccount:P,metadataAccount:B,personalPosition:h,protocolPosition:S},instructions:[I],signers:p,instructionTypes:[F.ClmmOpenPosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static closePositionInstruction(e,t,n,i,o,s){let a=E([]),c=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:s?Le:Ae,isSigner:!1,isWritable:!1}],u=Buffer.alloc(a.span);a.encode({},u);let l=Buffer.from([...Pt.closePosition,...u]);return new Ze({keys:c,programId:e,data:l})}static closePositionInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,ownerPosition:i,nft2022:o}){let s=new q(e.programId),a=o?ie(n.wallet,i.nftMint,Le).publicKey:ie(n.wallet,i.nftMint,Ae).publicKey,{publicKey:c}=st(s,i.nftMint),u=[];return u.push(this.closePositionInstruction(s,n.wallet,i.nftMint,a,c,o)),{address:{positionNftAccount:a,personalPosition:c},signers:[],instructions:u,instructionTypes:[F.ClmmClosePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w){let k=E([J("liquidity"),A("amountMaxA"),A("amountMaxB"),X("optionBaseFlag"),Re("baseFlag")]),P=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...P],h=Buffer.alloc(k.span);k.encode({liquidity:b,amountMaxA:y,amountMaxB:g,optionBaseFlag:0,baseFlag:!1},h);let S=Buffer.from([...Pt.increaseLiquidity,...h]);return new Ze({keys:B,programId:e,data:S})}static increasePositionFromLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMaxA:s,amountMaxB:a,nft2022:c}){let[u,l]=[new q(e.programId),new q(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=me(u,l,m),{publicKey:f}=me(u,l,d),{publicKey:b}=c?ie(i.wallet,n.nftMint,Le):ie(i.wallet,n.nftMint,Ae),{publicKey:y}=st(u,n.nftMint),{publicKey:g}=Vt(u,l,n.tickLower,n.tickUpper),w=this.increasePositionFromLiquidityInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),o,s,a,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?_e(u,l).publicKey:void 0);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},signers:[],instructions:[w],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,base:o,baseAmount:s,otherAmountMax:a,nft2022:c}){let[u,l]=[new q(e.programId),new q(e.id)],m=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),d=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:p}=me(u,l,m),{publicKey:f}=me(u,l,d),{publicKey:b}=c?ie(i.wallet,n.nftMint,Le):ie(i.wallet,n.nftMint,Ae),{publicKey:y}=st(u,n.nftMint),{publicKey:g}=Vt(u,l,n.tickLower,n.tickUpper);return{address:{tickArrayLower:p,tickArrayUpper:f,positionNftAccount:b,personalPosition:y,protocolPosition:g},instructions:[this.increasePositionFromBaseInstruction(u,i.wallet,b,y,l,g,p,f,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),o,s,a,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[m,d])?_e(u,l).publicKey:void 0)],signers:[],instructionTypes:[F.ClmmIncreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static increasePositionFromBaseInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w){let k=E([J("liquidity"),A("amountMaxA"),A("amountMaxB"),X("optionBaseFlag"),Re("baseFlag")]),P=[...w?[{pubkey:w,isSigner:!1,isWritable:!0}]:[]],B=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...P],h=Buffer.alloc(k.span);k.encode({liquidity:new rs(0),amountMaxA:b==="MintA"?y:g,amountMaxB:b==="MintA"?g:y,baseFlag:b==="MintA",optionBaseFlag:1},h);let S=Buffer.from([...Pt.increaseLiquidity,...h]);return new Ze({keys:B,programId:e,data:S})}static decreaseLiquidityInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k){let P=E([J("liquidity"),A("amountMinA"),A("amountMinB")]),B=[...k?[{pubkey:k,isSigner:!1,isWritable:!0}]:[],...b.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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:l,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:no,isSigner:!1,isWritable:!1},{pubkey:p,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},...B],S=Buffer.alloc(P.span);P.encode({liquidity:y,amountMinA:g,amountMinB:w},S);let I=Buffer.from([...Pt.decreaseLiquidity,...S]);return new Ze({keys:h,programId:e,data:I})}static decreaseLiquidityInstructions({poolInfo:e,poolKeys:t,ownerPosition:n,ownerInfo:i,liquidity:o,amountMinA:s,amountMinB:a,programId:c,nft2022:u}){let[l,m]=[new q(e.programId),new q(e.id)],d=Y.getTickArrayStartIndexByTick(n.tickLower,e.config.tickSpacing),p=Y.getTickArrayStartIndexByTick(n.tickUpper,e.config.tickSpacing),{publicKey:f}=me(l,m,d),{publicKey:b}=me(l,m,p),{publicKey:y}=u?ie(i.wallet,n.nftMint,Le):ie(i.wallet,n.nftMint,c),{publicKey:g}=st(l,n.nftMint),{publicKey:w}=Vt(l,m,n.tickLower,n.tickUpper),k=[];for(let h=0;h<e.rewardDefaultInfos.length;h++)k.push({poolRewardVault:new q(t.rewardInfos[h].vault),ownerRewardVault:i.rewardAccounts[h],rewardMint:new q(e.rewardDefaultInfos[h].mint.address)});let P=[],B=this.decreaseLiquidityInstruction(l,i.wallet,y,g,m,w,f,b,i.tokenAccountA,i.tokenAccountB,new q(t.vault.A),new q(t.vault.B),new q(e.mintA.address),new q(e.mintB.address),k,o,s,a,Te.isOverflowDefaultTickarrayBitmap(e.config.tickSpacing,[d,p])?_e(l,m).publicKey:void 0);return P.push(B),{address:{tickArrayLower:f,tickArrayUpper:b,positionNftAccount:y,personalPosition:g,protocolPosition:w},signers:[],instructions:P,instructionTypes:[F.ClmmDecreasePosition],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static swapInstruction(e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g){let w=E([A("amount"),A("otherAmountThreshold"),J("sqrtPriceLimitX64"),Re("isBaseInput")]),k=[...g?[{pubkey:g,isSigner:!1,isWritable:!0}]:[],...m.map(S=>({pubkey:S,isSigner:!1,isWritable:!0}))],P=[{pubkey:t,isSigner:!0,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:no,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},...k],B=Buffer.alloc(w.span);w.encode({amount:p,otherAmountThreshold:f,sqrtPriceLimitX64:b,isBaseInput:y},B);let h=Buffer.from([...Pt.swap,...B]);return new Ze({keys:P,programId:e,data:h})}static makeSwapBaseInInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,inputMint:o,amountIn:s,amountOutMin:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[f,b]=[new q(e.mintA.address),new q(e.mintB.address)],y=e.mintA.address===o.toString(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),y?i.tokenAccountA:i.tokenAccountB,y?i.tokenAccountB:i.tokenAccountA,y?d:p,y?p:d,y?f:b,y?b:f,u,n,s,a,c,!0,_e(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseIn],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static makeSwapBaseOutInstructions({poolInfo:e,poolKeys:t,observationId:n,ownerInfo:i,outputMint:o,amountOut:s,amountInMax:a,sqrtPriceLimitX64:c,remainingAccounts:u}){let[l,m]=[new q(e.programId),new q(e.id)],[d,p]=[new q(t.vault.A),new q(t.vault.B)],[f,b]=[new q(e.mintA.address),new q(e.mintB.address)],y=e.mintA.address===o.toBase58(),g=[this.swapInstruction(l,i.wallet,m,new q(e.config.id),y?i.tokenAccountB:i.tokenAccountA,y?i.tokenAccountA:i.tokenAccountB,y?p:d,y?d:p,y?b:f,y?f:b,u,n,s,a,c,!1,_e(l,m).publicKey)];return{signers:[],instructions:g,instructionTypes:[F.ClmmSwapBaseOut],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[],address:{}}}static initRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([A("openTime"),A("endTime"),J("emissionsPerSecondX64")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],b=Buffer.alloc(p.span);p.encode({openTime:Z(l),endTime:Z(m),emissionsPerSecondX64:d},b);let y=Buffer.from([...Pt.initReward,...b]);return new Ze({keys:f,programId:e,data:y})}static initRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new q(e.programId),new q(e.id)],a=lu(o,s,i.mint).publicKey,c=hi(o).publicKey,u=[this.initRewardInstruction(o,n.wallet,s,c,new q(e.config.id),n.tokenAccount,i.programId,i.mint,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{poolRewardVault:a,operationId:c},signers:[],instructions:u,instructionTypes:[F.ClmmInitReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static setRewardInstruction(e,t,n,i,o,s,a,c,u,l,m,d){let p=E([X("rewardIndex"),J("emissionsPerSecondX64"),A("openTime"),A("endTime")]),f=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0}],b=Buffer.alloc(p.span);p.encode({rewardIndex:u,emissionsPerSecondX64:d,openTime:Z(l),endTime:Z(m)},b);let y=Buffer.from([...Pt.setRewardEmissions,...b]);return new Ze({keys:f,programId:e,data:y})}static setRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfo:i}){let[o,s]=[new q(e.programId),new q(e.id)],a,c,u;for(let d=0;d<e.rewardDefaultInfos.length;d++)e.rewardDefaultInfos[d].mint.address===i.mint.toString()&&(a=d,c=new q(t.rewardInfos[d].vault),u=new q(t.rewardInfos[d].mint.address));(a===void 0||c===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let l=hi(o).publicKey,m=[this.setRewardInstruction(o,n.wallet,s,l,new q(e.config.id),n.tokenAccount,c,u,a,i.openTime,i.endTime,i.emissionsPerSecondX64)];return{address:{rewardVault:c,operationId:l},signers:[],instructions:m,instructionTypes:[F.ClmmSetReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static collectRewardInstruction(e,t,n,i,o,s,a){let c=E([X("rewardIndex")]),u=[{pubkey:t,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:no,isSigner:!1,isWritable:!1}],l=Buffer.alloc(c.span);c.encode({rewardIndex:a},l);let m=Buffer.from([...Pt.collectReward,...l]);return new Ze({keys:u,programId:e,data:m})}static collectRewardInstructions({poolInfo:e,poolKeys:t,ownerInfo:n,rewardMint:i}){let[o,s]=[new q(e.programId),new q(e.id)],a,c;for(let l=0;l<e.rewardDefaultInfos.length;l++)e.rewardDefaultInfos[l].mint.address===i.toString()&&(a=l,c=new q(t.rewardInfos[l].vault));(a===void 0||c===void 0)&&Au.logWithError("reward mint check error","no reward mint",e.rewardDefaultInfos);let u=[this.collectRewardInstruction(o,n.wallet,s,n.tokenAccount,c,i,a)];return{address:{rewardVault:c},signers:[],instructions:u,instructionTypes:[F.ClmmCollectReward],lookupTableAddress:t.lookupTableAccount?[t.lookupTableAccount]:[]}}static async makeLockPositions({programId:e,authProgramId:t,poolProgramId:n,payer:i,wallet:o,nftMint:s,nft2022:a,getEphemeralSigners:c}){let u=[],l;if(c)l=new q((await c(1))[0]);else{let g=Mo.generate();u.push(g),l=g.publicKey}let m=a?ie(o,s,Le).publicKey:ie(o,s,Ae).publicKey,{publicKey:d}=st(n,s),p=Ti(e,l).publicKey,f=ie(o,l,Ae).publicKey,b=kn(l).publicKey,y=ke.lockPositionInstructionV2({programId:e,auth:t,payer:i,positionOwner:o,lockOwner:o,positionNftAccount:m,positionId:d,lockPositionId:p,lockNftMint:l,lockNftAccount:f,metadataAccount:b,withMetadata:!0,nft2022:a,positionNftMint:s,authPositionNftAccount:ie(t,s,a?Le:Ae).publicKey,positionNftProgram:a?Le:Ae});return{address:{positionId:d,lockPositionId:p,lockNftAccount:f,lockNftMint:l,positionNftAccount:m,metadataAccount:b},instructions:[y],signers:u,instructionTypes:[F.ClmmLockPosition],lookupTableAddress:[]}}static lockPositionInstructionV2({programId:e,auth:t,payer:n,positionOwner:i,lockOwner:o,positionNftAccount:s,positionId:a,positionNftMint:c,authPositionNftAccount:u,positionNftProgram:l,lockPositionId:m,lockNftMint:d,lockNftAccount:p,metadataAccount:f,withMetadata:b}){let y=[{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:n,isSigner:!0,isWritable:!0},{pubkey:i,isSigner:!0,isWritable:!0},{pubkey:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,isSigner:!1,isWritable:!0},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:d,isSigner:!0,isWritable:!0},{pubkey:p,isSigner:!1,isWritable:!0},{pubkey:f,isSigner:!1,isWritable:!0},{pubkey:Gt,isSigner:!1,isWritable:!1},{pubkey:Ki,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1}],g=E([Re("withMetadata")]),w=Buffer.alloc(g.span);g.encode({withMetadata:b},w);let k=Buffer.from([...ku,...w]);return new Ze({keys:y,programId:e,data:k})}static lockPositionInstruction({programId:e,authProgramId:t,poolProgramId:n,owner:i,positionNft:o}){let{publicKey:s}=ie(i,o,Ae),{publicKey:a}=st(n,o),c=[{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:ts(e,a).publicKey,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:$t.programId,isSigner:!1,isWritable:!1}];return new Ze({keys:c,programId:e,data:Buffer.from(ku)})}static harvestLockPositionInstruction(e){let[t,n]=[new q(e.poolKeys.programId),new q(e.poolKeys.id)],i=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickLower,e.poolKeys.config.tickSpacing),o=Y.getTickArrayStartIndexByTick(e.ownerPosition.tickUpper,e.poolKeys.config.tickSpacing),{publicKey:s}=me(t,n,i),{publicKey:a}=me(t,n,o),{publicKey:c}=ie(e.owner,e.ownerPosition.nftMint,Ae),{publicKey:u}=st(t,e.ownerPosition.nftMint),{publicKey:l}=Vt(t,n,e.ownerPosition.tickLower,e.ownerPosition.tickUpper),m=[];for(let f=0;f<e.poolKeys.rewardInfos.length;f++)m.push({poolRewardVault:new q(e.poolKeys.rewardInfos[f].vault),ownerRewardVault:e.ownerRewardAccounts[f],rewardMint:new q(e.poolKeys.rewardInfos[f].mint.address)});let d=[...m.map(f=>[{pubkey:f.poolRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.ownerRewardVault,isSigner:!1,isWritable:!0},{pubkey:f.rewardMint,isSigner:!1,isWritable:!1}]).flat()],p=[{pubkey:e.authProgramId,isSigner:!1,isWritable:!1},{pubkey:ts(e.programId,u).publicKey,isSigner:!1,isWritable:!1},{pubkey:t,isSigner:!1,isWritable:!1},{pubkey:e.owner,isSigner:!0,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:sn,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 Ze({keys:p,programId:e.programId,data:Buffer.from(Pu)})}static harvestLockPositionInstructionV2({programId:e,auth:t,lockPositionId:n,clmmProgram:i,lockOwner:o,lockNftMint:s,lockNftAccount:a,positionNftAccount:c,positionId:u,poolId:l,protocolPosition:m,vaultA:d,vaultB:p,tickArrayLower:f,tickArrayUpper:b,userVaultA:y,userVaultB:g,mintA:w,mintB:k,rewardAccounts:P,exTickArrayBitmap:B}){let h=[...B?[{pubkey:B,isSigner:!1,isWritable:!0}]:[],...P.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:o,isSigner:!0,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:n,isSigner:!1,isWritable:!1},{pubkey:i,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0},{pubkey:Ae,isSigner:!1,isWritable:!1},{pubkey:Le,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1},{pubkey:w,isSigner:!1,isWritable:!1},{pubkey:k,isSigner:!1,isWritable:!1},...h];return new Ze({keys:S,programId:e,data:Buffer.from(Pu)})}};var zP=E([Je("mintAuthorityOption"),L("mintAuthority"),A("supply"),X("decimals"),X("isInitialized"),Je("freezeAuthorityOption"),L("freezeAuthority")]);import{PublicKey as HP}from"@solana/web3.js";import{MintLayout as $P,TOKEN_PROGRAM_ID as eh}from"@solana/spl-token";var No=r=>new Ke({mint:r.address,decimals:r.decimals,symbol:r.symbol,name:r.name}),Ci=i=>{var o=i,{amount:r,isRaw:e,name:t}=o,n=Ee(o,["amount","isRaw","name"]);return new ye(new Ke({mint:yt(n.address).toBase58(),decimals:n.decimals,symbol:n.symbol,name:t}),r,e,t)};var tt=i=>{var o=i,{address:r,programId:e,decimals:t}=o,n=Ee(o,["address","programId","decimals"]);return O({chainId:101,address:yt(r).toBase58(),programId:e,logoURI:"",symbol:"",name:"",decimals:t,tags:[],extensions:n.extensions||{}},n)},dn=r=>r?W(O({},r),{transferFeeConfigAuthority:r.transferFeeConfigAuthority.toBase58(),withdrawWithheldAuthority:r.withdrawWithheldAuthority.toBase58(),withheldAmount:r.withheldAmount.toString(),olderTransferFee:W(O({},r.olderTransferFee),{epoch:r.olderTransferFee.epoch.toString(),maximumFee:r.olderTransferFee.maximumFee.toString()}),newerTransferFee:W(O({},r.newerTransferFee),{epoch:r.newerTransferFee.epoch.toString(),maximumFee:r.newerTransferFee.maximumFee.toString()})}):void 0;import hu from"bn.js";var ss=new hu(25),_o=new hu(1e4);import{PublicKey as qt,SystemProgram as pd,SYSVAR_RENT_PUBKEY as Th,TransactionInstruction as Un}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as fd,TOKEN_PROGRAM_ID as Li}from"@solana/spl-token";var as=E([X("instruction"),A("amountIn"),A("minAmountOut")]),us=E([X("instruction"),A("maxAmountIn"),A("amountOut")]),bh=E([X("instruction"),X("nonce")]),ed=E([X("instruction"),X("nonce"),A("startTime")]),vo=E([A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalValue"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),A("swapBase2QuoteFee"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),A("swapQuote2BaseFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("withdrawQueue"),L("lpVault"),L("owner"),A("lpReserve"),j(A(),3,"padding")]),yh=E([A("accountType"),A("status"),A("nonce"),A("maxOrder"),A("depth"),A("baseDecimal"),A("quoteDecimal"),A("state"),A("resetFlag"),A("minSize"),A("volMaxCutRatio"),A("amountWaveRatio"),A("baseLotSize"),A("quoteLotSize"),A("minPriceMultiplier"),A("maxPriceMultiplier"),A("systemDecimalsValue"),A("abortTradeFactor"),A("priceTickMultiplier"),A("priceTick"),A("minSeparateNumerator"),A("minSeparateDenominator"),A("tradeFeeNumerator"),A("tradeFeeDenominator"),A("pnlNumerator"),A("pnlDenominator"),A("swapFeeNumerator"),A("swapFeeDenominator"),A("baseNeedTakePnl"),A("quoteNeedTakePnl"),A("quoteTotalPnl"),A("baseTotalPnl"),A("poolOpenTime"),A("punishPcAmount"),A("punishCoinAmount"),A("orderbookToInitTime"),J("swapBaseInAmount"),J("swapQuoteOutAmount"),J("swapQuoteInAmount"),J("swapBaseOutAmount"),A("swapQuote2BaseFee"),A("swapBase2QuoteFee"),L("baseVault"),L("quoteVault"),L("baseMint"),L("quoteMint"),L("lpMint"),L("modelDataAccount"),L("openOrders"),L("marketId"),L("marketProgramId"),L("targetOrders"),L("owner"),j(A(),64,"padding")]),cs=E([X("instruction"),A("baseAmountIn"),A("quoteAmountIn"),A("fixedSide"),A("otherAmountMin")]),ls=E([X("instruction"),A("lpAmount"),A("baseAmountMin"),A("quoteAmountMin")]);var Tu=E([A("fee")]);import{PublicKey as td}from"@solana/web3.js";var qn=new td("CDSr3ssLcRB6XYPJwAfFt18MZvEZp4LjHcvzBVZ45duo"),xn=5e4,nd=E([A("x"),A("y"),A("price")]),id=E([A("accountType"),A("status"),A("multiplier"),A("validDataCount"),j(nd,xn,"DataElement")]);function od(r,e){return[0,xn-2]}function rd(r){return[0,xn-2]}function sd(r){return[0,xn-2]}function ad(r,e,t){let[n,i]=od(e,t),o=n,s=i,a=0,c=e*r.multiplier/t;for(;o<=s;){if(a=Math.floor((s+o)/2),a===0||a>=xn-2)return[a,a,!1];let u=r.DataElement[a].x*r.multiplier/r.DataElement[a].y,l=r.DataElement[a-1].x*r.multiplier/r.DataElement[a-1].y,m=r.DataElement[a+1].x*r.multiplier/r.DataElement[a+1].y;if(c===u)return[a,a,!0];if(c===l)return[a-1,a-1,!0];if(c===m)return[a+1,a+1,!0];if(c<l)s=a-1;else{if(c>l&&c<u)return[a-1,a,!0];if(c>u&&c<m)return[a,a+1,!0];o=a+1}}return[a,a,!1]}function ms(r,e,t){let[n,i,o]=ad(r,e,t);if(!o)return 0;if(n===i){let s=r.DataElement[n].x;return e*r.multiplier/s}else{let s=r.DataElement[n].x,a=r.DataElement[n].y,c=r.DataElement[i].x,u=r.DataElement[i].y,l=t*(c*a-s*u),m=s*l,d=(c-s)*(e*a-s*t)*u,p=m+d;return e*r.multiplier*l/p}}function Bn(r,e,t){return e*r.multiplier/t}function Iu(r,e,t){return e*t/r.multiplier}function ud(r,e){let[t,n]=rd(e),i=t,o=n,s=0,a=e;for(;i<o;){if(s=Math.floor((o+i)/2),s<=0||s>xn-2)return[s,s,!1];let c=r.DataElement[s].x,u=r.DataElement[s-1].x,l=r.DataElement[s+1].x;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<u)o=s-1;else{if(a>u&&a<c)return[s-1,s,!0];if(a>c&&a<l)return[s,s+1,!0];i=s+1}}return[s,s,!1]}function cd(r,e){let[t,n]=sd(e),i=t,o=n,s=0,a=e;for(;i<=o;){if(s=Math.floor((o+i)/2),s<=0||s>=xn-2)return[s,s,!1];let c=r.DataElement[s].y,u=r.DataElement[s-1].y,l=r.DataElement[s+1].y;if(a===c)return[s,s,!0];if(a===u)return[s-1,s-1,!0];if(a===l)return[s+1,s+1,!0];if(a<l)i=s+1;else{if(a<u&&a>c)return[s-1,s,!0];if(a<c&&a>l)return[s,s+1,!0];o=s-1}}return[s,s,!1]}function Bu(r,e,t,n){let i=n?e+t:e-t,[o,s,a]=ud(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].y,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=c&&e<=u)return n?[m,p,!0,a]:[l,d,!0,a];{let f,b;return n?(f=l+(m-l)*(e-c)/(u-c),b=d-(i-c)*r.multiplier/m):(f=l+(m-l)*(e-c)/(u-c),b=p+(u-i)*r.multiplier/l),[f,b,!1,a]}}}function ld(r,e,t,n){let i=n?e-t:e+t,[o,s,a]=cd(r,i);if(!a)return[0,0,!1,a];if(o===s)return[r.DataElement[s].price,r.DataElement[s].x,!1,a];{let c=r.DataElement[o].x,u=r.DataElement[s].x,l=r.DataElement[o].price,m=r.DataElement[s].price,d=r.DataElement[o].y,p=r.DataElement[s].y;if(e>=p&&e<=d)return n?[m,u,!0,a]:[l,c,!0,a];{let f,b;return n?(f=l+(m-l)*(d-e)/(d-p),b=c+m*(d-i)/r.multiplier):(f=l+(m-l)*(d-e)/(d-p),b=u-l*(i-p)/r.multiplier),[f,b,!1,a]}}}function md(r,e){let t=Bu(r,e,0,!1);return t[3]?t[0]:0}function xu(r,e,t,n){let i=ms(r,e,t),o=Bn(r,e,i),s=Bn(r,t,i),a=Bn(r,n,i),c=!0,[u,l,m,d]=Bu(r,o,a,c);if(!d)return 0;if(m)return n*r.multiplier/u;{let p=s-l;return Iu(r,p,i)}}function Su(r,e,t,n){let i=ms(r,e,t),o=Bn(r,e,i),s=Bn(r,t,i),a=Bn(r,n,i),c=!1,[u,l,m,d]=ld(r,s,a,c);if(!d)return 0;if(m)return n*u/r.multiplier;{let p=o-l;return Iu(r,p,i)}}function dd(r){let e=id.decode(r);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 Ku(r,e,t,n){let i=md(r,Bn(r,e,ms(r,e,t)))/r.multiplier;return n?i:1/i}var Ri=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(qn);e&&(this._layoutData=dd(e==null?void 0:e.data))}}};var Cu=ce("Raydium_liquidity_instruction");function Ru(r){let{poolInfo:e,poolKeys:t,userKeys:n,baseAmountIn:i,quoteAmountIn:o,fixedSide:s,otherAmountMin:a}=r,c=Buffer.alloc(cs.span);cs.encode({instruction:3,baseAmountIn:Z(i),quoteAmountIn:Z(o),otherAmountMin:Z(a),fixedSide:s==="base"?dt:oa},c);let u=[T({pubkey:Li,isWritable:!1}),T({pubkey:new qt(e.id)}),T({pubkey:new qt(t.authority),isWritable:!1}),T({pubkey:new qt(t.openOrders),isWritable:!1}),T({pubkey:new qt(t.targetOrders)}),T({pubkey:new qt(e.lpMint.address)}),T({pubkey:new qt(t.vault.A)}),T({pubkey:new qt(t.vault.B)})];return e.pooltype.includes("StablePool")&&u.push(T({pubkey:qn})),u.push(T({pubkey:new qt(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 qt(t.marketEventQueue),isWritable:!1})),new Un({programId:new qt(e.programId),keys:u,data:c})}function ds(r){let{poolInfo:e,poolKeys:t,userKeys:n,lpAmount:i,baseAmountMin:o,quoteAmountMin:s}=r,a=He(t),c=4;if(e.pooltype.includes("StablePool")&&(c=5),c===4||c===5){let u=Buffer.alloc(ls.span);ls.encode({instruction:4,lpAmount:Z(i),baseAmountMin:Z(o),quoteAmountMin:Z(s)},u);let l=[T({pubkey:Li,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 c===5?l.push(T({pubkey:qn})):(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 Un({programId:a.programId,keys:l,data:u})}return new Un({programId:a.programId,keys:[]})}function ps({programId:r,ammId:e,ammAuthority:t,ammOpenOrders:n,lpMint:i,coinMint:o,pcMint:s,coinVault:a,pcVault:c,withdrawQueue:u,ammTargetOrders:l,poolTempLp:m,marketProgramId:d,marketId:p,userWallet:f,userCoinVault:b,userPcVault:y,userLpVault:g,nonce:w,openTime:k,coinAmount:P,pcAmount:B,ammConfigId:h,feeDestinationId:S}){let I=E([X("instruction"),X("nonce"),A("openTime"),A("pcAmount"),A("coinAmount")]),C=[{pubkey:Li,isSigner:!1,isWritable:!1},{pubkey:fd,isSigner:!1,isWritable:!1},{pubkey:pd.programId,isSigner:!1,isWritable:!1},{pubkey:ot,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:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,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:f,isSigner:!0,isWritable:!0},{pubkey:b,isSigner:!1,isWritable:!0},{pubkey:y,isSigner:!1,isWritable:!0},{pubkey:g,isSigner:!1,isWritable:!0}],x=Buffer.alloc(I.span);return I.encode({instruction:1,nonce:w,openTime:k,coinAmount:P,pcAmount:B},x),{instruction:new Un({keys:C,programId:r,data:x}),instructionType:F.AmmV4CreatePool}}function bd({poolKeys:r,userKeys:e,amountIn:t,minAmountOut:n},i){let o=He(r),s=Buffer.alloc(as.span);as.encode({instruction:9,amountIn:Z(t),minAmountOut:Z(n)},s);let a=[T({pubkey:Li,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.openOrders})];return i===4&&a.push(T({pubkey:o.targetOrders})),a.push(T({pubkey:o.vault.A}),T({pubkey:o.vault.B})),i===5&&a.push(T({pubkey:qn})),a.push(T({pubkey:o.marketProgramId,isWritable:!1}),T({pubkey:o.marketId}),T({pubkey:o.marketBids}),T({pubkey:o.marketAsks}),T({pubkey:o.marketEventQueue}),T({pubkey:o.marketBaseVault}),T({pubkey:o.marketQuoteVault}),T({pubkey:o.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1})),new Un({programId:o.programId,keys:a,data:s})}function yd({poolKeys:r,userKeys:e,maxAmountIn:t,amountOut:n},i){let o=He(r),s=Buffer.alloc(us.span);us.encode({instruction:11,maxAmountIn:Z(t),amountOut:Z(n)},s);let a=[T({pubkey:Li,isWritable:!1}),T({pubkey:o.id}),T({pubkey:o.authority,isWritable:!1}),T({pubkey:o.openOrders}),T({pubkey:o.targetOrders}),T({pubkey:o.vault.A}),T({pubkey:o.vault.B})];return i===5&&a.push(T({pubkey:qn})),a.push(T({pubkey:o.marketProgramId,isWritable:!1}),T({pubkey:o.marketId}),T({pubkey:o.marketBids}),T({pubkey:o.marketAsks}),T({pubkey:o.marketEventQueue}),T({pubkey:o.marketBaseVault}),T({pubkey:o.marketQuoteVault}),T({pubkey:o.marketAuthority,isWritable:!1}),T({pubkey:e.tokenAccountIn}),T({pubkey:e.tokenAccountOut}),T({pubkey:e.owner,isWritable:!1,isSigner:!0})),new Un({programId:o.programId,keys:a,data:s})}function Vo(r){let{poolKeys:e,version:t,userKeys:n,amountIn:i,amountOut:o,fixedSide:s}=r;if(t===4||t===5){let a={poolKeys:e,userKeys:n};if(s==="in")return bd(W(O({},a),{amountIn:i,minAmountOut:o}),t);if(s==="out")return yd(W(O({},a),{maxAmountIn:i,amountOut:o}),t);Cu.logWithError("invalid params","params",r)}throw Cu.logWithError("invalid version","poolKeys.version",t),new Error("invalid version")}import{PublicKey as Ad}from"@solana/web3.js";import zh from"bn.js";import{TOKEN_PROGRAM_ID as kd}from"@solana/spl-token";import{PublicKey as gd}from"@solana/web3.js";var wd=ce("Raydium_liquidity_serum");function Lu({programId:r,marketId:e}){let t=[e.toBuffer()],n=0,i;for(;n<100;){try{let o=t.concat(Buffer.from([n]),Buffer.alloc(7));i=gd.createProgramAddressSync(o,r)}catch(o){if(o instanceof TypeError)throw o;n++;continue}return{publicKey:i,nonce:n}}throw wd.logWithError("unable to find a viable program address nonce","params",{programId:r,marketId:e}),new Error("unable to find a viable program address nonce")}function Eo({programId:r}){let{publicKey:e}=le([Buffer.from("amm_config_account_seed","utf-8")],r);return e}function Sn({name:r,programId:e,marketId:t}){let{publicKey:n}=le([e.toBuffer(),t.toBuffer(),Buffer.from(r,"utf-8")],e);return n}function Pd({programId:r,marketId:e}){let{publicKey:t}=le([r.toBuffer(),e.toBuffer(),Buffer.from("open_order_associated_seed","utf-8")],r);return t}function bs({programId:r}){return le([Buffer.from([97,109,109,32,97,117,116,104,111,114,105,116,121])],r)}function ys({version:r,marketVersion:e,marketId:t,baseMint:n,quoteMint:i,baseDecimals:o,quoteDecimals:s,programId:a,marketProgramId:c}){let u=Sn({name:"amm_associated_seed",programId:a,marketId:t}),l=Sn({name:"lp_mint_associated_seed",programId:a,marketId:t}),{publicKey:m,nonce:d}=bs({programId:a}),p=Sn({name:"coin_vault_associated_seed",programId:a,marketId:t}),f=Sn({name:"pc_vault_associated_seed",programId:a,marketId:t}),b=Sn({name:"temp_lp_token_associated_seed",programId:a,marketId:t}),y=Pd({programId:a,marketId:t}),g=Sn({name:"target_associated_seed",programId:a,marketId:t}),w=Sn({name:"withdraw_associated_seed",programId:a,marketId:t}),{publicKey:k}=Lu({programId:c,marketId:t});return{id:u,baseMint:n,quoteMint:i,lpMint:l,baseDecimals:o,quoteDecimals:s,lpDecimals:o,version:r,programId:a,authority:m,nonce:d,baseVault:p,quoteVault:f,lpVault:b,openOrders:y,targetOrders:g,withdrawQueue:w,marketVersion:e,marketProgramId:c,marketId:t,marketAuthority:k,lookupTableAccount:Ad.default,configId:Eo({programId:a})}}var fs={volume:0,volumeQuote:0,volumeFee:0,apr:0,feeApr:0,priceMin:0,priceMax:0,rewardApr:[]},Fo=r=>{let e={},t=kd.toBase58();return Object.keys(r).map(n=>{let i=r[n],[o,s]=[i.baseMint.toBase58(),i.quoteMint.toBase58()];e[n]={id:n,version:4,status:i.status.toNumber(),programId:i.programId.toBase58(),mintA:tt({address:o,programId:t,decimals:i.baseDecimal.toNumber()}),mintB:tt({address:s,programId:t,decimals:i.quoteDecimal.toNumber()}),rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:i.poolPrice.toNumber(),mintAmountA:new M(i.mintAAmount.toString()).div(10**i.baseDecimal.toNumber()).toNumber(),mintAmountB:new M(i.mintBAmount.toString()).div(10**i.quoteDecimal.toNumber()).toNumber(),baseReserve:i.baseReserve,quoteReserve:i.quoteReserve,feeRate:new M(i.tradeFeeNumerator.toString()).div(i.tradeFeeDenominator.toString()).toNumber(),openTime:i.poolOpenTime.toString(),tvl:0,day:fs,week:fs,month:fs,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0,type:"Standard",marketId:i.marketId.toBase58(),configId:Eo({programId:i.programId}).toBase58(),lpPrice:0,lpAmount:0,lpMint:tt({address:i.lpMint.toBase58(),programId:t,decimals:Math.min(i.baseDecimal.toNumber(),i.quoteDecimal.toNumber())}),burnPercent:0}}),e};import Oe from"bn.js";import{PublicKey as Oi}from"@solana/web3.js";import Mi from"bn.js";import{TOKEN_PROGRAM_ID as _u}from"@solana/spl-token";import{SystemProgram as Kn,SYSVAR_RENT_PUBKEY as Td,Transaction as Ou,TransactionInstruction as Id}from"@solana/web3.js";import{createInitializeAccountInstruction as Mu,TOKEN_PROGRAM_ID as Nu}from"@solana/spl-token";function hd(r="accountFlags"){let e=new Io(r);return e.addBoolean("initialized"),e.addBoolean("market"),e.addBoolean("openOrders"),e.addBoolean("requestQueue"),e.addBoolean("eventQueue"),e.addBoolean("bids"),e.addBoolean("asks"),e}var gs=E([be(5),hd("accountFlags"),L("ownAddress"),A("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),L("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),be(7)]);function Bd({programId:r,marketInfo:e}){let t=E([X("version"),Je("instruction"),A("baseLotSize"),A("quoteLotSize"),zt("feeRateBps"),A("vaultSignerNonce"),A("quoteDustThreshold")]),n=[{pubkey:e.id,isSigner:!1,isWritable:!0},{pubkey:e.requestQueue,isSigner:!1,isWritable:!0},{pubkey:e.eventQueue,isSigner:!1,isWritable:!0},{pubkey:e.bids,isSigner:!1,isWritable:!0},{pubkey:e.asks,isSigner:!1,isWritable:!0},{pubkey:e.baseVault,isSigner:!1,isWritable:!0},{pubkey:e.quoteVault,isSigner:!1,isWritable:!0},{pubkey:e.baseMint,isSigner:!1,isWritable:!1},{pubkey:e.quoteMint,isSigner:!1,isWritable:!1},{pubkey:e.authority?e.quoteMint:Td,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 Id({keys:n,programId:r,data:i})}async function Do({connection:r,wallet:e,marketInfo:t}){var s,a,c,u,l,m,d,p;let n=new Ou,i=await r.getMinimumBalanceForRentExemption(165);n.add(Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.baseVault.seed,newAccountPubkey:t.baseVault.publicKey,lamports:i,space:165,programId:Nu}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.quoteVault.seed,newAccountPubkey:t.quoteVault.publicKey,lamports:i,space:165,programId:Nu}),Mu(t.baseVault.publicKey,t.baseMint,t.vaultOwner),Mu(t.quoteVault.publicKey,t.quoteMint,t.vaultOwner),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.id.seed,newAccountPubkey:t.id.publicKey,lamports:await r.getMinimumBalanceForRentExemption(gs.span),space:gs.span,programId:t.programId}));let o=new Ou;return o.add(Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.requestQueue.seed,newAccountPubkey:t.requestQueue.publicKey,lamports:t.lowestFeeMarket?6208320:await r.getMinimumBalanceForRentExemption((s=t.requestQueueSpace)!=null?s:5120+12),space:t.lowestFeeMarket?764:(a=t.requestQueueSpace)!=null?a:5120+12,programId:t.programId}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.eventQueue.seed,newAccountPubkey:t.eventQueue.publicKey,lamports:t.lowestFeeMarket?79594560:await r.getMinimumBalanceForRentExemption((c=t.eventQueueSpace)!=null?c:262144+12),space:t.lowestFeeMarket?11308:(u=t.eventQueueSpace)!=null?u:262144+12,programId:t.programId}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.bids.seed,newAccountPubkey:t.bids.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((l=t.orderbookQueueSpace)!=null?l:65536+12),space:t.lowestFeeMarket?14524:(m=t.orderbookQueueSpace)!=null?m:65536+12,programId:t.programId}),Kn.createAccountWithSeed({fromPubkey:e,basePubkey:e,seed:t.asks.seed,newAccountPubkey:t.asks.publicKey,lamports:t.lowestFeeMarket?101977920:await r.getMinimumBalanceForRentExemption((d=t.orderbookQueueSpace)!=null?d:65536+12),space:t.lowestFeeMarket?14524:(p=t.orderbookQueueSpace)!=null?p:65536+12,programId:t.programId}),Bd({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:[F.CreateAccount,F.CreateAccount,F.InitAccount,F.InitAccount]},{transaction:o,signer:[],instructionTypes:[F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.CreateAccount,F.InitMarket]}]}var Gn=class extends Ce{async create({baseInfo:e,quoteInfo:t,lotSize:n,tickSize:i,dexProgramId:o,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u,assignSeed:l,txVersion:m,computeBudgetConfig:d}){let p=this.scope.ownerPubKey,f=l?`${e.mint.toBase58().slice(0,10)}-${t.mint.toBase58().slice(0,10)}-${l}`:void 0,b=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-market`}),y=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-request`}),g=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-event`}),w=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-bids`}),k=Me({fromPublicKey:p,programId:o,assignSeed:f&&`${f}-asks`}),P=Me({fromPublicKey:p,programId:_u,assignSeed:f&&`${f}-baseVault`}),B=Me({fromPublicKey:p,programId:_u,assignSeed:f&&`${f}-quoteVault`}),h=0,S=new Mi(100);function I(){let U=new Mi(0);for(;;)try{return{vaultOwner:Oi.createProgramAddressSync([b.publicKey.toBuffer(),U.toArrayLike(Buffer,"le",8)],o),vaultSignerNonce:U}}catch{if(U.iaddn(1),U.gt(new Mi(25555)))throw Error("find vault owner error")}}let{vaultOwner:C,vaultSignerNonce:x}=I(),K=new Mi(Math.round(10**e.decimals*n)),v=new Mi(Math.round(n*10**t.decimals*i));if(K.eq(dt))throw Error("lot size is too small");if(v.eq(dt))throw Error("tick size or lot size is too small");let R=await Do({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:o,id:b,baseMint:e.mint,quoteMint:t.mint,baseVault:P,quoteVault:B,vaultOwner:C,requestQueue:y,eventQueue:g,bids:w,asks:k,feeRateBps:h,quoteDustThreshold:S,vaultSignerNonce:x,baseLotSize:K,quoteLotSize:v,requestQueueSpace:s,eventQueueSpace:a,orderbookQueueSpace:c,lowestFeeMarket:u}}),G=this.createTxBuilder();G.addInstruction({instructions:R[0].transaction.instructions,signers:R[0].signer});for await(let U of R.slice(1,R.length))G.addInstruction({instructions:U.transaction.instructions,signers:U.signer,instructionTypes:U.instructionTypes});return m===0?G.sizeCheckBuildV0({computeBudgetConfig:d,address:{marketId:b.publicKey,requestQueue:y.publicKey,eventQueue:g.publicKey,bids:w.publicKey,asks:k.publicKey,baseVault:P.publicKey,quoteVault:B.publicKey,baseMint:new Oi(e.mint),quoteMin:new Oi(t.mint)}}):G.sizeCheckBuild({computeBudgetConfig:d,address:{marketId:b.publicKey,requestQueue:y.publicKey,eventQueue:g.publicKey,bids:w.publicKey,asks:k.publicKey,baseVault:P.publicKey,quoteVault:B.publicKey,baseMint:new Oi(e.mint),quoteMin:new Oi(t.mint)}})}};var Ni=class extends Ce{constructor(t){super(t);this.stableLayout=new Ri({connection:this.scope.connection})}async initLayout(){await this.stableLayout.initStableModelLayout()}async load(){this.checkDisabled()}computePairAmount({poolInfo:t,amount:n,slippage:i,baseIn:o}){let s=new Oe(new M(n).mul(10**t[o?"mintA":"mintB"].decimals).toFixed(0)),a=No(t[o?"mintB":"mintA"]),[c,u]=[new Oe(new M(t.mintAmountA).mul(10**t.mintA.decimals).toString()),new Oe(new M(t.mintAmountB).mul(10**t.mintB.decimals).toString())],l=new Oe(new M(t.lpAmount).mul(10**t.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",c.toString(),"quoteReserve:",u.toString()),this.logDebug("tokenIn:",o?t.mintA.symbol:t.mintB.symbol,"amountIn:",s.toString(),"anotherToken:",o?t.mintB.symbol:t.mintA.symbol,"slippage:",`${i.toSignificant()}%`,"baseReserve",c.toString(),"quoteReserve",u.toString());let m=o?"base":"quote";this.logDebug("input side:",m);let d=dt;s.isZero()||(d=m==="base"?oo(s.mul(u),c):oo(s.mul(c),u)),this.logDebug("amountRaw:",d.toString(),"lpAmount:",l.toString());let p=oo(s.mul(l),m==="base"?c:u);this.logDebug("liquidity:",p.toString());let f=new ze(new Oe(1)).add(i),b=new ze(new Oe(1)).sub(i),y=f.mul(d).quotient,g=b.mul(d).quotient,w=new ye(a,d),k=new ye(a,y),P=new ye(a,g);return this.logDebug("anotherAmount:",w.toFixed(),"maxAnotherAmount:",k.toFixed()),{anotherAmount:w,maxAnotherAmount:k,minAnotherAmount:P,liquidity:p}}async getAmmPoolKeys(t){return(await this.scope.api.fetchPoolKeysById({idList:[t]}))[0]}async addLiquidity(t){let{poolInfo:n,poolKeys:i,amountInA:o,amountInB:s,otherAmountMin:a,fixedSide:c,config:u,txVersion:l,computeBudgetConfig:m}=t;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region"),this.logDebug("amountInA:",o,"amountInB:",s),(o.isZero()||s.isZero())&&this.logAndCreateError("amounts must greater than zero","amountInA & amountInB",{amountInA:o.toFixed(),amountInB:s.toFixed()});let{account:d}=this.scope,{bypassAssociatedCheck:p,checkCreateATAOwner:f}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),[b,y]=[o.token,s.token],g=await d.getCreatedTokenAccount({mint:b.mint,associatedOnly:!1}),w=await d.getCreatedTokenAccount({mint:y.mint,associatedOnly:!1});!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",d.tokenAccounts);let k=await d.getCreatedTokenAccount({mint:new De(n.lpMint.address)}),P=[b,y],B=[g,w],h=[o.raw,s.raw],S=o.token.mint.toBase58()===n.mintA.address?"base":"quote",I="base";["quote","base"].includes(S)||this.logAndCreateError("invalid fixedSide","fixedSide",c),S==="quote"?(P.reverse(),B.reverse(),h.reverse(),I=c==="a"?"quote":"base"):S==="base"&&(I=c==="a"?"base":"quote");let[C,x]=P,[K,v]=B,[R,G]=h,U=i!=null?i:await this.getAmmPoolKeys(n.id),D=this.createTxBuilder(),ct=await d.handleTokenAccount({side:"in",amount:R,mint:C.mint,tokenAccount:K,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:Pe}=ct,it=Ee(ct,["tokenAccount"]);D.addInstruction(it);let ht=await d.handleTokenAccount({side:"in",amount:G,mint:x.mint,tokenAccount:v,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:Ie}=ht,at=Ee(ht,["tokenAccount"]);D.addInstruction(at);let bn=await d.handleTokenAccount({side:"out",amount:0,mint:new De(n.lpMint.address),tokenAccount:k,bypassAssociatedCheck:p,checkCreateATAOwner:f}),{tokenAccount:ut}=bn,ft=Ee(bn,["tokenAccount"]);return D.addInstruction(ft),D.addInstruction({instructions:[Ru({poolInfo:n,poolKeys:U,userKeys:{baseTokenAccount:Pe,quoteTokenAccount:Ie,lpTokenAccount:ut,owner:this.scope.ownerPubKey},baseAmountIn:R,quoteAmountIn:G,otherAmountMin:a.raw,fixedSide:I})],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5AddLiquidity:F.AmmV4AddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.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:o,baseAmountMin:s,quoteAmountMin:a,config:c,txVersion:u,computeBudgetConfig:l}=t,m=i!=null?i:await this.getAmmPoolKeys(n.id),[d,p,f]=[new De(n.mintA.address),new De(n.mintB.address),new De(n.lpMint.address)];this.logDebug("lpAmount:",o),this.logDebug("baseAmountMin:",s),this.logDebug("quoteAmountMin:",a),o.isZero()&&this.logAndCreateError("amount must greater than zero","lpAmount",o.toString());let{account:b}=this.scope,y=await b.getCreatedTokenAccount({mint:f,associatedOnly:!1});y||this.logAndCreateError("cannot found lpTokenAccount","tokenAccounts",b.tokenAccounts);let g=await b.getCreatedTokenAccount({mint:d}),w=await b.getCreatedTokenAccount({mint:p}),k=this.createTxBuilder(),{bypassAssociatedCheck:P,checkCreateATAOwner:B}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},c),x=await b.handleTokenAccount({side:"out",amount:0,mint:d,tokenAccount:g,bypassAssociatedCheck:P,checkCreateATAOwner:B}),{tokenAccount:h}=x,S=Ee(x,["tokenAccount"]);k.addInstruction(S);let K=await b.handleTokenAccount({side:"out",amount:0,mint:p,tokenAccount:w,bypassAssociatedCheck:P,checkCreateATAOwner:B}),{tokenAccount:I}=K,C=Ee(K,["tokenAccount"]);return k.addInstruction(C),k.addInstruction({instructions:[ds({poolInfo:n,poolKeys:m,userKeys:{lpTokenAccount:y,baseTokenAccount:h,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:o,baseAmountMin:s,quoteAmountMin:a})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity]}),k.addCustomComputeBudget(l),u===0?await k.buildV0():k.build()}async removeAllLpAndCreateClmmPosition({poolInfo:t,clmmPoolInfo:n,removeLpAmount:i,createPositionInfo:o,farmInfo:s,userFarmLpAmount:a,base:c,computeBudgetConfig:u,payer:l,userAuxiliaryLedgers:m,tokenProgram:d=pn,checkCreateATAOwner:p=!0,getEphemeralSigners:f,txVersion:b}){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 y=this.createTxBuilder();y.addCustomComputeBudget(u);let g={};for(let D of this.scope.account.tokenAccountRawInfos)(g[D.accountInfo.mint.toString()]===void 0||ie(this.scope.ownerPubKey,D.accountInfo.mint,pn).publicKey.equals(D.pubkey))&&(g[D.accountInfo.mint.toString()]=D.pubkey);let w=g[t.lpMint.address];if(w===void 0)throw Error("find lp account error in trade accounts");let k=i.add(a!=null?a:new Oe(0)),P=t.mintA.address===Ke.WSOL.mint.toString(),B=t.mintB.address===Ke.WSOL.mint.toString(),{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:P?{payer:this.scope.ownerPubKey}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!0,checkCreateATAOwner:p});if(y.addInstruction(S||{}),h===void 0)throw new Error("base token account not found");let{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(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(y.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 D=Tt[s.programId],Pe=It({programId:new De(s.programId),poolId:new De(s.id),owner:this.scope.ownerPubKey,version:D}),it,Ie=await this.scope.connection.getAccountInfo(Pe);if(Ie&&(it=pi(D).decode(Ie.data)),D!==6&&!it){let{instruction:bt,instructionType:Mn}=bi({id:new De(s.id),programId:new De(s.programId),version:D,ledger:Pe,owner:this.scope.ownerPubKey});y.addInstruction({instructions:[bt],instructionTypes:[Mn]})}let at=[];for(let bt of s.rewardInfos){let Mn=bt.mint.address===Ke.WSOL.mint.toString();if(g[bt.mint.address])at.push(g[bt.mint.address]);else{let{account:yn,instructionParams:We}=await this.scope.account.getOrCreateTokenAccount({mint:new De(bt.mint.address),tokenProgram:d,owner:this.scope.ownerPubKey,skipCloseAccount:!Mn,createInfo:{payer:l||this.scope.ownerPubKey},associatedOnly:!0,checkCreateATAOwner:p});yn||this.logAndCreateError("farm reward account not found:",bt.mint.address),We&&y.addInstruction(We),at.push(yn)}}let ut=(await this.scope.api.fetchFarmKeysById({ids:s.id}))[0],ft={userAuxiliaryLedgers:m,amount:a,owner:this.scope.ownerPubKey,farmInfo:s,farmKeys:ut,lpAccount:w,rewardAccounts:at},ct=Tt[s.programId],ht=ct===6?yi(ft):ct===5?gi(ft):wi(ft),bn={3:F.FarmV3Withdraw,5:F.FarmV5Withdraw,6:F.FarmV6Withdraw};y.addInstruction({instructions:[ht],instructionTypes:[bn[ct]]})}let x=await this.getAmmPoolKeys(t.id),K=ds({poolInfo:t,poolKeys:x,userKeys:{lpTokenAccount:w,baseTokenAccount:h,quoteTokenAccount:I,owner:this.scope.ownerPubKey},lpAmount:k,baseAmountMin:0,quoteAmountMin:0});y.addInstruction({instructions:[K],instructionTypes:[t.pooltype.includes("StablePool")?F.AmmV5RemoveLiquidity:F.AmmV4RemoveLiquidity],lookupTableAddress:x.lookupTableAccount?[x.lookupTableAccount]:[]});let[v,R]=t.mintA.address===n.mintA.address?[h,I]:[I,h],G=await this.scope.clmm.getClmmPoolKeys(n.id),U=await ke.openPositionFromBaseInstructions(W(O({poolInfo:n,poolKeys:G,ownerInfo:{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:v,tokenAccountB:R},withMetadata:"create"},o),{base:c,getEphemeralSigners:f}));return y.addInstruction({instructions:[...U.instructions],signers:U.signers,instructionTypes:[...U.instructionTypes],lookupTableAddress:G.lookupTableAccount?[G.lookupTableAccount]:[]}),b===0?y.sizeCheckBuildV0():y.sizeCheckBuild()}async createPoolV4({programId:t,marketInfo:n,baseMintInfo:i,quoteMintInfo:o,baseAmount:s,quoteAmount:a,startTime:c,ownerInfo:u,associatedOnly:l=!1,checkCreateATAOwner:m=!1,tokenProgram:d,txVersion:p,feeDestinationId:f,computeBudgetConfig:b}){var v;let y=u.feePayer||((v=this.scope.owner)==null?void 0:v.publicKey),g=u.useSOLBalance&&i.mint.equals(Wo),w=u.useSOLBalance&&o.mint.equals(Wo),k=this.createTxBuilder(),{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:i.mint,owner:this.scope.ownerPubKey,createInfo:g?{payer:y,amount:s}:void 0,notUseTokenAccount:g,skipCloseAccount:!g,associatedOnly:g?!1:l,checkCreateATAOwner:m});k.addInstruction(B||{});let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:o.mint,owner:this.scope.ownerPubKey,createInfo:w?{payer:y,amount:a}:void 0,notUseTokenAccount:w,skipCloseAccount:!w,associatedOnly:w?!1:l,checkCreateATAOwner:m});if(k.addInstruction(S||{}),P===void 0||h===void 0)throw Error("you don't has some token account");let I=ys({version:4,marketVersion:3,marketId:n.marketId,baseMint:i.mint,quoteMint:o.mint,baseDecimals:i.decimals,quoteDecimals:o.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:f},{instruction:x,instructionType:K}=ps(W(O({},C),{userWallet:this.scope.ownerPubKey,userCoinVault:P,userPcVault:h,userLpVault:ie(this.scope.ownerPubKey,I.lpMint,d).publicKey,nonce:I.nonce,openTime:c,coinAmount:s,pcAmount:a}));return k.addInstruction({instructions:[x],instructionTypes:[K]}),k.addCustomComputeBudget(b),k.versionBuild({txVersion:p,extInfo:{address:C}})}async createMarketAndPoolV4({programId:t=ao,marketProgram:n=fa,feeDestinationId:i=ya,tokenProgram:o,baseMintInfo:s,quoteMintInfo:a,baseAmount:c,quoteAmount:u,startTime:l,ownerInfo:m,lowestFeeMarket:d,assignSeed:p,associatedOnly:f=!1,checkCreateATAOwner:b=!1,lotSize:y=1,tickSize:g=.01,txVersion:w,computeBudgetConfig:k}){var Ks,Cs,Rs;let P=this.scope.ownerPubKey,B=m.feePayer||((Ks=this.scope.owner)==null?void 0:Ks.publicKey),h=m.useSOLBalance&&s.mint.equals(Wo),S=m.useSOLBalance&&a.mint.equals(Wo),I=p?`${s.mint.toBase58().slice(0,7)}-${a.mint.toBase58().slice(0,7)}-${p}`:void 0,C=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-market`}),x=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-request`}),K=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-event`}),v=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-bids`}),R=Me({fromPublicKey:P,programId:n,assignSeed:I&&`${I}-asks`}),G=Me({fromPublicKey:P,programId:pn,assignSeed:I&&`${I}-baseVault`}),U=Me({fromPublicKey:P,programId:pn,assignSeed:I&&`${I}-quoteVault`}),D=0,Pe=new Oe(100);function it(){let Ft=new Oe(0);for(;;)try{return{vaultOwner:De.createProgramAddressSync([C.publicKey.toBuffer(),Ft.toArrayLike(Buffer,"le",8)],n),vaultSignerNonce:Ft}}catch{if(Ft.iaddn(1),Ft.gt(new Oe(25555)))throw Error("find vault owner error")}}let{vaultOwner:Ie,vaultSignerNonce:at}=it(),ut=new Oe(Math.round(10**s.decimals*y)),ft=new Oe(Math.round(y*10**a.decimals*g));if(ut.eq(dt))throw Error("lot size is too small");if(ft.eq(dt))throw Error("tick size or lot size is too small");let ct=await Do({connection:this.scope.connection,wallet:this.scope.ownerPubKey,marketInfo:{programId:n,vaultOwner:Ie,baseMint:s.mint,quoteMint:a.mint,id:C,baseVault:G,quoteVault:U,requestQueue:x,eventQueue:K,bids:v,asks:R,feeRateBps:D,quoteDustThreshold:Pe,vaultSignerNonce:at,baseLotSize:ut,quoteLotSize:ft,lowestFeeMarket:d}}),ht=this.createTxBuilder();ht.addInstruction({instructions:ct[0].transaction.instructions,signers:ct[0].signer});for await(let Ft of ct.slice(1,ct.length))ht.addInstruction({instructions:Ft.transaction.instructions,signers:Ft.signer,instructionTypes:Ft.instructionTypes});let{account:bn,instructionParams:bt}=await this.scope.account.getOrCreateTokenAccount({mint:s.mint,owner:this.scope.ownerPubKey,createInfo:h?{payer:B,amount:c}:void 0,notUseTokenAccount:h,skipCloseAccount:!h,associatedOnly:h?!1:f,checkCreateATAOwner:b,assignSeed:h&&I?`${I}-wsol`:void 0});ht.addInstruction(bt||{});let{account:Mn,instructionParams:yn}=await this.scope.account.getOrCreateTokenAccount({mint:a.mint,owner:this.scope.ownerPubKey,createInfo:S?{payer:B,amount:u}:void 0,notUseTokenAccount:S,skipCloseAccount:!S,associatedOnly:S?!1:f,checkCreateATAOwner:b,assignSeed:S&&I?`${I}-wsol`:void 0});if(ht.addInstruction(yn||{}),bn===void 0)throw Error("you don't has base token account");if(Mn===void 0)throw Error("you don't has quote token account");let We=ys({version:4,marketVersion:3,marketId:C.publicKey,baseMint:s.mint,quoteMint:a.mint,baseDecimals:s.decimals,quoteDecimals:a.decimals,programId:t,marketProgramId:n}),ir={programId:t,ammId:We.id,ammAuthority:We.authority,ammOpenOrders:We.openOrders,lpMint:We.lpMint,coinMint:We.baseMint,pcMint:We.quoteMint,coinVault:We.baseVault,pcVault:We.quoteVault,withdrawQueue:We.withdrawQueue,ammTargetOrders:We.targetOrders,poolTempLp:We.lpVault,marketProgramId:We.marketProgramId,marketId:We.marketId,ammConfigId:We.configId,feeDestinationId:i},{instruction:rc,instructionType:sc}=ps(W(O({},ir),{userWallet:this.scope.ownerPubKey,userCoinVault:bn,userPcVault:Mn,userLpVault:ie(this.scope.ownerPubKey,We.lpMint,o).publicKey,nonce:We.nonce,openTime:l,coinAmount:c,pcAmount:u}));ht.addInstruction({instructions:[rc],instructionTypes:[sc]});let Ss=h||S?[((Cs=bt==null?void 0:bt.instructions)==null?void 0:Cs[0])||((Rs=yn==null?void 0:yn.instructions)==null?void 0:Rs[0])].filter(Ft=>!!Ft):void 0;return w===0?ht.sizeCheckBuildV0({computeBudgetConfig:k,splitIns:Ss,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:G.publicKey,quoteVault:U.publicKey,baseMint:new De(s.mint),quoteMin:new De(a.mint)},ir)}):ht.sizeCheckBuild({computeBudgetConfig:k,splitIns:Ss,address:O({requestQueue:x.publicKey,eventQueue:K.publicKey,bids:v.publicKey,asks:R.publicKey,baseVault:G.publicKey,quoteVault:U.publicKey,baseMint:new De(s.mint),quoteMin:new De(a.mint)},ir)})}async getCreatePoolFee({programId:t}){let n=Eo({programId:t}),i=await this.scope.connection.getAccountInfo(n,{dataSlice:{offset:536,length:8}});if(i===null)throw Error("get config account error");return Tu.decode(i.data).fee}computeAmountOut({poolInfo:t,amountIn:n,mintIn:i,mintOut:o,slippage:s}){let[a,c]=[i.toString(),o.toString()];if(a!==t.mintA.address&&a!==t.mintB.address)throw new Error("toke not match");if(c!==t.mintA.address&&c!==t.mintB.address)throw new Error("toke not match");let{baseReserve:u,quoteReserve:l}=t,m=[u,l],d=[t.mintA.decimals,t.mintB.decimals],p=a==t.mintA.address?"base":"quote";p==="quote"&&(m.reverse(),d.reverse());let[f,b]=m,[y,g]=d,w=t.version===4,k;if(w)k=new M(b.toString()).div(10**g).div(new M(f.toString()).div(10**y));else{let R=Ku(this.stableLayout.stableModelData,u.toNumber(),l.toNumber(),!1);p==="quote"?k=new M(1e6).div(R*1e6):k=new M(R*1e6).div(1e6)}let P=n,B=new Oe(0),h=new Oe(0);if(!P.isZero())if(w){h=an(P.mul(ss),_o);let R=P.sub(h),G=f.add(R);B=b.mul(R).div(G)}else{h=P.mul(new Oe(2)).div(new Oe(1e4));let R=P.sub(h);p==="quote"?B=new Oe(xu(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber())):B=new Oe(Su(this.stableLayout.stableModelData,l.toNumber(),u.toNumber(),R.toNumber()))}let S=new Oe(new M(B.toString()).mul(1-s).toFixed(0)),I=B,C=S,x=new M(B.toString()).div(new M(P.sub(h).toString()).toFixed(0));!P.isZero()&&!B.isZero()&&(x=new M(B.toString()).div(10**g).div(new M(P.sub(h).toString()).div(10**y)));let K=k.sub(x).div(k).mul(100);return{amountOut:I,minAmountOut:C,currentPrice:k,executionPrice:x,priceImpact:K,fee:h}}computeAmountIn({poolInfo:t,amountOut:n,mintIn:i,mintOut:o,slippage:s}){let{baseReserve:a,quoteReserve:c}=t;i.toString()!==t.mintA.address&&i.toString()!==t.mintB.address&&this.logAndCreateError("mintIn does not match pool"),o.toString()!==t.mintA.address&&o.toString()!==t.mintB.address&&this.logAndCreateError("mintOut does not match pool"),this.logDebug("baseReserve:",a.toString()),this.logDebug("quoteReserve:",c.toString());let u=i.toString()===t.mintA.address,[l,m]=u?[t.mintA,t.mintB]:[t.mintB,t.mintA];this.logDebug("currencyOut:",m.symbol||m.address),this.logDebug("amountOut:",new M(n.toString()).div(10**m.decimals).toDecimalPlaces(m.decimals).toString(),l.symbol||l.address),this.logDebug("slippage:",`${s*100}%`);let d=[a,c],p=u?"quote":"base";p==="base"&&d.reverse(),this.logDebug("output side:",p);let[f,b]=d,y=new M(b.toString()).div(10**t[u?"mintB":"mintA"].decimals).div(new M(f.toString()).div(10**t[u?"mintA":"mintB"].decimals));this.logDebug("currentPrice:",`1 ${l.symbol||l.address} \u2248 ${y.toString()} ${m.symbol||m.address}`),this.logDebug("currentPrice invert:",`1 ${m.symbol||m.address} \u2248 ${new M(1).div(y).toString()} ${l.symbol||l.address}`);let g=new Oe(0),w=n;if(!w.isZero()){w.gt(b)&&(w=b.sub(new Oe(1)));let C=b.sub(w);g=f.mul(w).div(C).mul(_o).div(_o.sub(ss))}let k=new Oe(new M(g.toString()).mul(1+s).toFixed(0)),P=g,B=k;this.logDebug("amountIn:",new M(P.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString()),this.logDebug("maxAmountIn:",new M(B.toString()).div(10**l.decimals).toDecimalPlaces(l.decimals).toString());let h=null;!g.isZero()&&!w.isZero()&&(h=new M(w.toString()).div(10**m.decimals).div(new M(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 M(1).div(h).toDecimalPlaces(Math.max(t.mintA.decimals,t.mintB.decimals)).toString()} ${l.symbol||l.address}`));let S=y.mul(P.toString()),I=S.sub(n.toString()).abs().div(S);return this.logDebug("priceImpact:",`${I.toString()}%`),{amountIn:P,maxAmountIn:B,currentPrice:y,executionPrice:h,priceImpact:I}}async swap({poolInfo:t,poolKeys:n,amountIn:i,amountOut:o,inputMint:s,fixedSide:a,txVersion:c,config:u,computeBudgetConfig:l}){let m=this.createTxBuilder(),{associatedOnly:d=!0,inputUseSolBalance:p=!0,outputUseSolBalance:f=!0}=u||{},[b,y]=s===t.mintA.address?[t.mintA,t.mintB]:[t.mintB,t.mintA],g=p&&b.address===H.toBase58(),w=f&&y.address===H.toBase58(),{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(b.address),owner:this.scope.ownerPubKey,createInfo:g?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!g,notUseTokenAccount:g,associatedOnly:d});m.addInstruction(P||{}),k||this.logAndCreateError("input token account not found",{token:b.symbol||b.address,tokenAccountIn:k,inputTokenUseSolBalance:g,associatedOnly:d});let{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:pn,mint:new De(y.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:y.symbol||y.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:[Vo({version:I,poolKeys:S,userKeys:{tokenAccountIn:k,tokenAccountOut:B,owner:this.scope.ownerPubKey},amountIn:i,amountOut:o,fixedSide:a})],instructionTypes:[I===4?F.AmmV4SwapBaseIn:F.AmmV5SwapBaseIn]}),m.addCustomComputeBudget(l),m.versionBuild({txVersion:c})}async getRpcPoolInfo(t){return(await this.getRpcPoolInfos([t]))[t]}async getRpcPoolInfos(t,n){let i=await qe(this.scope.connection,t.map(l=>({pubkey:new De(l)})),n),o={},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=vo.decode(m.accountInfo.data);o[String(t[l])]=W(O({},d),{programId:m.accountInfo.owner}),s.push(d.baseVault,d.quoteVault)}let a={},c=await qe(this.scope.connection,s.map(l=>({pubkey:new De(l)})),n);for(let l=0;l<s.length;l++){let m=c[l].accountInfo;if(m===null)throw Error("fetch vault info error: "+s[l]);a[String(s[l])]=new Oe(xd.decode(m.data).amount.toString())}let u={};for(let[l,m]of Object.entries(o)){let d=a[m.baseVault.toString()].sub(m.baseNeedTakePnl),p=a[m.quoteVault.toString()].sub(m.quoteNeedTakePnl);u[l]=W(O({},m),{baseReserve:d,mintAAmount:a[m.baseVault.toString()],mintBAmount:a[m.quoteVault.toString()],quoteReserve:p,poolPrice:new M(p.toString()).div(new M(10).pow(m.quoteDecimal.toString())).div(new M(d.toString()).div(new M(10).pow(m.baseDecimal.toString())))})}return u}async getPoolInfoFromRpc({poolId:t}){let n=await this.getRpcPoolInfo(t),i=Fo({[t]:n}),o=i[t],s=await this.scope.tradeV2.computePoolToPoolKeys({pools:[i[t]],ammRpcData:{[t]:n}});return{poolRpcData:n,poolInfo:o,poolKeys:s[0]}}};import{PublicKey as Q}from"@solana/web3.js";import pt from"bn.js";import{AccountLayout as vu,TOKEN_2022_PROGRAM_ID as Xn,TOKEN_PROGRAM_ID as _i}from"@solana/spl-token";var vi=class extends Ce{constructor(e){super(e)}async getClmmPoolKeys(e){return(await this.scope.api.fetchPoolKeysById({idList:[e]}))[0]}async createPool(e){var k;let{programId:t,owner:n=((k=this.scope.owner)==null?void 0:k.publicKey)||Q.default,mint1:i,mint2:o,ammConfig:s,initialPrice:a,startTime:c,computeBudgetConfig:u,forerunCreate:l,getObserveState:m,txVersion:d}=e,p=this.createTxBuilder(),[f,b,y]=new pt(new Q(i.address).toBuffer()).gt(new pt(new Q(o.address).toBuffer()))?[o,i,new M(1).div(a)]:[i,o,a],g=ne.priceToSqrtPriceX64(y,f.decimals,b.decimals),w=await ke.createPoolInstructions({connection:this.scope.connection,programId:t,owner:n,mintA:f,mintB:b,ammConfigId:s.id,initialPriceX64:g,startTime:c,forerunCreate:!m&&l});return p.addInstruction(w),p.addCustomComputeBudget(u),p.versionBuild({txVersion:d,extInfo:{address:W(O({},w.address),{observationId:w.address.observationId.toBase58(),exBitmapAccount:w.address.exBitmapAccount.toBase58(),programId:t.toString(),id:w.address.poolId.toString(),mintA:f,mintB:b,openTime:c.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:O({type:"Concentrated",rewardDefaultPoolInfos:"Clmm",id:w.address.poolId.toString(),mintA:f,mintB:b,feeRate:s.tradeFeeRate,openTime:c.toString(),programId:t.toString(),price:y.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},ru),forerunCreate:l}})}async openPositionFromBase({poolInfo:e,poolKeys:t,ownerInfo:n,tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,nft2022:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,withMetadata:d="create",getEphemeralSigners:p,computeBudgetConfig:f,txVersion:b}){this.scope.availability.addConcentratedPosition===!1&&this.logAndCreateError("add position feature disabled in your region"),this.scope.checkOwner();let y=this.createTxBuilder(),g=null,w=null,k=n.useSOLBalance&&e.mintA.address===H.toString(),P=n.useSOLBalance&&e.mintB.address===H.toString(),[B,h]=s==="MintA"?[a,c]:[c,a],{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||B.isZero()?{payer:this.scope.ownerPubKey,amount:B}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:l,checkCreateATAOwner:m});S&&(g=S),y.addInstruction(I||{});let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||h.isZero()?{payer:this.scope.ownerPubKey,amount:h}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:l,checkCreateATAOwner:m});C&&(w=C),y.addInstruction(x||{}),(!g||!w)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",{ownerTokenAccountA:g==null?void 0:g.toBase58(),ownerTokenAccountB:w==null?void 0:w.toBase58()});let K=t||await this.getClmmPoolKeys(e.id),v=await ke.openPositionFromBaseInstructions({poolInfo:e,poolKeys:K,ownerInfo:W(O({},n),{feePayer:this.scope.ownerPubKey,wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w}),tickLower:i,tickUpper:o,base:s,baseAmount:a,otherAmountMax:c,withMetadata:d,getEphemeralSigners:p,nft2022:u});return y.addInstruction(v),y.addCustomComputeBudget(f),y.versionBuild({txVersion:b,extInfo:O({},v.address)})}async openPositionFromLiquidity({poolInfo:e,poolKeys:t,ownerInfo:n,amountMaxA:i,amountMaxB:o,tickLower:s,tickUpper:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,withMetadata:m="create",txVersion:d,computeBudgetConfig:p,getEphemeralSigners:f,nft2022:b}){this.scope.availability.createConcentratedPosition===!1&&this.logAndCreateError("open position feature disabled in your region");let y=this.createTxBuilder(),g=null,w=null,k=n.useSOLBalance&&e.mintA.address===H.toBase58(),P=n.useSOLBalance&&e.mintB.address===H.toBase58(),{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||i.isZero()?{payer:this.scope.ownerPubKey,amount:i}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:k?!1:u,checkCreateATAOwner:l});B&&(g=B),y.addInstruction(h||{});let{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:P?!1:u,checkCreateATAOwner:l});S&&(w=S),y.addInstruction(I||{}),(g===void 0||w===void 0)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let C=t||await this.getClmmPoolKeys(e.id),x=await ke.openPositionFromLiquidityInstructions({poolInfo:e,poolKeys:C,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w},tickLower:s,tickUpper:a,liquidity:c,amountMaxA:i,amountMaxB:o,withMetadata:m,getEphemeralSigners:f,nft2022:b});return y.addInstruction(x),y.addCustomComputeBudget(p),y.versionBuild({txVersion:d,extInfo:{address:x.address}})}async increasePositionFromLiquidity(e){var I;let{poolInfo:t,poolKeys:n,ownerPosition:i,amountMaxA:o,amountMaxB:s,liquidity:a,ownerInfo:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d}=e,p=this.createTxBuilder(),f,b,y=c.useSOLBalance&&t.mintA.address===H.toString(),g=c.useSOLBalance&&t.mintB.address===H.toString(),{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:y||o.isZero()?{payer:this.scope.ownerPubKey,amount:o}:void 0,skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});w&&(f=w),p.addInstruction(k||{});let{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(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:u,checkCreateATAOwner:l});P&&(b=P),p.addInstruction(B||{}),!f&&!b&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let h=n!=null?n:await this.getClmmPoolKeys(t.id),S=ke.increasePositionFromLiquidityInstructions({poolInfo:t,poolKeys:h,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:f,tokenAccountB:b},liquidity:a,amountMaxA:o,amountMaxB:s,nft2022:(I=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:I.owner.equals(Xn)});return p.addInstruction(S),p.addCustomComputeBudget(m),p.versionBuild({txVersion:d,extInfo:{address:S.address}})}async increasePositionFromBase(e){var S;let{poolInfo:t,ownerPosition:n,base:i,baseAmount:o,otherAmountMax:s,ownerInfo:a,associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=this.createTxBuilder(),p,f,b=a.useSOLBalance&&t.mintA.address===H.toString(),y=a.useSOLBalance&&t.mintB.address===H.toString(),{account:g,instructionParams:w}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:b||(i==="MintA"?o:s).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?o:s}:void 0,skipCloseAccount:!b,associatedOnly:b?!1:c,checkCreateATAOwner:u});g&&(p=g),d.addInstruction(w||{});let{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:y||(i==="MintA"?s:o).isZero()?{payer:this.scope.ownerPubKey,amount:i==="MintA"?s:o}:void 0,notUseTokenAccount:y,skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});k&&(f=k),d.addInstruction(P||{}),!p&&!f&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccounts);let B=await this.getClmmPoolKeys(t.id),h=ke.increasePositionFromBaseInstructions({poolInfo:t,poolKeys:B,ownerPosition:n,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:p,tokenAccountB:f},base:i,baseAmount:o,otherAmountMax:s,nft2022:(S=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:S.owner.equals(Xn)});return d.addInstruction(h),d.addCustomComputeBudget(l),d.versionBuild({txVersion:m,extInfo:{address:h.address}})}async decreaseLiquidity(e){var v;let{poolInfo:t,poolKeys:n,ownerPosition:i,ownerInfo:o,amountMinA:s,amountMinB:a,liquidity:c,associatedOnly:u=!0,checkCreateATAOwner:l=!1,computeBudgetConfig:m,txVersion:d,nftAccount:p}=e;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let f=this.createTxBuilder(),b=o.useSOLBalance&&t.mintA.address===H.toString(),y=o.useSOLBalance&&t.mintB.address===H.toString(),g,w,{account:k,instructionParams:P}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new Q(t.mintA.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:b?!1:u,checkCreateATAOwner:l});g=k,P&&f.addInstruction(P);let{account:B,instructionParams:h}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new Q(t.mintB.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:u,checkCreateATAOwner:l});w=B,h&&f.addInstruction(h);let S=[];for(let R of t.rewardDefaultInfos){let G=o.useSOLBalance&&R.mint.address===H.toString(),U;if(R.mint.address===t.mintA.address)U=g;else if(R.mint.address===t.mintB.address)U=w;else{let{account:D,instructionParams:Pe}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(R.mint.programId),mint:new Q(R.mint.address),notUseTokenAccount:G,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!G,associatedOnly:G?!1:u,checkCreateATAOwner:l});U=D,Pe&&f.addInstruction(Pe)}S.push(U)}!g&&!w&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",this.scope.account.tokenAccountRawInfos);let I=n!=null?n:await this.getClmmPoolKeys(t.id),C=(v=await this.scope.connection.getAccountInfo(i.nftMint))==null?void 0:v.owner.equals(Xn),x=await ke.decreaseLiquidityInstructions({poolInfo:t,poolKeys:I,ownerPosition:i,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:g,tokenAccountB:w,rewardAccounts:S},liquidity:c,amountMinA:s,amountMinB:a,nft2022:C});f.addInstruction({instructions:x.instructions,instructionTypes:[F.ClmmDecreasePosition]});let K=O({},x.address);if(o.closePosition){let R=await ke.closePositionInstructions({poolInfo:t,poolKeys:I,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:i,nft2022:C});f.addInstruction({endInstructions:R.instructions,endInstructionTypes:R.instructionTypes}),K=O(O({},K),R.address)}return f.addCustomComputeBudget(m),f.versionBuild({txVersion:d,extInfo:{address:K}})}async lockPosition(e){var d;let{programId:t=ii,authProgramId:n=uo,poolProgramId:i=wn,ownerPosition:o,payer:s,computeBudgetConfig:a,txVersion:c,getEphemeralSigners:u}=e,l=this.createTxBuilder(),m=await ke.makeLockPositions({programId:t,authProgramId:n,poolProgramId:i,wallet:this.scope.ownerPubKey,payer:s!=null?s:this.scope.ownerPubKey,nftMint:o.nftMint,getEphemeralSigners:u,nft2022:(d=await this.scope.connection.getAccountInfo(o.nftMint))==null?void 0:d.owner.equals(Xn)});return l.addInstruction(m),l.addCustomComputeBudget(a),l.versionBuild({txVersion:c,extInfo:m.address})}async harvestLockPosition(e){let{programId:t=ii,authProgramId:n=uo,clmmProgram:i=wn,poolKeys:o,lockData:s,ownerInfo:a={useSOLBalance:!0},associatedOnly:c=!0,checkCreateATAOwner:u=!1,computeBudgetConfig:l,txVersion:m}=e,d=o||await this.getClmmPoolKeys(s.poolId.toString()),p=this.createTxBuilder(),f=await this.scope.connection.getAccountInfo(s.positionId);f||this.logger.logWithError("position not found",s.positionId);let b=Si.decode(f.data),y=a.useSOLBalance&&d.mintA.address===H.toString(),g=a.useSOLBalance&&d.mintB.address===H.toString(),w,k,{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintA.programId,mint:new Q(d.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!y,associatedOnly:y?!1:c,checkCreateATAOwner:u});w=P,B&&p.addInstruction(B);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:d.mintB.programId,mint:new Q(d.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!g,associatedOnly:g?!1:c,checkCreateATAOwner:u});k=h,S&&p.addInstruction(S);let I={},C=[];for(let Ie of d.rewardInfos){let at=a.useSOLBalance&&Ie.mint.address===H.toString(),ut=I[Ie.mint.address];if(!ut){let{account:ft,instructionParams:ct}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(Ie.mint.programId),mint:new Q(Ie.mint.address),notUseTokenAccount:at,owner:this.scope.ownerPubKey,skipCloseAccount:!at,createInfo:{payer:this.scope.ownerPubKey,amount:0},associatedOnly:at?!1:c});ut=ft,ct&&p.addInstruction(ct)}I[Ie.mint.address]=ut,C.push(ut)}let x=Ti(t,s.lockNftMint).publicKey,K=ie(this.scope.ownerPubKey,s.lockNftMint,_i).publicKey,v=Y.getTickArrayStartIndexByTick(b.tickLower,d.config.tickSpacing),R=Y.getTickArrayStartIndexByTick(b.tickUpper,d.config.tickSpacing),{publicKey:G}=me(new Q(d.programId),s.poolId,v),{publicKey:U}=me(new Q(d.programId),s.poolId,R),{publicKey:D}=Vt(new Q(d.programId),s.poolId,b.tickLower,b.tickUpper),Pe=[];for(let Ie=0;Ie<d.rewardInfos.length;Ie++)Pe.push({poolRewardVault:new Q(d.rewardInfos[Ie].vault),ownerRewardVault:C[Ie],rewardMint:new Q(d.rewardInfos[Ie].mint.address)});let it=await ke.harvestLockPositionInstructionV2({programId:t,auth:n,lockPositionId:x,clmmProgram:i,lockOwner:this.scope.ownerPubKey,lockNftMint:s.lockNftMint,lockNftAccount:K,positionNftAccount:s.nftAccount,positionId:s.positionId,poolId:s.poolId,protocolPosition:D,vaultA:new Q(d.vault.A),vaultB:new Q(d.vault.B),tickArrayLower:G,tickArrayUpper:U,userVaultA:w,userVaultB:k,mintA:new Q(d.mintA.address),mintB:new Q(d.mintB.address),rewardAccounts:Pe,exTickArrayBitmap:_e(i,s.poolId).publicKey});return p.addInstruction({instructions:[it],instructionTypes:[F.ClmmHarvestLockPosition]}),p.addCustomComputeBudget(l),p.versionBuild({txVersion:m})}async closePosition({poolInfo:e,poolKeys:t,ownerPosition:n,txVersion:i}){var c;this.scope.availability.removeConcentratedPosition===!1&&this.logAndCreateError("remove position feature disabled in your region");let o=this.createTxBuilder(),s=t!=null?t:await this.getClmmPoolKeys(e.id),a=ke.closePositionInstructions({poolInfo:e,poolKeys:s,ownerInfo:{wallet:this.scope.ownerPubKey},ownerPosition:n,nft2022:(c=await this.scope.connection.getAccountInfo(n.nftMint))==null?void 0:c.owner.equals(Xn)});return o.addInstruction(a).versionBuild({txVersion:i,extInfo:{address:a.address}})}async initReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.address.toString()===H.toString(),l=n.perSecond.mul(n.endTime-n.openTime),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(n.mint.address),mint:new Q(n.mint.address),notUseTokenAccount:!!u,skipCloseAccount:!u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new pt(new M(l.toFixed(0)).gte(l)?l.toFixed(0):l.add(1).toFixed(0))}:void 0,associatedOnly:u?!1:i,checkCreateATAOwner:o});d&&c.addInstruction(d),m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let p=await this.getClmmPoolKeys(e.id),f=ke.initRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardInfo:{programId:new Q(n.mint.programId),mint:new Q(n.mint.address),openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(f),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:f.address}})}async initRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){for(let m of i)m.endTime<=m.openTime&&this.logAndCreateError("reward time error","rewardInfo",m);let u=this.createTxBuilder(),l={};for(let m of i){let d=n.useSOLBalance&&m.mint.address===H.toString(),p=m.perSecond.mul(m.endTime-m.openTime),{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:!!d,skipCloseAccount:!d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new pt(new M(p.toFixed(0)).gte(p)?p.toFixed(0):p.add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});b&&u.addInstruction(b),f||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let y=t!=null?t:await this.getClmmPoolKeys(e.id),g=ke.initRewardInstructions({poolInfo:e,poolKeys:y,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:f},rewardInfo:{programId:new Q(m.mint.programId),mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});l=O(O({},l),g.address),u.addInstruction(g)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async setReward({poolInfo:e,ownerInfo:t,rewardInfo:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1,computeBudgetConfig:s,txVersion:a}){n.endTime<=n.openTime&&this.logAndCreateError("reward time error","rewardInfo",n);let c=this.createTxBuilder(),u=t.useSOLBalance&&n.mint.equals(H),{account:l,instructionParams:m}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:n.programId,mint:n.mint,notUseTokenAccount:u,owner:this.scope.ownerPubKey,createInfo:u?{payer:t.feePayer||this.scope.ownerPubKey,amount:new pt(new M(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:u?!1:i,checkCreateATAOwner:o});m&&c.addInstruction(m),l||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let d=await this.getClmmPoolKeys(e.id),p=ke.setRewardInstructions({poolInfo:e,poolKeys:d,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:l},rewardInfo:{mint:n.mint,openTime:n.openTime,endTime:n.endTime,emissionsPerSecondX64:oe.decimalToX64(n.perSecond)}});return c.addInstruction(p),c.addCustomComputeBudget(s),c.versionBuild({txVersion:a,extInfo:{address:p.address}})}async setRewards({poolInfo:e,poolKeys:t,ownerInfo:n,rewardInfos:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,computeBudgetConfig:a,txVersion:c}){let u=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===H.toString(),{account:p,instructionParams:f}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(m.mint.programId),mint:new Q(m.mint.address),notUseTokenAccount:d,owner:this.scope.ownerPubKey,createInfo:d?{payer:n.feePayer||this.scope.ownerPubKey,amount:new pt(new M(m.perSecond.sub(m.endTime-m.openTime).toFixed(0)).gte(m.perSecond.sub(m.endTime-m.openTime))?m.perSecond.sub(m.endTime-m.openTime).toFixed(0):m.perSecond.sub(m.endTime-m.openTime).add(1).toFixed(0))}:void 0,associatedOnly:d?!1:o,checkCreateATAOwner:s});f&&u.addInstruction(f),p||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let b=t!=null?t:await this.getClmmPoolKeys(e.id),y=ke.setRewardInstructions({poolInfo:e,poolKeys:b,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:p},rewardInfo:{mint:new Q(m.mint.address),openTime:m.openTime,endTime:m.endTime,emissionsPerSecondX64:oe.decimalToX64(m.perSecond)}});u.addInstruction(y),l=O(O({},l),y.address)}return u.addCustomComputeBudget(a),u.versionBuild({txVersion:c,extInfo:{address:l}})}async collectReward({poolInfo:e,ownerInfo:t,rewardMint:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=e.rewardDefaultInfos.find(p=>p.mint.address===n.toString());s||this.logAndCreateError("reward mint error","not found reward mint",n);let a=this.createTxBuilder(),c=t.useSOLBalance&&n.equals(H),{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(s.mint.programId),mint:n,notUseTokenAccount:c,owner:this.scope.ownerPubKey,skipCloseAccount:!c,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:c?!1:i,checkCreateATAOwner:o});l&&a.addInstruction(l),u||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos);let m=await this.getClmmPoolKeys(e.id),d=ke.collectRewardInstructions({poolInfo:e,poolKeys:m,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:u},rewardMint:n});return a.addInstruction(d),a.build({address:d.address})}async collectRewards({poolInfo:e,ownerInfo:t,rewardMints:n,associatedOnly:i=!0,checkCreateATAOwner:o=!1}){let s=this.createTxBuilder(),a={};for(let c of n){let u=e.rewardDefaultInfos.find(b=>b.mint.address===c.toString());if(!u){this.logAndCreateError("reward mint error","not found reward mint",c);continue}let l=t.useSOLBalance&&c.equals(H),{account:m,instructionParams:d}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(u.mint.programId),mint:c,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:{payer:t.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:l?!1:i,checkCreateATAOwner:o});m||this.logAndCreateError("no money","ownerRewardAccount",this.scope.account.tokenAccountRawInfos),d&&s.addInstruction(d);let p=await this.getClmmPoolKeys(e.id),f=ke.collectRewardInstructions({poolInfo:e,poolKeys:p,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccount:m},rewardMint:c});s.addInstruction(f),a=O(O({},a),f.address)}return s.build({address:a})}async swap({poolInfo:e,poolKeys:t,inputMint:n,amountIn:i,amountOutMin:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let f=this.createTxBuilder(),b=n.toString()===e.mintA.address,y=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),w;!s||s.equals(new M(0))?w=b?St.add(new pt(1)):Kt.sub(new pt(1)):w=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:y||!b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?i:0}:void 0,associatedOnly:y?!1:l,checkCreateATAOwner:m});k=h,S&&f.addInstruction(S)}let P;if(!P){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?0:i}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=h,S&&f.addInstruction(S)}(!k||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:k,ownerTokenAccountB:P,mintAUseSOLBalance:y,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return f.addInstruction(ke.makeSwapBaseInInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:P},inputMint:new Q(n),amountIn:i,amountOutMin:o,sqrtPriceLimitX64:w,remainingAccounts:u})),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d})}async swapBaseOut({poolInfo:e,poolKeys:t,outputMint:n,amountOut:i,amountInMax:o,priceLimit:s,observationId:a,ownerInfo:c,remainingAccounts:u,associatedOnly:l=!0,checkCreateATAOwner:m=!1,txVersion:d,computeBudgetConfig:p}){let f=this.createTxBuilder(),b=n.toString()===e.mintB.address,y=c.useSOLBalance&&e.mintA.address===H.toBase58(),g=c.useSOLBalance&&e.mintB.address===H.toBase58(),w;!s||s.equals(new M(0))?w=n.toString()===e.mintB.address?St.add(new pt(1)):Kt.sub(new pt(1)):w=ne.priceToSqrtPriceX64(s,e.mintA.decimals,e.mintB.decimals);let k;if(!k){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintA.programId,mint:new Q(e.mintA.address),notUseTokenAccount:y,owner:this.scope.ownerPubKey,skipCloseAccount:!y,createInfo:y||!b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?o:0}:void 0,associatedOnly:y?!1:l,checkCreateATAOwner:m});k=h,S&&f.addInstruction(S)}let P;if(!P){let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:e.mintB.programId,mint:new Q(e.mintB.address),notUseTokenAccount:g,owner:this.scope.ownerPubKey,skipCloseAccount:!g,createInfo:g||b?{payer:c.feePayer||this.scope.ownerPubKey,amount:b?0:o}:void 0,associatedOnly:g?!1:l,checkCreateATAOwner:m});P=h,S&&f.addInstruction(S)}(!k||!P)&&this.logAndCreateError("user do not have token account",{tokenA:e.mintA.symbol||e.mintA.address,tokenB:e.mintB.symbol||e.mintB.address,ownerTokenAccountA:k,ownerTokenAccountB:P,mintAUseSOLBalance:y,mintBUseSOLBalance:g,associatedOnly:l});let B=t!=null?t:await this.getClmmPoolKeys(e.id);return f.addInstruction(ke.makeSwapBaseOutInstructions({poolInfo:e,poolKeys:B,observationId:a,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:k,tokenAccountB:P},outputMint:new Q(n),amountOut:i,amountInMax:o,sqrtPriceLimitX64:w,remainingAccounts:u})),f.addCustomComputeBudget(p),f.versionBuild({txVersion:d})}async harvestAllRewards({allPoolInfo:e,allPositions:t,lockInfo:n,ownerInfo:i,associatedOnly:o=!0,checkCreateATAOwner:s=!1,programId:a,txVersion:c,computeBudgetConfig:u}){var b,y;let l={};for(let g of this.scope.account.tokenAccountRawInfos)o?ie(this.scope.ownerPubKey,g.accountInfo.mint,a).publicKey.equals(g.pubkey)&&(l[g.accountInfo.mint.toString()]=g.pubkey):l[g.accountInfo.mint.toString()]=g.pubkey;let m=Object.values(t).flat().map(g=>g.nftMint),d=await qe(this.scope.connection,m.map(g=>({pubkey:g}))),p={};d.forEach(g=>{var w,k;p[g.pubkey.toBase58()]=(k=(w=g==null?void 0:g.accountInfo)==null?void 0:w.owner)!=null?k:null});let f=this.createTxBuilder();for(let g of Object.values(e)){if(t[g.id]===void 0||!t[g.id].find(x=>!x.liquidity.isZero()||x.rewardInfos.find(K=>!K.rewardAmountOwed.isZero())))continue;let w=g,k=i.useSOLBalance&&w.mintA.address===H.toString(),P=i.useSOLBalance&&w.mintB.address===H.toString(),B=l[w.mintA.address];if(!B){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintA.programId,mint:new Q(w.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,skipCloseAccount:!k,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:k?!1:o,checkCreateATAOwner:s});B=x,K&&f.addInstruction(K)}let h=l[w.mintB.address];if(!h){let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:w.mintB.programId,mint:new Q(w.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,skipCloseAccount:!P,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:P?!1:o,checkCreateATAOwner:s});h=x,K&&f.addInstruction(K)}l[w.mintA.address]=B,l[w.mintB.address]=h;let S=[];for(let x of w.rewardDefaultInfos){let K=i.useSOLBalance&&x.mint.address===H.toString(),v=l[x.mint.address];if(!v){let{account:R,instructionParams:G}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:new Q(x.mint.programId),mint:new Q(x.mint.address),notUseTokenAccount:K,owner:this.scope.ownerPubKey,skipCloseAccount:!K,createInfo:{payer:i.feePayer||this.scope.ownerPubKey,amount:0},associatedOnly:K?!1:o});v=R,G&&f.addInstruction(G)}l[x.mint.address]=v,S.push(v)}let I=await this.getClmmPoolKeys(w.id),C=[];for(let x=0;x<I.rewardInfos.length;x++)C.push({poolRewardVault:new Q(I.rewardInfos[x].vault),ownerRewardVault:S[x],rewardMint:new Q(I.rewardInfos[x].mint.address)});for(let x of t[g.id]){let K=(b=n==null?void 0:n[g.id])==null?void 0:b[x.nftMint.toBase58()];if(K){let v=ie(this.scope.ownerPubKey,K.lockNftMint,_i).publicKey,R=Y.getTickArrayStartIndexByTick(x.tickLower,I.config.tickSpacing),G=Y.getTickArrayStartIndexByTick(x.tickUpper,I.config.tickSpacing),{publicKey:U}=me(new Q(I.programId),K.poolId,R),{publicKey:D}=me(new Q(I.programId),K.poolId,G),{publicKey:Pe}=Vt(new Q(I.programId),K.poolId,x.tickLower,x.tickUpper),it=Ti(ii,K.lockNftMint).publicKey,Ie=ke.harvestLockPositionInstructionV2({programId:ii,auth:uo,lockPositionId:it,clmmProgram:wn,lockOwner:this.scope.ownerPubKey,lockNftMint:K.lockNftMint,lockNftAccount:v,positionNftAccount:K.nftAccount,positionId:K.positionId,poolId:K.poolId,protocolPosition:Pe,vaultA:new Q(I.vault.A),vaultB:new Q(I.vault.B),tickArrayLower:U,tickArrayUpper:D,userVaultA:B,userVaultB:h,mintA:new Q(I.mintA.address),mintB:new Q(I.mintB.address),rewardAccounts:C,exTickArrayBitmap:_e(wn,K.poolId).publicKey});f.addInstruction({instructions:[Ie],instructionTypes:[F.ClmmHarvestLockPosition],lookupTableAddress:I.lookupTableAccount?[I.lookupTableAccount]:[]})}else{let v=ke.decreaseLiquidityInstructions({poolInfo:w,poolKeys:I,ownerPosition:x,ownerInfo:{wallet:this.scope.ownerPubKey,tokenAccountA:B,tokenAccountB:h,rewardAccounts:S},liquidity:new pt(0),amountMinA:new pt(0),amountMinB:new pt(0),nft2022:(y=p[x.nftMint.toBase58()])==null?void 0:y.equals(Xn)});f.addInstruction(v)}}}return c===0?f.sizeCheckBuildV0({computeBudgetConfig:u}):f.sizeCheckBuild({computeBudgetConfig:u})}async getWhiteListMint({programId:e}){let t=await this.scope.connection.getAccountInfo(hi(e).publicKey);return t?wu.decode(t.data).whitelistMints.filter(i=>!i.equals(Q.default)):[]}async getOwnerPositionInfo({programId:e}){await this.scope.account.fetchWalletTokenAccounts();let n=this.scope.account.tokenAccountRawInfos.filter(s=>s.accountInfo.amount.eq(new pt(1))).map(s=>st(new Q(e),s.accountInfo.mint).publicKey),i=await this.scope.connection.getMultipleAccountsInfo(n),o=[];return i.forEach(s=>{if(!s)return;let a=Si.decode(s.data);o.push(a)}),o}async getRpcClmmPoolInfo({poolId:e}){return(await this.getRpcClmmPoolInfos({poolIds:[e]}))[String(e)]}async getRpcClmmPoolInfos({poolIds:e,config:t}){let n=await qe(this.scope.connection,e.map(o=>({pubkey:new Q(o)})),t),i={};for(let o=0;o<e.length;o++){let s=n[o];if(s===null||!s.accountInfo)throw Error("fetch pool info error: "+String(e[o]));let a=Tn.decode(s.accountInfo.data),c=ne.sqrtPriceX64ToPrice(a.sqrtPriceX64,a.mintDecimalsA,a.mintDecimalsB).toNumber();i[String(e[o])]=W(O({},a),{currentPrice:c,programId:s.accountInfo.owner})}return i}async getComputeClmmPoolInfos({clmmPoolsRpcInfo:e,mintInfos:t}){let n=new Set(Object.keys(e).map(c=>e[c].ammConfig.toBase58())),i=await qe(this.scope.connection,Array.from(n).map(c=>({pubkey:new Q(c)}))),o={};i.forEach(c=>{!c.accountInfo||(o[c.pubkey.toBase58()]=yu.decode(c.accountInfo.data))});let s=await Te.fetchComputeMultipleClmmInfo({connection:this.scope.connection,rpcDataMap:e,poolList:Object.keys(e).map(c=>{var m,d,p,f;let[u,l]=[e[c].mintA.toBase58(),e[c].mintB.toBase58()];return{id:c,programId:e[c].programId.toBase58(),mintA:tt({address:u,decimals:e[c].mintDecimalsA,programId:t[u].programId.toBase58()||_i.toBase58(),extensions:{feeConfig:(m=t[u])!=null&&m.feeConfig?dn((d=t[u])==null?void 0:d.feeConfig):void 0}}),mintB:tt({address:l,decimals:e[c].mintDecimalsB,programId:t[l].programId.toBase58()||_i.toBase58(),extensions:{feeConfig:(p=t[l])!=null&&p.feeConfig?dn((f=t[l])==null?void 0:f.feeConfig):void 0}}),price:e[c].currentPrice,config:W(O({},o[e[c].ammConfig.toBase58()]),{id:e[c].ammConfig.toBase58(),fundFeeRate:0,description:"",defaultRange:0,defaultRangePoint:[]})}})}),a=await Te.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 Nn({connection:this.scope.connection,mints:Array.from(n).map(m=>new Q(m))}),{computeClmmPoolInfo:o,computePoolTickData:s}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:{[e]:t},mintInfos:i}),a=await qe(this.scope.connection,[{pubkey:t.vaultA},{pubkey:t.vaultB}]),c=fu(o[e]);if(!a[0].accountInfo||!a[1].accountInfo)throw new Error("pool vault data not found");c.mintAmountA=Number(vu.decode(a[0].accountInfo.data).amount.toString()),c.mintAmountB=Number(vu.decode((l=a[1].accountInfo)==null?void 0:l.data).amount.toString());let u=W(O({},o[e]),{exBitmapAccount:o[e].exBitmapAccount.toBase58(),observationId:o[e].observationId.toBase58(),id:e,programId:t.programId.toBase58(),openTime:t.startTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},config:c.config,rewardInfos:o[e].rewardInfos.filter(m=>!m.tokenVault.equals(Q.default)).map(m=>({mint:tt({address:m.tokenMint.toBase58(),programId:_i.toBase58(),decimals:10}),vault:m.tokenVault.toBase58()}))});return{poolInfo:c,poolKeys:u,computePoolInfo:o[e],tickData:s}}};import{PublicKey as z}from"@solana/web3.js";import{AccountLayout as Dd,NATIVE_MINT as Ho,TOKEN_PROGRAM_ID as Et}from"@solana/spl-token";import As from"bn.js";import Xo from"decimal.js-light";import Vi from"bn.js";function qo(r,e){if(e.isZero())throw Error("divisor is zero");return r.mod(e)}function Sd(r,e){if(e.isZero())throw Error("rhs is zero");let t=r.div(e);if(t.isZero())throw Error("quotient is zero");let n=qo(r,e);return n.gt(zn)&&(t=t.add(new Vi(1)),e=r.div(t),n=qo(r,t),n.gt(zn)&&(e=e.add(new Vi(1)))),[t,e]}var zn=new Vi(0),Uo=class{static swapWithoutFees(e,t,n){let i=t.mul(n),o=t.add(e),[s,a]=Sd(i,o),c=a.sub(t),u=n.sub(s);if(u.isZero())throw Error("destinationAmountSwapped is zero");return{sourceAmountSwapped:c,destinationAmountSwapped:u}}static lpTokensToTradingTokens(e,t,n,i,o){let s=e.mul(n).div(t),a=e.mul(i).div(t);if(o===0)return{tokenAmount0:s,tokenAmount1:a};if(o===1)return qo(e.mul(n),t).gt(zn)&&s.gt(zn)&&(s=s.add(new Vi(1))),qo(e.mul(i),t).gt(zn)&&a.gt(zn)&&(a=a.add(new Vi(1))),{tokenAmount0:s,tokenAmount1:a};throw Error("roundDirection value error")}};import Eu from"bn.js";var ws=new Eu(1e6);function Kd(r,e,t){return r.mul(e).add(t).sub(new Eu(1)).div(t)}function Vu(r,e,t){return r.mul(e).div(t)}var Go=class{static tradingFee(e,t){return Kd(e,t,ws)}static protocolFee(e,t){return Vu(e,t,ws)}static fundFee(e,t){return Vu(e,t,ws)}};var zo=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 o=Go.tradingFee(e,i),s=e.sub(o),{sourceAmountSwapped:a,destinationAmountSwapped:c}=Uo.swapWithoutFees(s,t,n),u=a.add(o);return{newSwapSourceAmount:t.add(u),newSwapDestinationAmount:n.sub(c),sourceAmountSwapped:u,destinationAmountSwapped:c,tradeFee:o}}static swapBaseOut({poolMintA:e,poolMintB:t,tradeFeeRate:n,baseReserve:i,quoteReserve:o,outputMint:s,outputAmount:a}){let[c,u,l,m,d]=t.address===s.toString()?[i,o,e.decimals,t.decimals,e.address]:[o,i,t.decimals,e.decimals,t.address],p=new Xo(u.toString()).div(10**m).div(new Xo(c.toString()).div(10**l)),f=a.gte(u)?u.sub(new As(1)):a,b=u.sub(f),y=an(c.mul(f),b),g=an(y.mul(new As(1e6)),new As(1e6).sub(n)),w=g.sub(y),k=new Xo(f.toString()).div(10**m).div(new Xo(g.toString()).div(10**l)),P=p.isZero()?0:k.sub(p).div(p).abs().toNumber();return{amountRealOut:f,amountIn:g,amountInWithoutFee:y,tradeFee:w,priceImpact:P}}};import ve from"bn.js";import{PublicKey as Fi,TransactionInstruction as Cn,Keypair as vd,SystemProgram as Vd}from"@solana/web3.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Wu,TOKEN_2022_PROGRAM_ID as Ps,TOKEN_PROGRAM_ID as fn}from"@solana/spl-token";var Cd=Buffer.from("vault_and_lp_mint_auth_seed","utf8"),nB=Buffer.from("amm_config","utf8"),Rd=Buffer.from("pool","utf8"),Ld=Buffer.from("pool_lp_mint","utf8"),Od=Buffer.from("pool_vault","utf8"),Md=Buffer.from("observation","utf8");function Qn(r){return le([Cd],r)}function ks(r,e,t,n){return le([Rd,e.toBuffer(),t.toBuffer(),n.toBuffer()],r)}function Nd(r,e){return le([Ld,e.toBuffer()],r)}function Fu(r,e,t){return le([Od,e.toBuffer(),t.toBuffer()],r)}function Ei(r,e){return le([Md,e.toBuffer()],r)}function Du({poolId:r,programId:e,configId:t,mintA:n,mintB:i}){let o=Qn(e).publicKey,s=r||ks(e,t,n,i).publicKey,a=Nd(e,s).publicKey,c=Fu(e,s,n).publicKey,u=Fu(e,s,i).publicKey,l=Ei(e,s).publicKey;return{poolId:s,configId:t,authority:o,lpMint:a,vaultA:c,vaultB:u,observationId:l}}var _d=Buffer.from("locked_liquidity","utf8");function Qo(r,e){return le([_d,e.toBuffer()],r)}var Ed=ce("Raydium_cpmm"),Rn={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 qu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b,y,g,w,k){let P=E([A("amountMaxA"),A("amountMaxB"),A("openTime")]),B=ks(r,t,o,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:o,isSigner:!1,isWritable:!1},{pubkey:s,isSigner:!1,isWritable:!1},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:fn,isSigner:!1,isWritable:!1},{pubkey:f,isSigner:!1,isWritable:!1},{pubkey:b,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:wr,isSigner:!1,isWritable:!1},{pubkey:ot,isSigner:!1,isWritable:!1}],S=Buffer.alloc(P.span);return P.encode({amountMaxA:g,amountMaxB:w,openTime:k},S),new Cn({keys:h,programId:r,data:Buffer.from([...Rn.initialize,...S])})}function Uu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMaxA"),A("amountMaxB")]),y=[{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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0}],g=Buffer.alloc(b.span);return Ed.debug("cpmm deposit data",{lpAmount:d.toString(),amountMaxA:p.toString(),amountMaxB:f.toString()}),b.encode({lpAmount:d,amountMaxA:p,amountMaxB:f},g),new Cn({keys:y,programId:r,data:Buffer.from([...Rn.deposit,...g])})}function Gu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){let b=E([A("lpAmount"),A("amountMinA"),A("amountMinB")]),y=[{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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:u,isSigner:!1,isWritable:!1},{pubkey:l,isSigner:!1,isWritable:!1},{pubkey:m,isSigner:!1,isWritable:!0},{pubkey:sn,isSigner:!1,isWritable:!1}],g=Buffer.alloc(b.span);return b.encode({lpAmount:d,amountMinA:p,amountMinB:f},g),new Cn({keys:y,programId:r,data:Buffer.from([...Rn.withdraw,...g])})}function Yo(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountIn"),A("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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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(y.span);return y.encode({amountIn:f,amounOutMin:b},w),new Cn({keys:g,programId:r,data:Buffer.from([...Rn.swapBaseInput,...w])})}function Xu(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f,b){let y=E([A("amountInMax"),A("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:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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(y.span);return y.encode({amountInMax:f,amountOut:b},w),new Cn({keys:g,programId:r,data:Buffer.from([...Rn.swapBaseOutput,...w])})}async function zu(r){var b;let{ownerInfo:e,poolInfo:t,poolKeys:n,getEphemeralSigners:i}=r,o=[],[s,a]=[new Fi(t.id),new Fi(t.lpMint.address)],c;if(i)c=new Fi((await i(1))[0]);else{let y=vd.generate();o.push(y),c=y.publicKey}let{publicKey:u}=ie(e.feePayer,c,fn),{publicKey:l}=kn(c),{publicKey:m}=Qo(r.lockProgram,c),{publicKey:d}=ie(e.feePayer,a,fn),{publicKey:p}=ie(r.lockAuthProgram,a,fn),f=Fd({programId:r.lockProgram,auth:r.lockAuthProgram,payer:e.feePayer,nftOwner:e.feePayer,liquidityOwner:e.feePayer,nftMint:c,nftAccount:u,poolId:s,lockPda:m,mintLp:a,userLpVault:d,lockLpVault:p,poolVaultA:new Fi(n.vault.A),poolVaultB:new Fi(n.vault.B),metadataAccount:l,lpAmount:r.lpAmount,withMetadata:(b=r.withMetadata)!=null?b:!0});return{address:{nftMint:c,nftAccount:u,metadataAccount:l,lockPda:m,userLpVault:d,lockLpVault:p},instructions:[f],signers:o,instructionTypes:[F.CpmmLockLp],lookupTableAddress:[]}}function Fd({programId:r,auth:e,payer:t,liquidityOwner:n,nftOwner:i,nftMint:o,nftAccount:s,poolId:a,lockPda:c,mintLp:u,userLpVault:l,lockLpVault:m,poolVaultA:d,poolVaultB:p,metadataAccount:f,lpAmount:b,withMetadata:y}){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:o,isSigner:!0,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!1},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:f,isSigner:!1,isWritable:!0},{pubkey:ot,isSigner:!1,isWritable:!1},{pubkey:Vd.programId,isSigner:!1,isWritable:!1},{pubkey:fn,isSigner:!1,isWritable:!1},{pubkey:Wu,isSigner:!1,isWritable:!1},{pubkey:Gt,isSigner:!1,isWritable:!1}],w=E([A("lpAmount"),Re("withMetadata")]),k=Buffer.alloc(w.span);w.encode({lpAmount:b,withMetadata:y},k);let P=Buffer.from([...Rn.lockCpLiquidity,...k]);return new Cn({keys:g,programId:r,data:P})}function Qu({programId:r,nftOwner:e,auth:t,nftAccount:n,lockPda:i,poolId:o,mintLp:s,userVaultA:a,userVaultB:c,poolVaultA:u,poolVaultB:l,mintA:m,mintB:d,lockLpVault:p,lpFeeAmount:f,cpmmProgram:b,cpmmAuthProgram:y}){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:b!=null?b:co,isSigner:!1,isWritable:!1},{pubkey:y!=null?y:ga,isSigner:!1,isWritable:!1},{pubkey:o,isSigner:!1,isWritable:!0},{pubkey:s,isSigner:!1,isWritable:!0},{pubkey:a,isSigner:!1,isWritable:!0},{pubkey:c,isSigner:!1,isWritable:!0},{pubkey:u,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:fn,isSigner:!1,isWritable:!1},{pubkey:Ps,isSigner:!1,isWritable:!1},{pubkey:sn,isSigner:!1,isWritable:!1}],w=E([A("lpFeeAmount")]),k=Buffer.alloc(w.span);w.encode({lpFeeAmount:f},k);let P=Buffer.from([...Rn.collectCpFee,...k]);return new Cn({keys:g,programId:r,data:P})}var Yu=E([be(8),X("bump"),Re("disableCreatePool"),zt("index"),A("tradeFeeRate"),A("protocolFeeRate"),A("fundFeeRate"),A("createPoolFee"),L("protocolOwner"),L("fundOwner"),j(A(),16)]),jo=E([be(8),L("configId"),L("poolCreator"),L("vaultA"),L("vaultB"),L("mintLp"),L("mintA"),L("mintB"),L("mintProgramA"),L("mintProgramB"),L("observationId"),X("bump"),X("status"),X("lpDecimals"),X("mintDecimalA"),X("mintDecimalB"),A("lpAmount"),A("protocolFeesMintA"),A("protocolFeesMintB"),A("fundFeesMintA"),A("fundFeesMintB"),A("openTime"),j(A(),32)]);var Di=class extends Ce{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 qe(this.scope.connection,e.map(m=>({pubkey:new z(m)}))),i={},o=new Set,s=[];for(let m=0;m<e.length;m++){let d=n[m];if(d.accountInfo===null)throw Error("fetch pool info error: "+String(e[m]));let p=jo.decode(d.accountInfo.data);i[String(e[m])]=W(O({},p),{programId:d.accountInfo.owner}),o.add(String(p.configId)),s.push(p.vaultA,p.vaultB)}let a={};if(t){let m=[...o],d=await qe(this.scope.connection,m.map(p=>({pubkey:new z(p)})));for(let p=0;p<m.length;p++){let f=d[p].accountInfo;if(f===null)throw Error("fetch pool config error: "+m[p]);a[m[p]]=Yu.decode(f.data)}}let c={},u=await qe(this.scope.connection,s.map(m=>({pubkey:new z(m)})));for(let m=0;m<s.length;m++){let d=u[m].accountInfo;if(d===null)throw Error("fetch vault info error: "+s[m]);c[String(s[m])]=new ve(Dd.decode(d.data).amount.toString())}let l={};for(let[m,d]of Object.entries(i)){let p=c[d.vaultA.toString()].sub(d.protocolFeesMintA).sub(d.fundFeesMintA),f=c[d.vaultB.toString()].sub(d.protocolFeesMintB).sub(d.fundFeesMintB);l[m]=W(O({},d),{baseReserve:p,quoteReserve:f,vaultAAmount:c[d.vaultA.toString()],vaultBAmount:c[d.vaultB.toString()],configInfo:a[d.configId.toString()],poolPrice:new M(f.toString()).div(new M(10).pow(d.mintDecimalB)).div(new M(p.toString()).div(new M(10).pow(d.mintDecimalA)))})}return l}toComputePoolInfos({pools:e,mintInfos:t}){return Object.keys(e).reduce((n,i)=>{var c,u,l,m;let o=e[i],[s,a]=[o.mintA.toBase58(),o.mintB.toBase58()];return W(O({},n),{[i]:W(O({},o),{id:new z(i),configInfo:o.configInfo,version:7,authority:Qn(o.programId).publicKey,mintA:tt({address:s,decimals:o.mintDecimalA,programId:o.mintProgramA.toBase58(),extensions:{feeConfig:(c=t[s])!=null&&c.feeConfig?dn((u=t[s])==null?void 0:u.feeConfig):void 0}}),mintB:tt({address:a,decimals:o.mintDecimalB,programId:o.mintProgramB.toBase58(),extensions:{feeConfig:(l=t[a])!=null&&l.feeConfig?dn((m=t[a])==null?void 0:m.feeConfig):void 0}})})})},{})}async getPoolInfoFromRpc(e){let t=await this.getRpcPoolInfo(e,!0),n=await Nn({connection:this.scope.connection,mints:[t.mintA,t.mintB]}),i=tt({address:t.mintA.toBase58(),decimals:t.mintDecimalA,programId:t.mintProgramA.toBase58(),extensions:{feeConfig:n[t.mintA.toBase58()].feeConfig?dn(n[t.mintA.toBase58()].feeConfig):void 0}}),o=tt({address:t.mintB.toBase58(),decimals:t.mintDecimalB,programId:t.mintProgramB.toBase58(),extensions:{feeConfig:n[t.mintB.toBase58()].feeConfig?dn(n[t.mintB.toBase58()].feeConfig):void 0}}),s=tt({address:t.mintLp.toBase58(),decimals:t.lpDecimals,programId:Et.toBase58()}),a={id:t.configId.toBase58(),index:t.configInfo.index,protocolFeeRate:t.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:t.configInfo.tradeFeeRate.toNumber(),fundFeeRate:t.configInfo.fundFeeRate.toNumber(),createPoolFee:t.configInfo.createPoolFee.toString()},c={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:o,rewardDefaultInfos:[],rewardDefaultPoolInfos:"Ecosystem",price:t.poolPrice.toNumber(),mintAmountA:new M(t.vaultAAmount.toString()).div(10**i.decimals).toNumber(),mintAmountB:new M(t.vaultBAmount.toString()).div(10**o.decimals).toNumber(),feeRate:t.configInfo.tradeFeeRate.toNumber(),openTime:t.openTime.toString(),tvl:0,burnPercent:0,day:c,week:c,month:c,pooltype:[],farmUpcomingCount:0,farmOngoingCount:0,farmFinishedCount:0},poolKeys:{programId:t.programId.toBase58(),id:e,mintA:i,mintB:o,openTime:t.openTime.toString(),vault:{A:t.vaultA.toBase58(),B:t.vaultB.toBase58()},authority:Qn(t.programId).publicKey.toBase58(),mintLp:s,config:a,observationId:Ei(t.programId,new z(e)).publicKey.toBase58()},rpcData:t}}async createPool(d){var p=d,{poolId:e,programId:t,poolFeeAccount:n,startTime:i,ownerInfo:o,associatedOnly:s=!1,checkCreateATAOwner:a=!1,txVersion:c,feeConfig:u,computeBudgetConfig:l}=p,m=Ee(p,["poolId","programId","poolFeeAccount","startTime","ownerInfo","associatedOnly","checkCreateATAOwner","txVersion","feeConfig","computeBudgetConfig"]);var G,U,D;let f=o.feePayer||((G=this.scope.owner)==null?void 0:G.publicKey),b=new ve(new z(m.mintA.address).toBuffer()).lte(new ve(new z(m.mintB.address).toBuffer())),[y,g]=b?[m.mintA,m.mintB]:[m.mintB,m.mintA],[w,k]=b?[m.mintAAmount,m.mintBAmount]:[m.mintBAmount,m.mintAAmount],P=o.useSOLBalance&&y.address===Ho.toBase58(),B=o.useSOLBalance&&g.address===Ho.toBase58(),[h,S]=[new z(y.address),new z(g.address)],I=this.createTxBuilder(),{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({mint:h,tokenProgram:y.programId,owner:this.scope.ownerPubKey,createInfo:P?{payer:f,amount:w}:void 0,notUseTokenAccount:P,skipCloseAccount:!P,associatedOnly:P?!1:s,checkCreateATAOwner:a});I.addInstruction(x||{});let{account:K,instructionParams:v}=await this.scope.account.getOrCreateTokenAccount({mint:new z(g.address),tokenProgram:g.programId,owner:this.scope.ownerPubKey,createInfo:B?{payer:f,amount:k}:void 0,notUseTokenAccount:B,skipCloseAccount:!B,associatedOnly:B?!1:s,checkCreateATAOwner:a});if(I.addInstruction(v||{}),C===void 0||K===void 0)throw Error("you don't has some token account");let R=Du({poolId:e,programId:t,configId:new z(u.id),mintA:h,mintB:S});return I.addInstruction({instructions:[qu(t,this.scope.ownerPubKey,new z(u.id),R.authority,R.poolId,h,S,R.lpMint,C,K,ie(this.scope.ownerPubKey,R.lpMint).publicKey,R.vaultA,R.vaultB,n,new z((U=y.programId)!=null?U:Et),new z((D=g.programId)!=null?D:Et),R.observationId,w,k,i)],instructionTypes:[F.CpmmCreatePool]}),I.addCustomComputeBudget(l),I.versionBuild({txVersion:c,extInfo:{address:W(O({},R),{mintA:y,mintB:g,programId:t,poolFeeAccount:n,feeConfig:u})}})}async addLiquidity(e){let{poolInfo:t,poolKeys:n,inputAmount:i,baseIn:o,slippage:s,computeResult:a,computeBudgetConfig:c,config:u,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}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1},u),f=a?void 0:await this.getRpcPoolInfo(t.id),{liquidity:b,inputAmountFee:y,anotherAmount:g}=a||this.computePairAmount({poolInfo:W(O({},t),{lpAmount:new M(f.lpAmount.toString()).div(10**t.lpMint.decimals).toNumber()}),baseReserve:f.baseReserve,quoteReserve:f.quoteReserve,slippage:new ze(0),baseIn:o,epochInfo:await this.scope.fetchEpochInfo(),amount:new M(i.toString()).div(10**(o?t.mintA.decimals:t.mintB.decimals))}),w=g.amount,k=t.mintA.address===Ho.toString(),P=t.mintB.address===Ho.toString(),B=this.createTxBuilder(),[h,S]=[new z(t.mintA.address),new z(t.mintB.address)],{account:I,instructionParams:C}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),owner:this.scope.ownerPubKey,createInfo:k||(o?i:w).isZero()?{payer:this.scope.ownerPubKey,amount:o?i:w}:void 0,skipCloseAccount:!k,notUseTokenAccount:k,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(C||{});let{account:x,instructionParams:K}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),owner:this.scope.ownerPubKey,createInfo:P||(o?w:i).isZero()?{payer:this.scope.ownerPubKey,amount:o?w:i}:void 0,skipCloseAccount:!P,notUseTokenAccount:P,associatedOnly:!1,checkCreateATAOwner:p});B.addInstruction(K||{}),!I&&!x&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",m.tokenAccounts);let v=await m.getCreatedTokenAccount({mint:new z(t.lpMint.address)}),Pe=await m.handleTokenAccount({side:"out",amount:0,mint:new z(t.lpMint.address),tokenAccount:v,bypassAssociatedCheck:d,checkCreateATAOwner:p}),{tokenAccount:R}=Pe,G=Ee(Pe,["tokenAccount"]);B.addInstruction(G);let U=n!=null?n:await this.getCpmmPoolKeys(t.id),D=new ze(new ve(1)).sub(s);return B.addInstruction({instructions:[Uu(new z(t.programId),this.scope.ownerPubKey,new z(U.authority),new z(t.id),R,I,x,new z(U.vault.A),new z(U.vault.B),h,S,new z(t.lpMint.address),a?a==null?void 0:a.liquidity:D.mul(b).quotient,o?y.amount:w,o?w:y.amount)],instructionTypes:[F.CpmmAddLiquidity],lookupTableAddress:U.lookupTableAccount?[U.lookupTableAccount]:[]}),B.addCustomComputeBudget(c),B.versionBuild({txVersion:l})}async withdrawLiquidity(e){var R,G;let{poolInfo:t,poolKeys:n,lpAmount:i,slippage:o,computeBudgetConfig:s,txVersion:a}=e;this.scope.availability.addStandardPosition===!1&&this.logAndCreateError("add liquidity feature disabled in your region");let c=new ze(new ve(1)).sub(o),u=await this.getRpcPoolInfo(t.id),[l,m]=[c.mul(i.mul(u.baseReserve).div(u.lpAmount)).quotient,c.mul(i.mul(u.quoteReserve).div(u.lpAmount)).quotient],d=await this.scope.fetchEpochInfo(),[p,f]=[ge(l,t.mintA.extensions.feeConfig,d,!1),ge(m,t.mintB.extensions.feeConfig,d,!1)],{account:b}=this.scope,y=this.createTxBuilder(),[g,w]=[new z(t.mintA.address),new z(t.mintB.address)],k=g.equals(H),P=w.equals(H),B,h,{account:S,instructionParams:I}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:k,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!k,associatedOnly:!k,checkCreateATAOwner:!1});B=S,I&&y.addInstruction(I);let{account:C,instructionParams:x}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:P,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!P,associatedOnly:!P,checkCreateATAOwner:!1});h=C,x&&y.addInstruction(x),(!B||!h)&&this.logAndCreateError("cannot found target token accounts","tokenAccounts",b.tokenAccounts);let K=await b.getCreatedTokenAccount({mint:new z(t.lpMint.address)});K||this.logAndCreateError("cannot found lp token account","tokenAccounts",b.tokenAccounts);let v=n!=null?n:await this.getCpmmPoolKeys(t.id);return y.addInstruction({instructions:[Gu(new z(t.programId),this.scope.ownerPubKey,new z(v.authority),new z(t.id),K,B,h,new z(v.vault.A),new z(v.vault.B),g,w,new z(t.lpMint.address),i,l.sub((R=p.fee)!=null?R:new ve(0)),m.sub((G=f.fee)!=null?G:new ve(0)))],instructionTypes:[F.CpmmWithdrawLiquidity],lookupTableAddress:v.lookupTableAccount?[v.lookupTableAccount]:[]}),y.addCustomComputeBudget(s),y.versionBuild({txVersion:a})}async swap(e){var C,x,K,v,R,G;let{poolInfo:t,poolKeys:n,baseIn:i,fixedOut:o,inputAmount:s,swapResult:a,slippage:c=0,config:u,computeBudgetConfig:l,txVersion:m}=e,{bypassAssociatedCheck:d,checkCreateATAOwner:p,associatedOnly:f}=O({bypassAssociatedCheck:!1,checkCreateATAOwner:!1,associatedOnly:!0},u),b=this.createTxBuilder(),[y,g]=[new z(t.mintA.address),new z(t.mintB.address)];o?a.sourceAmountSwapped=a.sourceAmountSwapped.mul(new ve((1+c)*1e4)).div(new ve(1e4)):a.destinationAmountSwapped=a.destinationAmountSwapped.mul(new ve((1-c)*1e4)).div(new ve(1e4));let w=t.mintA.address===H.toBase58(),k=t.mintB.address===H.toBase58(),{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({mint:y,tokenProgram:new z((C=t.mintA.programId)!=null?C:Et),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:f,checkCreateATAOwner:p});B&&b.addInstruction(B);let{account:h,instructionParams:S}=await this.scope.account.getOrCreateTokenAccount({mint:g,tokenProgram:new z((x=t.mintB.programId)!=null?x:Et),owner:this.scope.ownerPubKey,createInfo:k||i?{payer:this.scope.ownerPubKey,amount:i?0:a.sourceAmountSwapped}:void 0,notUseTokenAccount:k,skipCloseAccount:!k,associatedOnly:k?!1:f,checkCreateATAOwner:p});S&&b.addInstruction(S),(!P||!h)&&this.logAndCreateError("user do not have token account",{mintA:t.mintA.symbol||t.mintA.address,mintB:t.mintB.symbol||t.mintB.address,mintATokenAcc:P,mintBTokenAcc:h,mintAUseSOLBalance:w,mintBUseSOLBalance:k,associatedOnly:f});let I=n!=null?n:await this.getCpmmPoolKeys(t.id);return b.addInstruction({instructions:[o?Xu(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),i?P:h,i?h:P,new z(I.vault[i?"A":"B"]),new z(I.vault[i?"B":"A"]),new z((R=t[i?"mintA":"mintB"].programId)!=null?R:Et),new z((G=t[i?"mintB":"mintA"].programId)!=null?G:Et),i?y:g,i?g:y,Ei(new z(t.programId),new z(t.id)).publicKey,a.sourceAmountSwapped,a.destinationAmountSwapped):Yo(new z(t.programId),this.scope.ownerPubKey,new z(I.authority),new z(I.config.id),new z(t.id),i?P:h,i?h:P,new z(I.vault[i?"A":"B"]),new z(I.vault[i?"B":"A"]),new z((K=t[i?"mintA":"mintB"].programId)!=null?K:Et),new z((v=t[i?"mintB":"mintA"].programId)!=null?v:Et),i?y:g,i?g:y,Ei(new z(t.programId),new z(t.id)).publicKey,s,a.destinationAmountSwapped)],instructionTypes:[o?F.CpmmSwapBaseOut:F.ClmmSwapBaseIn]}),b.addCustomComputeBudget(l),b.versionBuild({txVersion:m})}async lockLp(e){var u,l,m,d,p;let{poolInfo:t,lpAmount:n,computeBudgetConfig:i,txVersion:o}=e;n.isZero()&&this.logAndCreateError("lpAmount must greater than zero",{lpAmount:n.toString()});let s=this.createTxBuilder(),a=(u=e.poolKeys)!=null?u:await this.getCpmmPoolKeys(t.id),c=await zu({poolInfo:t,poolKeys:a,ownerInfo:{wallet:this.scope.ownerPubKey,feePayer:(l=e.feePayer)!=null?l:this.scope.ownerPubKey},lockProgram:(m=e.programId)!=null?m:lo,lockAuthProgram:(d=e.authProgram)!=null?d:mo,lpAmount:n,withMetadata:(p=e.withMetadata)!=null?p:!0,getEphemeralSigners:e.getEphemeralSigners});return s.addInstruction(c),s.addCustomComputeBudget(i),s.versionBuild({txVersion:o,extInfo:c.address})}async harvestLockLp(e){var x;let{poolInfo:t,lpFeeAmount:n,nftMint:i,programId:o=lo,authProgram:s=mo,cpmmProgram:a,computeBudgetConfig:c,txVersion:u}=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 z(t.mintA.address),new z(t.mintB.address)],f=d.equals(H),b=p.equals(H),y,g,{account:w,instructionParams:k}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintA.programId,mint:new z(t.mintA.address),notUseTokenAccount:f,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,associatedOnly:!f,checkCreateATAOwner:!1});y=w,k&&m.addInstruction(k);let{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:t.mintB.programId,mint:new z(t.mintB.address),notUseTokenAccount:b,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!b,associatedOnly:!b,checkCreateATAOwner:!1});g=P,B&&m.addInstruction(B),(!y||!g)&&this.logAndCreateError("cannot found target token accounts",{tokenAccountA:y,tokenAccountB:g});let h=(x=e.poolKeys)!=null?x:await this.getCpmmPoolKeys(t.id),{publicKey:S}=ie(l,i,Et),{publicKey:I}=Qo(o,i),{publicKey:C}=ie(s,new z(t.lpMint.address),Et);return m.addInstruction({instructions:[Qu({programId:o!=null?o:lo,nftOwner:this.scope.ownerPubKey,auth:s!=null?s:mo,nftMint:i,nftAccount:S,lockPda:I,poolId:new z(t.id),mintLp:new z(h.mintLp.address),userVaultA:y,userVaultB:g,poolVaultA:new z(h.vault.A),poolVaultB:new z(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:[F.CpmmCollectLockFee]}),m.addCustomComputeBudget(c),m.versionBuild({txVersion:u})}computeSwapAmount({pool:e,amountIn:t,outputMint:n,slippage:i}){let o=n.toString()===e.mintB.address,s=zo.swap(t,o?e.baseReserve:e.quoteReserve,o?e.quoteReserve:e.baseReserve,e.configInfo.tradeFeeRate),a=new M(s.destinationAmountSwapped.toString()).div(s.sourceAmountSwapped.toString()),c=s.destinationAmountSwapped.mul(new ve((1-i)*1e4)).div(new ve(1e4));return{allTrade:s.sourceAmountSwapped.eq(t),amountIn:t,amountOut:s.destinationAmountSwapped,minAmountOut:c,executionPrice:a,fee:s.tradeFee,priceImpact:e.poolPrice.sub(a).div(e.poolPrice)}}computePairAmount({poolInfo:e,baseReserve:t,quoteReserve:n,amount:i,slippage:o,epochInfo:s,baseIn:a}){var P,B,h,S,I,C,x,K,v;let c=1-Number(o.toSignificant())/100,u=new ve(new M(i).mul(10**e[a?"mintA":"mintB"].decimals).mul(c).toFixed(0)),l=ge(u,e[a?"mintA":"mintB"].extensions.feeConfig,s,!1),m=u.sub((P=l.fee)!=null?P:new ve(0)),d=new ve(new M(e.lpAmount).mul(10**e.lpMint.decimals).toFixed(0,M.ROUND_DOWN));this.logDebug("baseReserve:",t.toString(),"quoteReserve:",n.toString()),this.logDebug("tokenIn:",a?e.mintA.symbol:e.mintB.symbol,"amountIn:",u.toString(),"amountInFee:",(h=(B=l.fee)==null?void 0:B.toString())!=null?h:0,"anotherToken:",a?e.mintB.symbol:e.mintA.symbol,"slippage:",`${o.toSignificant()}%`);let p=a?"base":"quote";this.logDebug("input side:",p);let f=m.mul(d).div(p==="base"?t:n),b={amount:dt,fee:void 0,expirationTime:void 0};if(!m.isZero()){let R=Wd(f,t,n,d);this.logDebug("lpAmountData:",{amountA:R.amountA.toString(),amountB:R.amountB.toString()}),b=ge(R[a?"amountB":"amountA"],e[a?"mintB":"mintA"].extensions.feeConfig,s,!0)}let y=new ze(new ve(1)).add(o),g=new ze(new ve(1)).sub(o),w=ge(y.mul(b.amount.sub((S=b.fee)!=null?S:new ve(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0),k=ge(g.mul(b.amount.sub((I=b.fee)!=null?I:new ve(0))).quotient,e[a?"mintB":"mintA"].extensions.feeConfig,s,!0);return this.logDebug("anotherAmount:",b.amount.toString(),"anotherAmountFee:",(x=(C=b.fee)==null?void 0:C.toString())!=null?x:0,"maxAnotherAmount:",w.amount.toString(),"maxAnotherAmountFee:",(v=(K=w.fee)==null?void 0:K.toString())!=null?v:0),{inputAmountFee:l,anotherAmount:b,maxAnotherAmount:w,minAnotherAmount:k,liquidity:f}}};function Wd(r,e,t,n){let i=r.mul(e).div(n);!i.isZero()&&!r.mul(e).mod(n).isZero()&&(i=i.add(new ve(1)));let o=r.mul(t).div(n);return!o.isZero()&&!r.mul(t).mod(n).isZero()&&(o=o.add(new ve(1))),{amountA:i,amountB:o}}import{PublicKey as On}from"@solana/web3.js";import{createTransferInstruction as ec,TOKEN_PROGRAM_ID as Ve,TOKEN_2022_PROGRAM_ID as Jo}from"@solana/spl-token";import er from"bn.js";var ju={[Ir.toBase58()]:3},Hu={3:Ir};var hs=E([be(5),be(8),L("ownAddress"),A("vaultSignerNonce"),L("baseMint"),L("quoteMint"),L("baseVault"),A("baseDepositsTotal"),A("baseFeesAccrued"),L("quoteVault"),A("quoteDepositsTotal"),A("quoteFeesAccrued"),A("quoteDustThreshold"),L("requestQueue"),L("eventQueue"),L("bids"),L("asks"),A("baseLotSize"),A("quoteLotSize"),A("feeRateBps"),A("referrerRebatesAccrued"),be(7)]),Zu={3:hs};import{PublicKey as $u}from"@solana/web3.js";var Zo=ce("Serum"),$o=class{static getProgramId(e){let t=Hu[e];return t||Zo.logWithError("invalid version","version",e),t}static getVersion(e){let t=e.toBase58(),n=ju[t];return n||Zo.logWithError("invalid program id","programId",t),n}static getStateLayout(e){let t=Zu[e];return t||Zo.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,o;for(;i<100;){try{let s=n.concat(Buffer.from([i]),Buffer.alloc(7));o=$u.createProgramAddressSync(s,e)}catch(s){if(s instanceof TypeError)throw s;i++;continue}return{publicKey:o,nonce:i}}return Zo.logWithError("unable to find a viable program address nonce","params",{programId:e,marketId:t}),{publicKey:$u.default,nonce:i}}};import{PublicKey as te,SystemProgram as qd,TransactionInstruction as Ud}from"@solana/web3.js";import Ln from"bn.js";import{ASSOCIATED_TOKEN_PROGRAM_ID as Gd,TOKEN_2022_PROGRAM_ID as Xd,TOKEN_PROGRAM_ID as zd}from"@solana/spl-token";function Qd(r,e,t,n,i,o,s,a,c,u,l,m,d,p,f){var h;let b=[],y=[T({pubkey:zd,isWritable:!1}),T({pubkey:Xd,isWritable:!1}),T({pubkey:Gd,isWritable:!1}),T({pubkey:qd.programId,isWritable:!1}),T({pubkey:e,isSigner:!0})];y.push(T({pubkey:t})),y.push(T({pubkey:i}));let g=[c,u],w=[l,m],k=[o,s,a];for(let S=0;S<g.length;S++){let I=g[S],C=k[S]===I.mintA.address;if(y.push(T({pubkey:new te(I.programId),isWritable:!1})),S===g.length-1?y.push(T({pubkey:i})):y.push(T({pubkey:n})),y.push(T({pubkey:new te(k[S])})),y.push(T({pubkey:new te(k[S+1])})),I.version===6){let x=w[S];y.push(T({pubkey:new te(x.config.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),y.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),y.push(T({pubkey:new te(I.observationId)})),y.push(T({pubkey:sn})),y.push(T({pubkey:_e(new te(I.programId),new te(I.id)).publicKey})),b.push(Yd(I.sqrtPriceX64.toString(),C));for(let K of(h=f[S])!=null?h:[])y.push(T({pubkey:new te(K)}))}else if(I.version===5){let x=w[S];y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.authority),isWritable:!1})),y.push(T({pubkey:new te(x.marketProgramId)})),y.push(T({pubkey:new te(x.marketAuthority)})),y.push(T({pubkey:ba,isWritable:!1})),y.push(T({pubkey:new te(x.openOrders)})),y.push(T({pubkey:new te(x.vault.A)})),y.push(T({pubkey:new te(x.vault.B)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.marketId)})),y.push(T({pubkey:new te(x.marketBids)})),y.push(T({pubkey:new te(x.marketAsks)})),y.push(T({pubkey:new te(x.marketEventQueue)})),y.push(T({pubkey:new te(x.marketBaseVault)})),y.push(T({pubkey:new te(x.marketQuoteVault)}))}else if(I.version===4){let x=w[S],K=I.status!==1;y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(x.authority),isWritable:!1})),y.push(T({pubkey:new te(K?x.id:x.marketProgramId)})),y.push(T({pubkey:new te(K?x.id:x.marketAuthority)})),y.push(T({pubkey:new te(K?x.id:x.openOrders)})),y.push(T({pubkey:new te(x.vault.A)})),y.push(T({pubkey:new te(x.vault.B)})),y.push(T({pubkey:new te(K?x.id:x.marketId)})),y.push(T({pubkey:new te(K?x.id:x.marketBids)})),y.push(T({pubkey:new te(K?x.id:x.marketAsks)})),y.push(T({pubkey:new te(K?x.id:x.marketEventQueue)})),y.push(T({pubkey:new te(K?x.id:x.marketBaseVault)})),y.push(T({pubkey:new te(K?x.id:x.marketQuoteVault)}))}else if(I.version===7){let x=w[S];y.push(T({pubkey:new te(x.authority)})),y.push(T({pubkey:new te(x.config.id)})),y.push(T({pubkey:new te(x.id)})),y.push(T({pubkey:new te(C?x.vault.A:x.vault.B)})),y.push(T({pubkey:new te(C?x.vault.B:x.vault.A)})),y.push(T({pubkey:new te(I.observationId)}))}else throw Error("pool type error")}let P=E([X("insId"),A("amountIn"),A("amountOut"),j(J(),b.length,"clmmPriceLimit")]),B=Buffer.alloc(P.span);return P.encode({insId:0,amountIn:d,amountOut:p,clmmPriceLimit:b},B),new Ud({keys:y,programId:r,data:B})}function Yd(r,e){if(r)if(e){let t=new Ln(r).div(new Ln(25));return t.gt(Co)?t:Co}else{let t=new Ln(r).mul(new Ln(25));return t.lt(Ro)?t:Ro}else return e?Co:Ro}function Ju({routeProgram:r,ownerInfo:e,inputMint:t,swapInfo:n}){var i,o,s,a,c,u,l;if(n.routeType==="amm")if(n.poolInfo[0].version===6){let m=n.poolKey[0],d=He(m),p=t.equals(d.mintA.address)?St.add(wt):Kt.sub(wt);return ke.makeSwapBaseInInstructions({poolInfo:m,poolKeys:m,observationId:n.poolInfo[0].observationId,ownerInfo:{wallet:e.wallet,tokenAccountA:d.mintA.address.equals(t)?e.sourceToken:e.destinationToken,tokenAccountB:d.mintA.address.equals(t)?e.destinationToken:e.sourceToken},inputMint:t,amountIn:n.amountIn.amount.raw,amountOutMin:n.minAmountOut.amount.raw.sub((o=(i=n.minAmountOut.fee)==null?void 0:i.raw)!=null?o:new Ln(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:[Yo(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?F.CpmmSwapBaseIn:F.CpmmSwapBaseOut],address:{}}}else{let m=n.poolKey[0];return{signers:[],instructions:[Vo({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((c=(a=n.minAmountOut.fee)==null?void 0:a.raw)!=null?c:new Ln(0)),fixedSide:"in"})],lookupTableAddress:m.lookupTableAccount?[m.lookupTableAccount]:[],instructionTypes:[n.poolInfo[0].pooltype.includes("StablePool")?F.AmmV5SwapBaseIn:F.AmmV4SwapBaseIn],address:{}}}else if(n.routeType==="route"){let m=n.poolInfo[0],d=n.poolInfo[1],p=n.poolKey[0],f=n.poolKey[1];if(e.routeToken===void 0)throw Error("owner route token account check error");return{signers:[],instructions:[Qd(r,e.wallet,e.sourceToken,e.routeToken,e.destinationToken,t.toString(),n.middleToken.mint.toString(),n.outputMint.toString(),m,d,p,f,n.amountIn.amount.raw,n.minAmountOut.amount.raw.sub((l=(u=n.minAmountOut.fee)==null?void 0:u.raw)!=null?l:new Ln(0)),n.remainingAccounts)],instructionTypes:[F.RouteSwap],lookupTableAddress:[p.lookupTableAccount,f.lookupTableAccount].filter(b=>b!==void 0),address:{}}}else throw Error("route type error")}var Jt=new er(0),Wi=class extends Ce{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(H));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,o=await this.getWSolAccounts(),s=this.createTxBuilder();s.addCustomComputeBudget(e.computeBudgetConfig);let a=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:0});s.addInstruction(a);let c=Z(t);for(let u=0;u<o.length;u++)c.gte(o[u].amount)?(s.addInstruction({instructions:[Qt({tokenAccount:o[u].publicKey,payer:this.scope.ownerPubKey,owner:this.scope.ownerPubKey,programId:n})]}),c.sub(o[u].amount)):s.addInstruction({instructions:[Qt({tokenAccount:o[u].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(),o=await Yt({connection:this.scope.connection,owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,amount:e,skipCloseAccount:!0});return i.addInstruction(o),i.versionBuild({txVersion:n!=null?n:1})}async swap({swapInfo:e,swapPoolKeys:t,ownerInfo:n,computeBudgetConfig:i,routeProgram:o,txVersion:s}){let a=this.createTxBuilder(),c=e.amountIn,u=e.amountOut,l=c.amount.token.mint.equals(H),m=u.amount.token.mint.equals(H),d=c.amount.token.mint,p=u.amount.token.mint,{account:f,instructionParams:b}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.amount.token.isToken2022?Jo:Ve,mint:d,notUseTokenAccount:l,owner:this.scope.ownerPubKey,skipCloseAccount:!l,createInfo:l?{payer:this.scope.ownerPubKey,amount:c.amount.raw}:void 0,associatedOnly:l?!1:n.associatedOnly,checkCreateATAOwner:n.checkCreateATAOwner});if(b&&a.addInstruction(b),f===void 0)throw Error("input account check error");let y;if(e.routeType==="route"&&!m)y=this.scope.account.getAssociatedTokenAccount(p,u.amount.token.isToken2022?Jo:Ve);else{let{account:P,instructionParams:B}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:u.amount.token.isToken2022?Jo:Ve,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});y=P,B&&a.addInstruction(B)}m&&a.addInstruction({endInstructions:[Qt({owner:this.scope.ownerPubKey,payer:this.scope.ownerPubKey,tokenAccount:y,programId:Ve})],endInstructionTypes:[F.CloseAccount]});let g;if(e.routeType==="route"){let P=e.middleToken;g=this.scope.account.getAssociatedTokenAccount(P.mint,P.isToken2022?Jo:Ve)}let w=t||await this.computePoolToPoolKeys({pools:e.poolInfoList}),k=Ju({routeProgram:o,inputMint:d,swapInfo:W(O({},e),{poolInfo:[...e.poolInfoList],poolKey:w,outputMint:p}),ownerInfo:{wallet:this.scope.ownerPubKey,sourceToken:f,routeToken:g,destinationToken:y}});if(e.feeConfig!==void 0){let P=this.createTxBuilder();P.addInstruction({instructions:[ec(f,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]}),P.addInstruction(k);let{transactions:B}=s===0?await P.sizeCheckBuildV0():await P.sizeCheckBuild();B.length<2&&a.addInstruction({instructions:[ec(f,e.feeConfig.feeAccount,this.scope.ownerPubKey,e.feeConfig.feeAmount.toNumber())],instructionTypes:[F.TransferAmount]})}return a.addInstruction(k),s===0?a.sizeCheckBuildV0({computeBudgetConfig:i,address:k.address}):a.sizeCheckBuild({computeBudgetConfig:i,address:k.address})}async fetchRoutePoolBasicInfo(e){let{amm:t=ao,clmm:n=wn,cpmm:i=co}=e||{},o=await this.scope.connection.getProgramAccounts(t,{dataSlice:{offset:vo.offsetOf("baseMint"),length:64}}),s=E([L("baseMint"),L("quoteMint")]),a=o.map(p=>({id:p.pubkey,version:4,mintA:s.decode(p.account.data).baseMint,mintB:s.decode(p.account.data).quoteMint})),c=E([L("mintA"),L("mintB")]),l=(await this.scope.connection.getProgramAccounts(n,{filters:[{dataSize:Tn.span}],dataSlice:{offset:Tn.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:6,mintA:f.mintA,mintB:f.mintB}}),d=(await this.scope.connection.getProgramAccounts(i,{dataSlice:{offset:jo.offsetOf("mintA"),length:64}})).map(p=>{let f=c.decode(p.account.data);return{id:p.pubkey,version:7,mintA:f.mintA,mintB:f.mintB}});return{clmmPools:l,ammPools:a,cpmmPools:d}}getAllRoute({inputMint:e,outputMint:t,clmmPools:n,ammPools:i,cpmmPools:o}){e=e.toString()===On.default.toString()?H:e,t=t.toString()===On.default.toString()?H:t;let s={},a={},c={},u=[],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))&&(u.push(d),a[d.id.toString()]=d),d.mintA.equals(e)){let p=d.mintB.toString();l[p]===void 0&&(l[p]={mintProgram:Ve,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:Ve,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:Ve,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:Ve,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))&&(u.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:Ve,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:Ve,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:Ve,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:Ve,in:[],out:[],mDecimals:0}),l[d.mintA.toBase58()].out.push(d));for(let d of o)(d.mintA.equals(e)&&d.mintB.equals(t)||d.mintA.equals(t)&&d.mintB.equals(e))&&(u.push(d),c[d.id.toBase58()]=d),d.mintA.equals(e)&&(l[d.mintB.toBase58()]===void 0&&(l[d.mintB.toBase58()]={mintProgram:Ve,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:Ve,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:Ve,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:Ve,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 f of p.in)for(let b of p.out)f.version===6&&a[f.id.toString()]===void 0?a[f.id.toString()]=f:f.version===7&&c[f.id.toString()]===void 0?c[f.id.toString()]=f:(f.version===4||f.version===5)&&s[f.id.toString()]===void 0&&(s[f.id.toString()]=f),b.version===6&&a[b.id.toString()]===void 0?a[b.id.toString()]=b:b.version===7&&c[b.id.toString()]===void 0?c[b.id.toString()]=b:(b.version===4||b.version===5)&&s[b.id.toString()]===void 0&&(s[b.id.toString()]=b)}return{directPath:u,addLiquidityPools:m,routePathDict:l,needSimulate:Object.values(s),needTickArray:Object.values(a),cpmmPoolList:Object.values(c)}}async fetchSwapRoutesData({routes:e,inputMint:t,outputMint:n}){let i=new Set([...e.needTickArray.map(b=>[b.mintA.toBase58(),b.mintB.toBase58()]).flat(),t.toString(),n.toString()]);console.log("fetching amm pools info, total: ",e.needSimulate.length);let o=await this.scope.liquidity.getRpcPoolInfos(e.needSimulate.map(b=>b.id)),s=Fo(o),a={};Object.values(s).forEach(b=>{i.delete(b.mintA.address),a[b.mintA.address]={address:new On(b.mintA.address),programId:Ve,mintAuthority:null,supply:BigInt(0),decimals:b.mintA.decimals,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0},i.delete(b.mintB.address),a[b.mintB.address]={address:new On(b.mintB.address),programId:Ve,mintAuthority:null,supply:BigInt(0),decimals:b.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 c=await this.scope.cpmm.getRpcPoolInfos(e.cpmmPoolList.map(b=>b.id.toBase58()),!0);Object.values(c).forEach(b=>{let[y,g]=[b.mintA.toBase58(),b.mintB.toBase58()];b.mintProgramA.equals(Ve)?(i.delete(y),a[y]={address:b.mintA,programId:b.mintProgramA,mintAuthority:null,supply:BigInt(0),decimals:b.mintDecimalA,isInitialized:!0,freezeAuthority:null,tlvData:Buffer.from("0","hex"),feeConfig:void 0}):i.add(y),b.mintProgramB.equals(Ve)?(i.delete(g),a[g]={address:b.mintB,programId:b.mintProgramB,mintAuthority:null,supply:BigInt(0),decimals:b.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 u=await Nn({connection:this.scope.connection,mints:Array.from(i).map(b=>new On(b))});a=O(O({},a),u);let l=this.scope.cpmm.toComputePoolInfos({pools:c,mintInfos:a});console.log("fetching clmm pools info, total:",e.needTickArray.length);let m=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:e.needTickArray.map(b=>b.id)}),{computeClmmPoolInfo:d,computePoolTickData:p}=await this.scope.clmm.getComputeClmmPoolInfos({clmmPoolsRpcInfo:m,mintInfos:a}),f=Object.keys(e.routePathDict).reduce((b,y)=>W(O({},b),{[y]:W(O({},e.routePathDict[y]),{mintProgram:a[y].programId,mDecimals:a[y].decimals,in:e.routePathDict[y].in.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()]),out:e.routePathDict[y].out.map(g=>s[g.id.toBase58()]||d[g.id.toBase58()]||l[g.id.toBase58()])})}),{});return{mintInfos:a,ammPoolsRpcInfo:o,ammSimulateCache:s,clmmPoolsRpcInfo:m,computeClmmPoolInfo:d,computePoolTickData:p,computeCpmmData:l,routePathDict:f}}getAllRouteComputeAmountOut({inputTokenAmount:e,outputToken:t,directPath:n,routePathDict:i,simulateCache:o,tickCache:s,slippage:a,chainTime:c,epochInfo:u,feeConfig:l}){var g,w,k,P,B,h,S,I,C;let m=l===void 0?new er(0):e.raw.mul(new er(l.feeBps.toNumber())).div(new er(1e4)),d=e.raw.sub(m),p=new ye(e.token,d),f=l===void 0?void 0:{feeAmount:m,feeAccount:l.feeAccount},b=W(O({},t),{address:yt(t.address).toString()}),y=[];for(let x of n)try{y.push(W(O({},this.computeAmountOut({itemPool:x,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:p})),{feeConfig:f}))}catch(K){this.logDebug("direct error",x.version,x.id.toString(),K.message)}this.logDebug("direct done");for(let[x,K]of Object.entries(i)){let v={chainId:101,address:x,programId:K.mintProgram.toBase58(),logoURI:"",symbol:"",name:"",decimals:K.mDecimals,tags:[],extensions:{}},R=K.in.map(U=>{try{return{pool:U,data:this.computeAmountOut({itemPool:U,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:v,amountIn:p})}}catch(D){this.logDebug("route in error",U.version,U.id.toString(),D.message);return}}).sort((U,D)=>{var Ie,at,ut,ft;let Pe=U===void 0?Jt:U.data.amountOut.amount.raw.sub((at=(Ie=U.data.amountOut.fee)==null?void 0:Ie.raw)!=null?at:Jt),it=D===void 0?Jt:D.data.amountOut.amount.raw.sub((ft=(ut=D.data.amountOut.fee)==null?void 0:ut.raw)!=null?ft:Jt);return Pe.lt(it)?1:-1})[0];if(R===void 0)continue;let G=new ye(No(v),R.data.amountOut.amount.raw.sub((w=(g=R.data.amountOut.fee)==null?void 0:g.raw)!=null?w:Jt));for(let U of K.out)try{let D=this.computeAmountOut({itemPool:U,tickCache:s,simulateCache:o,chainTime:c,epochInfo:u,slippage:a,outputToken:b,amountIn:G});y.push(W(O({},D),{allTrade:!!(R.data.allTrade&&D.allTrade),amountIn:R.data.amountIn,amountOut:D.amountOut,minAmountOut:D.minAmountOut,currentPrice:void 0,executionPrice:new M(new mt({baseToken:R.data.amountIn.amount.token,denominator:R.data.amountIn.amount.raw,quoteToken:D.amountOut.amount.token,numerator:D.amountOut.amount.raw.sub((P=(k=D.amountOut.fee)==null?void 0:k.raw)!=null?P:Jt)}).toFixed()),priceImpact:new M(R.data.priceImpact.add(D.priceImpact).toFixed()),fee:[R.data.fee[0],D.fee[0]],routeType:"route",poolInfoList:[R.pool,U],remainingAccounts:[R.data.remainingAccounts[0],D.remainingAccounts[0]],minMiddleAmountFee:(B=D.amountOut.fee)!=null&&B.raw?new ye(R.data.amountOut.amount.token,((S=(h=R.data.amountOut.fee)==null?void 0:h.raw)!=null?S:Jt).add((C=(I=D.amountOut.fee)==null?void 0:I.raw)!=null?C:Jt)):void 0,middleToken:R.data.amountOut.amount.token,poolReady:R.data.poolReady&&D.poolReady,poolType:[R.data.poolType,D.poolType],feeConfig:f,expirationTime:_t(R.data.expirationTime,D.expirationTime)}))}catch(D){this.logDebug("route out error",U.version,U.id.toString(),D.message)}}return y.filter(x=>(x.allTrade||this.logDebug(`pool ${x.poolInfoList.map(K=>K.id.toString()).join(",")} filter out since not all trade`),x.allTrade)).sort((x,K)=>x.amountOut.amount.raw.sub(K.amountOut.amount.raw).gt(Jt)?-1:1)}computeAmountOut({itemPool:e,tickCache:t,simulateCache:n,chainTime:i,epochInfo:o,slippage:s,outputToken:a,amountIn:c}){if(e.version===6){let{allTrade:u,realAmountIn:l,amountOut:m,minAmountOut:d,expirationTime:p,currentPrice:f,executionPrice:b,priceImpact:y,fee:g,remainingAccounts:w,executionPriceX64:k}=Te.computeAmountOutFormat({poolInfo:e,tickArrayCache:t[e.id.toString()],amountIn:c.raw,tokenOut:a,slippage:s,epochInfo:o,catchLiquidityInsufficient:!0});return{allTrade:u,amountIn:l,amountOut:m,minAmountOut:d,currentPrice:new M(f.toFixed()),executionPrice:new M(b.toFixed()),priceImpact:new M(y.toFixed()),fee:[g],remainingAccounts:[w],routeType:"amm",poolInfoList:[e],poolReady:e.startTime<i,poolType:"CLMM",slippage:s,clmmExPriceX64:[k],expirationTime:_t(l.expirationTime,p)}}else if(e.version===7){let{allTrade:u,executionPrice:l,amountOut:m,minAmountOut:d,priceImpact:p,fee:f}=this.scope.cpmm.computeSwapAmount({pool:e,outputMint:a.address,amountIn:c.raw,slippage:s});return{allTrade:u,amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ci(W(O({},a),{amount:m})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ci(W(O({},a),{amount:d})),fee:void 0,expirationTime:void 0},currentPrice:e.poolPrice,executionPrice:l,priceImpact:p,fee:[new ye(c.token,f)],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:u,minAmountOut:l,currentPrice:m,executionPrice:d,priceImpact:p,fee:f}=this.scope.liquidity.computeAmountOut({poolInfo:n[e.id.toString()],amountIn:c.raw,mintIn:c.token.mint,mintOut:a.address,slippage:s});return{amountIn:{amount:c,fee:void 0,expirationTime:void 0},amountOut:{amount:Ci(W(O({},a),{amount:u})),fee:void 0,expirationTime:void 0},minAmountOut:{amount:Ci(W(O({},a),{amount:l})),fee:void 0,expirationTime:void 0},currentPrice:m,executionPrice:d,priceImpact:p,fee:[new ye(c.token,f)],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(u=>u.version===6&&!t[u.id.toString()]).map(u=>u.id.toString()));if(i.size>0){let u=await this.scope.clmm.getRpcClmmPoolInfos({poolIds:Array.from(i)});Object.keys(u).forEach(l=>{t[l]=u[l]})}if(new Set(e.filter(u=>u.version===4&&!n[u.id.toString()]).map(u=>u.id.toString())).size>0){let u=await this.scope.liquidity.getRpcPoolInfos(Array.from(i));Object.keys(u).forEach(l=>{n[l]=u[l]})}let s=new Set(e.filter(u=>u.version===4).map(u=>u.marketId)),a={};s.size>0&&(await qe(this.scope.connection,Array.from(s).map(l=>({pubkey:new On(l)})))).forEach(l=>{if(!l.accountInfo)return;let m=hs.decode(l.accountInfo.data);a[l.pubkey.toBase58()]={marketId:l.pubkey.toString(),marketProgramId:l.accountInfo.owner.toString(),marketAuthority:$o.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 c=[];return e.forEach(u=>{if(u.version===6){let l=t[u.id.toString()],m={programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.startTime),vault:{A:l.vaultA.toBase58(),B:l.vaultB.toBase58()},config:W(O({},u.ammConfig),{id:u.ammConfig.id.toString(),defaultRange:0,defaultRangePoint:[]}),rewardInfos:[],observationId:u.observationId.toBase58(),exBitmapAccount:u.exBitmapAccount.toBase58()};c.push(m)}else if(u.version===4){let l=n[u.id.toString()],m=O({programId:u.programId,id:u.id,mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),vault:{A:l.baseVault.toBase58(),B:l.quoteVault.toBase58()},authority:bs({programId:new On(u.programId)}).publicKey.toString(),openOrders:l.openOrders.toBase58(),targetOrders:l.targetOrders.toBase58(),mintLp:u.lpMint},a[u.marketId]);c.push(m)}else u.version===7&&c.push({observationId:u.observationId.toBase58(),programId:u.programId.toBase58(),id:u.id.toBase58(),mintA:u.mintA,mintB:u.mintB,openTime:String(u.openTime),authority:Qn(u.programId).publicKey.toBase58(),vault:{A:u.vaultA.toBase58(),B:u.vaultB.toBase58()},mintLp:tt({address:u.mintLp.toBase58(),programId:Ve.toBase58(),decimals:u.lpDecimals}),config:W(O({id:u.configId.toBase58()},u.configInfo),{protocolFeeRate:u.configInfo.protocolFeeRate.toNumber(),tradeFeeRate:u.configInfo.tradeFeeRate.toNumber(),fundFeeRate:u.configInfo.fundFeeRate.toNumber(),createPoolFee:u.configInfo.createPoolFee.toString()})})}),c}};import{PublicKey as jd,Transaction as Ts,TransactionInstruction as Hd}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as Zd}from"@solana/spl-token";import tc from"bn.js";var nt=class extends Ce{static getPdaPoolId(e,t){return le([nt.SEED_CONFIG.pool.id,t.toBuffer()],e)}static getPdaOwnerId(e,t,n,i){return le([nt.SEED_CONFIG.owner.id,t.toBuffer(),n.toBuffer(),Buffer.from(new tc(i).toArray())],e)}static async getAllInfo({connection:e,programId:t,poolIds:n,wallet:i,chainTime:o}){if(n.length===0)return[];let s=n.map(l=>nt.getPdaPoolId(t,l).publicKey),a=[];for(let l=0;l<nt.VERSION_PROJECT.length;l++)a.push(...s.map(m=>nt.getPdaOwnerId(t,m,i,l).publicKey));let c=await Rt(e,[...s,...a]),u=[];for(let l=0;l<c.length;l++){let m=Math.floor(l/n.length),d=l%n.length,p=s[d],f=a[l],b=c[d],y=c[n.length+l];if(!(b&&y)||b.data.length!==nt.POOL_LAYOUT.span||y.data.length!==nt.OWNER_LAYOUT.span)continue;let g=nt.POOL_LAYOUT.decode(b.data),w=nt.OWNER_LAYOUT.decode(y.data),k=g.openTime.toNumber(),P=g.endTime.toNumber(),B=w.tokenInfo.map(I=>I.debtAmount.gt(new tc(0))).filter(I=>!I).length!==3,h=o>k&&o<P&&g.status===1,S=B&&h;u.push({programId:t,poolId:p,ammId:g.ammId,ownerAccountId:f,snapshotLpAmount:w.lpAmount,project:nt.VERSION_PROJECT[m],openTime:k,endTime:P,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 u}async makeClaimTransaction({poolInfo:e,ownerInfo:t}){t.wallet||this.scope.checkOwner();let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o=[];for(let c of e.tokenInfo){let{account:u,instructionParams:l}=await this.scope.account.getOrCreateTokenAccount({mint:c.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:c.mintAddress.equals(Ke.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!c.mintAddress.equals(Ke.WSOL.mint),associatedOnly:c.mintAddress.equals(Ke.WSOL.mint)?!1:t.associatedOnly});l&&n.addInstruction(l),o.push(u)}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:e.programId,poolInfo:e,ownerInfo:{wallet:i,ownerPda:e.ownerAccountId,claimAddress:o}})]});let{transaction:s,signers:a}=n.build();return[{transaction:s,signer:a}]}async makeClaimAllTransaction({poolInfos:e,ownerInfo:t}){let n=this.createTxBuilder(),i=t.wallet||this.scope.ownerPubKey,o={};for(let u of e){let l=[];for(let m of u.tokenInfo){let{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({mint:m.mintAddress,owner:this.scope.ownerPubKey,notUseTokenAccount:m.mintAddress.equals(Ke.WSOL.mint),createInfo:{payer:i,amount:0},skipCloseAccount:!m.mintAddress.equals(Ke.WSOL.mint),associatedOnly:m.mintAddress.equals(Ke.WSOL.mint)?!1:t.associatedOnly});p&&n.addInstruction(p),d&&(o[m.mintAddress.toString()]=d,l.push(d))}n.addInstruction({instructions:[nt.makeClaimInstruction({programId:u.programId,poolInfo:u,ownerInfo:{wallet:i,ownerPda:u.ownerAccountId,claimAddress:l}})]})}let{transaction:s,signers:a}=n.build(),c=n.allInstructions;return Tr(c,[i,...a.map(u=>u.publicKey)])?[{transaction:s,signer:a}]:[{transaction:new Ts().add(...c.slice(0,n.AllTxData.instructions.length-1)),signer:a},{transaction:new Ts().add(...c.slice(n.AllTxData.instructions.length-1)),signer:[]},{transaction:new Ts().add(...n.AllTxData.endInstructions),signer:[]}]}static makeClaimInstruction({programId:e,poolInfo:t,ownerInfo:n}){let i=E([]),o=[{pubkey:n.wallet,isSigner:!0,isWritable:!0},{pubkey:t.poolId,isSigner:!1,isWritable:!0},{pubkey:n.ownerPda,isSigner:!1,isWritable:!0},...n.claimAddress.map(c=>({pubkey:c,isSigner:!1,isWritable:!0})),...t.tokenInfo.map(({mintVault:c})=>({pubkey:c,isSigner:!1,isWritable:!0})),{pubkey:Zd,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 Hd({keys:o,programId:e,data:a})}},Ct=nt;Ct.CLAIMED_NUM=3,Ct.POOL_LAYOUT=E([be(8),X("bump"),X("status"),A("openTime"),A("endTime"),L("ammId"),j(E([X("mintDecimals"),L("mintAddress"),L("mintVault"),A("perLpLoss"),A("totalClaimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),j(A(),10,"padding")]),Ct.OWNER_LAYOUT=E([be(8),X("bump"),X("version"),L("poolId"),L("owner"),A("lpAmount"),j(E([L("mintAddress"),A("debtAmount"),A("claimedAmount")]),nt.CLAIMED_NUM,"tokenInfo"),j(A(),4,"padding")]),Ct.DEFAULT_POOL_ID=["58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2","6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg","AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA","DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut","7XawhbbxtsRcQA8KTkHT9f9nc6d69UwqCDh6U5EEbEmX","6a1CsrpeZubDjEJE9s1CMVheB6HWM5d7m1cj2jkhyXhj","EoNrn8iUhwgJySD1pHu8Qxm5gSQqLK3za4m8xzD2RuEb","AceAyRTWt4PyB2pHqf2qhDgNZDtKVNaxgL8Ru3V4aN1P","6tmFJbMk5yVHFcFy7X2K8RwHjKLr6KVFLYXpgpBNeAxB"].map(e=>new jd(e)),Ct.SEED_CONFIG={pool:{id:Buffer.from("pool_seed","utf8")},owner:{id:Buffer.from("user_claim_seed","utf8")}},Ct.VERSION_PROJECT=[void 0,"Francium","Tulip","Larix"];import{PublicKey as Ui}from"@solana/web3.js";import oc from"bn.js";import{SYSVAR_CLOCK_PUBKEY as Jd,TransactionInstruction as nc}from"@solana/web3.js";import{TOKEN_PROGRAM_ID as ic}from"@solana/spl-token";var $d=E([X("instruction"),Ca("amount")]),qi=E([X("instruction")]);function tr({programId:r},e){let t=[{pubkey:ic,isSigner:!1,isWritable:!1},{pubkey:ta,isSigner:!1,isWritable:!1},...Object.entries(e).map(([i,o])=>({pubkey:o,isSigner:i==="userOwner",isWritable:!["authority","userOwner"].includes(i)}))],n=Buffer.alloc(qi.span);return qi.encode({instruction:2},n),new nc({keys:t,programId:r,data:n})}function Is(r){let{poolConfig:e,userKeys:t,side:n}=r,i=n==="base"?t.baseTokenAccount:t.quoteTokenAccount,o=n==="base"?e.baseVault:e.quoteVault,s=Buffer.alloc(qi.span);qi.encode({instruction:2},s);let a=[{pubkey:ic,isWritable:!1,isSigner:!1},{pubkey:Jd,isWritable:!1,isSigner:!1},{pubkey:e.id,isWritable:!0,isSigner:!1},{pubkey:e.authority,isWritable:!1,isSigner:!1},{pubkey:o,isWritable:!0,isSigner:!1},{pubkey:i,isWritable:!0,isSigner:!1},{pubkey:t.ledgerAccount,isWritable:!0,isSigner:!1},{pubkey:t.owner,isWritable:!1,isSigner:!0}];return new nc({programId:e.programId,keys:a,data:s})}var ep={[oi.IDO_PROGRAM_ID_V1.toString()]:1,[oi.IDO_PROGRAM_ID_V2.toString()]:2,[oi.IDO_PROGRAM_ID_V3.toString()]:3,[oi.IDO_PROGRAM_ID_V4.toString()]:4},Yn=class extends Ce{async claim({ownerInfo:e,idoKeys:t,associatedOnly:n=!0,checkCreateATAOwner:i=!1,txVersion:o}){let s=this.createTxBuilder(),a=ep[t.programId];a||this.logAndCreateError("invalid version",a);let c=He(t),[u,l]=[!new oc(e.coin).isZero(),!new oc(e.pc).isZero()],m=c.projectInfo.mint.address.equals(H),{account:d,instructionParams:p}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.projectInfo.mint.programId,mint:c.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&&u&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),u&&p&&s.addInstruction(p);let f=c.buyInfo.mint.address.equals(H),{account:b,instructionParams:y}=await this.scope.account.getOrCreateTokenAccount({tokenProgram:c.buyInfo.mint.programId,mint:c.buyInfo.mint.address,owner:this.scope.ownerPubKey,createInfo:{payer:this.scope.ownerPubKey,amount:0},skipCloseAccount:!f,notUseTokenAccount:f,associatedOnly:f?!1:n,checkCreateATAOwner:i});if(!d&&l&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address),l&&y&&s.addInstruction(y),(!d||!b)&&this.logAndCreateError("target token accounts not found","mint",t.projectInfo.mint.address,t.buyInfo.mint.address),a===3)return s.addInstruction({instructions:[...u?[tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolTokenAccount:c.projectInfo.vault,userTokenAccount:d,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[],...l?[tr({programId:new Ui(t.programId)},{idoId:c.id,authority:c.authority,poolTokenAccount:c.buyInfo.vault,userTokenAccount:b,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]:[]]}).versionBuild({txVersion:o});if(a<3)return!u&&!l&&this.logAndCreateError("no claimable rewards"),s.addInstruction({instructions:[tr({programId:c.programId},{idoId:c.id,authority:c.authority,poolQuoteTokenAccount:c.buyInfo.vault,poolBaseTokenAccount:c.projectInfo.vault,userQuoteTokenAccount:b,userBaseTokenAccount:d,userIdoInfo:new Ui(e.userIdoInfo),userOwner:this.scope.ownerPubKey})]}).versionBuild({txVersion:o});let g={poolConfig:{id:c.id,programId:c.programId,authority:c.authority,baseVault:c.projectInfo.vault,quoteVault:c.buyInfo.vault,baseToken:t.projectInfo.mint,quoteToken:t.buyInfo.mint},userKeys:{baseTokenAccount:d,quoteTokenAccount:b,ledgerAccount:new Ui(e.userIdoInfo),owner:this.scope.ownerPubKey}};return s.addInstruction({instructions:[...u?[Is(W(O({},g),{side:"base"}))]:[],...l?[Is(W(O({},g),{side:"quote"}))]:[]]}).versionBuild({txVersion:o})}};import{PublicKey as tp}from"@solana/web3.js";import{MintLayout as np,TOKEN_2022_PROGRAM_ID as Bs,TOKEN_PROGRAM_ID as xs}from"@solana/spl-token";var Gi=class extends Ce{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:o,blacklist:s,whiteList:a}=await this.scope.fetchV3TokenList(n),c=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(rn.address,rn),this._mintGroup.official.add(rn.address),s.forEach(u=>{this._blackTokenMap.set(u.address,W(O({},u),{priority:-1}))}),o.forEach(u=>{var l;this._blackTokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"raydium",priority:2,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Bs.toBase58():xs.toBase58()})),this._mintGroup.official.add(u.address))}),c.forEach(u=>{var l;this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"jupiter",priority:1,programId:(l=u.programId)!=null?l:u.tags.includes("token-2022")?Bs.toBase58():xs.toBase58(),tags:u.freezeAuthority?[...u.tags||[],"hasFreeze"]:u.tags})),this._mintGroup.jup.add(u.address))}),this._extraTokenList.forEach(u=>{this._blackTokenMap.has(u.address)||this._tokenMap.has(u.address)||(this._tokenMap.set(u.address,W(O({},u),{type:"extra",priority:1,programId:u.programId||u.tags.includes("token-2022")?Bs.toBase58():xs.toBase58()})),this._mintGroup.extra.add(u.address))}),this._tokenList=Array.from(this._tokenMap).map(u=>u[1])}get tokenList(){return this._tokenList}get tokenMap(){return this._tokenMap}get blackTokenMap(){return this._blackTokenMap}get mintGroup(){return this._mintGroup}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 rn;let o=(await this.scope.api.getTokenInfo([n]))[0];if(o)return this._mintGroup.extra.add(n),this._tokenMap.set(n,W(O({},o),{priority:2})),o;let s=await this.scope.connection.getAccountInfo(new tp(n));if(!s)throw new Error(`mint address not found: ${n}`);let a=np.decode(s.data),c=n.toString().substring(0,6),u={chainId:101,address:n,programId:s.owner.toBase58(),logoURI:"",symbol:c,name:c,decimals:a.decimals,tags:[],extensions:{},priority:0,type:"unknown"};return this._mintGroup.extra.add(n),this._tokenMap.set(n,u),u}};var nr=class{constructor(e){this.rawBalances=new Map;let{connection:t,cluster:n,owner:i,api:o,defaultChainTime:s,defaultChainTimeOffset:a,apiCacheTime:c,blockhashCommitment:u="confirmed"}=e;this._connection=t,this.cluster=n||"mainnet",this._owner=i?new Mt(i):void 0,this._signAllTransactions=e.signAllTransactions,this.blockhashCommitment=u,this.api=o,this._apiCacheTime=c||5*60*1e3,this.logger=ce("Raydium"),this.farm=new Ai({scope:this,moduleName:"Raydium_Farm"}),this.account=new mi({scope:this,moduleName:"Raydium_Account",tokenAccounts:e.tokenAccounts,tokenAccountRawInfos:e.tokenAccountRawInfos}),this.liquidity=new Ni({scope:this,moduleName:"Raydium_LiquidityV2"}),this.token=new Gi({scope:this,moduleName:"Raydium_tokenV2"}),this.tradeV2=new Wi({scope:this,moduleName:"Raydium_tradeV2"}),this.clmm=new vi({scope:this,moduleName:"Raydium_clmm"}),this.cpmm=new Di({scope:this,moduleName:"Raydium_cpmm"}),this.utils1216=new Ct({scope:this,moduleName:"Raydium_utils1216"}),this.marketV2=new Gn({scope:this,moduleName:"Raydium_marketV2"}),this.ido=new Yn({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=ip({cluster:"mainnet",owner:null,apiRequestInterval:3e5,apiRequestTimeout:1e4},e),{cluster:n,apiRequestTimeout:i,logCount:o,logRequests:s,urlConfigs:a}=t,c=new wo({cluster:n,timeout:i,urlConfigs:a,logCount:o,logRequests:s}),u=new nr(W(O({},t),{api:c}));return await u.fetchAvailabilityStatus((l=e.disableFeatureCheck)!=null?l:!0),e.disableLoadToken||await u.token.load({type:e.jupTokenType}),u}get owner(){return this._owner}get ownerPubKey(){if(!this._owner)throw new Error(Ao);return this._owner.publicKey}setOwner(e){return this._owner=e?new Mt(e):void 0,this.account.resetTokenAccounts(),this}get connection(){if(!this._connection)throw new Error(Pa);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(Ao),new Error(Ao)}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=>W(O({},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{nr as Raydium};
2
2
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3
3
  //# sourceMappingURL=raydium.mjs.map